diff --git a/client/components/ExternalLibs/BookmarkSettings/BookmarkSettings.vue b/client/components/ExternalLibs/BookmarkSettings/BookmarkSettings.vue index b43ac51c..162d1b66 100644 --- a/client/components/ExternalLibs/BookmarkSettings/BookmarkSettings.vue +++ b/client/components/ExternalLibs/BookmarkSettings/BookmarkSettings.vue @@ -347,6 +347,7 @@ export default vueComponent(BookmarkSettings); padding: 0px 10px 10px 10px; overflow-x: auto; overflow-y: auto; + max-width: 520px; } .selected { diff --git a/client/components/ExternalLibs/ExternalLibs.vue b/client/components/ExternalLibs/ExternalLibs.vue index 59ad9c3a..2846ac84 100644 --- a/client/components/ExternalLibs/ExternalLibs.vue +++ b/client/components/ExternalLibs/ExternalLibs.vue @@ -110,7 +110,7 @@
- +
@@ -304,6 +304,10 @@ class ExternalLibs { openInFrameOnAdd = false; frameScale = 1; + inpxReady = false; + inpxTitle = ''; + inpxUrl = ''; + created() { this.oldStartLink = ''; this.justOpened = true; @@ -348,17 +352,28 @@ class ExternalLibs { const openerOrigin2 = `https://${openerHost}`; window.addEventListener('message', (event) => { + //from inpx-web + if (_.isObject(event.data) && event.data.from === 'inpx-web') { + //console.log(event); + + this.inpxOrigin = event.origin; + + this.recvInpxMessage(event.data); + return; + } + + //from parent if (event.origin !== openerOrigin1 && event.origin !== openerOrigin2) return; + if (!_.isObject(event.data) || event.data.from != 'LibsPage') return; if (event.origin == openerOrigin1) this.opener = window.opener; else this.opener = event.source; - this.openerOrigin = event.origin; - //console.log(event); + this.openerOrigin = event.origin; this.recvMessage(event.data); }); @@ -403,6 +418,30 @@ class ExternalLibs { })(); } + recvInpxMessage(d) { + if (d.type == 'mes') { + switch(d.data) { + case 'hello-from-inpx-web': + this.sendInpxMessage({type: 'mes', data: 'ready'}); + break; + case 'ready': + this.inpxReady = true; + break; + } + } else if (d.type == 'submitUrl') { + this.submitUrl(d.data); + } else if (d.type == 'titleChange') { + this.inpxTitle = d.data; + } else if (d.type == 'urlChange') { + this.inpxUrl = d.data; + } + } + + sendInpxMessage(d) { + if (this.$refs.frame && this.inpxOrigin) + this.$refs.frame.contentWindow.postMessage(Object.assign({}, {from: 'ExternalLibs'}, d), this.inpxOrigin); + } + async checkOpener() { if (this.opener.closed) { await this.$root.stdDialog.alert('Потеряна связь с читалкой. Окно будет закрыто', 'Ошибка'); @@ -461,7 +500,10 @@ class ExternalLibs { get header() { let result = (this.ready ? 'Сетевая библиотека' : 'Загрузка...'); if (this.ready && this.selectedLink) { - result += ` | ${(this.libs.comment ? this.libs.comment + ' ': '') + lu.removeProtocol(this.libs.startLink)}`; + let title = `${(this.libs.comment ? this.libs.comment + ' ': '') + lu.removeProtocol(this.libs.startLink)}`; + if (this.inpxReady && this.inpxTitle) + title = this.inpxTitle; + result += ` | ${title}`; } this.$root.setAppTitle(result); return result; @@ -561,6 +603,9 @@ class ExternalLibs { } goToLink(link) { + this.inpxReady = false; + this.inpxOrigin = false; + if (!this.ready || !link) return; @@ -649,13 +694,17 @@ class ExternalLibs { this.updateStartLink(true); } - submitUrl() { - if (this.bookUrl) { + submitUrl(url) { + if (!url) { + url = this.bookUrl; + this.bookUrl = ''; + } + + if (url) { this.sendMessage({type: 'submitUrl', data: { - url: this.bookUrl, + url, force: true }}); - this.bookUrl = ''; if (this.closeAfterSubmit) this.close(); } @@ -668,6 +717,9 @@ class ExternalLibs { this.editBookmarkDesc = this.bookmarkDesc = desc; } else { this.bookmarkLink = this.bookUrl; + if (!this.bookmarkLink && this.inpxReady && this.inpxUrl) + this.bookmarkLink = this.inpxUrl; + this.bookmarkDesc = ''; }