bilca commited on
Commit
5c56fa8
Β·
verified Β·
1 Parent(s): 5f18cdb

Update interface.js

Browse files
Files changed (1) hide show
  1. interface.js +25 -59
interface.js CHANGED
@@ -120,29 +120,6 @@ const currentScriptTag = document.currentScript;
120
  const tooltipImage = document.getElementById('point-tooltip-image');
121
  const tooltipCloseBtn = document.getElementById('point-tooltip-close');
122
 
123
- // Track tooltip state and listeners
124
- let tooltipIsVisible = false;
125
- let hideTriggered = false;
126
-
127
- // Pointer/wheel listeners (defined once)
128
- let onPointerDown, onPointerMove, onPointerUp, onWheel;
129
-
130
- // Utility: hide tooltip
131
- function hideTooltip() {
132
- if (!tooltipIsVisible) return;
133
- console.log("DEBUG: tooltip hidden");
134
- tooltipDiv.style.display = 'none';
135
- tooltipIsVisible = false;
136
- hideTriggered = true;
137
- // Remove listeners
138
- if (viewerContainerElem) {
139
- viewerContainerElem.removeEventListener('pointerdown', onPointerDown);
140
- viewerContainerElem.removeEventListener('pointermove', onPointerMove);
141
- viewerContainerElem.removeEventListener('pointerup', onPointerUp);
142
- viewerContainerElem.removeEventListener('wheel', onWheel);
143
- }
144
- }
145
-
146
  // Device detection for help text
147
  const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
148
  const isMobile = isIOS || /Android/i.test(navigator.userAgent);
@@ -162,6 +139,11 @@ const currentScriptTag = document.currentScript;
162
 
163
  viewerContainerElem.style.display = 'block';
164
 
 
 
 
 
 
165
  // ─── 7. Dynamically load viewer.js ─────────────────────────────────────────
166
  let viewerModule;
167
  try {
@@ -172,27 +154,28 @@ const currentScriptTag = document.currentScript;
172
  return;
173
  }
174
 
175
- // After viewer is ready, set up debug listeners on viewerContainerElem
176
- onPointerDown = (e) => {
177
- console.log(`DEBUG: pointerdown at (${e.clientX}, ${e.clientY})`);
178
- };
179
- onPointerMove = (e) => {
180
- console.log(`DEBUG: pointermove at (${e.clientX}, ${e.clientY})`);
181
- if (tooltipIsVisible && !hideTriggered) {
182
- console.log("DEBUG: pointermove after tooltip β†’ hide");
183
- hideTooltip();
 
 
 
 
184
  }
185
- };
186
- onPointerUp = (e) => {
187
- console.log(`DEBUG: pointerup at (${e.clientX}, ${e.clientY})`);
188
- };
189
- onWheel = (e) => {
190
- console.log(`DEBUG: wheel delta (${e.deltaY})`);
191
- if (tooltipIsVisible && !hideTriggered) {
192
- console.log("DEBUG: wheel β†’ hide");
193
  hideTooltip();
194
- }
195
- };
196
 
197
  // ─── 8. Fullscreen / state-preservation logic ───────────────────────────────
198
  let isFullscreen = false;
@@ -364,8 +347,6 @@ const currentScriptTag = document.currentScript;
364
  // ─── 9. Hook up event listeners ───────────────────────────────────────────
365
 
366
  fullscreenToggle.addEventListener('click', () => {
367
- console.log("DEBUG: fullscreen toggle clicked");
368
- hideTooltip();
369
  if (!isFullscreen) {
370
  enterFullscreen();
371
  } else {
@@ -411,15 +392,11 @@ const currentScriptTag = document.currentScript;
411
  });
412
 
413
  helpToggle.addEventListener('click', (e) => {
414
- console.log("DEBUG: help toggle clicked");
415
- hideTooltip();
416
  e.stopPropagation();
417
  menuContent.style.display = (menuContent.style.display === 'block') ? 'none' : 'block';
418
  });
419
 
420
  resetCameraBtn.addEventListener('click', () => {
421
- console.log("DEBUG: reset-camera clicked");
422
- hideTooltip();
423
  if (viewerModule.resetViewerCamera) {
424
  viewerModule.resetViewerCamera();
425
  }
@@ -431,8 +408,6 @@ const currentScriptTag = document.currentScript;
431
  pointsToggleBtn.style.opacity = '0.5';
432
  }
433
  pointsToggleBtn.addEventListener('click', () => {
434
- console.log("DEBUG: points-toggle clicked");
435
- hideTooltip();
436
  pointsVisible = !pointsVisible;
437
  pointsToggleBtn.style.opacity = pointsVisible ? '1' : '0.5';
438
  document.dispatchEvent(new CustomEvent('toggle-points', { detail: { visible: pointsVisible } }));
@@ -440,14 +415,12 @@ const currentScriptTag = document.currentScript;
440
 
441
  // Close tooltip on button click
442
  tooltipCloseBtn.addEventListener('click', () => {
443
- console.log("DEBUG: tooltip close button clicked");
444
  hideTooltip();
445
  });
446
 
447
  // Listen for point-selection events and show tooltip
448
  document.addEventListener('point-selected', (evt) => {
449
  const { text, imageUrl } = evt.detail;
450
- console.log(`DEBUG: showTooltip with text="${text}"`);
451
  tooltipTextDiv.textContent = text || "";
452
  if (imageUrl) {
453
  tooltipImage.src = imageUrl;
@@ -456,13 +429,6 @@ const currentScriptTag = document.currentScript;
456
  tooltipImage.style.display = 'none';
457
  }
458
  tooltipDiv.style.display = 'flex';
459
- tooltipIsVisible = true;
460
- hideTriggered = false;
461
- // Attach pointer/wheel listeners for first interaction
462
- viewerContainerElem.addEventListener('pointerdown', onPointerDown);
463
- viewerContainerElem.addEventListener('pointermove', onPointerMove);
464
- viewerContainerElem.addEventListener('pointerup', onPointerUp);
465
- viewerContainerElem.addEventListener('wheel', onWheel, { passive: true });
466
  });
467
 
468
  // Escape key also exits fullscreen
 
120
  const tooltipImage = document.getElementById('point-tooltip-image');
121
  const tooltipCloseBtn = document.getElementById('point-tooltip-close');
122
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  // Device detection for help text
124
  const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
125
  const isMobile = isIOS || /Android/i.test(navigator.userAgent);
 
139
 
140
  viewerContainerElem.style.display = 'block';
141
 
142
+ // Utility: hide tooltip
143
+ function hideTooltip() {
144
+ tooltipDiv.style.display = 'none';
145
+ }
146
+
147
  // ─── 7. Dynamically load viewer.js ─────────────────────────────────────────
148
  let viewerModule;
149
  try {
 
154
  return;
155
  }
156
 
157
+ // After viewer is ready, grab the canvas and set up hide-on-interaction
158
+ const canvasId = 'canvas-' + instanceId;
159
+ const canvasEl = document.getElementById(canvasId);
160
+ if (canvasEl) {
161
+ // When pointer down, listen for the first move (mouse or touch) to hide the tooltip
162
+ function onPointerDown() {
163
+ const onMove = () => {
164
+ hideTooltip();
165
+ canvasEl.removeEventListener('mousemove', onMove);
166
+ canvasEl.removeEventListener('touchmove', onMove);
167
+ };
168
+ canvasEl.addEventListener('mousemove', onMove, { once: true });
169
+ canvasEl.addEventListener('touchmove', onMove, { once: true });
170
  }
171
+ canvasEl.addEventListener('mousedown', onPointerDown, { once: true });
172
+ canvasEl.addEventListener('touchstart', onPointerDown, { once: true });
173
+
174
+ // Hide on any wheel event (zoom)
175
+ canvasEl.addEventListener('wheel', () => {
 
 
 
176
  hideTooltip();
177
+ }, { passive: true });
178
+ }
179
 
180
  // ─── 8. Fullscreen / state-preservation logic ───────────────────────────────
181
  let isFullscreen = false;
 
347
  // ─── 9. Hook up event listeners ───────────────────────────────────────────
348
 
349
  fullscreenToggle.addEventListener('click', () => {
 
 
350
  if (!isFullscreen) {
351
  enterFullscreen();
352
  } else {
 
392
  });
393
 
394
  helpToggle.addEventListener('click', (e) => {
 
 
395
  e.stopPropagation();
396
  menuContent.style.display = (menuContent.style.display === 'block') ? 'none' : 'block';
397
  });
398
 
399
  resetCameraBtn.addEventListener('click', () => {
 
 
400
  if (viewerModule.resetViewerCamera) {
401
  viewerModule.resetViewerCamera();
402
  }
 
408
  pointsToggleBtn.style.opacity = '0.5';
409
  }
410
  pointsToggleBtn.addEventListener('click', () => {
 
 
411
  pointsVisible = !pointsVisible;
412
  pointsToggleBtn.style.opacity = pointsVisible ? '1' : '0.5';
413
  document.dispatchEvent(new CustomEvent('toggle-points', { detail: { visible: pointsVisible } }));
 
415
 
416
  // Close tooltip on button click
417
  tooltipCloseBtn.addEventListener('click', () => {
 
418
  hideTooltip();
419
  });
420
 
421
  // Listen for point-selection events and show tooltip
422
  document.addEventListener('point-selected', (evt) => {
423
  const { text, imageUrl } = evt.detail;
 
424
  tooltipTextDiv.textContent = text || "";
425
  if (imageUrl) {
426
  tooltipImage.src = imageUrl;
 
429
  tooltipImage.style.display = 'none';
430
  }
431
  tooltipDiv.style.display = 'flex';
 
 
 
 
 
 
 
432
  });
433
 
434
  // Escape key also exits fullscreen