Selaa lähdekoodia

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

Book Pauk 2 vuotta sitten
vanhempi
commit
f9fc59718a

+ 1 - 0
client/components/ExternalLibs/BookmarkSettings/BookmarkSettings.vue

@@ -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 {

+ 60 - 8
client/components/ExternalLibs/ExternalLibs.vue

@@ -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() {
-        if (this.bookUrl) {
+    submitUrl(url) {
+        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 = '';
         }
         }