v2026.5.18 — Polish date custom
This commit is contained in:
@@ -2366,9 +2366,13 @@ async function writeCache(isoDate, data) {
|
||||
async function loadForDate(isoDate, opts = {}) {
|
||||
// v4.3.1 : changer de date fermait tous les popups épinglés.
|
||||
// v2026.5.17 : les popups épinglés restent maintenant ouverts entre dates,
|
||||
// avec les données qu'ils avaient au moment de l'épinglage. L'utilisateur
|
||||
// peut les fermer manuellement s'il veut.
|
||||
// avec les données qu'ils avaient au moment de l'épinglage.
|
||||
// v2026.5.18 : au changement de date, on réduit tous les popups épinglés
|
||||
// dans la taskbar du bas (l'user peut les re-agrandir au clic).
|
||||
const previousDate = state.currentDate;
|
||||
if (previousDate && previousDate !== isoDate) {
|
||||
_reduceAllPinnedPopups();
|
||||
}
|
||||
|
||||
state.currentDate = isoDate;
|
||||
document.getElementById("date-picker").value = isoDate;
|
||||
@@ -6476,35 +6480,29 @@ function pinTooltip() {
|
||||
popup.dataset.actionId = iv.actionId || "";
|
||||
popup.innerHTML = srcEl.innerHTML;
|
||||
|
||||
// v2026.5.18 : mémoriser la ref et la couleur pour le dock (pastille avec
|
||||
// couleur de catégorie + texte ref)
|
||||
popup.dataset.ref = iv.ref || "";
|
||||
popup.dataset.colorKey = (typeof deriveColorKey === "function" ? deriveColorKey(iv) : "autre") || "autre";
|
||||
|
||||
// v2026.5.17 : masquer l'icône 📌 du contenu cloné (redondante car le
|
||||
// popup a sa propre topbar avec le bouton "désépingler" 📍 explicite)
|
||||
const oldPin = popup.querySelector('.tooltip-pinbtn[data-action="pin"]');
|
||||
if (oldPin) oldPin.remove();
|
||||
|
||||
// v2026.5.17 : topbar avec 3 boutons pour un popup épinglé :
|
||||
// _ = Minimiser (popup reste flottant mais compact, juste la ref)
|
||||
// ▭ = Réduire (docké dans la taskbar du bas)
|
||||
// v2026.5.18 : swap des actions — _ réduit dans le dock, ▭ minimise flottant
|
||||
// _ = Réduire (docké dans la taskbar du bas)
|
||||
// ▭ = Minimiser (popup reste flottant mais compact, juste la ref)
|
||||
// 📍 = Désépingler (l'icône d'épingle "plantée" ; clic = retire l'épingle)
|
||||
const topbar = document.createElement("div");
|
||||
topbar.className = "pinned-popup-topbar";
|
||||
|
||||
// Bouton Minimiser
|
||||
const minBtn = document.createElement("button");
|
||||
minBtn.type = "button";
|
||||
minBtn.className = "pinned-popup-btn pinned-popup-minimize";
|
||||
minBtn.innerHTML = "_";
|
||||
minBtn.title = "Minimiser (reste flottant mais compact)";
|
||||
minBtn.addEventListener("click", (e) => {
|
||||
e.stopPropagation();
|
||||
_minimizePinnedPopup(popup);
|
||||
});
|
||||
topbar.appendChild(minBtn);
|
||||
|
||||
// Bouton Réduire
|
||||
// Bouton Réduire (icône _ )
|
||||
const reduceBtn = document.createElement("button");
|
||||
reduceBtn.type = "button";
|
||||
reduceBtn.className = "pinned-popup-btn pinned-popup-reduce";
|
||||
reduceBtn.innerHTML = "▭";
|
||||
reduceBtn.innerHTML = "_";
|
||||
reduceBtn.title = "Réduire (docké en bas de l'écran)";
|
||||
reduceBtn.addEventListener("click", (e) => {
|
||||
e.stopPropagation();
|
||||
@@ -6512,6 +6510,18 @@ function pinTooltip() {
|
||||
});
|
||||
topbar.appendChild(reduceBtn);
|
||||
|
||||
// Bouton Minimiser (icône ▭ )
|
||||
const minBtn = document.createElement("button");
|
||||
minBtn.type = "button";
|
||||
minBtn.className = "pinned-popup-btn pinned-popup-minimize";
|
||||
minBtn.innerHTML = "▭";
|
||||
minBtn.title = "Minimiser (reste flottant mais compact)";
|
||||
minBtn.addEventListener("click", (e) => {
|
||||
e.stopPropagation();
|
||||
_minimizePinnedPopup(popup);
|
||||
});
|
||||
topbar.appendChild(minBtn);
|
||||
|
||||
// Bouton Désépingler (icône épingle plantée)
|
||||
const unpinBtn = document.createElement("button");
|
||||
unpinBtn.type = "button";
|
||||
@@ -6636,6 +6646,21 @@ function _softUnpinPopup(el) {
|
||||
el.classList.remove("pinned-popup-minimized");
|
||||
el.classList.remove("pinned-popup-reduced");
|
||||
|
||||
// v2026.5.18 : retirer aussi la pastille du dock si elle existe
|
||||
if (el._linkedPill) {
|
||||
try { el._linkedPill.remove(); } catch (e) {}
|
||||
el._linkedPill = null;
|
||||
}
|
||||
// Si le dock est vide, le cacher ; mettre à jour le bouton "Fermer tous"
|
||||
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();
|
||||
}
|
||||
|
||||
// Helper qui joue l'animation de sortie puis supprime le DOM
|
||||
const animateAndRemove = () => {
|
||||
el.classList.add("unpinning");
|
||||
@@ -6704,7 +6729,7 @@ function _expandPinnedPopup(popup) {
|
||||
// Restaurer bouton Minimiser
|
||||
const minBtn = popup.querySelector(".pinned-popup-minimize");
|
||||
if (minBtn) {
|
||||
minBtn.innerHTML = "_";
|
||||
minBtn.innerHTML = "▭";
|
||||
minBtn.title = "Minimiser (reste flottant mais compact)";
|
||||
const newBtn = minBtn.cloneNode(true);
|
||||
minBtn.replaceWith(newBtn);
|
||||
@@ -6732,8 +6757,14 @@ function _reducePinnedPopup(popup) {
|
||||
if (!popup) return;
|
||||
|
||||
// Récupérer la référence pour le label de la pastille
|
||||
// v2026.5.18 : préférer le dataset.ref mémorisé à la création plutôt que
|
||||
// le textContent (qui peut contenir "—" si la ref n'était pas encore
|
||||
// disponible à l'épinglage)
|
||||
const refEl = popup.querySelector(".iv-ref-header");
|
||||
const label = refEl ? (refEl.textContent || "").trim() || "Popup" : "Popup";
|
||||
const label = popup.dataset.ref
|
||||
|| (refEl ? (refEl.textContent || "").trim() : "")
|
||||
|| "Popup";
|
||||
const colorKey = popup.dataset.colorKey || "autre";
|
||||
|
||||
// S'assurer que la taskbar du bas existe
|
||||
let dock = document.getElementById("pinned-popups-dock");
|
||||
@@ -6745,9 +6776,11 @@ function _reducePinnedPopup(popup) {
|
||||
}
|
||||
|
||||
// Créer la pastille dock
|
||||
// v2026.5.18 : le fond de la pastille prend la couleur de catégorie
|
||||
// (via la classe color-XXX déjà utilisée ailleurs dans le CSS)
|
||||
const pill = document.createElement("button");
|
||||
pill.type = "button";
|
||||
pill.className = "pinned-popup-dock-pill";
|
||||
pill.className = "pinned-popup-dock-pill color-" + colorKey;
|
||||
pill.textContent = label;
|
||||
pill.title = "Cliquer pour agrandir";
|
||||
|
||||
@@ -6772,6 +6805,53 @@ function _reducePinnedPopup(popup) {
|
||||
|
||||
dock.appendChild(pill);
|
||||
dock.classList.add("visible");
|
||||
|
||||
// v2026.5.18 : s'assurer qu'il y a un bouton "Fermer tous" si 2+ popups
|
||||
_ensureDockCloseAllBtn();
|
||||
}
|
||||
|
||||
/**
|
||||
* v2026.5.18 : réduit TOUS les popups épinglés actuellement ouverts (en mode
|
||||
* normal ou minimisé) dans la taskbar du bas. Appelé au changement de date.
|
||||
*/
|
||||
function _reduceAllPinnedPopups() {
|
||||
const popups = document.querySelectorAll(".pinned-popup:not(.pinned-popup-reduced)");
|
||||
popups.forEach(popup => {
|
||||
try { _reducePinnedPopup(popup); } catch (e) {}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* v2026.5.18 : ajoute (ou met à jour) le bouton "Fermer tous" dans le dock
|
||||
* quand au moins 2 popups épinglés existent (réduits OU affichés).
|
||||
* Le bouton est placé à droite du dock.
|
||||
*/
|
||||
function _ensureDockCloseAllBtn() {
|
||||
const dock = document.getElementById("pinned-popups-dock");
|
||||
if (!dock) return;
|
||||
const allPinned = document.querySelectorAll(".pinned-popup");
|
||||
let closeAllBtn = document.getElementById("pinned-popups-close-all");
|
||||
if (allPinned.length >= 2) {
|
||||
if (!closeAllBtn) {
|
||||
closeAllBtn = document.createElement("button");
|
||||
closeAllBtn.type = "button";
|
||||
closeAllBtn.id = "pinned-popups-close-all";
|
||||
closeAllBtn.className = "pinned-popups-close-all";
|
||||
closeAllBtn.textContent = "✕ Fermer tous";
|
||||
closeAllBtn.title = "Fermer tous les popups épinglés";
|
||||
closeAllBtn.addEventListener("click", (e) => {
|
||||
e.stopPropagation();
|
||||
closeAllPinnedPopups();
|
||||
});
|
||||
dock.appendChild(closeAllBtn);
|
||||
} else {
|
||||
// Remettre à la fin (après les pastilles éventuellement ajoutées)
|
||||
dock.appendChild(closeAllBtn);
|
||||
}
|
||||
dock.classList.add("visible");
|
||||
} else if (closeAllBtn) {
|
||||
closeAllBtn.remove();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -6786,7 +6866,7 @@ function _restorePinnedPopupFromDock(popup) {
|
||||
popup.classList.remove("pinned-popup-minimized");
|
||||
const minBtn = popup.querySelector(".pinned-popup-minimize");
|
||||
if (minBtn) {
|
||||
minBtn.innerHTML = "_";
|
||||
minBtn.innerHTML = "▭";
|
||||
minBtn.title = "Minimiser (reste flottant mais compact)";
|
||||
const newBtn = minBtn.cloneNode(true);
|
||||
minBtn.replaceWith(newBtn);
|
||||
@@ -6802,10 +6882,17 @@ function _restorePinnedPopupFromDock(popup) {
|
||||
popup._linkedPill = null;
|
||||
}
|
||||
|
||||
// Si le dock est vide, le masquer
|
||||
// Si le dock est vide (sauf le bouton "Fermer tous"), le masquer
|
||||
const dock = document.getElementById("pinned-popups-dock");
|
||||
if (dock && dock.children.length === 0) {
|
||||
dock.classList.remove("visible");
|
||||
if (dock) {
|
||||
const remainingPills = dock.querySelectorAll(".pinned-popup-dock-pill").length;
|
||||
if (remainingPills === 0) {
|
||||
dock.classList.remove("visible");
|
||||
const closeAllBtn = document.getElementById("pinned-popups-close-all");
|
||||
if (closeAllBtn) closeAllBtn.remove();
|
||||
} else {
|
||||
_ensureDockCloseAllBtn();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6869,6 +6956,13 @@ function closeAllPinnedPopups() {
|
||||
pinnedPopups.length = 0;
|
||||
// Fermer aussi les popups en état soft-unpinned qui trainent encore
|
||||
document.querySelectorAll(".pinned-popup.soft-unpinned").forEach(el => el.remove());
|
||||
// v2026.5.18 : supprimer aussi les éléments du dock
|
||||
document.querySelectorAll(".pinned-popup").forEach(el => el.remove());
|
||||
document.querySelectorAll(".pinned-popup-dock-pill").forEach(el => el.remove());
|
||||
const closeAllBtn = document.getElementById("pinned-popups-close-all");
|
||||
if (closeAllBtn) closeAllBtn.remove();
|
||||
const dock = document.getElementById("pinned-popups-dock");
|
||||
if (dock) dock.classList.remove("visible");
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user