Skip to content

Commit 47e043e

Browse files
committed
Demo : jours fériés de toutes les zones françaises
Le sélecteur de jours fériés du site de démo ne proposait que la France métropolitaine et La Réunion. Il couvre désormais toutes les zones françaises connues de date-holidays : Alsace-Moselle (57/67/68, fériés identiques — une seule entrée), Guadeloupe, Martinique, Guyane, Mayotte, Saint-Martin, Saint-Barthélemy, ainsi que Saint-Pierre-et-Miquelon, Polynésie française, Nouvelle-Calédonie et Wallis-et-Futuna (modélisés comme des pays à part entière par date-holidays). La table HOLIDAY_ZONES (presets.ts) porte libellés et arguments date-holidays ; hints.ts et le sélecteur d'App.tsx s'appuient dessus. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G3vsATsu42bSnikvBWtBuS
1 parent 9a1607f commit 47e043e

5 files changed

Lines changed: 59 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,13 @@
22

33
## Upcoming release
44

5+
- Demo: the public-holiday selector now offers every French zone known to
6+
date-holidays instead of only mainland France and La Réunion:
7+
Alsace-Moselle, Guadeloupe, Martinique, Guyane, Mayotte, Saint-Martin,
8+
Saint-Barthélemy, Saint-Pierre-et-Miquelon, Polynésie française,
9+
Nouvelle-Calédonie and Wallis-et-Futuna, each with its specific holidays
10+
(Vendredi saint, abolition-of-slavery days, territorial holidays…).
11+
512
- Demo: period labels now group the per-day-of-week entries of a hint and
613
condense consecutive weekdays into a range, days first and hint name in
714
parentheses: « Du lundi au samedi (Vacances scolaires) + samedis » instead

website/README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ directement dans le navigateur :
1010
`https://gtfs-proxy.sys-dev-run.re/proxy/…` ;
1111
- des **boutons 1-clic** chargent les réseaux de référence : Car Jaune,
1212
Kar'Ouest, Citalis, Estival, CarSud, Astuce (Rouen) ;
13-
- les hints (jours fériés France/Réunion, vacances scolaires des académies
13+
- les hints (jours fériés de toutes les zones françaises — métropole,
14+
Alsace-Moselle, chaque DROM/COM —, vacances scolaires des académies
1415
Réunion et Normandie via l'API `data.education.gouv.fr`, avec repli sur
1516
`data/school-calendar.json`) sont générés automatiquement, puis
1617
`findCalendarPeriods` est exécuté et les périodes affichées (synthèse,

website/src/App.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
import type { CalendarHintsOptions, CalendarHintsResult, SignatureMode } from '../../src/calendar-hints'
1212
import type { GtfsWorkerAPI, ProgressInfo, FeedSummary } from './gtfs.worker'
1313
import { proxyUrl } from './proxy'
14-
import { PRESETS, type Academy, type HolidayZone, type NetworkPreset } from './presets'
14+
import { HOLIDAY_ZONES, PRESETS, type Academy, type HolidayZone, type NetworkPreset } from './presets'
1515
import { generateHints, DEFAULT_HINT_CONFIGS, type GeneratedHints, type HintConfig } from './hints'
1616
import {
1717
loadSchoolCalendar,
@@ -238,8 +238,9 @@ export default function App() {
238238
Jours fériés
239239
<select value={settings.zone} disabled={busy}
240240
onChange={e => updateSetting('zone', e.target.value as HolidayZone)}>
241-
<option value="metropole">France métropolitaine</option>
242-
<option value="reunion">La Réunion (+ 20 décembre)</option>
241+
{HOLIDAY_ZONES.map(z => (
242+
<option key={z.id} value={z.id}>{z.label}</option>
243+
))}
243244
</select>
244245
</label>
245246
<label>

website/src/hints.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// date-holidays, vacances scolaires issues du calendrier officiel chargé par
33
// `school-calendar.ts`.
44
import type { Hint, Policy } from '../../src/calendar-hints'
5-
import type { HolidayZone } from './presets'
5+
import { HOLIDAY_ZONES, type HolidayZone } from './presets'
66
import type { SchoolCalendarRecord } from './school-calendar'
77

88
export const weekdayOf = (iso: string) => new Date(iso + 'T00:00:00Z').getUTCDay()
@@ -37,7 +37,8 @@ const loadHolidays = () => (holidaysModule ??= import('date-holidays'))
3737

3838
export async function publicHolidays(zone: HolidayZone, firstDay: string, lastDay: string): Promise<PublicHoliday[]> {
3939
const Holidays = (await loadHolidays()).default
40-
const hd = zone === 'reunion' ? new Holidays('FR', 'RE') : new Holidays('FR')
40+
const { country, state } = HOLIDAY_ZONES.find(z => z.id === zone) ?? { country: 'FR', state: undefined }
41+
const hd = state === undefined ? new Holidays(country) : new Holidays(country, state)
4142
const holidays: PublicHoliday[] = []
4243
for (let y = Number(firstDay.slice(0, 4)); y <= Number(lastDay.slice(0, 4)); y++) {
4344
for (const h of hd.getHolidays(y)) {

website/src/presets.ts

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,48 @@
11
// Réseaux prêts à charger en un clic. Les URLs GTFS proviennent des points
22
// d'accès officiels (transport.data.gouv.fr / Pysae / Cityway).
3-
export type HolidayZone = 'metropole' | 'reunion'
3+
export type HolidayZone =
4+
| 'metropole'
5+
| 'alsace-moselle'
6+
| 'guadeloupe'
7+
| 'martinique'
8+
| 'guyane'
9+
| 'reunion'
10+
| 'mayotte'
11+
| 'saint-martin'
12+
| 'saint-barthelemy'
13+
| 'saint-pierre-et-miquelon'
14+
| 'polynesie'
15+
| 'nouvelle-caledonie'
16+
| 'wallis-et-futuna'
17+
18+
export interface HolidayZoneDef {
19+
id: HolidayZone
20+
/** Libellé du sélecteur — fériés spécifiques entre parenthèses. */
21+
label: string
22+
/** Arguments du constructeur date-holidays (pays, puis état éventuel). */
23+
country: string
24+
state?: string
25+
}
26+
27+
// Toutes les zones françaises connues de date-holidays. L'Alsace-Moselle y est
28+
// découpée en trois départements (57/67/68) aux fériés identiques — une seule
29+
// entrée ici ; Polynésie, Nouvelle-Calédonie, Wallis-et-Futuna et
30+
// Saint-Pierre-et-Miquelon y sont modélisés comme des pays à part entière.
31+
export const HOLIDAY_ZONES: HolidayZoneDef[] = [
32+
{ id: 'metropole', label: 'France métropolitaine', country: 'FR' },
33+
{ id: 'alsace-moselle', label: 'Alsace-Moselle (+ Vendredi saint, 26 décembre)', country: 'FR', state: '57' },
34+
{ id: 'guadeloupe', label: 'Guadeloupe (+ Vendredi saint, 27 mai)', country: 'FR', state: 'GP' },
35+
{ id: 'martinique', label: 'Martinique (+ Vendredi saint, 22 mai)', country: 'FR', state: 'MQ' },
36+
{ id: 'guyane', label: 'Guyane (+ 10 juin)', country: 'FR', state: 'GF' },
37+
{ id: 'reunion', label: 'La Réunion (+ 20 décembre)', country: 'FR', state: 'RE' },
38+
{ id: 'mayotte', label: 'Mayotte (+ 27 avril)', country: 'FR', state: 'YT' },
39+
{ id: 'saint-martin', label: 'Saint-Martin (+ 27 mai)', country: 'FR', state: 'MF' },
40+
{ id: 'saint-barthelemy', label: 'Saint-Barthélemy (+ 9 octobre)', country: 'FR', state: 'BL' },
41+
{ id: 'saint-pierre-et-miquelon', label: 'Saint-Pierre-et-Miquelon', country: 'PM' },
42+
{ id: 'polynesie', label: 'Polynésie française (+ 5 mars, Matariʻi…)', country: 'PF' },
43+
{ id: 'nouvelle-caledonie', label: 'Nouvelle-Calédonie (+ 24 septembre)', country: 'NC' },
44+
{ id: 'wallis-et-futuna', label: 'Wallis-et-Futuna (+ 28 avril, 29 juin, 29 juillet)', country: 'WF' },
45+
]
446
/** `location` du dataset fr-en-calendrier-scolaire : « Réunion », « Normandie »,
547
* « Rennes », « Créteil »… La liste réelle vient du fichier téléchargé. */
648
export type Academy = string

0 commit comments

Comments
 (0)