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
+1 -1
View File
@@ -1,7 +1,7 @@
{
"manifest_version": 3,
"name": "Planification",
"version": "2026.5.21",
"version": "2026.5.22",
"description": "Vue claire et rapide du planning des techniciens EasyVista. Regroupe interventions et réservations par tech, affiche horaires, contact, lieu, catégorie et statut en un coup d'œil.",
"permissions": ["activeTab", "scripting", "storage", "tabs", "alarms"],
"host_permissions": [
+11 -6
View File
@@ -2592,18 +2592,23 @@ header.topbar::before {
v2026.5.17 : mode Minimisé (popup flottant compact, juste la ref)
v2026.5.19 : refonte — élément .pinned-popup-minref créé à la volée
v2026.5.21 : agrandi pour que la ref tienne sans déborder
v2026.5.22 : encore agrandi + plus d'espace entre dragbar et topbar
========================================================================== */
.pinned-popup.pinned-popup-minimized {
min-width: 240px !important;
max-width: 320px !important;
width: 260px !important;
min-width: 300px !important;
max-width: 360px !important;
width: 300px !important;
height: auto !important;
min-height: 70px !important;
padding: 36px 14px 14px 14px !important;
min-height: 80px !important;
padding: 44px 16px 16px 16px !important;
overflow: visible;
background: var(--bg-elevated) !important;
border: 1px solid var(--border) !important;
}
/* Séparer visuellement la dragbar (collée en haut) des boutons topbar */
.pinned-popup.pinned-popup-minimized .pinned-popup-topbar {
top: 14px !important; /* sous la dragbar (qui fait ~6-8px) */
}
/* Masquer tous les enfants directs du popup minimisé */
.pinned-popup.pinned-popup-minimized > *:not(.pinned-popup-topbar):not(.pinned-popup-dragbar):not(.pinned-popup-minref) {
display: none !important;
@@ -2612,7 +2617,7 @@ header.topbar::before {
.pinned-popup-minref {
display: block;
text-align: center;
padding: 8px 10px;
padding: 10px 12px;
font-family: var(--mono, monospace);
font-size: 15px;
font-weight: 700;
+15 -26
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,35 +7684,15 @@ 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();
}
}
} else if (action === "reload") {
// v4.1.14 : recharger uniquement l'intervention actuellement affichée
if (state.currentTooltipIv) {