From 11d8c6d6042285ea52e5bb22f59e65065ddab7cb Mon Sep 17 00:00:00 2001 From: Joe Knapper Date: Mon, 9 Mar 2026 19:45:40 +0000 Subject: [PATCH 1/3] Stop closing seadragon when going full screen --- .../scanListComponents/openSeadragonViewer.vue | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/webapp/src/components/tabContentComponents/scanListComponents/openSeadragonViewer.vue b/webapp/src/components/tabContentComponents/scanListComponents/openSeadragonViewer.vue index a6712a89..b8f1c58a 100644 --- a/webapp/src/components/tabContentComponents/scanListComponents/openSeadragonViewer.vue +++ b/webapp/src/components/tabContentComponents/scanListComponents/openSeadragonViewer.vue @@ -83,7 +83,8 @@ export default { this.loadOpenSeaDragon(this.src); } } else { - if (this.osdViewer) { + // Don't destroy if viewer is in fullscreen + if (this.osdViewer && !this.osdViewer.isFullPage()) { this.osdViewer.destroy(); this.osdViewer = null; } @@ -121,7 +122,12 @@ export default { }, openFullscreen() { if (this.osdViewer) { - this.osdViewer.setFullScreen(true); + // Wait a bit for DOM to resize + setTimeout(() => { + this.osdViewer.setFullScreen(true); + this.updateFilter(); + this.osdViewer.forceRedraw(); + }, 500); } }, }, From 1090e693d4424127518ca1d22060a6d2c76c1f6f Mon Sep 17 00:00:00 2001 From: Julian Stirling Date: Tue, 10 Mar 2026 17:12:38 +0000 Subject: [PATCH 2/3] Prevent scan modal closing on fullscreen close, and pin filter to fixed reference --- .../scanListComponents/openSeadragonViewer.vue | 12 +++++++----- .../scanListComponents/scanViewer.vue | 12 ++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/webapp/src/components/tabContentComponents/scanListComponents/openSeadragonViewer.vue b/webapp/src/components/tabContentComponents/scanListComponents/openSeadragonViewer.vue index b8f1c58a..75e2d5b1 100644 --- a/webapp/src/components/tabContentComponents/scanListComponents/openSeadragonViewer.vue +++ b/webapp/src/components/tabContentComponents/scanListComponents/openSeadragonViewer.vue @@ -30,6 +30,8 @@ export default { }, }, + emits: ["entering-fullscreen"], + data: function () { return { osdViewer: null, @@ -111,7 +113,7 @@ export default { }, updateFilter() { - const viewerEl = document.getElementById("openseadragon"); + const viewerEl = this.$refs.osdContainer; if (viewerEl) { viewerEl.style.filter = ` brightness(${this.brightness}) @@ -122,12 +124,12 @@ export default { }, openFullscreen() { if (this.osdViewer) { + // Alert the modal we are about to enter fullscreen so it can prevent closing. + this.$emit("entering-fullscreen"); // Wait a bit for DOM to resize - setTimeout(() => { + this.$nextTick(() => { this.osdViewer.setFullScreen(true); - this.updateFilter(); - this.osdViewer.forceRedraw(); - }, 500); + }); } }, }, diff --git a/webapp/src/components/tabContentComponents/scanListComponents/scanViewer.vue b/webapp/src/components/tabContentComponents/scanListComponents/scanViewer.vue index 322ed2fc..a9009f50 100644 --- a/webapp/src/components/tabContentComponents/scanListComponents/scanViewer.vue +++ b/webapp/src/components/tabContentComponents/scanListComponents/scanViewer.vue @@ -20,6 +20,7 @@ :brightness="brightness" :contrast="contrast" :saturation="saturation" + @entering-fullscreen="enteringFullscreen = true" /> @@ -76,6 +77,7 @@ export default { brightness: 1, contrast: 1, saturation: 1, + enteringFullscreen: false, }; }, computed: { @@ -86,6 +88,16 @@ export default { return null; }, }, + mounted() { + const modalEl = this.$refs.scanModal; + + modalEl.addEventListener("beforehide", (event) => { + if (this.enteringFullscreen) { + event.preventDefault(); + this.enteringFullscreen = false; + } + }); + }, methods: { show() { UIkit.modal(this.$refs.scanModal).show(); From 3cb70278dd268b6c41f5fd8f6ca9bc8ad1ed8fa8 Mon Sep 17 00:00:00 2001 From: Julian Stirling Date: Wed, 11 Mar 2026 09:37:58 +0000 Subject: [PATCH 3/3] Remove the scan modal hide handler when unmounted --- .../scanListComponents/scanViewer.vue | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/webapp/src/components/tabContentComponents/scanListComponents/scanViewer.vue b/webapp/src/components/tabContentComponents/scanListComponents/scanViewer.vue index a9009f50..66517e74 100644 --- a/webapp/src/components/tabContentComponents/scanListComponents/scanViewer.vue +++ b/webapp/src/components/tabContentComponents/scanListComponents/scanViewer.vue @@ -78,6 +78,8 @@ export default { contrast: 1, saturation: 1, enteringFullscreen: false, + modalEl: null, + beforeHideHandler: null, }; }, computed: { @@ -89,14 +91,19 @@ export default { }, }, mounted() { - const modalEl = this.$refs.scanModal; - - modalEl.addEventListener("beforehide", (event) => { + this.modalEl = this.$refs.scanModal; + this.beforeHideHandler = (event) => { if (this.enteringFullscreen) { event.preventDefault(); this.enteringFullscreen = false; } - }); + }; + this.modalEl.addEventListener("beforehide", this.beforeHideHandler); + }, + beforeUnmount() { + if (this.modalEl && this.beforeHideHandler) { + this.modalEl.removeEventListener("beforehide", this.beforeHideHandler); + } }, methods: { show() {