Enhance local viewer: implement centralized hide functionality and improve close handling for resource overlays

This commit is contained in:
Ross
2025-12-15 10:08:14 +00:00
parent 18dbb27a3e
commit 654d0ae686
2 changed files with 188 additions and 181 deletions
+6 -4
View File
@@ -1,7 +1,7 @@
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<title>Viewer</title> <title>Viewer</title>
<style type="text/css"> <style type="text/css">
body, html body, html
@@ -14,8 +14,8 @@
position:absolute; left: 0; right: 0; bottom: 0; top: 0px; position:absolute; left: 0; right: 0; bottom: 0; top: 0px;
} }
</style> </style>
</head> </head>
<body> <body>
<p>Awating load request</p> <p>Awating load request</p>
This page will display series when loaded from other pages. This page will display series when loaded from other pages.
<div id="viewerContainer" style="width:100%; height:100%; position:relative;"> <div id="viewerContainer" style="width:100%; height:100%; position:relative;">
@@ -169,6 +169,8 @@
bc.onmessage = (event) => { bc.onmessage = (event) => {
console.log("message received"); console.log("message received");
console.log(event); console.log(event);
// Always hide any existing resource overlay on a new load
try { hideResource(); } catch (e) { /* ignore if not available */ }
if (event.data.type == "open") { if (event.data.type == "open") {
// If URL looks like an image/video/embed, render in the resource panel // If URL looks like an image/video/embed, render in the resource panel
if (event.data.url && isMediaUrl(event.data.url)) { if (event.data.url && isMediaUrl(event.data.url)) {
@@ -183,5 +185,5 @@
}); });
</script> </script>
</body> </body>
</html> </html>
+8 -3
View File
@@ -86,7 +86,14 @@
document.title = "Case: {{current_case.title}}"; document.title = "Case: {{current_case.title}}";
console.log('ready'); console.log('ready');
const bc = new BroadcastChannel("viva_load"); const bc = new BroadcastChannel("viva_load");
// Centralized hide helper and delegated close handling for local viewer
function hideResourceLocal(){ const disp=document.getElementById('resourceDisplay'); const inner=document.getElementById('resourceInner'); if(disp) disp.style.display='none'; if(inner) inner.innerHTML=''; }
(function(){ const disp=document.getElementById('resourceDisplay'); if(!disp) return; disp.addEventListener('click', function(e){ const close = e.target.closest && e.target.closest('#resourceClose'); if (close) hideResourceLocal(); }); })();
bc.onmessage = (event) => { bc.onmessage = (event) => {
// Ensure any existing overlay is closed on new load
try { hideResourceLocal(); } catch(_) {}
console.log("message received"); console.log("message received");
console.log(event); console.log(event);
if (event.data.type == "open") { if (event.data.type == "open") {
@@ -144,9 +151,7 @@
disp.style.display='flex'; return true; disp.style.display='flex'; return true;
} }
// Centralized hide helper and delegated close handling
function hideResourceLocal(){ const disp=document.getElementById('resourceDisplay'); const inner=document.getElementById('resourceInner'); if(disp) disp.style.display='none'; if(inner) inner.innerHTML=''; }
(function(){ const disp=document.getElementById('resourceDisplay'); if(!disp) return; disp.addEventListener('click', function(e){ const close = e.target.closest && e.target.closest('#resourceClose'); if (close) hideResourceLocal(); }); })();
if (event.data.url && isMediaUrl(event.data.url)) { if (event.data.url && isMediaUrl(event.data.url)) {
// show resource overlay and do not attempt to mount DICOM viewer // show resource overlay and do not attempt to mount DICOM viewer