diff --git a/manifest.json b/manifest.json index 7adf2d5..9a9cfdc 100644 --- a/manifest.json +++ b/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 3, "name": "Planification", - "version": "2026.5.27", + "version": "2026.5.28", "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.", "browser_specific_settings": { "gecko": { diff --git a/viewer.css b/viewer.css index de2d800..9c860e6 100644 --- a/viewer.css +++ b/viewer.css @@ -2512,11 +2512,12 @@ header.topbar::before { /* Breakpoint medium : entre 1000 et 1300px, on compacte un peu */ @media (max-width: 1300px) { - .app-clock-date { font-size: 11px; } - .app-clock-time { font-size: 20px; } + .app-clock-date { font-size: 18px; } + .app-clock-time { font-size: 18px; } + .app-clock-date::after { font-size: 20px; } .topbar-right .btn-action .btn-action-label, .topbar-right .btn-refresh .btn-refresh-label { - font-size: 12px; + font-size: 13px; } } diff --git a/viewer.js b/viewer.js index 1dbeb6a..7c3b760 100644 --- a/viewer.js +++ b/viewer.js @@ -4855,8 +4855,22 @@ function buildCard(tech, isoDate) { showTooltip(e, ivCopy, card); }); card.addEventListener("mouseleave", () => { + if (_isHorizontalView()) return; hideTooltip(); }); + // Hover sur le badge (Congé / Maladie/Accident / Absent) : actif + // SEULEMENT en vue horizontale. + const badgeEl = card.querySelector(".card-tech-badge"); + if (badgeEl) { + badgeEl.addEventListener("mouseenter", (e) => { + if (!_isHorizontalView()) return; // bloqué en classique + showTooltip(e, ivCopy, badgeEl); + }); + badgeEl.addEventListener("mouseleave", () => { + if (!_isHorizontalView()) return; + hideTooltip(); + }); + } } } @@ -5102,19 +5116,42 @@ function getStatusClass(iv) { } function bindTimelinePopover(el) { - el.addEventListener("mouseenter", (e) => showTimelinePopover(e, el)); + // v2026.5.33 : en vue horizontale, les interactions sont différentes : + // - hover : ouvre directement la GRANDE popup (pas la petite) + // - clic : ouvre la fiche EasyVista dans un nouvel onglet + // En vue classique, le comportement existant est conservé : + // - hover : petite popup qui suit la souris + // - clic simple : grande popup persistante + // - double-clic : fiche EasyVista nouvel onglet + // - Ctrl+clic : fiche EasyVista en arrière-plan + const _isHorizontalView = () => document.documentElement.classList.contains("view-horizontal"); + + el.addEventListener("mouseenter", (e) => { + if (_isHorizontalView()) { + // Grande popup directement en vue horizontale + if (el.dataset.ivIdx !== undefined) { + openPersistentTimelinePopup(el); + } + } else { + showTimelinePopover(e, el); + } + }); // v4.2.3 : la petite popup timeline SUIT la souris (différent de la grande // popup des lignes d'intervention qui est ancrée). On n'utilise pas // moveTooltip() (no-op depuis v4.1.12) mais une fonction dédiée. - el.addEventListener("mousemove", (e) => moveTimelineTooltip(e)); - el.addEventListener("mouseleave", hideTooltip); + el.addEventListener("mousemove", (e) => { + if (!_isHorizontalView()) { + moveTimelineTooltip(e); + } + }); + el.addEventListener("mouseleave", () => { + if (!_isHorizontalView()) { + hideTooltip(); + } + // En vue horizontale, la grande popup est persistante donc on ne ferme + // pas au mouseleave (l'user peut interagir avec). + }); - // v4.2.3 : clic / double-clic / Ctrl+clic sur un segment timeline - // - clic simple : ferme la petite popup et ouvre la GRANDE popup - // (ancrée juste en dessous de la timeline, persistante pour permettre - // de sélectionner du texte / copier) - // - double-clic : ouvre la fiche EasyVista dans un nouvel onglet actif - // - Ctrl+clic (Cmd+clic sur Mac) : ouvre dans un onglet en arrière-plan const kind = el.dataset.kind; const ivIdxStr = el.dataset.ivIdx; // Seulement sur les segments avec une interventoin (pas les "hole" libres @@ -5123,6 +5160,17 @@ function bindTimelinePopover(el) { let singleClickTimer = null; el.addEventListener("click", (e) => { + // v2026.5.33 : en vue horizontale, tout clic simple = ouvrir la fiche EV + if (_isHorizontalView()) { + e.preventDefault(); + e.stopPropagation(); + // Ctrl/Cmd/middle → arrière-plan, sinon nouvel onglet actif + const background = !!(e.ctrlKey || e.metaKey || e.button === 1); + openInterventionFromTimeline(el, { background }); + return; + } + + // Vue classique (inchangé) : // Ctrl / Cmd / molette → ouvrir fiche en arrière-plan if (e.ctrlKey || e.metaKey || e.button === 1) { e.preventDefault(); @@ -5140,8 +5188,10 @@ function bindTimelinePopover(el) { }, 250); }); el.addEventListener("dblclick", (e) => { - // Annuler le clic simple en attente + // En vue horizontale le clic simple fait déjà l'ouverture, le dblclick + // devient inutile — on le laisse par sécurité (comportement idem). if (singleClickTimer) { clearTimeout(singleClickTimer); singleClickTimer = null; } + if (_isHorizontalView()) return; e.preventDefault(); e.stopPropagation(); openInterventionFromTimeline(el, { background: false });