diff --git a/steps/index.html b/steps/index.html index 3a69275..c344489 100644 --- a/steps/index.html +++ b/steps/index.html @@ -264,11 +264,11 @@ -
+

Data Synchronizer

Provide radar dataset and video parameters to initialize workspace

-
+
@@ -299,6 +299,8 @@
Initializing...
+ +

@@ -774,6 +776,20 @@ + + +
+
+ + + +
+ Drop to Load Data + Updating session with new files... +
+
+
+ diff --git a/steps/src/dom.js b/steps/src/dom.js index adee74f..d46917e 100644 --- a/steps/src/dom.js +++ b/steps/src/dom.js @@ -38,6 +38,7 @@ export const startChangelogBtn = document.getElementById("start-changelog-btn"); export const startThemeToggleBtn = document.getElementById("start-theme-toggle"); export const startThemeToggleDarkIcon = document.getElementById("start-theme-toggle-dark-icon"); export const startThemeToggleLightIcon = document.getElementById("start-theme-toggle-light-icon"); +export const globalDragOverlay = document.getElementById("global-drag-overlay"); export const themeToggleBtn = document.getElementById("theme-toggle"); export const canvasContainer = document.getElementById("canvas-container"); diff --git a/steps/src/main.js b/steps/src/main.js index cf60f98..ebff7d6 100644 --- a/steps/src/main.js +++ b/steps/src/main.js @@ -58,6 +58,7 @@ import { startLoadJsonBtn, startLoadVideoBtn, startClearCacheBtn, + globalDragOverlay, } from "./dom.js"; import { initializeTheme } from "./theme.js"; @@ -74,27 +75,36 @@ videoFileInput.addEventListener("change", (event) => handleFiles(event.target.files) ); -// Wire up the drag-and-drop functionality for the start screen -startDropZone.addEventListener("dragover", (event) => { +// Wire up the universal drag-and-drop functionality +let dragCounter = 0; + +document.body.addEventListener("dragenter", (event) => { event.preventDefault(); - startDropZone.classList.add("border-blue-500", "bg-blue-50", "dark:bg-gray-700"); -}); -startDropZone.addEventListener("dragleave", () => { - startDropZone.classList.remove("border-blue-500", "bg-blue-50", "dark:bg-gray-700"); + dragCounter++; + if (dragCounter === 1) { + globalDragOverlay.classList.remove("opacity-0"); + globalDragOverlay.classList.add("opacity-100"); + } }); -startDropZone.addEventListener("drop", (event) => { + +document.body.addEventListener("dragover", (event) => { event.preventDefault(); - startDropZone.classList.remove("border-blue-500", "bg-blue-50", "dark:bg-gray-700"); - handleFiles(event.dataTransfer.files); }); -// Also keep the main body as a backup drop zone for modifying active sessions -const mainDropZone = document.querySelector("main"); -mainDropZone.addEventListener("dragover", (event) => { +document.body.addEventListener("dragleave", (event) => { event.preventDefault(); + dragCounter--; + if (dragCounter === 0) { + globalDragOverlay.classList.remove("opacity-100"); + globalDragOverlay.classList.add("opacity-0"); + } }); -mainDropZone.addEventListener("drop", (event) => { + +document.body.addEventListener("drop", (event) => { event.preventDefault(); + dragCounter = 0; + globalDragOverlay.classList.remove("opacity-100"); + globalDragOverlay.classList.add("opacity-0"); handleFiles(event.dataTransfer.files); });