- Parser 14 (server/places.js): "Занятия в Полоцке/Новополоцке/г. Новополоцк" over a day's first row is no longer a lesson but a note of the day for its column (`places`); lessons of that day get `place`. A lesson below the note in the same cell keeps its own subject.
- A town on its own line ("Новополоцк", "г.Новополоцк") or after a room ("246(Новополоцк)") becomes the lesson's `place` and leaves the subject and room. "История Полоцка" is not a town.
- API 14: `place` on lessons and `places` on days of /api/timetable, `place` in the directory. The day notes are shared by the server and the PWA (shared/places.js); the same note in every subgroup reads as the whole group's.
- Android, PWA and iOS: a "Занятия в Полоцке" card above the day's lessons (day pages, calendar, overview, week view, desk stand), "Полоцк" under the date in the week grid, "249Ж · Полоцк" on lesson cards, a "Город" row in details, the town in widgets, tile, reminders and change lists.
- Snapshot lines show the town and the day notes; tests for notes, towns in cells and the API.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
24 lines
704 B
TypeScript
24 lines
704 B
TypeScript
/** "Занятия в Полоцке" as the parser keeps it: a day of a group, or of some of its subgroups. */
|
|
export interface PlaceNote {
|
|
day: number;
|
|
date: string | null;
|
|
groups: string[];
|
|
subgroups: { group: string; label: string }[];
|
|
place: string;
|
|
text: string;
|
|
}
|
|
/** A note of one day for one group; `subgroup` null for the whole group. */
|
|
export interface DayPlace {
|
|
place: string;
|
|
text: string;
|
|
subgroup: string | null;
|
|
}
|
|
export function placesOn(
|
|
places: PlaceNote[] | null | undefined,
|
|
group: string,
|
|
labels: string[],
|
|
day: number,
|
|
date?: string | null,
|
|
): DayPlace[];
|
|
export function placesFor(list: DayPlace[], subgroup: string | null | undefined): DayPlace[];
|