Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,13 @@

## Upcoming release

- Demo: the public-holiday selector now offers every French zone known to
date-holidays instead of only mainland France and La Réunion:
Alsace-Moselle, Guadeloupe, Martinique, Guyane, Mayotte, Saint-Martin,
Saint-Barthélemy, Saint-Pierre-et-Miquelon, Polynésie française,
Nouvelle-Calédonie and Wallis-et-Futuna, each with its specific holidays
(Vendredi saint, abolition-of-slavery days, territorial holidays…).

- Demo: period labels now group the per-day-of-week entries of a hint and
condense consecutive weekdays into a range, days first and hint name in
parentheses: « Du lundi au samedi (Vacances scolaires) + samedis » instead
Expand Down
3 changes: 2 additions & 1 deletion website/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ directement dans le navigateur :
`https://gtfs-proxy.sys-dev-run.re/proxy/…` ;
- des **boutons 1-clic** chargent les réseaux de référence : Car Jaune,
Kar'Ouest, Citalis, Estival, CarSud, Astuce (Rouen) ;
- les hints (jours fériés France/Réunion, vacances scolaires des académies
- les hints (jours fériés de toutes les zones françaises — métropole,
Alsace-Moselle, chaque DROM/COM —, vacances scolaires des académies
Réunion et Normandie via l'API `data.education.gouv.fr`, avec repli sur
`data/school-calendar.json`) sont générés automatiquement, puis
`findCalendarPeriods` est exécuté et les périodes affichées (synthèse,
Expand Down
7 changes: 4 additions & 3 deletions website/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import {
import type { CalendarHintsOptions, CalendarHintsResult, SignatureMode } from '../../src/calendar-hints'
import type { GtfsWorkerAPI, ProgressInfo, FeedSummary } from './gtfs.worker'
import { proxyUrl } from './proxy'
import { PRESETS, type Academy, type HolidayZone, type NetworkPreset } from './presets'
import { HOLIDAY_ZONES, PRESETS, type Academy, type HolidayZone, type NetworkPreset } from './presets'
import { generateHints, DEFAULT_HINT_CONFIGS, type GeneratedHints, type HintConfig } from './hints'
import {
loadSchoolCalendar,
Expand Down Expand Up @@ -238,8 +238,9 @@ export default function App() {
Jours fériés
<select value={settings.zone} disabled={busy}
onChange={e => updateSetting('zone', e.target.value as HolidayZone)}>
<option value="metropole">France métropolitaine</option>
<option value="reunion">La Réunion (+ 20 décembre)</option>
{HOLIDAY_ZONES.map(z => (
<option key={z.id} value={z.id}>{z.label}</option>
))}
</select>
</label>
<label>
Expand Down
5 changes: 3 additions & 2 deletions website/src/hints.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
// date-holidays, vacances scolaires issues du calendrier officiel chargé par
// `school-calendar.ts`.
import type { Hint, Policy } from '../../src/calendar-hints'
import type { HolidayZone } from './presets'
import { HOLIDAY_ZONES, type HolidayZone } from './presets'
import type { SchoolCalendarRecord } from './school-calendar'

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

export async function publicHolidays(zone: HolidayZone, firstDay: string, lastDay: string): Promise<PublicHoliday[]> {
const Holidays = (await loadHolidays()).default
const hd = zone === 'reunion' ? new Holidays('FR', 'RE') : new Holidays('FR')
const { country, state } = HOLIDAY_ZONES.find(z => z.id === zone) ?? { country: 'FR', state: undefined }
const hd = state === undefined ? new Holidays(country) : new Holidays(country, state)
const holidays: PublicHoliday[] = []
for (let y = Number(firstDay.slice(0, 4)); y <= Number(lastDay.slice(0, 4)); y++) {
for (const h of hd.getHolidays(y)) {
Expand Down
44 changes: 43 additions & 1 deletion website/src/presets.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,48 @@
// Réseaux prêts à charger en un clic. Les URLs GTFS proviennent des points
// d'accès officiels (transport.data.gouv.fr / Pysae / Cityway).
export type HolidayZone = 'metropole' | 'reunion'
export type HolidayZone =
| 'metropole'
| 'alsace-moselle'
| 'guadeloupe'
| 'martinique'
| 'guyane'
| 'reunion'
| 'mayotte'
| 'saint-martin'
| 'saint-barthelemy'
| 'saint-pierre-et-miquelon'
| 'polynesie'
| 'nouvelle-caledonie'
| 'wallis-et-futuna'

export interface HolidayZoneDef {
id: HolidayZone
/** Libellé du sélecteur — fériés spécifiques entre parenthèses. */
label: string
/** Arguments du constructeur date-holidays (pays, puis état éventuel). */
country: string
state?: string
}

// Toutes les zones françaises connues de date-holidays. L'Alsace-Moselle y est
// découpée en trois départements (57/67/68) aux fériés identiques — une seule
// entrée ici ; Polynésie, Nouvelle-Calédonie, Wallis-et-Futuna et
// Saint-Pierre-et-Miquelon y sont modélisés comme des pays à part entière.
export const HOLIDAY_ZONES: HolidayZoneDef[] = [
{ id: 'metropole', label: 'France métropolitaine', country: 'FR' },
{ id: 'alsace-moselle', label: 'Alsace-Moselle (+ Vendredi saint, 26 décembre)', country: 'FR', state: '57' },
{ id: 'guadeloupe', label: 'Guadeloupe (+ Vendredi saint, 27 mai)', country: 'FR', state: 'GP' },
{ id: 'martinique', label: 'Martinique (+ Vendredi saint, 22 mai)', country: 'FR', state: 'MQ' },
{ id: 'guyane', label: 'Guyane (+ 10 juin)', country: 'FR', state: 'GF' },
{ id: 'reunion', label: 'La Réunion (+ 20 décembre)', country: 'FR', state: 'RE' },
{ id: 'mayotte', label: 'Mayotte (+ 27 avril)', country: 'FR', state: 'YT' },
{ id: 'saint-martin', label: 'Saint-Martin (+ 27 mai)', country: 'FR', state: 'MF' },
{ id: 'saint-barthelemy', label: 'Saint-Barthélemy (+ 9 octobre)', country: 'FR', state: 'BL' },
{ id: 'saint-pierre-et-miquelon', label: 'Saint-Pierre-et-Miquelon', country: 'PM' },
{ id: 'polynesie', label: 'Polynésie française (+ 5 mars, Matariʻi…)', country: 'PF' },
{ id: 'nouvelle-caledonie', label: 'Nouvelle-Calédonie (+ 24 septembre)', country: 'NC' },
{ id: 'wallis-et-futuna', label: 'Wallis-et-Futuna (+ 28 avril, 29 juin, 29 juillet)', country: 'WF' },
]
/** `location` du dataset fr-en-calendrier-scolaire : « Réunion », « Normandie »,
* « Rennes », « Créteil »… La liste réelle vient du fichier téléchargé. */
export type Academy = string
Expand Down
Loading