Spaces:
Running
Running
Update interface.js
Browse files- interface.js +39 -27
interface.js
CHANGED
|
@@ -120,31 +120,24 @@ const currentScriptTag = document.currentScript;
|
|
| 120 |
const tooltipImage = document.getElementById('point-tooltip-image');
|
| 121 |
const tooltipCloseBtn = document.getElementById('point-tooltip-close');
|
| 122 |
|
| 123 |
-
//
|
| 124 |
-
let
|
| 125 |
-
let
|
|
|
|
|
|
|
| 126 |
|
| 127 |
// Utility: hide tooltip and clean up drag listeners
|
| 128 |
function hideTooltip() {
|
| 129 |
tooltipDiv.style.display = 'none';
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
|
|
|
|
|
|
|
|
|
| 135 |
}
|
| 136 |
-
// Remove pointerdown listener
|
| 137 |
-
viewerContainerElem.removeEventListener('pointerdown', onPointerDownOnce);
|
| 138 |
-
}
|
| 139 |
-
|
| 140 |
-
// One-time pointerdown handler that waits for the next pointermove
|
| 141 |
-
function onPointerDownOnce() {
|
| 142 |
-
dragStarted = true;
|
| 143 |
-
// Attach one-time pointermove to hide
|
| 144 |
-
onFirstMove = function() {
|
| 145 |
-
hideTooltip();
|
| 146 |
-
};
|
| 147 |
-
viewerContainerElem.addEventListener('pointermove', onFirstMove, { once: true });
|
| 148 |
}
|
| 149 |
|
| 150 |
// Device detection for help text
|
|
@@ -184,12 +177,6 @@ const currentScriptTag = document.currentScript;
|
|
| 184 |
canvasEl.addEventListener('wheel', () => {
|
| 185 |
hideTooltip();
|
| 186 |
}, { passive: true });
|
| 187 |
-
|
| 188 |
-
// Hide on first drag: attach pointerdown to start detection
|
| 189 |
-
canvasEl.addEventListener('pointerdown', () => {
|
| 190 |
-
hideTooltip(); // In case pointerdown alone should also hide (covers taps)
|
| 191 |
-
viewerContainerElem.addEventListener('pointerdown', onPointerDownOnce, { once: true });
|
| 192 |
-
}, { once: true });
|
| 193 |
}
|
| 194 |
|
| 195 |
// βββ 8. Fullscreen / state-preservation logic βββββββββββββββββββββββββββββββ
|
|
@@ -448,6 +435,32 @@ const currentScriptTag = document.currentScript;
|
|
| 448 |
tooltipImage.style.display = 'none';
|
| 449 |
}
|
| 450 |
tooltipDiv.style.display = 'flex';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 451 |
});
|
| 452 |
|
| 453 |
// Escape key also exits fullscreen
|
|
@@ -473,5 +486,4 @@ const currentScriptTag = document.currentScript;
|
|
| 473 |
saveCurrentState();
|
| 474 |
document.dispatchEvent(new CustomEvent('toggle-points', { detail: { visible: pointsVisible } }));
|
| 475 |
}, 200);
|
| 476 |
-
|
| 477 |
})();
|
|
|
|
| 120 |
const tooltipImage = document.getElementById('point-tooltip-image');
|
| 121 |
const tooltipCloseBtn = document.getElementById('point-tooltip-close');
|
| 122 |
|
| 123 |
+
// Variables for drag detection
|
| 124 |
+
let startX = 0;
|
| 125 |
+
let startY = 0;
|
| 126 |
+
let onPointerDownDrag = null;
|
| 127 |
+
let onPointerMoveDrag = null;
|
| 128 |
|
| 129 |
// Utility: hide tooltip and clean up drag listeners
|
| 130 |
function hideTooltip() {
|
| 131 |
tooltipDiv.style.display = 'none';
|
| 132 |
+
// Remove any leftover listeners
|
| 133 |
+
if (onPointerDownDrag) {
|
| 134 |
+
viewerContainerElem.removeEventListener('pointerdown', onPointerDownDrag);
|
| 135 |
+
onPointerDownDrag = null;
|
| 136 |
+
}
|
| 137 |
+
if (onPointerMoveDrag) {
|
| 138 |
+
viewerContainerElem.removeEventListener('pointermove', onPointerMoveDrag);
|
| 139 |
+
onPointerMoveDrag = null;
|
| 140 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 141 |
}
|
| 142 |
|
| 143 |
// Device detection for help text
|
|
|
|
| 177 |
canvasEl.addEventListener('wheel', () => {
|
| 178 |
hideTooltip();
|
| 179 |
}, { passive: true });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 180 |
}
|
| 181 |
|
| 182 |
// βββ 8. Fullscreen / state-preservation logic βββββββββββββββββββββββββββββββ
|
|
|
|
| 435 |
tooltipImage.style.display = 'none';
|
| 436 |
}
|
| 437 |
tooltipDiv.style.display = 'flex';
|
| 438 |
+
|
| 439 |
+
// Clean up any previous drag listeners
|
| 440 |
+
if (onPointerDownDrag) {
|
| 441 |
+
viewerContainerElem.removeEventListener('pointerdown', onPointerDownDrag);
|
| 442 |
+
onPointerDownDrag = null;
|
| 443 |
+
}
|
| 444 |
+
if (onPointerMoveDrag) {
|
| 445 |
+
viewerContainerElem.removeEventListener('pointermove', onPointerMoveDrag);
|
| 446 |
+
onPointerMoveDrag = null;
|
| 447 |
+
}
|
| 448 |
+
|
| 449 |
+
// Attach new pointerdown listener for drag detection
|
| 450 |
+
onPointerDownDrag = function(e) {
|
| 451 |
+
startX = e.clientX;
|
| 452 |
+
startY = e.clientY;
|
| 453 |
+
// On first move that exceeds threshold, hide tooltip
|
| 454 |
+
onPointerMoveDrag = function(ev) {
|
| 455 |
+
const dx = ev.clientX - startX;
|
| 456 |
+
const dy = ev.clientY - startY;
|
| 457 |
+
if (Math.hypot(dx, dy) > 3) {
|
| 458 |
+
hideTooltip();
|
| 459 |
+
}
|
| 460 |
+
};
|
| 461 |
+
viewerContainerElem.addEventListener('pointermove', onPointerMoveDrag, { once: true });
|
| 462 |
+
};
|
| 463 |
+
viewerContainerElem.addEventListener('pointerdown', onPointerDownDrag, { once: true });
|
| 464 |
});
|
| 465 |
|
| 466 |
// Escape key also exits fullscreen
|
|
|
|
| 486 |
saveCurrentState();
|
| 487 |
document.dispatchEvent(new CustomEvent('toggle-points', { detail: { visible: pointsVisible } }));
|
| 488 |
}, 200);
|
|
|
|
| 489 |
})();
|