From 1090e693d4424127518ca1d22060a6d2c76c1f6f Mon Sep 17 00:00:00 2001 From: Julian Stirling Date: Tue, 10 Mar 2026 17:12:38 +0000 Subject: [PATCH] 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();