# Changelog - FlowDeck ## v7.25.0 (2026-10-01) — Audit : A27 CLOSED (eslint 0/0) ### Fixed - **Toasts settings jamais affichés** : `settings.js` appelait `typeof toast === 'function'` — guard **toujours faux** (le `toast` global n'existait pas) → les retours « Timezone saved » / « SP metadata URL copiée » ne s'affichaient jamais. → `window.showToast` (global `base.html`) - `_wsInitData = window._wsInitData` (auto-affectation d'un nom non déclaré, sans effet observable car `window._wsInitData` existe depuis L4) supprimé ### Changed - **A27 lint terminé : `eslint static/js` = 0 erreur / 0 warning** (285 → 0, 22 fichiers) : · no-empty ×70 = `catch (x) {}` vides → `catch { /* volontaire */ }` (binding optionnel ES2019 ; zéro changement de comportement) · no-unused-vars ×171 = bindings de catch retirés + 24 lignes mortes déterministes (assert sur texte exact avant suppression) + `/* exported */` sur les 10 fonctions appelées depuis les attributs HTML des templates (vérifiées par grep) · no-undef ×44 = vrais globaux déclarés dans `eslint.config.mjs` (getSvgIcon = inline base.html, TextDecoder = API, Prism = CDN) ### Notes - `node --check` vert sur tous les fichiers ; suite complète **1089/1089** - A27 reste ouvert uniquement pour : `base` 1 523 L structurel (inline par nature, décision assumée) + ~500 L de petits blocs hors cibles ## v7.24.0 (2026-10-01) — Audit : A27 extraction TERMINÉE (bilan -85 %) ### Changed - **A27 (phase 2c)** — `_database_table_scripts.html` : **1 314 L extraites** vers `static/js/database_table.js`. Le Jinja du bloc était confiné à la construction de l'objet de config (4 clés + `{% if collection_data %}`) → config JSON `#db-config` **null-vs-objet** : `new DBInstance(container, PAGE_COLLECTION_ID, DB_CONFIG)` remplace les 2 branches Jinja - 2 tests adaptés (lisaient le template source → `database_table.js`) ; `FlowDeckDB` plus dans le HTML → assert sur le JS ### Notes - **BILAN A27 : 11 874 L extraites en 4 phases** (4 243 + 2 516 + 3 801 + 1 314), **inline 13 904 → 2 022 L (-85 %)**, 22 fichiers `static/js/*.js`, `node --check` vert partout, eslint **0 erreur / 285 warnings** - Reste : `base` 1 523 L structurel (`{% block %}`/`{% for %}` — reste inline par nature, décision assumée), ~500 L de petits blocs hors cibles, nettoyage des 285 warnings - Suite complète : **1089/1089** ## v7.23.0 (2026-10-01) — Audit : A27 phase 2b (+3 801 L) ### Changed - **A27 (phase 2b)** — 4 blocs interpolés extraits avec la recette config JSON (identique à la 2a) : · `local_workspace.html` → `local_workspace.js` (2 031 L, `lw-config` : current_folder_id, workspace_id) · `settings.html` → `settings.js` (1 093 L, `st-config` : avatar_url, avatar_color, user full_name/login/email, is_admin, auth_method — **2 routes rendent ce template**, les expressions `or ""` sont préservées pour les valeurs Undefined, `is_admin` reste un booléen) · `_page_editor_realtime.html` → `page_editor_realtime.js` (531 L, `rt-config` : SELF id/login/full_name/color) · `board.html` → `board.js` (146 L, `bd-config` : owner/repo/initial_view) - BONUS sécurité : les valeurs passent par `|tojson` (échappement JSON explicite) au lieu d'être interpolées dans des strings JS - Tags : config JSON inline (nonce conservé) + `