Изменения для встраивания inpx-web в сетевую библиотеку

This commit is contained in:
Book Pauk
2022-10-14 20:12:36 +07:00
parent 9bc4c3201c
commit f9fc59718a
2 changed files with 61 additions and 8 deletions

View File

@@ -347,6 +347,7 @@ export default vueComponent(BookmarkSettings);
padding: 0px 10px 10px 10px; padding: 0px 10px 10px 10px;
overflow-x: auto; overflow-x: auto;
overflow-y: auto; overflow-y: auto;
max-width: 520px;
} }
.selected { .selected {

View File

@@ -110,7 +110,7 @@
<div ref="frameBox" class="col fit" style="position: relative;"> <div ref="frameBox" class="col fit" style="position: relative;">
<div ref="frameWrap" class="overflow-hidden"> <div ref="frameWrap" class="overflow-hidden">
<iframe v-if="frameVisible" ref="frame" :src="frameSrc" frameborder="0"></iframe> <iframe v-if="frameVisible" ref="frame" :src="frameSrc" frameborder="0" allow="clipboard-read; clipboard-write"></iframe>
</div> </div>
<div v-show="transparentLayoutVisible" ref="transparentLayout" class="fit transparent-layout" @click="transparentLayoutClick"></div> <div v-show="transparentLayoutVisible" ref="transparentLayout" class="fit transparent-layout" @click="transparentLayoutClick"></div>
</div> </div>
@@ -304,6 +304,10 @@ class ExternalLibs {
openInFrameOnAdd = false; openInFrameOnAdd = false;
frameScale = 1; frameScale = 1;
inpxReady = false;
inpxTitle = '';
inpxUrl = '';
created() { created() {
this.oldStartLink = ''; this.oldStartLink = '';
this.justOpened = true; this.justOpened = true;
@@ -348,17 +352,28 @@ class ExternalLibs {
const openerOrigin2 = `https://${openerHost}`; const openerOrigin2 = `https://${openerHost}`;
window.addEventListener('message', (event) => { 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) if (event.origin !== openerOrigin1 && event.origin !== openerOrigin2)
return; return;
if (!_.isObject(event.data) || event.data.from != 'LibsPage') if (!_.isObject(event.data) || event.data.from != 'LibsPage')
return; return;
if (event.origin == openerOrigin1) if (event.origin == openerOrigin1)
this.opener = window.opener; this.opener = window.opener;
else else
this.opener = event.source; this.opener = event.source;
this.openerOrigin = event.origin;
//console.log(event); this.openerOrigin = event.origin;
this.recvMessage(event.data); 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() { async checkOpener() {
if (this.opener.closed) { if (this.opener.closed) {
await this.$root.stdDialog.alert('Потеряна связь с читалкой. Окно будет закрыто', 'Ошибка'); await this.$root.stdDialog.alert('Потеряна связь с читалкой. Окно будет закрыто', 'Ошибка');
@@ -461,7 +500,10 @@ class ExternalLibs {
get header() { get header() {
let result = (this.ready ? 'Сетевая библиотека' : 'Загрузка...'); let result = (this.ready ? 'Сетевая библиотека' : 'Загрузка...');
if (this.ready && this.selectedLink) { 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); this.$root.setAppTitle(result);
return result; return result;
@@ -561,6 +603,9 @@ class ExternalLibs {
} }
goToLink(link) { goToLink(link) {
this.inpxReady = false;
this.inpxOrigin = false;
if (!this.ready || !link) if (!this.ready || !link)
return; return;
@@ -649,13 +694,17 @@ class ExternalLibs {
this.updateStartLink(true); this.updateStartLink(true);
} }
submitUrl() { submitUrl(url) {
if (this.bookUrl) { if (!url) {
url = this.bookUrl;
this.bookUrl = '';
}
if (url) {
this.sendMessage({type: 'submitUrl', data: { this.sendMessage({type: 'submitUrl', data: {
url: this.bookUrl, url,
force: true force: true
}}); }});
this.bookUrl = '';
if (this.closeAfterSubmit) if (this.closeAfterSubmit)
this.close(); this.close();
} }
@@ -668,6 +717,9 @@ class ExternalLibs {
this.editBookmarkDesc = this.bookmarkDesc = desc; this.editBookmarkDesc = this.bookmarkDesc = desc;
} else { } else {
this.bookmarkLink = this.bookUrl; this.bookmarkLink = this.bookUrl;
if (!this.bookmarkLink && this.inpxReady && this.inpxUrl)
this.bookmarkLink = this.inpxUrl;
this.bookmarkDesc = ''; this.bookmarkDesc = '';
} }