MikaFil commited on
Commit
48b3594
Β·
verified Β·
1 Parent(s): 490015c

Update interface.js

Browse files
Files changed (1) hide show
  1. interface.js +48 -49
interface.js CHANGED
@@ -91,18 +91,17 @@ const currentScriptTag = document.currentScript;
91
  <button id="reset-camera-btn-${instanceId}" class="widget-button reset-camera-btn">
92
  <span class="reset-icon">⟲</span>
93
  </button>
94
- <button id="points-toggle-${instanceId}" class="widget-button points-toggle">β¦Ώ</button>
95
  <div id="menu-content-${instanceId}" class="menu-content">
96
  <span id="help-close-${instanceId}" class="help-close">Γ—</span>
97
- <div class="help-text">
98
- </div>
99
  </div>
100
  </div>
101
- <div id="point-tooltip" class="point-tooltip" style="display: none;">
102
- <div class="point-tooltip-content">
103
- <span id="point-tooltip-close" class="point-tooltip-close">Γ—</span>
104
- <div id="point-tooltip-text" class="point-tooltip-text"></div>
105
- <img id="point-tooltip-image" class="point-tooltip-image" src="" alt="" style="display: none;" />
106
  </div>
107
  </div>
108
  `;
@@ -116,23 +115,23 @@ const currentScriptTag = document.currentScript;
116
  const helpToggle = document.getElementById('help-toggle-' + instanceId);
117
  const helpCloseBtn = document.getElementById('help-close-' + instanceId);
118
  const resetCameraBtn = document.getElementById('reset-camera-btn-' + instanceId);
119
- const pointsToggleBtn = document.getElementById('points-toggle-' + instanceId);
120
  const menuContent = document.getElementById('menu-content-' + instanceId);
121
  const helpTextDiv = menuContent.querySelector('.help-text');
122
 
123
- // Tooltip elements
124
- const tooltipDiv = document.getElementById('point-tooltip');
125
- const tooltipTextDiv = document.getElementById('point-tooltip-text');
126
- const tooltipImage = document.getElementById('point-tooltip-image');
127
- const tooltipCloseBtn = document.getElementById('point-tooltip-close');
128
 
129
  // ─── 6a. Detect mobile vs. desktop ────────────────────────────────────────────
130
  const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
131
  const isMobile = isIOS || /Android/i.test(navigator.userAgent);
132
 
133
- // Conditionally include the French tooltip instruction line if points_url exists
134
- const tooltipInstruction = config.points_url
135
- ? '- Cliquez sur β¦Ώ pour afficher/masquer les points d’information.<br>'
136
  : '';
137
 
138
  // Fill help text with appropriate instructions
@@ -161,12 +160,12 @@ const currentScriptTag = document.currentScript;
161
  let dragHide = null;
162
 
163
  // Utility: hide tooltip and remove drag-hide listener
164
- function hideTooltip() {
165
  if (dragHide) {
166
  viewerContainerElem.removeEventListener('pointermove', dragHide);
167
  dragHide = null;
168
  }
169
- tooltipDiv.style.display = 'none';
170
  }
171
 
172
  // Utility: hide instructions panel
@@ -188,18 +187,18 @@ const currentScriptTag = document.currentScript;
188
  const canvasId = 'canvas-' + instanceId;
189
  const canvasEl = document.getElementById(canvasId);
190
 
191
- // ─── 8. Conditional display of points-toggle button ─────────────────────────
192
- if (!config.points_url) {
193
- pointsToggleBtn.style.display = 'none';
194
  } else {
195
- fetch(config.points_url)
196
  .then(resp => {
197
  if (!resp.ok) {
198
- pointsToggleBtn.style.display = 'none';
199
  }
200
  })
201
  .catch(() => {
202
- pointsToggleBtn.style.display = 'none';
203
  });
204
  }
205
 
@@ -373,7 +372,7 @@ const currentScriptTag = document.currentScript;
373
  // ─── 10. Hook up event listeners ────���──────────────────────────────────────
374
 
375
  fullscreenToggle.addEventListener('click', () => {
376
- hideTooltip();
377
  if (!isFullscreen) {
378
  enterFullscreen();
379
  } else {
@@ -419,7 +418,7 @@ const currentScriptTag = document.currentScript;
419
  });
420
 
421
  helpToggle.addEventListener('click', (e) => {
422
- hideTooltip();
423
  e.stopPropagation();
424
  menuContent.style.display = (menuContent.style.display === 'block') ? 'none' : 'block';
425
  });
@@ -429,48 +428,48 @@ const currentScriptTag = document.currentScript;
429
  });
430
 
431
  resetCameraBtn.addEventListener('click', () => {
432
- hideTooltip();
433
  if (viewerModule.resetViewerCamera) {
434
  viewerModule.resetViewerCamera();
435
  }
436
  });
437
 
438
  // β¦Ώ toggle button
439
- let pointsVisible = !!config.showPointsDefault;
440
- if (pointsToggleBtn.style.display !== 'none') {
441
- if (!pointsVisible) {
442
- pointsToggleBtn.style.opacity = '0.5';
443
  }
444
- pointsToggleBtn.addEventListener('click', () => {
445
- hideTooltip();
446
- pointsVisible = !pointsVisible;
447
- pointsToggleBtn.style.opacity = pointsVisible ? '1' : '0.5';
448
- document.dispatchEvent(new CustomEvent('toggle-points', { detail: { visible: pointsVisible } }));
449
  });
450
  }
451
 
452
- // Close tooltip on button click
453
  tooltipCloseBtn.addEventListener('click', () => {
454
- hideTooltip();
455
  });
456
 
457
- // Listen for point-selection events and show tooltip
458
- document.addEventListener('point-selected', (evt) => {
459
- const { text, imageUrl } = evt.detail;
460
- tooltipTextDiv.textContent = text || "";
461
- if (imageUrl) {
462
- tooltipImage.src = imageUrl;
463
  tooltipImage.style.display = 'block';
464
  } else {
465
  tooltipImage.style.display = 'none';
466
  }
467
- tooltipDiv.style.display = 'flex';
468
 
469
  // Attach drag-based hide listener
470
  dragHide = (e) => {
471
  if ((e.pointerType === 'mouse' && e.buttons !== 0) ||
472
  (e.pointerType === 'touch')) {
473
- hideTooltip();
474
  }
475
  };
476
  viewerContainerElem.addEventListener('pointermove', dragHide);
@@ -479,7 +478,7 @@ const currentScriptTag = document.currentScript;
479
  // Hide on any wheel event (zoom)
480
  if (canvasEl) {
481
  canvasEl.addEventListener('wheel', () => {
482
- hideTooltip();
483
  }, { passive: true });
484
  }
485
 
@@ -504,7 +503,7 @@ const currentScriptTag = document.currentScript;
504
  // Save β€œinitial state” after a brief delay
505
  setTimeout(() => {
506
  saveCurrentState();
507
- document.dispatchEvent(new CustomEvent('toggle-points', { detail: { visible: pointsVisible } }));
508
  }, 200);
509
 
510
  })();
 
91
  <button id="reset-camera-btn-${instanceId}" class="widget-button reset-camera-btn">
92
  <span class="reset-icon">⟲</span>
93
  </button>
94
+ <button id="tooltips-toggle-${instanceId}" class="widget-button tooltips-toggle">β¦Ώ</button>
95
  <div id="menu-content-${instanceId}" class="menu-content">
96
  <span id="help-close-${instanceId}" class="help-close">Γ—</span>
97
+ <div class="help-text"></div>
 
98
  </div>
99
  </div>
100
+ <div id="tooltip-panel" class="tooltip-panel" style="display: none;">
101
+ <div class="tooltip-content">
102
+ <span id="tooltip-close" class="tooltip-close">Γ—</span>
103
+ <div id="tooltip-text" class="tooltip-text"></div>
104
+ <img id="tooltip-image" class="tooltip-image" src="" alt="" style="display: none;" />
105
  </div>
106
  </div>
107
  `;
 
115
  const helpToggle = document.getElementById('help-toggle-' + instanceId);
116
  const helpCloseBtn = document.getElementById('help-close-' + instanceId);
117
  const resetCameraBtn = document.getElementById('reset-camera-btn-' + instanceId);
118
+ const tooltipsToggleBtn = document.getElementById('tooltips-toggle-' + instanceId);
119
  const menuContent = document.getElementById('menu-content-' + instanceId);
120
  const helpTextDiv = menuContent.querySelector('.help-text');
121
 
122
+ // Tooltip panel elements
123
+ const tooltipPanel = document.getElementById('tooltip-panel');
124
+ const tooltipTextDiv = document.getElementById('tooltip-text');
125
+ const tooltipImage = document.getElementById('tooltip-image');
126
+ const tooltipCloseBtn = document.getElementById('tooltip-close');
127
 
128
  // ─── 6a. Detect mobile vs. desktop ────────────────────────────────────────────
129
  const isIOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;
130
  const isMobile = isIOS || /Android/i.test(navigator.userAgent);
131
 
132
+ // Conditionally include the French tooltip instruction line if tooltips_url exists
133
+ const tooltipInstruction = config.tooltips_url
134
+ ? '- Cliquez sur β¦Ώ pour afficher/masquer les tooltips.<br>'
135
  : '';
136
 
137
  // Fill help text with appropriate instructions
 
160
  let dragHide = null;
161
 
162
  // Utility: hide tooltip and remove drag-hide listener
163
+ function hideTooltipPanel() {
164
  if (dragHide) {
165
  viewerContainerElem.removeEventListener('pointermove', dragHide);
166
  dragHide = null;
167
  }
168
+ tooltipPanel.style.display = 'none';
169
  }
170
 
171
  // Utility: hide instructions panel
 
187
  const canvasId = 'canvas-' + instanceId;
188
  const canvasEl = document.getElementById(canvasId);
189
 
190
+ // ─── 8. Conditional display of tooltips-toggle button ─────────────────────────
191
+ if (!config.tooltips_url) {
192
+ tooltipsToggleBtn.style.display = 'none';
193
  } else {
194
+ fetch(config.tooltips_url)
195
  .then(resp => {
196
  if (!resp.ok) {
197
+ tooltipsToggleBtn.style.display = 'none';
198
  }
199
  })
200
  .catch(() => {
201
+ tooltipsToggleBtn.style.display = 'none';
202
  });
203
  }
204
 
 
372
  // ─── 10. Hook up event listeners ────���──────────────────────────────────────
373
 
374
  fullscreenToggle.addEventListener('click', () => {
375
+ hideTooltipPanel();
376
  if (!isFullscreen) {
377
  enterFullscreen();
378
  } else {
 
418
  });
419
 
420
  helpToggle.addEventListener('click', (e) => {
421
+ hideTooltipPanel();
422
  e.stopPropagation();
423
  menuContent.style.display = (menuContent.style.display === 'block') ? 'none' : 'block';
424
  });
 
428
  });
429
 
430
  resetCameraBtn.addEventListener('click', () => {
431
+ hideTooltipPanel();
432
  if (viewerModule.resetViewerCamera) {
433
  viewerModule.resetViewerCamera();
434
  }
435
  });
436
 
437
  // β¦Ώ toggle button
438
+ let tooltipsVisible = !!config.showTooltipsDefault;
439
+ if (tooltipsToggleBtn.style.display !== 'none') {
440
+ if (!tooltipsVisible) {
441
+ tooltipsToggleBtn.style.opacity = '0.5';
442
  }
443
+ tooltipsToggleBtn.addEventListener('click', () => {
444
+ hideTooltipPanel();
445
+ tooltipsVisible = !tooltipsVisible;
446
+ tooltipsToggleBtn.style.opacity = tooltipsVisible ? '1' : '0.5';
447
+ document.dispatchEvent(new CustomEvent('toggle-tooltips', { detail: { visible: tooltipsVisible } }));
448
  });
449
  }
450
 
451
+ // Close tooltip panel on button click
452
  tooltipCloseBtn.addEventListener('click', () => {
453
+ hideTooltipPanel();
454
  });
455
 
456
+ // Listen for tooltip-selection events and show tooltip panel
457
+ document.addEventListener('tooltip-selected', (evt) => {
458
+ const { title, description, imgUrl } = evt.detail;
459
+ tooltipTextDiv.innerHTML = `<strong>${title}</strong><br>${description}`;
460
+ if (imgUrl) {
461
+ tooltipImage.src = imgUrl;
462
  tooltipImage.style.display = 'block';
463
  } else {
464
  tooltipImage.style.display = 'none';
465
  }
466
+ tooltipPanel.style.display = 'flex';
467
 
468
  // Attach drag-based hide listener
469
  dragHide = (e) => {
470
  if ((e.pointerType === 'mouse' && e.buttons !== 0) ||
471
  (e.pointerType === 'touch')) {
472
+ hideTooltipPanel();
473
  }
474
  };
475
  viewerContainerElem.addEventListener('pointermove', dragHide);
 
478
  // Hide on any wheel event (zoom)
479
  if (canvasEl) {
480
  canvasEl.addEventListener('wheel', () => {
481
+ hideTooltipPanel();
482
  }, { passive: true });
483
  }
484
 
 
503
  // Save β€œinitial state” after a brief delay
504
  setTimeout(() => {
505
  saveCurrentState();
506
+ document.dispatchEvent(new CustomEvent('toggle-tooltips', { detail: { visible: tooltipsVisible } }));
507
  }, 200);
508
 
509
  })();