From dba273763755513e4b388710b89e68b9877d8a20 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 26 Apr 2024 18:08:15 +0300 Subject: [PATCH] liveedit --- .../js/api-core/services/bootstrap.js | 8 +- .../live-edit-canvas/live-edit-canvas.js | 33 +++++--- .../live-edit/page-already-opened.service.js | 83 +++++++++++++++++++ .../modules/microweber/api/tools/dialog.js | 7 +- 4 files changed, 113 insertions(+), 18 deletions(-) create mode 100644 src/MicroweberPackages/LiveEdit/resources/js/api-core/services/components/live-edit/page-already-opened.service.js diff --git a/src/MicroweberPackages/LiveEdit/resources/js/api-core/services/bootstrap.js b/src/MicroweberPackages/LiveEdit/resources/js/api-core/services/bootstrap.js index 6ece8b7f2a..67b35b1764 100644 --- a/src/MicroweberPackages/LiveEdit/resources/js/api-core/services/bootstrap.js +++ b/src/MicroweberPackages/LiveEdit/resources/js/api-core/services/bootstrap.js @@ -69,7 +69,7 @@ mw.app = new MWUniversalContainer(); }; mw.app.broadcast.on('canvasURL', async (data) => { - console.log(1) + mw.app.broadcast.record('canvasURL', data.url); @@ -77,10 +77,10 @@ mw.app = new MWUniversalContainer(); const isActive = mw.app.documentFocus.isActive(); if(mw.top().app.canvas.isUrlOpened(data.url) ) { - console.log` 2` - const action = await mw.app.pageAlreadyOpened.handle(); -console.log(3) + + const action = await mw.app.pageAlreadyOpened.handle(data.url); + if(action) { } else { diff --git a/src/MicroweberPackages/LiveEdit/resources/js/api-core/services/components/live-edit-canvas/live-edit-canvas.js b/src/MicroweberPackages/LiveEdit/resources/js/api-core/services/components/live-edit-canvas/live-edit-canvas.js index c393a39483..e24ba16af3 100644 --- a/src/MicroweberPackages/LiveEdit/resources/js/api-core/services/components/live-edit-canvas/live-edit-canvas.js +++ b/src/MicroweberPackages/LiveEdit/resources/js/api-core/services/components/live-edit-canvas/live-edit-canvas.js @@ -36,15 +36,21 @@ export class LiveEditCanvas extends MicroweberBaseClass { } } + if(this.isUrlOpened(url)) { - const action = await mw.app.pageAlreadyOpened.handle(); + + const action = await mw.app.pageAlreadyOpened.handle(url); + if(action) { + open() } else { + mw.top().win.location.href = mw.settings.adminUrl; } } else{ + await open(); } }; @@ -99,10 +105,16 @@ export class LiveEditCanvas extends MicroweberBaseClass { } async setUrl(url) { - url = url.toString(); - await this.#registerURL( url); + + + this.#canvas.src = url; + + + url = url.toString(); + + await this.#registerURL( url); } mount(target) { @@ -126,23 +138,18 @@ export class LiveEditCanvas extends MicroweberBaseClass { url = new URL(url); - // url.searchParams.set('editmode', 'iframe'); + if(url.host !== top.location.host) { url = `${mw.settings.site_url}`; } - // if(url.host !== top.location.host) { - // url = `${mw.settings.site_url}?editmode=iframe`; - // } - - // if(url.host !== top.location.host) { - // url = `${mw.settings.site_url}?editmode=iframe`; - // } this.#canvas = liveEditIframe; + + liveEditIframe.frameBorder = 0; liveEditIframe.id="live-editor-frame"; liveEditIframe.name="live-editor-frame"; @@ -158,7 +165,6 @@ export class LiveEditCanvas extends MicroweberBaseClass { window.onbeforeunload = function () { if(liveEditIframe && liveEditIframe.contentWindow && liveEditIframe.contentWindow.mw && liveEditIframe.contentWindow.mw.askusertostay){ - // prevent user from leaving the page return true; @@ -175,6 +181,7 @@ export class LiveEditCanvas extends MicroweberBaseClass { liveEditIframe.addEventListener('load', e => { + mw.spinner({element: target, decorate: true}).remove(); if(liveEditIframe && liveEditIframe.contentWindow && liveEditIframe.contentWindow.mw) { @@ -237,6 +244,8 @@ export class LiveEditCanvas extends MicroweberBaseClass { if(liveEditIframe.contentWindow && liveEditIframe.contentWindow.mw) { liveEditIframe.contentWindow.mw.isNavigating = false; } + + this.dispatch('liveEditCanvasLoaded', {frame: liveEditIframe, frameWindow: liveEditIframe.contentWindow, frameDocument: liveEditIframe.contentWindow.document}); diff --git a/src/MicroweberPackages/LiveEdit/resources/js/api-core/services/components/live-edit/page-already-opened.service.js b/src/MicroweberPackages/LiveEdit/resources/js/api-core/services/components/live-edit/page-already-opened.service.js new file mode 100644 index 0000000000..9027a4d8bf --- /dev/null +++ b/src/MicroweberPackages/LiveEdit/resources/js/api-core/services/components/live-edit/page-already-opened.service.js @@ -0,0 +1,83 @@ +export class MWPageAlreadyOpened{ + constructor() { + + mw.top().app.broadcast.on('refreshFocusedPage', data => { + if(!data.url ) { + return; + } + + if(data.url === mw.top().app.canvas.getUrl()) { + if(data.skipIdentity && data.skipIdentity.includes(mw.top().app.broadcast.getIdentity())) { + return; + } + mw.top().app.canvas.refresh(); + } + }) + mw.top().app.broadcast.on('saveAndGoToAdmin', data => { + + if(!data.url ) { + return; + } + + if(data.url === mw.top().app.canvas.getUrl() && mw.top().app.documentFocus.isActive()) { + mw.top().app.canvas.refresh(); + } + }) + mw.top().app.broadcast.on('closePage', data => { + if(!data.url ) { + return; + } + + if(data.url === mw.top().app.canvas.getUrl()) { + if(data.skipIdentity && data.skipIdentity.includes(mw.top().app.broadcast.getIdentity())) { + return; + } + mw.top().win.location.href = mw.settings.adminUrl; + } + }) + } + + async saveAndBack() { + + } + + async handle(url) { + return new Promise((resolve) => { + const ok = mw.element(` + + `); + const cancel = mw.element(``); + + const dialogContent = ` + + + `; + + const dlg = mw.dialog({ + overlay: true, + content: dialogContent, + footer: [cancel.get(0), ok.get(0)], + id: 'canvasURLAlreadyOpened', + closeButton: false, + title: mw.lang('Warning') + }) + + ok.on('click', async function(){ + dlg.remove(); + mw.top().app.broadcast.message('closePage', {url, skipIdentity: [mw.top().app.broadcast.getIdentity()]}); // close the page in the other tab + resolve(true) + }); + cancel.on('click', function(){ + dlg.remove(); + resolve(false); + + }); + }) + } +} diff --git a/userfiles/modules/microweber/api/tools/dialog.js b/userfiles/modules/microweber/api/tools/dialog.js index 466a11faea..478de456f5 100644 --- a/userfiles/modules/microweber/api/tools/dialog.js +++ b/userfiles/modules/microweber/api/tools/dialog.js @@ -170,6 +170,7 @@ // skin: 'default' }); + this.id = this.options.id; @@ -334,13 +335,15 @@ this.options.root.body.appendChild(this.dialogMain); this.dialogMain.appendChild(this.dialogHolder); + if (this.options.closeButtonAppendTo) { - mw.$(this.options.closeButtonAppendTo, this.dialogMain).append(this.closeButton) + if (this.options.closeButton !== false) { + mw.$(this.options.closeButtonAppendTo, this.dialogMain).append(this.closeButton) + } } else { if (this.options.closeButton !== false) { this.dialogHolder.appendChild(this.closeButton); - } }