mirror of
https://github.com/Qortal/qortal-ui.git
synced 2025-02-11 17:55:51 +00:00
Added import and export tab menu
This commit is contained in:
parent
a3b0099fa0
commit
5aaa4e4a02
@ -8,6 +8,7 @@ import { repeat } from 'lit/directives/repeat.js';
|
|||||||
import ShortUniqueId from 'short-unique-id';
|
import ShortUniqueId from 'short-unique-id';
|
||||||
import { setNewTab } from '../redux/app/app-actions.js'
|
import { setNewTab } from '../redux/app/app-actions.js'
|
||||||
import localForage from 'localforage'
|
import localForage from 'localforage'
|
||||||
|
import FileSaver from 'file-saver'
|
||||||
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'
|
import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate'
|
||||||
|
|
||||||
registerTranslateConfig({
|
registerTranslateConfig({
|
||||||
@ -23,6 +24,7 @@ import '@polymer/iron-icons/iron-icons.js'
|
|||||||
import '@polymer/paper-dialog/paper-dialog.js'
|
import '@polymer/paper-dialog/paper-dialog.js'
|
||||||
import '@vaadin/grid'
|
import '@vaadin/grid'
|
||||||
import '@vaadin/text-field'
|
import '@vaadin/text-field'
|
||||||
|
import '../custom-elements/frag-file-input.js'
|
||||||
|
|
||||||
const chatLastSeen = localForage.createInstance({
|
const chatLastSeen = localForage.createInstance({
|
||||||
name: "chat-last-seen",
|
name: "chat-last-seen",
|
||||||
@ -902,7 +904,7 @@ class NavBar extends connect(store)(LitElement) {
|
|||||||
|
|
||||||
.resetIcon {
|
.resetIcon {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
right: 16px;
|
right: 20px;
|
||||||
top: 116px;
|
top: 116px;
|
||||||
color: #666;
|
color: #666;
|
||||||
--mdc-icon-size: 32px;
|
--mdc-icon-size: 32px;
|
||||||
@ -916,7 +918,7 @@ class NavBar extends connect(store)(LitElement) {
|
|||||||
|
|
||||||
.searchIcon {
|
.searchIcon {
|
||||||
position: fixed;
|
position: fixed;
|
||||||
left: 16px;
|
left: 20px;
|
||||||
top: 116px;
|
top: 116px;
|
||||||
color: #666;
|
color: #666;
|
||||||
--mdc-icon-size: 32px;
|
--mdc-icon-size: 32px;
|
||||||
@ -928,6 +930,34 @@ class NavBar extends connect(store)(LitElement) {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.importIcon {
|
||||||
|
position: fixed;
|
||||||
|
left: 20px;
|
||||||
|
bottom: 16px;
|
||||||
|
color: #666;
|
||||||
|
--mdc-icon-size: 32px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.importIcon:hover {
|
||||||
|
color: #03a9f4;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.exportIcon {
|
||||||
|
position: fixed;
|
||||||
|
right: 20px;
|
||||||
|
bottom: 16px;
|
||||||
|
color: #666;
|
||||||
|
--mdc-icon-size: 32px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.exportIcon:hover {
|
||||||
|
color: #03a9f4;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
paper-dialog.searchSettings {
|
paper-dialog.searchSettings {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
max-width: 550px;
|
max-width: 550px;
|
||||||
@ -1012,6 +1042,8 @@ class NavBar extends connect(store)(LitElement) {
|
|||||||
<div class="parent">
|
<div class="parent">
|
||||||
<mwc-icon class="resetIcon" @click="${() => this.resetMenu()}" title="${translate("tabmenu.tm29")}">reset_tv</mwc-icon>
|
<mwc-icon class="resetIcon" @click="${() => this.resetMenu()}" title="${translate("tabmenu.tm29")}">reset_tv</mwc-icon>
|
||||||
<mwc-icon class="searchIcon" @click="${() => this.openNameSearch()}" title="${translate("tabmenu.tm30")}">person_search</mwc-icon>
|
<mwc-icon class="searchIcon" @click="${() => this.openNameSearch()}" title="${translate("tabmenu.tm30")}">person_search</mwc-icon>
|
||||||
|
<mwc-icon class="importIcon" @click="${() => this.openImportDialog()}" title="${translate("tabmenu.tm33")}">upload</mwc-icon>
|
||||||
|
<mwc-icon class="exportIcon" @click="${() => this.exportTabMenu()}" title="${translate("tabmenu.tm34")}">download</mwc-icon>
|
||||||
<div class="navbar">
|
<div class="navbar">
|
||||||
<input @keydown=${this._handleKeyDown} id="linkInput" type="text" placeholder="qortal://">
|
<input @keydown=${this._handleKeyDown} id="linkInput" type="text" placeholder="qortal://">
|
||||||
<button @click="${this.handlePasteLink}">${translate('general.open')}</button>
|
<button @click="${this.handlePasteLink}">${translate('general.open')}</button>
|
||||||
@ -1212,6 +1244,25 @@ class NavBar extends connect(store)(LitElement) {
|
|||||||
<button style="background-color: red;" @click="${this.closeMyFollowedNames}">${translate("general.close")}</button>
|
<button style="background-color: red;" @click="${this.closeMyFollowedNames}">${translate("general.close")}</button>
|
||||||
</div>
|
</div>
|
||||||
</paper-dialog>
|
</paper-dialog>
|
||||||
|
<mwc-dialog id="importTabMenutDialog">
|
||||||
|
<div style="text-align:center">
|
||||||
|
<h2>${translate("tabmenu.tm33")}</h2>
|
||||||
|
<hr>
|
||||||
|
<br>
|
||||||
|
</div>
|
||||||
|
<div style="min-height: 150px; min-width: 500px; box-sizing: border-box; position: relative;">
|
||||||
|
<frag-file-input accept=".tabmenu" @file-read-success="${(e) => this.importTabMenu(e.detail.result)}"></frag-file-input>
|
||||||
|
<h4 style="color: #F44336; text-align: center;">${translate("walletpage.wchange56")}</h4>
|
||||||
|
<h5 style="text-align: center;">${translate("tabmenu.tm35")}</h5>
|
||||||
|
</div>
|
||||||
|
<mwc-button
|
||||||
|
slot="primaryAction"
|
||||||
|
dialogAction="cancel"
|
||||||
|
class="red"
|
||||||
|
>
|
||||||
|
${translate("general.close")}
|
||||||
|
</mwc-button>
|
||||||
|
</mwc-dialog>
|
||||||
`
|
`
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1250,6 +1301,60 @@ class NavBar extends connect(store)(LitElement) {
|
|||||||
await this.getMyFollowedNamesList()
|
await this.getMyFollowedNamesList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
openImportDialog() {
|
||||||
|
this.shadowRoot.getElementById('importTabMenutDialog').show()
|
||||||
|
}
|
||||||
|
|
||||||
|
importTabMenu(file) {
|
||||||
|
this.myMenuPlugins = []
|
||||||
|
let myFile = ''
|
||||||
|
localStorage.removeItem("myMenuPlugs")
|
||||||
|
myFile = file
|
||||||
|
const newTabMenu = JSON.parse((myFile) || "[]")
|
||||||
|
localStorage.setItem("myMenuPlugs", JSON.stringify(newTabMenu))
|
||||||
|
this.shadowRoot.getElementById('importTabMenutDialog').close()
|
||||||
|
this.myMenuPlugins = JSON.parse(localStorage.getItem("myMenuPlugs") || "[]")
|
||||||
|
this.firstUpdated()
|
||||||
|
|
||||||
|
let success5string = get("tabmenu.tm36")
|
||||||
|
parentEpml.request('showSnackBar', `${success5string}`)
|
||||||
|
}
|
||||||
|
|
||||||
|
exportTabMenu() {
|
||||||
|
let tabMenu = ""
|
||||||
|
const qortalTabMenu = JSON.stringify(localStorage.getItem("myMenuPlugs"))
|
||||||
|
const qortalTabMenuSave = JSON.parse((qortalTabMenu) || "[]")
|
||||||
|
const blob = new Blob([qortalTabMenuSave ], { type: 'text/plain;charset=utf-8' })
|
||||||
|
tabMenu = "qortal.tabmenu"
|
||||||
|
this.saveFileToDisk(blob, tabMenu)
|
||||||
|
}
|
||||||
|
|
||||||
|
async saveFileToDisk(blob, fileName) {
|
||||||
|
try {
|
||||||
|
const fileHandle = await self.showSaveFilePicker({
|
||||||
|
suggestedName: fileName,
|
||||||
|
types: [{
|
||||||
|
description: "File",
|
||||||
|
}]
|
||||||
|
})
|
||||||
|
const writeFile = async (fileHandle, contents) => {
|
||||||
|
const writable = await fileHandle.createWritable()
|
||||||
|
await writable.write(contents)
|
||||||
|
await writable.close()
|
||||||
|
}
|
||||||
|
writeFile(fileHandle, blob).then(() => console.log("FILE SAVED"))
|
||||||
|
let snack4string = get("tabmenu.tm37")
|
||||||
|
parentEpml.request('showSnackBar', `${snack4string} ${fileName}`)
|
||||||
|
} catch (error) {
|
||||||
|
if (error.name === 'AbortError') {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
FileSaver.saveAs(blob, fileName)
|
||||||
|
let snack4string = get("tabmenu.tm37")
|
||||||
|
parentEpml.request('showSnackBar', `${snack4string} ${fileName}`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
openNameSearch() {
|
openNameSearch() {
|
||||||
this.searchNameResources = []
|
this.searchNameResources = []
|
||||||
this.shadowRoot.getElementById('searchNameContent').value = ''
|
this.shadowRoot.getElementById('searchNameContent').value = ''
|
||||||
|
Loading…
x
Reference in New Issue
Block a user