diff --git a/core/src/components/show-plugin.js b/core/src/components/show-plugin.js index 1fb9fde6..2861d3c1 100644 --- a/core/src/components/show-plugin.js +++ b/core/src/components/show-plugin.js @@ -8,6 +8,7 @@ import { repeat } from 'lit/directives/repeat.js'; import ShortUniqueId from 'short-unique-id'; import { setNewTab } from '../redux/app/app-actions.js' import localForage from 'localforage' +import FileSaver from 'file-saver' import { use, get, translate, translateUnsafeHTML, registerTranslateConfig } from 'lit-translate' registerTranslateConfig({ @@ -23,6 +24,7 @@ import '@polymer/iron-icons/iron-icons.js' import '@polymer/paper-dialog/paper-dialog.js' import '@vaadin/grid' import '@vaadin/text-field' +import '../custom-elements/frag-file-input.js' const chatLastSeen = localForage.createInstance({ name: "chat-last-seen", @@ -902,7 +904,7 @@ class NavBar extends connect(store)(LitElement) { .resetIcon { position: fixed; - right: 16px; + right: 20px; top: 116px; color: #666; --mdc-icon-size: 32px; @@ -916,7 +918,7 @@ class NavBar extends connect(store)(LitElement) { .searchIcon { position: fixed; - left: 16px; + left: 20px; top: 116px; color: #666; --mdc-icon-size: 32px; @@ -928,6 +930,34 @@ class NavBar extends connect(store)(LitElement) { 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 { width: 100%; max-width: 550px; @@ -1012,6 +1042,8 @@ class NavBar extends connect(store)(LitElement) {
reset_tv person_search + upload + download + +
+

${translate("tabmenu.tm33")}

+
+
+
+
+ +

${translate("walletpage.wchange56")}

+
${translate("tabmenu.tm35")}
+
+ + ${translate("general.close")} + +
` } @@ -1250,6 +1301,60 @@ class NavBar extends connect(store)(LitElement) { 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() { this.searchNameResources = [] this.shadowRoot.getElementById('searchNameContent').value = ''