v2026.5.22 — Stabilité popups

This commit is contained in:
Quentin Rouiller
2026-04-23 15:13:04 +02:00
parent f6dc9eaf7b
commit ddb075d563
3 changed files with 28 additions and 34 deletions
+16 -27
View File
@@ -6843,6 +6843,15 @@ function _softUnpinPopup(el) {
_ensureDockCloseAllBtn();
}
// v2026.5.22 : si le tooltip hover est actuellement affiché pour la même
// intervention que celle qu'on désépingle, il faut regénérer son HTML pour
// que l'icône passe de 📍 (active rouge) à 📌 (non active) — sinon l'user
// voit l'ancienne icône et croit qu'il est toujours épinglé.
const tip = tooltipEl();
if (tip && tip.classList.contains("visible") && state.currentTooltipIv) {
tip.innerHTML = buildTooltipHTML(state.currentTooltipIv);
}
// Helper qui joue l'animation de sortie puis supprime le DOM
const animateAndRemove = () => {
el.classList.add("unpinning");
@@ -7675,34 +7684,14 @@ function bindTooltipInteractions() {
e.preventDefault();
const action = btn.dataset.action;
if (action === "pin") {
// v2026.5.21 : toggle — si déjà épinglée, désépingle ; sinon épingle
// v2026.5.22 : clic sur 📌/📍 dans le tooltip hover = TOUJOURS réépingler
// à la position actuelle. Si un popup existe déjà pour cette iv+date,
// il est supprimé avant d'en créer un nouveau à côté de la carte survolée.
// (La suppression de l'ancien est faite dans pinTooltip() qui gère
// l'unicité actionId+date — v2026.5.21.)
// Pour désépingler : bouton 📍 dans la topbar du popup, double-Ctrl, ou Échap.
if (state.currentTooltipIv) {
const iv = state.currentTooltipIv;
const pinState = _getPinStateForIv(iv);
if (pinState.isPinned && pinState.popup) {
// Désépingle
const idx = pinnedPopups.findIndex(p => p.el === pinState.popup);
if (idx >= 0) pinnedPopups.splice(idx, 1);
if (pinState.popup._linkedPill) {
try { pinState.popup._linkedPill.remove(); } catch (err) {}
}
try { pinState.popup.remove(); } catch (err) {}
const dock = document.getElementById("pinned-popups-dock");
if (dock && dock.querySelectorAll(".pinned-popup-dock-pill").length === 0) {
dock.classList.remove("visible");
const closeAllBtn = document.getElementById("pinned-popups-close-all");
if (closeAllBtn) closeAllBtn.remove();
} else {
_ensureDockCloseAllBtn();
}
// Mettre à jour le tooltip (📍 → 📌)
const tip = tooltipEl();
if (tip && tip.classList.contains("visible")) {
tip.innerHTML = buildTooltipHTML(iv);
}
} else {
pinTooltip();
}
pinTooltip();
}
} else if (action === "reload") {
// v4.1.14 : recharger uniquement l'intervention actuellement affichée