docs: record iCalendar parser decisions (T1)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
1878ba08ec
commit
2a25f1c34e
@@ -39,6 +39,32 @@ navigateur). L'extension facilite le geste (affiche l'image à glisser) mais ne
|
|||||||
l'automatise pas. L'affiche vient souvent de la newsletter Brevo, hors
|
l'automatise pas. L'affiche vient souvent de la newsletter Brevo, hors
|
||||||
calendrier.
|
calendrier.
|
||||||
|
|
||||||
|
## 2026-06-30 — Parseur iCalendar (T1) : contrat `Event` figé + ical.js vendoré
|
||||||
|
|
||||||
|
Le flux brut est transformé en `Event[]` par une fonction pure
|
||||||
|
`parserEvenements(flux, aujourdhui)` (`extension/evenements.js`), via **ical.js
|
||||||
|
v2.2.1 vendoré** (approche 3 du brainstorm : pas de build, dépendance en `.js`).
|
||||||
|
|
||||||
|
**Contrat `Event` figé** (ne pas rouvrir sans accord) :
|
||||||
|
`{ uid, titre, description, lieu, debut: Date, fin: Date, categories: string[],
|
||||||
|
journeeEntiere: boolean }`. Champs texte coercés en `""` si absents (l'aval
|
||||||
|
suppose des chaînes). Le défaut « café » du lieu est appliqué **en aval**, pas
|
||||||
|
ici.
|
||||||
|
|
||||||
|
**Décisions tranchées :**
|
||||||
|
- **`uid` seul, pas de `href`/`ETag`.** Le transport actuel (`?export`) renvoie
|
||||||
|
un ICS concaténé sans `href`/`ETag` par événement. L'`UID` est la clé stable ;
|
||||||
|
T2 résoudra l'adressage CalDAV par UID au moment du PUT. Le contrat n'est pas
|
||||||
|
alourdi.
|
||||||
|
- **`journeeEntiere` dès T1** (drapeau porté, comportement « heure exigée »
|
||||||
|
différé à T3).
|
||||||
|
- **Cas limites traités « au plus simple », différés à T3** : pas d'expansion
|
||||||
|
RRULE (récurrents pris au DTSTART maître + filtre futur → un récurrent au
|
||||||
|
maître **passé** disparaît, **trou assumé et documenté**), exceptions
|
||||||
|
d'occurrence (`RECURRENCE-ID`) ignorées, journées entières au minuit local.
|
||||||
|
- **Tri & message « 0 événement futur » hors parseur** : le parseur renvoie les
|
||||||
|
événements **dans l'ordre du flux**, non triés (responsabilité de la liste).
|
||||||
|
|
||||||
## 2026-06-29 — Pré-remplissage par content script, pas par URL
|
## 2026-06-29 — Pré-remplissage par content script, pas par URL
|
||||||
|
|
||||||
Gravity Forms n'accepte `?input_X=` que si chaque champ est configuré
|
Gravity Forms n'accepte `?input_X=` que si chaque champ est configuré
|
||||||
|
|||||||
@@ -26,6 +26,11 @@ Document de référence pour l'implémentation. Toutes les valeurs ci-dessous so
|
|||||||
|
|
||||||
> Recommandation parsing : `ical.js` (Mozilla) plutôt que regex maison — gère RRULE, TZID, VALUE=DATE.
|
> Recommandation parsing : `ical.js` (Mozilla) plutôt que regex maison — gère RRULE, TZID, VALUE=DATE.
|
||||||
|
|
||||||
|
> **T1 — parseur** : `ical.js` **v2.2.1** vendoré (build ESM `dist/ical.js`) dans
|
||||||
|
> `extension/vendor/ical.js`. ⚠️ Les `VTIMEZONE` embarqués dans le flux doivent
|
||||||
|
> être enregistrés (`ICAL.TimezoneService.register`) **avant** `toJSDate()`,
|
||||||
|
> sinon l'offset est faux pour les TZID non standards (ex. `Africa/Lagos`).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 2. Cible : formulaire mairie (Gravity Forms, form id = 6)
|
## 2. Cible : formulaire mairie (Gravity Forms, form id = 6)
|
||||||
|
|||||||
Reference in New Issue
Block a user