feat : wizard multi-étapes, migrations contenu, versionnage semver (v1.2.1) #60

Merged
cedricAbonnel merged 2 commits from feat/wizard-multi-step into main 2026-05-14 21:17:20 +00:00
Owner

Résumé

  • Wizard 5 écrans (création) / 6 écrans (édition) avec auto-sauvegarde, TOC dynamique, diff avant validation (#58)
  • Titre extrait du premier # Markdown — plus de champ titre séparé
  • Tags plats (sans catégorie) avec suggestions automatiques depuis le contenu
  • Système de migrations de contenu (scripts/migrate_content.php + migration_001) avec mode maintenance HTTP 503
  • UpdateChecker : bandeau admin si nouvelle version disponible sur Gitea
  • Dashboard /admin : version déployée vs disponible, bouton « Mettre à jour »
  • scripts/push.sh : génère public/version.txt depuis CHANGELOG.md
  • CHANGELOG restructuré en semver (1.0.0 / 1.1.0 / 1.2.0 / 1.2.1)

Correctifs 1.2.1

  • Cache ArticleManager invalide si index.md est plus récent que meta.json
  • post_view.php : H1 initial masqué du rendu (déjà affiché par le template)
  • wizard.js : Ctrl+Home/End via scrollIntoView ; suppression de scrollToCursor erroné

Plan de test

  • Créer un article via /new (5 étapes)
  • Éditer un article via /edit/{uuid}/1 (6 étapes, diff étape 6)
  • Vérifier que le # Titre apparaît dans le textarea étape 1
  • Vérifier que le titre ne s affiche pas en double dans la vue article
  • Cliquer « Mettre à jour » dans /admin si des migrations sont en attente
  • Ctrl+Home / Ctrl+End dans le textarea de l étape 1

🤖 Generated with Claude Code

## Résumé - Wizard 5 écrans (création) / 6 écrans (édition) avec auto-sauvegarde, TOC dynamique, diff avant validation (#58) - Titre extrait du premier `# ` Markdown — plus de champ titre séparé - Tags plats (sans catégorie) avec suggestions automatiques depuis le contenu - Système de migrations de contenu (`scripts/migrate_content.php` + `migration_001`) avec mode maintenance HTTP 503 - `UpdateChecker` : bandeau admin si nouvelle version disponible sur Gitea - Dashboard `/admin` : version déployée vs disponible, bouton « Mettre à jour » - `scripts/push.sh` : génère `public/version.txt` depuis CHANGELOG.md - CHANGELOG restructuré en semver (1.0.0 / 1.1.0 / 1.2.0 / 1.2.1) ## Correctifs 1.2.1 - Cache `ArticleManager` invalide si `index.md` est plus récent que `meta.json` - `post_view.php` : H1 initial masqué du rendu (déjà affiché par le template) - `wizard.js` : Ctrl+Home/End via `scrollIntoView` ; suppression de `scrollToCursor` erroné ## Plan de test - [ ] Créer un article via `/new` (5 étapes) - [ ] Éditer un article via `/edit/{uuid}/1` (6 étapes, diff étape 6) - [ ] Vérifier que le `# Titre` apparaît dans le textarea étape 1 - [ ] Vérifier que le titre ne s affiche pas en double dans la vue article - [ ] Cliquer « Mettre à jour » dans `/admin` si des migrations sont en attente - [ ] Ctrl+Home / Ctrl+End dans le textarea de l étape 1 🤖 Generated with [Claude Code](https://claude.com/claude-code)
cedricAbonnel added 2 commits 2026-05-14 21:17:03 +00:00
- CHANGELOG.md : structure semver (1.0.0 / 1.1.0 / 1.2.0) remplace le journal non versionné
- public/version.txt : généré à chaque push depuis la première entrée CHANGELOG
- scripts/push.sh : extrait la version CHANGELOG avant git add
- src/UpdateChecker.php : compare version déployée vs version Gitea (raw file), cache 1 h
- templates/layout.php : bandeau alerte admin (nouvelle version / migrations en attente)
- templates/admin.php : dashboard moteur Folio (version déployée / disponible)
- scripts/migrate_content.php + migration_001 : ajout # titre dans les articles existants
- templates/maintenance.php : page HTTP 503 pendant une migration
- src/helpers.php : extractMarkdownTitle(), normalisation \r\n dans lineDiff()
- templates/wizard/step1.php : suppression champ titre, plan TOC dynamique
- public/assets/js/wizard.js : scope titleEl, scrollToCursor, buildToc, handlers externalisés

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ArticleManager : invalider le cache si index.md est plus récent que meta.json
- migration_001 : touch(meta.json) après maj index.md pour forcer l'invalidation
- post_view.php : masquer le H1 initial du contenu (déjà affiché par le template)
- step1.php : en-tête "Modifier" sans le titre de l'article
- wizard.js : retirer scrollToCursor (erroné sur auto-resize) ; Ctrl+Home/End via scrollIntoView

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
cedricAbonnel merged commit 99a7f2e790 into main 2026-05-14 21:17:20 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cedricAbonnel/folio#60