WME Closures Toolkit

Advanced recurring closures with queue management — inspired by WME Advanced Closures & waze.tech-informatique.fr

นี่คือเวอร์ชันของสคริปต์นี้ที่โค้ดมีการอัปเดต แสดงเวอร์ชันทั้งหมด

  • v0.87.01 20-07-2026

    Fix: the partner "Source" attribution was wrongly disabled for legitimate partner editors — those added to a partner’s permissions / the partner hub, who don’t carry the global partnerUser flag. The tool now enables it from WME’s own partner list (same source as the native closure form).

    Correctif : l’attribution « Source » (partenaire) était désactivée à tort pour des éditeurs partenaires légitimes — ceux ajoutés aux permissions d’un partenaire / au partner hub, sans le flag global partnerUser. WCT l’active désormais selon la liste de partenaires de WME (même source que le formulaire natif).

  • v0.87.00 20-07-2026

    New: 🇮🇹 Italian (Italiano) interface — 8th language, requested by the Italian editing community. LTR, no layout change.

    Nouveau : 🇮🇹 interface en italien (Italiano) — 8e langue, demandée par la communauté italienne. LTR, aucun changement de mise en page.

  • v0.86.00 19-07-2026

    New: 🇮🇱 Hebrew (עברית) interface — 6th language, with full right-to-left (RTL) layout for the Israeli community. The panel, sidebar and all tables mirror correctly; LTR / English layouts are unchanged.

    Nouveau : 🇮🇱 interface en hébreu (עברית) — 6e langue, avec mise en page entièrement de droite à gauche (RTL) pour la communauté israélienne. Le panneau, la sidebar et tous les tableaux se retournent correctement ; l'affichage LTR / anglais reste inchangé.

  • v0.85.01 17-07-2026

    New — Search a whole AREA, not just the view. A new Area to search selector: current view, or 5 / 20 / 50 km around the map centre — in one to two seconds, without the map moving. This is what makes it possible to save an area and replay it later. Past the current view, street names are not loaded (they would weigh tens of MB): the Street column shows “—”, but the segment ID is complete and 🎯 takes you there.

    New — Import of the Turns CSV. What WCT exports, WCT now reads back. A turn file used to be silently ignored. Turns are re-resolved from their semantic identity (from → to through the node), so a file stays valid even if the junction has been redrawn since the export.

    New — Configure tab is 30% shorter. The direction warning and the MTE hint became tooltips (they were permanent text, read once and shown forever), and the live preview folds — its counter always stays visible. On a laptop, the queue is back above the fold.

    New — Search sections fold, like the Queue. A folded section whose filter is active carries a red ● dot: a hidden filter thinning your results without you knowing would be worse than a few pixels too many.

    New: a busy indicator on area searches, and tooltips on every dropdown and field (the previous pass only covered buttons).

    Fix — CSV quoting. A reason containing quotes, like Travaux "nocturnes", produced a broken CSV — and WCT could not read back its own export (the parser expected backslashes instead of the CSV standard). Both are fixed; the old form is still accepted.

    Fix: the 🎯 button did nothing — and said nothing — on a segment that is not loaded (typically after importing a CSV from another area). It now falls back on the coordinates the file carries.

    Fix: the 🏷 icon was unreadable in the Source section; the MTE dropdown overflowed; the panel header showed a stale version number.

    ─────────────

    Nouveau — Chercher une ZONE entière, plus seulement la vue. Un sélecteur Zone à chercher : vue courante, ou 5 / 20 / 50 km autour du centre de la carte — en une à deux secondes, sans que la carte bouge. C'est ce qui permet enfin de sauvegarder une zone pour la rejouer plus tard. Au-delà de la vue, les noms de rue ne sont pas chargés (ils pèseraient des dizaines de Mo) : la colonne Rue affiche « — », mais l'ID du segment est complet et le 🎯 vous y emmène.

    Nouveau — Import du CSV Virages. Ce que WCT exporte, WCT sait désormais le relire. Un fichier de virages était jusqu'ici ignoré en silence. Les virages sont re-résolus par leur identité sémantique (from → to via le nœud) : un fichier reste donc valable même si le carrefour a été retracé depuis l'export.

    Nouveau — L'onglet Configurer est 30 % plus court. L'avertissement sur le sens et l'indice du MTE sont devenus des infobulles (c'était du texte permanent, lu une fois et affiché pour toujours), et l'aperçu live se replie — son compteur reste toujours visible. Sur un portable, la file d'attente repasse au-dessus du pli.

    Nouveau — Les sections de la Recherche se replient, comme la File d'attente. Une section repliée dont le filtre est actif porte un point ● rouge : un filtre invisible qui écrème vos résultats sans que vous le sachiez serait pire que quelques pixels de trop.

    Nouveau : un indicateur d'attente sur les recherches par zone, et des infobulles sur toutes les listes et tous les champs (la passe précédente ne couvrait que les boutons).

    Correctif — Guillemets dans le CSV. Un motif contenant des guillemets, comme Travaux "nocturnes", produisait un CSV cassé — et WCT ne savait pas relire son propre export (le parseur attendait des antislashs au lieu du standard CSV). Les deux sont corrigés, l'ancienne forme reste acceptée.

    Correctif : le bouton 🎯 ne faisait rien — et ne le disait pas — sur un segment non chargé (typiquement après l'import d'un CSV d'une autre zone). Il se rabat désormais sur les coordonnées que le fichier transporte.

    Correctif : l'icône 🏷 était illisible dans la section Source ; la liste du MTE débordait ; l'en-tête du panneau affichait un numéro de version périmé.

  • v0.81.00 16-07-2026

    New — Turn closures. A left turn banned every night for three weeks is now set up exactly like a segment closure: same recurrence, same holidays, same queue, same MTE. New 🔀 Turns tab — select one segment, pick an extremity (node A or B), tick the turns, send to Configure. Each turn shows its arrow, destination street, angle in degrees and status: the angle matters, because one junction often offers two turns into the same street.

    New — Search finds turns too. Segments / Turns targets (both by default) and two result blocks. A red-and-white “roadworks ribbon” ring is drawn on the map around each junction found.

    New — Source (partner). Attribute a closure to a partner, exactly as WME’s native form does, and filter the search by partner. A new Source column shows each result’s attribution. Requires partner status on your account (granted by Waze, not by the script); if anything is missing, the field disables itself and states the reason.

    New — Two CSV exports instead of one: CSV AC (segments, WME Advanced Closures format) and CSV Turns (WCT format, designed to be re-imported). Search results get their own export buttons, separate from the queue.

    New: tooltips on every button, dropdown and field.

    Fix: CSV export now describes what is left — rows deleted by hand are no longer exported.

    Fix: Clear now also empties the apply log and the progress bar.

    Fix: search rings no longer stay on the map after the panel is closed.

    Fix: the panel header showed a stale version number.

    Fix: the 🏷️ icon was unreadable in the Source section.

    ─────────────

    Nouveau — Fermetures de virages. Un tourne-à-gauche interdit toutes les nuits pendant trois semaines se règle désormais exactement comme une fermeture de segment : même récurrence, mêmes jours fériés, même file, même MTE. Nouvel onglet 🔀 Virages — sélectionnez un segment, choisissez l’extrémité (nœud A ou B), cochez les virages, envoyez vers Configurer. Chaque virage affiche sa flèche, sa rue de destination, son angle en degrés et son état : l’angle compte, car un même carrefour offre souvent deux virages vers la même rue.

    Nouveau — La recherche trouve aussi les virages. Cibles Segments / Virages (les deux par défaut) et deux blocs de résultats. Un cercle « ruban de chantier » rouge et blanc est tracé sur la carte autour de chaque carrefour trouvé.

    Nouveau — Source (partenaire). Attribuez une fermeture à un partenaire, exactement comme le fait le formulaire natif de WME, et filtrez la recherche par partenaire. Une colonne Source affiche l’attribution de chaque résultat. Nécessite le statut partenaire sur votre compte (accordé par Waze, pas par le script) ; si quelque chose manque, le champ se désactive et en donne la raison.

    Nouveau — Deux exports CSV au lieu d’un : CSV AC (segments, format WME Advanced Closures) et CSV Virages (format WCT, conçu pour être réimporté). Les résultats de recherche ont leurs propres boutons d’export, distincts de la file d’attente.

    Nouveau : infobulles sur tous les boutons, listes et champs.

    Correctif : l’export CSV décrit désormais ce qui reste — les lignes supprimées à la main ne sont plus exportées.

    Correctif : Vider efface aussi le journal d’application et la barre de progression.

    Correctif : les cercles de recherche ne restent plus sur la carte après fermeture du panneau.

    Correctif : l’en-tête du panneau affichait un numéro de version périmé.

    Correctif : l’icône 🏷️ était illisible dans la section Source.

  • v0.75.00 15-07-2026

    New — Batch mode for long routes (GPX/KML/KMZ/GeoJSON). A track that exceeds one map view is automatically split into batches, shown as sub-rows under it. You handle them one by one: 🧲 selects a batch's segments (the map moves to load them, this is normal) and switches to Configure; Validate adds it to the queue, marks it configured and points to the next; Apply re-centers the map on each batch with a "Continue" pause. The WME Closures layer is enabled automatically to detect overlaps.

    New: Magnet button on a track — sweeps the map to select the segments the route runs on (for tracks that fit in a view).

    New: Per-batch permalink (🔗) to save/share a selection; per-track CSV export in WME Advanced Closures format.

    New: CSV import safeguard — confirmation prompt beyond a large number of segments.

    Fix: the floating button stays the last native button (no more swap with the share-location button); track table column alignment; end date follows start date; long toasts wrap; sweep progress and Stop pinned at the bottom.



    Nouveau — Mode « lots » pour les longs tracés (GPX/KML/KMZ/GeoJSON). Un tracé qui dépasse une vue est automatiquement découpé en lots, affichés en sous-lignes sous lui. On les traite un par un : 🧲 sélectionne les segments d'un lot (la carte se déplace pour les charger, c'est normal) et bascule sur Configurer ; Valider l'ajoute à la file, le marque configuré et pointe le suivant ; Appliquer recadre la carte sur chaque lot avec une pause « Continuer ». Le calque Fermetures de WME s'active automatiquement pour détecter les chevauchements.

    Nouveau : Bouton aimant sur un tracé — balaie la carte pour sélectionner les segments empruntés (pour les tracés qui tiennent dans une vue).

    Nouveau : Permalien par lot (🔗) pour garder/partager une sélection ; export CSV par tracé au format WME Advanced Closures.

    Nouveau : Garde-fou à l'import CSV — confirmation au-delà d'un grand nombre de segments.

    Correctif : le bouton flottant reste le dernier bouton natif (plus d'inversion avec le bouton de partage) ; alignement du tableau des tracés ; la date de fin suit la date de début ; les messages longs passent à la ligne ; progression et Stop du balayage figés en bas.

  • v0.73.00 14-07-2026

    New: Spanish, Brazilian Portuguese and European Portuguese interfaces. With French, English and German, the script now speaks 6 languages — panel, Help tab and file parser messages.

    New: language selector in the WME sidebar. Leave it on Automatic to follow the WME language, or force any of the 6. The choice is saved.

    New: switching language applies immediately — your queue, presets, loaded tracks and the form you are filling in are all preserved.

    Fix: pt-BR and pt-PT are two distinct translations, not aliases (bloqueio / corte, arquivo / ficheiro…).



    Nouveau : interfaces en espagnol, portugais du Brésil et portugais du Portugal. Avec le français, l'anglais et l'allemand, le script parle désormais 6 langues — panneau, onglet Aide et messages des parsers de fichiers.

    Nouveau : sélecteur de langue dans la barre latérale WME. Laissez-le sur Automatique pour suivre la langue de WME, ou forcez l'une des 6. Le choix est enregistré.

    Nouveau : le changement de langue s'applique immédiatement — votre file d'attente, vos préréglages, vos tracés chargés et le formulaire en cours de saisie sont conservés.

    Correctif : pt-BR et pt-PT sont deux traductions distinctes, pas des alias (bloqueio / corte, arquivo / ficheiro…).

  • v0.72.00 14-07-2026

    New: German (DE) interface — full translation of the panel, the Help tab and the file parser messages. Applied automatically when WME runs in German.

    New: the Escape key aborts an apply in progress.

    Fix: the Stop button gave no visible feedback, and a click during map loading could be ignored for up to 10 s (letting one more closure through). It now reacts immediately.

    Fix: the progress bar and the Stop button are pinned to the bottom of the panel — Stop stayed below the fold on small screens.

    Fix: the closure direction was always shown as "Double sens" (French) whatever the interface language.



    Nouveau : interface en allemand (DE) — traduction complète du panneau, de l'onglet Aide et des messages des parsers de fichiers. Appliquée automatiquement quand WME est en allemand.

    Nouveau : la touche Échap interrompt une application en cours.

    Correctif : le bouton Stop ne donnait aucun retour visible, et un clic pendant le chargement de la carte pouvait rester sans effet jusqu'à 10 s (en laissant passer une fermeture de plus). Il réagit désormais immédiatement.

    Correctif : la barre de progression et le bouton Stop sont ancrés en bas du panneau — le Stop restait sous le pli sur petit écran.

    Correctif : le sens de fermeture s'affichait toujours « Double sens » (en français) quelle que soit la langue de l'interface.

  • v0.71.02 07-07-2026

    New: 📱 Compact / responsive mode — the panel adapts automatically to small screens (denser layout, single-column reflow on narrow widths, smaller base font), so it no longer overflows the viewport on laptops
    New: "Validate and add to queue" turned into a fixed footer — always visible without scrolling, and hidden on tabs where it does not apply
    Fix: FAB (floating button) drifting after a browser zoom / resolution change — now docked as the 4th native WME overlay button, staying anchored and following zoom automatically
    Fix: FAB staying above the Layers panel — docked in the native button container, it now goes behind it like the native buttons



    Nouveau : 📱 Mode compact / responsive — le panneau s'adapte automatiquement aux petits écrans (mise en page dense, passage en une colonne si la fenêtre est étroite, police réduite) et ne déborde plus sur les portables
    Nouveau : « Valider et ajouter à la file » devient un pied fixe — toujours visible sans défiler, masqué sur les onglets où il ne s'applique pas
    Correctif : bouton flottant (FAB) qui dérivait au changement de zoom / résolution — désormais ancré comme 4e bouton natif WME, il reste en place et suit le zoom
    Correctif : FAB qui restait au-dessus du panneau des Calques — ancré dans le container natif, il passe désormais derrière comme les boutons natifs

  • v0.70.01 02-07-2026

    Changelog

    v0.70.01

    • New: + Public holidays mode — adds public holidays in the range on top of selected weekdays (union), as a complement to the existing "Except" and "Only" modes
    • Fix: Progress bar stuck at 14% (or any fraction) when applying a batch with multiple segments — counter now increments by the actual number of segments per operation
    • Fix: FAB invisible or off-screen after a browser zoom change — saved position is now clamped to viewport bounds on load and reclamped dynamically on resize
    • Fix: Public holiday filter info message persisted after unchecking the filter

    v0.70.00

    • New: 🔍 Recherche tab — multi-criteria search in existing closures (status, time window, description keyword, MTE name with AND/OR toggle), sortable results table, automatic segment selection, per-row map centering, "Switch to Configure" button
    • Fix: Map centering now uses sdk.Map.getLonLatFromMapPixel (no manual Web Mercator math)
    • Fix: Segment filtering validates each ID via getSegById() before use


    Changelog

    v0.70.01

    • Nouveau : Mode + Jours fériés — ajoute les jours fériés de la plage en supplément des jours sélectionnés (union), en complément des modes « Sauf » et « Uniquement » existants
    • Correctif : Barre de progression bloquée à 14% (ou toute fraction) lors de l'application d'un lot avec plusieurs segments — le compteur incrémente désormais du nombre réel de segments par opération
    • Correctif : FAB invisible ou hors écran après un changement de zoom navigateur — la position sauvegardée est maintenant clampée aux limites du viewport au chargement et recalculée dynamiquement au redimensionnement
    • Correctif : Le message d'information du filtre jours fériés persistait après avoir décoché le filtre

    v0.70.00

    • Nouveau : Onglet 🔍 Recherche — recherche multi-critères dans les fermetures existantes (statut, fenêtre temporelle, mot-clé description, nom MTE avec bascule ET/OU), tableau triable, sélection automatique des segments, centrage carte par ligne, bouton « Basculer vers Configurer »
    • Correctif : Centrage carte utilise désormais sdk.Map.getLonLatFromMapPixel (plus de calcul Web Mercator manuel)
    • Correctif : Le filtrage des segments valide chaque ID via getSegById() avant utilisation
  • v0.70.00 24-06-2026

    🔍 v0.70.00 — New: Closure Search tab

    🔍 New features

    • Closure Search tab — a new 🔍 Recherche tab finds existing closures loaded in the current map view and selects the matching segments in one click. Useful to gather all closures of an event, or to audit what is active over a period.
    • Multi-criteria filtering — filter by closure status (Active, Pending, Suspended, Finished — with an "All" master checkbox), by a time window on closure start and end dates (optional bounds, combined as AND), by description keyword, and by MTE event name (case-insensitive "like" search). A compact AND / OR toggle combines the description and MTE keyword fields.
    • Results table — sortable columns showing segment ID, street name, closure count, status badges, closure description(s), and MTE name. Segments carrying several closures display all distinct statuses and descriptions stacked. Click any column header to sort (ascending, then descending).
    • Map focus 🎯 — each result row centers the map on its segment, positioned in the visible area to the left of the overlay, at a fixed readable zoom.
    • Switch to Configure — a button carries the current selection straight to the Configure tab to chain closure creation.

    🔧 Fixes & robustness

    • Map centering corrected everywhere — the 🎯 focus action now places the segment in the free visible area (left of the overlay) instead of behind it. The same offset compensation is applied to every centering action in WCT, computed from the SDK's pixel/coordinate conversion (no projection approximation).
    • Out-of-view segments excluded — closures referencing a segment absent from the loaded data model are skipped, keeping results and selection consistent with the current view and preventing selection errors.
    • HTML escaping — all segment, description and event names shown in the results table are escaped (XSS hardening).

    ℹ️ Notes & limits

    • Only closures loaded in the current view are analyzed — zoom out or pan to widen the scope.
    • When an MTE event is not loaded in memory, its ID is shown instead of its name (in orange, with an explanatory tooltip). Open the WME Events tab to load names, then run the search again.
    • Closure deletion is not available — it is not exposed by the WME SDK.


    🔍 v0.70.00 — Nouveau : onglet Recherche de fermetures

    🔍 Nouveautés

    • Onglet Recherche de fermetures — un nouvel onglet 🔍 Recherche retrouve les fermetures existantes chargées dans la vue courante et sélectionne les segments correspondants en un clic. Utile pour regrouper toutes les fermetures d'un événement, ou vérifier ce qui est actif sur une période.
    • Filtrage multi-critères — filtre par état de fermeture (En cours, En attente, Suspendue, Terminée — avec une case « Tous » maître), par fenêtre temporelle sur les dates de début et de fin (bornes optionnelles, cumulées en ET), par mot-clé de description, et par nom d'événement MTE (recherche « like » insensible à la casse). Un toggle compact ET / OU combine les champs description et MTE.
    • Tableau de résultats — colonnes triables affichant l'ID du segment, le nom de rue, le nombre de fermetures, les badges d'état, la ou les descriptions, et le nom du MTE. Les segments portant plusieurs fermetures affichent tous leurs états et descriptions distincts empilés. Cliquez sur un en-tête pour trier (croissant puis décroissant).
    • Centrage 🎯 — chaque ligne centre la carte sur son segment, positionné dans la zone visible à gauche de l'overlay, à un niveau de zoom lisible et fixe.
    • Basculer vers Configurer — un bouton emporte la sélection courante directement dans l'onglet Configurer pour enchaîner la création de fermetures.

    🔧 Correctifs & robustesse

    • Centrage de la carte corrigé partout — le centrage 🎯 place désormais le segment dans la zone visible libre (à gauche de l'overlay) et non plus derrière lui. La même compensation est appliquée à tous les centrages de WCT, calculée via la conversion pixel/coordonnées du SDK (aucune approximation de projection).
    • Segments hors vue exclus — les fermetures référençant un segment absent du data model chargé sont ignorées, ce qui garde résultats et sélection cohérents avec la vue courante et évite les erreurs de sélection.
    • Échappement HTML — tous les noms de segment, descriptions et événements affichés dans le tableau sont échappés (durcissement XSS).

    ℹ️ Notes & limites

    • Seules les fermetures chargées dans la vue courante sont analysées — dézoomez ou recadrez pour élargir le périmètre.
    • Quand un événement MTE n'est pas chargé en mémoire, son identifiant s'affiche à la place du nom (en orange, avec une infobulle explicative). Ouvrez l'onglet Événements de WME pour charger les noms, puis relancez la recherche.
    • La suppression de fermetures n'est pas disponible — elle n'est pas exposée par le SDK WME.
  • v0.68.00 23-06-2026

    v0.68.00 — 2026-06-23

    🆕 New features

    • Live preview — the configuration panel now shows all scheduled closure occurrences in real time (date, time, direction), before adding to the queue. Updates instantly as you change dates, days, duration or direction. Capped at 200 rows with a "… and N more" indicator.
    • Compact badge in queue card header — each batch card now displays a N×M seg badge: N = net occurrences, M = net segments (excluding deleted rows, direction conflicts, and unreachable segments). Badge turns orange or red when segments are problematic.
    • Cards collapsed by default — new checkbox in the sidebar ("Queue cards collapsed by default") to start every new batch card folded. State is persisted per card and survives re-renders.
    • Tile build freshness check — WCT now detects segments edited after the last Waze tile build (via the official RSS feed). These are flagged 🕒 in the queue card with an explanatory tooltip. They are excluded from the apply step to avoid silent rejections.
    • Missing-from-data-model detection — segments that return null from the WME data model (typically brand-new segments not yet tile-propagated) are flagged ⚠️ and excluded from apply.

    🔧 Fixes

    • Apply stuck at X%getReversedSegments() was not wrapped in a try/catch inside addClosure(). A DataModelNotFoundError on any segment would silently abort the entire remaining queue. Now gracefully caught with fallback to empty array.
    • Toast notification repositioned — moved from bottom (obscuring the queue) to top of the overlay.
    • Toast message accuracy — the post-validate toast now reports the count of valid segments only, with a warning when some were skipped.
    • Card collapse state persisted — manually expanded/collapsed cards no longer revert on any renderQueue() call (e.g. after deleting a row).


    v0.68.00 — 23/06/2026

    🆕 Nouveautés

    • Live preview — le panneau de configuration affiche désormais en temps réel la liste des fermetures planifiées (date, heure, sens), avant ajout à la file. Se met à jour instantanément à chaque modification des dates, jours, durée ou sens. Plafonné à 200 lignes avec indicateur « … et N autre(s) ».
    • Badge compact dans l'en-tête de carte — chaque carte de lot affiche un badge N×M seg : N = occurrences nettes, M = segments nets (hors lignes supprimées, conflits de sens, segments inaccessibles). Le badge passe en orange ou rouge si des segments sont problématiques.
    • Cartes pliées par défaut — nouvelle case à cocher dans le panel (« Cartes de la file pliées par défaut ») pour démarrer chaque nouvelle carte de lot repliée. L'état plié/déplié est mémorisé par carte et survit aux re-renders.
    • Vérification fraîcheur des tiles — WCT détecte désormais les segments modifiés après le dernier assemblage de tiles Waze (via le flux RSS officiel). Ces segments sont signalés 🕒 dans la carte de file avec infobulle explicative, et exclus de l'application pour éviter des rejets silencieux.
    • Détection segments absents du data model — les segments qui retournent null depuis le data model WME (typiquement des segments tout récents, pas encore propagés) sont signalés ⚠️ et exclus de l'application.

    🔧 Correctifs

    • Blocage à X% lors de l'applicationgetReversedSegments() n'était pas protégé par un try/catch dans addClosure(). Une DataModelNotFoundError sur n'importe quel segment abandonnait silencieusement toute la file restante. Désormais rattrapé avec fallback sur tableau vide.
    • Toast repositionné — déplacé du bas de l'overlay (masquait la file) vers le haut.
    • Message toast plus précis — le toast post-validation indique désormais le nombre de segments valides uniquement, avec avertissement si certains ont été ignorés.
    • État plié/déplié des cartes préservé — les cartes dépliées manuellement ne se replient plus à chaque appel de renderQueue() (ex. après suppression d'une ligne).
  • v0.65.00 22-06-2026

    Changelog

    v0.65.00

    • New — Route coverage check (Tracks tab): click 📐 on an imported track file (button visible only when WME segments are selected). WCT identifies segments the route runs on that are absent from your selection and highlights them in dashed magenta on the map, following the actual road geometry. Jump to each unhandled zone with 🎯. Coverage % is weighted by segment length and never shows a false 100% when gaps remain. Points outside the loaded area are excluded from the score with an explicit note.
    • Fix — XSS hardening: all external data rendered in the UI (file names, track names, preset labels, error messages) is now systematically HTML-escaped.
    • Fix — Defensive GeoJSON parsing: a malformed feature or coordinate array no longer aborts the import of the entire file; the bad entry is skipped and reported.
    • Fix — Public holiday cache: network errors and timeouts from date.nager.at are no longer stored; a failed request will be retried on next use.


    v0.65.00

    • Nouveau — Vérification de couverture (onglet Tracés) : cliquez sur 📐 sur la ligne d'un fichier importé (bouton visible uniquement si des segments WME sont sélectionnés). WCT identifie les segments empruntés par le parcours absents de votre sélection et les surligne en magenta pointillé sur la carte, en suivant la géométrie réelle des routes. Saut vers chaque zone non traitée via 🎯. La couverture en % est pondérée par longueur et n'affiche jamais un faux 100 % si des trous subsistent. Les points hors zone chargée sont exclus du calcul avec une mention explicite.
    • Correctif — Durcissement XSS : toutes les données externes affichées dans l'interface (noms de fichiers, noms de tracés, libellés de préréglages, messages d'erreur) sont désormais systématiquement échappées en HTML.
    • Correctif — Parsing GeoJSON défensif : une feature ou un tableau de coordonnées malformé ne provoque plus l'abandon de l'import du fichier entier ; l'entrée incorrecte est ignorée et signalée.
    • Correctif — Cache jours fériés : les erreurs réseau et timeouts de date.nager.at ne sont plus mis en cache ; une requête échouée sera relancée à la prochaine utilisation.
  • v0.61.00 18-06-2026

    Changelog

    v0.61.00 — 2026-06-18

    • Comfort mode permanently removed (radio button, i18n keys, help texts)

    v0.60.05

    • Fix: CSV import brokenparseCSV, CSV_RE and CsvClosure were called but not defined since v0.60.03; CSV import was non-functional. Definitions restored.

    v0.60.04

    • New: inline batch label editing — ✏️ button on each queue batch header; confirm with Enter or blur, cancel with Escape
    • Change: batch label now shows only the closure reason, without appending segment names
    • Change: CSV batch label simplified to the closure reason only

    v0.60.03

    • Change: "Heure de fin" label shortened to "Heure Fin" in the Configure tab
    • Fix: dead i18n key noSeg removed
    • Change: queue help — checkbox row documentation replaced with 🗑 individual row delete description
    • New: Tracks help tab completed with Shapefile ZIP documentation (FR + EN): ZIP requirements, .prj reprojection note, WGS84 fallback
    • New: Type column documented in the Tracks help tab
    • New: _pe() bilingual helper — all parser error messages (GPX, KML, KMZ, GeoJSON, Shapefile) now displayed in the user's language in the ⚠️ tooltip


    Changelog

    v0.61.00 — 2026-06-18

    • Mode Confort supprimé définitivement (bouton radio, clés i18n, textes d'aide)

    v0.60.05

    • Correctif : import CSV non fonctionnelparseCSV, CSV_RE et CsvClosure étaient appelées mais non définies depuis v0.60.03 ; l'import CSV était cassé. Définitions rétablies.

    v0.60.04

    • Nouveau : édition inline du libellé de lot — bouton ✏️ sur chaque en-tête de lot en file d'attente ; confirmation par Entrée ou clic ailleurs, annulation par Échap
    • Changement : le libellé de lot n'affiche plus les noms de segments, uniquement la raison de fermeture
    • Changement : libellé des lots CSV simplifié (raison uniquement)

    v0.60.03

    • Changement : libellé "Heure de fin" raccourci en "Heure Fin" dans l'onglet Configurer
    • Correctif : clé i18n morte noSeg supprimée
    • Changement : aide file d'attente — documentation cases à cocher remplacée par la description du bouton 🗑 suppression individuelle
    • Nouveau : onglet aide Tracés complété avec la documentation Shapefile ZIP (FR + EN) : contenu du ZIP requis, note reprojection .prj, fallback WGS84
    • Nouveau : colonne Type documentée dans l'aide Tracés
    • Nouveau : helper _pe() bilingue — tous les messages d'erreur des parsers (GPX, KML, KMZ, GeoJSON, Shapefile) s'affichent désormais dans la langue de l'utilisateur dans l'infobulle ⚠️
  • v0.60.02 18-06-2026

    v0.60.02

    • Fix: Type column header now left-aligned (matching cell content)
    • Fix: all parser error messages are now bilingual (FR/EN) — displayed in the user's language in the ⚠️ tooltip
    • New: column tooltips on Heure/Time, Type, pts, and the expand/collapse chevron
    • Help (Tracés tab): added Shapefile documentation (FR + EN), Type column explanation, .prj reprojection note

    v0.60.01

    • Fix: Type column header left-aligned

    v0.60.00

    • New: KML support — one child row per LineString Placemark, namespace auto-detection (OGC 2.2 and Google 2.1)
    • New: KMZ support — decompression via fflate, delegates to KML parser
    • New: GeoJSON support — LineString and MultiLineString features; preserves name from properties
    • New: Shapefile (ZIP) support — automatic reprojection (Lambert 93, UTM, WGS84…) via proj4; handles missing .prj gracefully
    • New: Type column in the track table (GPX / KML / KMZ / GeoJSON / SHP)
    • New: file/track hierarchy — one parent row per file (with expand/collapse ▶/▼), child rows per track or feature
    • New: file-level color swatch applies one color to all child tracks
    • Tab renamed from 🖇 GPX to 🗺️ Tracés / Tracks
    • CDN dependencies added: fflate 0.8.2, proj4 2.11.0, shpjs 4.0.4


    v0.60.02

    • Correction : en-tête de la colonne Type aligné à gauche (cohérent avec les cellules)
    • Correction : tous les messages d'erreur des parsers sont maintenant bilingues (FR/EN) — affichés dans la langue de l'utilisateur dans l'infobulle ⚠️
    • Nouveau : infobulles sur les en-têtes de colonnes Heure, Type, pts et le chevron dépli/repli
    • Aide (onglet Tracés) : ajout de la documentation Shapefile (FR + EN), explication de la colonne Type, note sur la reprojection .prj

    v0.60.01

    • Correction : en-tête de la colonne Type aligné à gauche

    v0.60.00

    • Nouveau : support KML — une ligne enfant par Placemark LineString, détection automatique du namespace (OGC 2.2 et Google 2.1)
    • Nouveau : support KMZ — décompression via fflate, délègue au parser KML
    • Nouveau : support GeoJSON — features LineString et MultiLineString ; préservation du nom depuis les propriétés
    • Nouveau : support Shapefile (ZIP) — reprojection automatique (Lambert 93, UTM, WGS84…) via proj4 ; gestion gracieuse de l'absence de .prj
    • Nouveau : colonne Type dans le tableau des tracés (GPX / KML / KMZ / GeoJSON / SHP)
    • Nouveau : hiérarchie fichier/tracés — une ligne parente par fichier (avec dépli/repli ▶/▼), des lignes enfants par track ou feature
    • Nouveau : swatch couleur fichier applique une couleur à tous les tracés enfants
    • Onglet renommé de 🖇 GPX en 🗺️ Tracés / Tracks
    • Dépendances CDN ajoutées : fflate 0.8.2, proj4 2.11.0, shpjs 4.0.4
  • v0.58.00 15-06-2026
  • v0.56.08 12-06-2026

    📦 Changelog

    v0.56.08

    • 🔧 Fix two-way closures on reversed segments — when a segment is reversed in WME (physical direction inverted), applying a two-way closure only created the A→B direction. Root cause: the direction was incorrectly flipped from TWO to AtoB for reversed segments, preventing the B→A call from being made. Fixed by only flipping direction for one-way modes (AtoBBtoA) — TWO is now preserved on reversed segments, letting both isForward:true and isForward:false calls execute.
    • 🔧 Each direction call (isForward:true / isForward:false) now has its own try/catch — an error on one direction no longer silently prevents the other from being attempted.
    • 🔧 Fix CSV export timezone — exported times were in UTC instead of local time, causing a double offset on re-import. Fixed by reading timestamps with getHours() instead of getUTCHours().


    v0.56.08

    • 🔧 Correction fermetures double sens sur segments inversés — sur les segments inversés dans WME (direction physique retournée), l'application d'une fermeture double sens ne créait que la direction A→B. Cause : la direction était incorrectement basculée de TWO vers AtoB pour ces segments, empêchant l'appel B→A. Corrigé en ne basculant la direction que pour les modes sens unique (AtoBBtoA) — TWO est désormais préservé sur les segments inversés, permettant aux deux appels isForward:true et isForward:false de s'exécuter.
    • 🔧 Chaque appel directionnel (isForward:true / isForward:false) a désormais son propre try/catch — une erreur sur une direction ne bloque plus silencieusement l'autre.
    • 🔧 Correction export CSV fuseau horaire — les heures exportées étaient en UTC au lieu de l'heure locale, causant un double décalage à la réimportation. Corrigé en lisant les timestamps avec getHours() au lieu de getUTCHours().
  • v0.56.02 11-06-2026

    📦 Changelog

    v0.56.02

    • 🔧 Fix timezone offset — definitive fix — closures were still created 2 hours early in UTC+ timezones (e.g. France). Root cause: the SDK expects a timestamp whose numeric value represents local time in milliseconds, not a standard UTC timestamp. Fixed by using new Date(y,m,d,h,min) (DST-safe local constructor) to resolve the correct local time, then repackaging the result with Date.UTC() using the local components — so valueOf() returns exactly the expected numeric value regardless of timezone.

    v0.56.01

    • 🔧 Fix two-way closures on two-way segments — WME only created the A→B direction. Fixed by calling addClosure once with isForward:true for isTwoWay segments — WME handles both directions natively. One-way segment behavior unchanged.


    v0.56.02

    • 🔧 Correction décalage horaire — correctif définitif — les fermetures étaient toujours créées avec 2h d'avance sur les fuseaux UTC+ (ex. France). Cause : le SDK attend un timestamp dont la valeur numérique représente l'heure locale en millisecondes, et non un timestamp UTC standard. Corrigé en utilisant new Date(y,m,d,h,min) (constructeur local DST-safe) pour résoudre l'heure locale correcte, puis en repackageant le résultat avec Date.UTC() en utilisant les composantes locales — valueOf() retourne ainsi exactement la valeur numérique attendue quel que soit le fuseau horaire.

    v0.56.01

    • 🔧 Correction fermetures double sens sur segments bidirectionnels — WME ne créait que la direction A→B. Corrigé en appelant addClosure une seule fois avec isForward:true pour les segments isTwoWay — WME gère nativement les deux sens. Comportement inchangé sur les segments sens unique.
  • v0.56 09-06-2026

    📦 Changelog

    v0.56

    • 🔧 Fix regression display times (introduced in v0.54) — closures were displayed with UTC times instead of local times in the queue and application log. Root cause: formatDateDisplay() and dateToLocalStr() were reading timestamps with getUTCHours() after v0.54 removed the tzOffset compensation. Timestamps are now built via new Date(y,m,d,h,min) (local constructor) and must be read with getHours(). Export CSV (dateToUTCStr) remains unchanged in UTC.

    v0.55

    • 🆕 Configurable date format — choose between DD/MM/YYYY (Europe, default), MM/DD/YYYY (USA) or YYYY-MM-DD (ISO) from the Scripts sidebar tab. Auto-detected from navigator.language (en-US → MM/DD, all others → DD/MM). Applies in real time to the queue and application log. Preference saved across sessions.
    • 🆕 FAB auto-hide on layer panel — the 🚧 button automatically hides when the WME Map Layers panel is open, and reappears when it closes.
    • 🆕 Sidebar / Preferences help section — new accordion section in the Help tab documenting all sidebar options (enable/disable, display mode, date format, reset FAB position).
    • 🔧 Display mode order in sidebar: Normal first, Windows 95 second.


    v0.56

    • 🔧 Correction régression affichage des heures (introduite en v0.54) — les fermetures s'affichaient avec les heures UTC au lieu des heures locales dans la file d'attente et le log d'application. Cause : formatDateDisplay() et dateToLocalStr() lisaient les timestamps avec getUTCHours() après la suppression de la compensation tzOffset en v0.54. Les timestamps sont construits via new Date(y,m,d,h,min) (constructeur local) et doivent être lus avec getHours(). L'export CSV (dateToUTCStr) reste inchangé en UTC.

    v0.55

    • 🆕 Format de date configurable — choisissez entre JJ/MM/AAAA (Europe, défaut), MM/JJ/AAAA (USA) ou AAAA-MM-JJ (ISO) depuis l'onglet Scripts. Détecté automatiquement via navigator.language (en-US → MM/JJ, tout le reste → JJ/MM). S'applique en temps réel dans la file d'attente et le log. Préférence sauvegardée.
    • 🆕 Masquage automatique du FAB — le bouton 🚧 se masque automatiquement à l'ouverture du panneau Calques WME et réapparaît à sa fermeture.
    • 🆕 Section Sidebar / Préférences dans l'aide — nouvelle section accordéon dans l'onglet Aide documentant toutes les options de la sidebar (activation, mode d'affichage, format des dates, réinitialisation du FAB).
    • 🔧 Ordre des modes d'affichage dans la sidebar : Normal en premier, Windows 95 en second.
  • v0.54 09-06-2026

    📦 Changelog

    v0.54

    • 🔧 Fix timezone offset (J-1 bug) — closures were created one day early on UTC- timezones (e.g. Uruguay, Americas). Root cause: redundant tzOffset compensation in makeDSTSafeDate(). The local date constructor new Date(y,m,d,h,min) is already DST-safe and requires no further adjustment. The compensation was correct for UTC+ zones but reversed the offset for UTC- zones. Fixed by removing the compensation entirely.
    • 🆕 Stop button — a ⏹ Stop button now appears next to the progress bar during application. Clicking it interrupts the queue after the current closure completes. A dedicated toast confirms the interruption with the count of applied and failed closures.


    v0.54

    • 🔧 Correction décalage horaire (bug J-1) — les fermetures étaient créées un jour trop tôt sur les fuseaux UTC- (ex. Uruguay, Amériques). Cause : compensation tzOffset redondante dans makeDSTSafeDate(). Le constructeur de date locale new Date(y,m,d,h,min) est déjà DST-safe et ne nécessite aucun ajustement supplémentaire. La compensation était correcte pour les fuseaux UTC+ mais inversait le décalage pour les fuseaux UTC-. Corrigé en supprimant entièrement la compensation.
    • 🆕 Bouton Stop — un bouton ⏹ Stop apparaît désormais à côté de la barre de progression pendant l'application. Un clic interrompt la file après la fermeture en cours. Un toast dédié confirme l'interruption avec le décompte des fermetures appliquées et des échecs.
  • v0.53 08-06-2026

    📦 Changelog

    v0.53

    • 🆕 Emoji picker — button next to the description field. Opens a curated palette of 54 emojis across 9 themes (roadworks, signage, alerts, sports, weather, events, protests, wildlife, transport). Inserted at cursor position; closes automatically after selection. Appearance adapts to Normal / Windows 95 mode.
    • 🔧 Overlay max-height reduced in Normal mode (calc(100vh - 110px)) to avoid overlapping the WME toolbar.

    v0.52

    • 🆕 Display modes — Normal and Windows 95. Switch from the Scripts sidebar tab. Windows 95 mode: flat borders, square corners, classic grey palette (#c0c0c0), navy header (#000080), minimal spacing. Comfort mode planned (Work in progress).
    • 🔧 All font sizes migrated to em relative to --wct-fs-base — scaling applies consistently across the entire overlay.
    • 🔧 Removed redundant CSS densification block; layout values unified.

    v0.51.03

    • 🔧 Fixed closure loop aborting on first segment error — remaining segments now continue processing.
    • 🔧 Fixed TWO direction mode on mixed one-way/two-way selections — each segment now receives only the directions it supports (isTwoWay, isAtoB, isBtoA).


    v0.53

    • 🆕 Sélecteur d'émojis — bouton à droite du champ description. Palette de 54 émojis en 9 thèmes (travaux, signalisation, alertes, sports, météo, événements, manifestations, faune, transport). Insertion à la position du curseur ; fermeture automatique après sélection. Apparence adaptée au mode Normal / Windows 95.
    • 🔧 max-height de l'overlay réduit en mode Normal (calc(100vh - 110px)) pour éviter le chevauchement avec la barre d'outils WME.

    v0.52

    • 🆕 Modes d'affichage — Normal et Windows 95. Bascule depuis l'onglet Scripts. Mode Windows 95 : bordures plates, coins carrés, palette gris classique (#c0c0c0), header bleu marine (#000080), espacement minimal. Mode Confort prévu (Work in progress).
    • 🔧 Toutes les tailles de police migrées en em relativement à --wct-fs-base — le changement de mode s'applique uniformément à l'ensemble de l'overlay.
    • 🔧 Suppression du bloc CSS de densification redondant ; valeurs de mise en page unifiées.

    v0.51.03

    • 🔧 Correction : la boucle de création ne s'interrompait plus sur la première erreur de segment — les segments suivants continuent d'être traités.
    • 🔧 Correction : mode direction DOUBLE sur sélections mixtes — chaque segment reçoit uniquement les directions qu'il supporte (isTwoWay, isAtoB, isBtoA).
  • v0.52 08-06-2026

    📦 Changelog

    v0.52

    • 🆕 Display modes — Normal and Windows 95. Switch from the Scripts sidebar tab. Windows 95 mode features flat borders, square corners, zero border-radius, classic grey palette (#c0c0c0), navy header (#000080), and significantly reduced padding and element heights for high-density usage. A Comfort mode is planned (shown as Work in progress).
    • 🔧 All font sizes migrated to em relative to --wct-fs-base CSS variable — display mode scaling now applies consistently across the entire overlay.
    • 🔧 Removed redundant CSS densification block; layout values now unified.

    v0.51.03

    • 🔧 Fixed closure loop aborting on first segment error — remaining segments in the batch now continue processing.
    • 🔧 Fixed TWO direction mode on mixed one-way/two-way selections — each segment now receives only the directions it actually supports (isTwoWay, isAtoB, isBtoA).


    v0.52

    • 🆕 Modes d'affichage — Normal et Windows 95. Basculez depuis l'onglet Scripts. Le mode Windows 95 adopte des bordures plates, des coins carrés, zéro border-radius, la palette gris classique (#c0c0c0), un header bleu marine (#000080), et des paddings et hauteurs d'éléments fortement réduits pour un usage haute densité. Un mode Confort est prévu (affiché Work in progress).
    • 🔧 Toutes les tailles de police migrées en em relativement à la variable CSS --wct-fs-base — le changement de mode s'applique désormais uniformément à l'ensemble de l'overlay.
    • 🔧 Suppression du bloc CSS de densification redondant ; les valeurs de mise en page sont désormais unifiées.

    v0.51.03

    • 🔧 Correction : la boucle de création ne s'interrompait plus sur la première erreur de segment — les segments suivants du lot continuent d'être traités.
    • 🔧 Correction : mode direction DOUBLE sur sélections mixtes sens unique/double sens — chaque segment reçoit désormais uniquement les directions qu'il supporte réellement (isTwoWay, isAtoB, isBtoA).
  • v0.51.03 08-06-2026

    v0.51.03 — 2026-06-08

    • 🔧 Fixed incomplete batch application — an error on one segment no longer aborts the entire loop; remaining segments are always processed / Correction application incomplète — une erreur sur un segment n'interrompt plus la boucle ; les segments suivants sont toujours traités
    • 🔧 Fixed mixed-direction selections (Both ways) — in Both ways mode, each segment is now closed only in its authorised direction(s). One-way segments in a mixed selection receive a closure in their own direction instead of triggering a silent error / Correction sélections mixtes (Double sens) — en mode Double sens, chaque segment est fermé uniquement dans le(s) sens qu'il autorise. Les segments à sens unique dans une sélection mixte reçoivent une fermeture dans leur propre sens au lieu de générer une erreur silencieuse
  • v0.51.02 07-06-2026

    v0.51.02 — 2026-06-07

    • 🔧 Fixed closure time offset — closures were created 2 hours early (UTC instead of local time). All modes affected: Each day, Repeat, and CSV import. / Correction du décalage horaire — les fermetures étaient créées 2 heures trop tôt (UTC au lieu de l'heure locale). Tous les modes concernés : Chaque jour, Répéter et import CSV.
  • v0.51.01 07-06-2026

    v0.51.1 — 2026-06-07

    • 🔧 Fixed toggle button (duration/end time) displaying text label instead of the knob after loading a preset
    • 🔧 Correctif bouton toggle durée/heure de fin affichant un texte au lieu du curseur après chargement d'un préréglage
  • v0.51 07-06-2026

    v0.51 — 2026-06-07

    • 🆕 MTE picker — replaced manual ID text field with a dropdown populated from WME's Events tab; ↻ button to refresh the list on demand
    • 🆕 Draggable FAB button — 🚧 button is now a free-floating fixed element, independent of WME's native button bar; position saved in localStorage; Reset button in Scripts tab
    • 🆕 Sélecteur MTE — champ texte ID remplacé par une liste déroulante alimentée depuis l'onglet Événements WME ; bouton ↻ pour actualiser à la demande
    • 🆕 Bouton 🚧 déplaçable — élément fixe indépendant de la barre native WME ; position mémorisée en localStorage ; bouton Réinitialiser dans l'onglet Scripts

    v0.50 — 2026-06-07

    • 🔧 FAB detached from WME container — button now renders as an independent styled element, eliminating overlap conflicts with other scripts
    • 🔧 Default position computed dynamically from the actual DOM position of the last native WME button
    • 🔧 FAB détaché du container WME — le bouton est désormais un élément indépendant, éliminant les conflits de superposition avec d'autres scripts
    • 🔧 Position par défaut calculée dynamiquement depuis la position réelle du dernier bouton natif WME

    v0.49 — 2026-06-05

    • 🔧 MTE field reverted to free-text input pending investigation of W.model.majorTrafficEvents API
    • 🔧 Various stability fixes
    • 🔧 Champ MTE repassé en saisie libre, en attente d'investigation de l'API W.model.majorTrafficEvents
    • 🔧 Diverses corrections de stabilité
  • v0.49 05-06-2026

    v0.47
    - Added Mon–Thu quick-select shortcut for day selection
    - Day chips & shortcuts: even distribution across full available width
    - Node closure selector: added visual schemas — None (□—□—□—□), Inner nodes (□—■—■—□), All (■—■—■—■)

    v0.48
    - Fixed: duration/end time toggle tooltip was French-only — now bilingual
    - Fixed: false "start date is in the past" warning when start date = today

    v0.49
    - +Days now available in both Duration and End time modes: in Duration mode, adds extra days on top of the H:MM value; in End time mode, shifts the end date forward by that many days
    - New vertical toggle replacing the text button — compact, always visible, with explanatory tooltip
    - Dynamic D+N badge (J+N in French): shown in both modes whenever the closure extends past midnight
    - UI: period row restructured as a fixed 4-column grid — labels and inputs correctly aligned
    - Help text updated (EN & FR) to reflect new +Days behaviour

    ---

    v0.47
    - Ajout du raccourci Lun–Jeu dans la sélection rapide des jours
    - Chips et raccourcis : répartition homogène sur toute la largeur disponible
    - Fermetures aux nœuds : ajout de schémas visuels — Aucune (□—□—□—□), Intérieures (□—■—■—□), Toutes (■—■—■—■)

    v0.48
    - Correction : infobulle du sélecteur Durée/Heure de fin uniquement en français — désormais bilingue
    - Correction : fausse alerte "date de début dans le passé" quand la date de début = aujourd'hui

    v0.49
    - +Jours disponible dans les deux modes : en mode Durée, s'ajoute à la valeur H:MM ; en mode Heure de fin, décale la date de fin d'autant de jours
    - Nouveau toggle vertical en remplacement du bouton texte — compact, toujours visible, avec infobulle explicative
    - Badge J+N dynamique (D+N en anglais) : affiché dans les deux modes dès que la fermeture se prolonge au-delà de minuit
    - IHM : ligne horaire restructurée en grille 4 colonnes fixes — labels et champs correctement alignés
    - Aide en ligne mise à jour (EN et FR) pour refléter le nouveau comportement de +Jours

  • v0.47 05-06-2026

    v0.47
    - Added Mon–Thu quick-select shortcut for day selection
    - Day shortcuts: even distribution across full available width, aligned with chip row
    - Day chips: removed fixed width, even distribution across full width
    - Node closures: added visual schemas in select options — None (□—□—□—□), Inner nodes (□—■—■—□), All (■—■—■—■)


    v0.47
    - Ajout du raccourci Lun–Jeu dans la sélection rapide des jours
    - Raccourcis jours : répartition homogène sur toute la largeur disponible, alignés avec la ligne des chips
    - Chips jours : suppression de la largeur fixe, répartition homogène sur toute la largeur
    - Fermetures aux nœuds : ajout de schémas visuels dans les options — Aucune (□—□—□—□), Intérieures (□—■—■—□), Toutes (■—■—■—■)

  • v0.46 05-06-2026

    v0.46 — 2026-06-05

    • Mode "Heure de fin" par défaut : le sélecteur Durée / Heure de fin démarre désormais sur "Heure de fin". Le dernier mode utilisé est mémorisé entre les sessions.
    • Liens Discuss & GreasyFork : ajoutés dans le panneau latéral WME et en pied de l'onglet Aide.
    • Sélecteur de sens : libellés revus — Double sens / A ⇒ B / B ⇒ A pour une meilleure lisibilité.
    • Alignement des cases à cocher : correction de l'alignement vertical checkbox / texte.

    v0.45 — 2026-06-05

    • Nouvelle icône FAB : bouton flottant remplacé par une icône barrière de chantier (noir / rouge), plus lisible en modes standard et compact.
    • Icône Tampermonkey : ajout d'un @icon dans le header du script — visible dans la liste des scripts Tampermonkey.

    v0.44 — 2026-06-05

    • Affichage heure locale dans la file : les colonnes Début / Fin affichent désormais l'heure locale saisie (et non l'UTC interne). Une fermeture configurée à 21h s'affiche 21h, quelle que soit la date.
    • Limite de 500 fermetures : la génération s'arrête avec un message explicite si la plage dépasse 500 occurrences, évitant tout crash navigateur.
    • Validation des dates : avertissement en rouge si la date de début est dans le passé, si la date de fin est antérieure au début, ou si la plage est trop longue. Déclenché au blur, sans bloquer la saisie.


    v0.46 — 2026-06-05

    • "End time" mode as default: the Duration / End time toggle now defaults to "End time". The last used mode is remembered across sessions.
    • Discuss & GreasyFork links: added to the WME sidebar panel and at the bottom of the Help tab.
    • Direction selector: labels updated — Both ways / A ⇒ B / B ⇒ A for better readability.
    • Checkbox alignment: fixed vertical alignment of checkbox / label text.

    v0.45 — 2026-06-05

    • New FAB icon: floating button replaced with a road barrier icon (black / red), more readable in both standard and compact WME layouts.
    • Tampermonkey icon: added a @icon to the script header — now visible in the Tampermonkey script list.

    v0.44 — 2026-06-05

    • Local time display in the queue: the Start / End columns now show the local time as entered, not the internal UTC. A closure set at 9 PM displays as 9 PM in the queue, regardless of DST.
    • 500-closure limit: generation stops with an explicit error message if the range would exceed 500 occurrences, preventing browser crashes.
    • Date validation: red warning below the date fields if the start date is in the past, the end date is before the start, or the range is too long. Triggered on blur — no interference with manual typing.
  • v0.43 05-06-2026

    v0.43 — 2026-06-05

    🕐 DST-safe scheduling — bug fix

    Occurrences generated in Each day mode are now anchored to the local calendar time of each individual day, using the browser's native local-time constructor. This eliminates the 1-hour drift that could occur when a series of closures spanned a daylight saving time transition (e.g. last Sunday of October / last Sunday of March). All time zones are supported, including half-hour offsets (India UTC+5:30, Nepal UTC+5:45).

    Known limit: schedules are interpreted in the browser's time zone. If you are editing segments in a different time zone from your system (e.g. a French editor working on Japanese segments), entered times will be offset accordingly — documented in the built-in help.

    📅 Public holiday filter — two modes

    The former "Except public holidays" checkbox has been replaced by two independent, mutually exclusive checkboxes:

    • Except public holidays — occurrences falling on a public holiday are removed (existing behaviour)
    • Public holidays only — only occurrences falling on a public holiday are kept (new — useful for variable-date annual restrictions such as ferry services closed on Easter Monday, Ascension Day, etc.)

    Backward-compatible: presets saved with the previous version are automatically migrated.

    💬 Inline tooltips

    Hover tooltips added on Except public holidays, Public holidays only, and Ignore traffic to explain their exact effect without opening the help tab.

    📖 Help tab updated

    Section renamed to Common errors & known limits. New entry documenting the DST / time zone limit. "Ignore traffic" description enriched. Both FR and EN.


    v0.43 — 05/06/2026

    🕐 Changement d'heure (DST) — correction de bug

    Les occurrences générées en mode Chaque jour sont maintenant ancrées sur l'heure locale calendaire de chaque jour individuel, via le constructeur natif heure locale du navigateur. Cela corrige un bug silencieux : une série de fermetures à cheval sur un changement d'heure (dernier dimanche d'octobre / dernier dimanche de mars) pouvait produire un décalage d'une heure sur toutes les occurrences post-transition. Tous les fuseaux horaires sont pris en charge, y compris les fuseaux à demi-heure (Inde UTC+5:30, Népal UTC+5:45).

    Limite connue : les horaires sont interprétés dans le fuseau horaire du navigateur. Si vous éditez des segments dans un fuseau différent de celui de votre système (ex. : un éditeur français travaillant sur des segments japonais), les heures saisies seront décalées en conséquence — documenté dans l'aide intégrée.

    📅 Filtre jours fériés — deux modes

    La checkbox "Sauf jours fériés" est remplacée par deux cases à cocher indépendantes et mutuellement exclusives :

    • Sauf jours fériés — les occurrences tombant un jour férié sont retirées (comportement existant)
    • Uniquement jours fériés — seules les occurrences sur jours fériés sont conservées (nouveau — utile pour les restrictions annuelles à dates variables : bacs fluviaux, lundi de Pâques, Ascension, etc.)

    Rétrocompatible : les préréglages sauvegardés avec la version précédente sont migrés automatiquement.

    💬 Infobulles

    Infobulles au survol ajoutées sur Sauf jours fériés, Uniquement jours fériés et Ignorer le trafic, pour expliquer l'effet exact de chaque option sans ouvrir l'aide.

    📖 Aide intégrée mise à jour

    Section renommée Erreurs fréquentes & limites connues. Nouvelle entrée pour la limite DST/fuseau horaire. Description de "Ignorer le trafic" enrichie. FR et EN.

  • v0.42 04-06-2026

    v0.42

    • Fix: queue badge "X batches in queue" was not cleared when the last batch was deleted
    • Singular/plural: "1 batch in queue" / "X batches in queue"
    • All interface strings now go through the i18n system — no more hardcoded French strings
    • Meta: copyright 2026, supportURL updated, homepageURL removed

    v0.41

    • Per-row checkboxes replaced by a 🗑 delete button for individual occurrences
    • applyQueue filters deleted occurrences via an excludedRows set — total count corrected accordingly
    • Direction-conflict rows (⛔) have the delete button visually disabled

    v0.40

    • Global font size +1px across the entire interface

    v0.37–0.39

    • Automatic detection of compatibility between the requested closure direction and the actual traffic direction of each segment (reversed segments handled correctly)
    • Incompatible segments automatically excluded from the batch; ⚠️ badge in the batch header + downloadable .txt file listing excluded segments with their WME permalink
    • Same detection on CSV imports: ⛔ rows in the table, ⚠️ badge on the batch header
    • If no segment is compatible: warning toast, batch not added


    v0.42

    • Correction : le badge "X lots en file" ne se vidait pas à la suppression du dernier lot
    • Singulier/pluriel : "1 lot en file" / "X lots en file"
    • Toutes les chaînes de l'interface passent désormais par le système i18n — plus aucune chaîne française codée en dur
    • Meta : copyright 2026, supportURL mis à jour, homepageURL supprimé

    v0.41

    • Les cases à cocher par ligne sont remplacées par un bouton 🗑 de suppression d'occurrence individuelle
    • applyQueue filtre les occurrences supprimées via un set excludedRows — le compteur total est corrigé en conséquence
    • Les lignes en conflit de sens (⛔) ont la poubelle désactivée visuellement

    v0.40

    • Taille de police globale +1px sur l'ensemble de l'interface

    v0.37–0.39

    • Détection automatique de compatibilité entre le sens de fermeture demandé et le sens de circulation réel de chaque segment (segments inversés pris en compte)
    • Segments incompatibles écartés du lot automatiquement ; badge ⚠️ dans le header + fichier .txt téléchargeable listant les segments écartés avec leur permalink WME
    • Même détection sur les imports CSV : lignes ⛔ dans le tableau, badge ⚠️ sur le lot
    • Si aucun segment n'est compatible : toast d'avertissement, lot non ajouté
  • v0.35 03-06-2026

    Header update

  • v0.34 03-06-2026