961 Commits

Author SHA1 Message Date
gnezim 1821f7f78e Add TZ Table 7 mode-specific leaf breadcrumb + clickable back-to-search link on Online-Board details
Per TZ §4.1.4 Table 7 rows 6–8, the details page now builds a 3-item
breadcrumb trail [Home, Онлайн-Табло, <leaf>] where <leaf> is mode-aware:
- flight: "Номер рейса: SU-1234" (hyphen per TZ)
- departure: "Вылет: {station}"
- arrival: "Прилет: {station}"
- route: "Маршрут: {dep}-{arr}"

The leaf crumb is a clickable link back to the source search page with
time-range preserved in the URL. Share-link entries (no ?request=) get
only [Home, Онлайн-Табло] with no leaf.

Breadcrumbs component updated to allow last-item links (was suppressed),
since TZ explicitly requires the leaf to be navigatable.

CONFLICT (deferred to Task 16): TZ row 6 says departure/arrival leaf
should show both dep+arr cities; parentRequest only carries one station,
so only that station is shown. Departure/arrival search returns flights
to many arrival cities — "both cities" makes no sense at search-mode level.
2026-04-21 17:35:49 +03:00
gnezim bcaf3ab503 Verify Flight-Map title 'Карта полетов' per TZ Table 6 rows 1-3 2026-04-21 17:27:18 +03:00
gnezim df4ac19f7d Branch schedule details title by direct vs connecting per TZ Table 6 rows 11-13 2026-04-21 17:24:16 +03:00
gnezim f03562e4cd Align Online-Board page titles with TZ Table 6 (сегодня/завтра/ДД.ММ.ГГГГ date display)
- Add formatDateForTitle helper: returns today/tomorrow labels or dd.MM.yyyy
- Switch all search page title builders to use formatDateForTitle; descriptions keep dd.MM.yyyy
- FLIGHT-DETAILS title now uses routeCities (no date) per TZ rows 6-8; adds TITLE-NO-ROUTE fallback for SSR when cities not yet loaded
- buildFlightDetailsSeoFromId accepts optional cityNames param
- Update ru/en i18n TITLE strings to TZ Table 6 format; add TITLE-NO-ROUTE to all 9 locales
- Tests: 32 cases covering today/tomorrow/arbitrary-date branches and routeCities logic
2026-04-21 17:18:59 +03:00
gnezim 4f840486b8 Consolidate scattered +330/+6mo date-window literals into shared dateWindow module 2026-04-21 17:09:17 +03:00
gnezim ead18fc5e5 Enforce [-1, +330] schedule window redirect guard per TZ 4.1.2-R11 2026-04-21 17:07:24 +03:00
gnezim 57d21f6a42 Enforce [-1, +14] date-window guard on Online-Board details route per TZ 4.1.2-R11
Out-of-window dates now redirect to /{locale}/onlineboard instead of rendering
stale data. Parse failures (malformed URLs) continue to 404 unchanged.
2026-04-21 17:00:22 +03:00
gnezim d633b2daa0 Enforce [-1, +14] date-window guard on Online-Board arrival route per TZ 4.1.2-R11
Out-of-window dates now redirect to /{locale}/onlineboard instead of rendering
stale data. Parse failures (malformed URLs) continue to 404 unchanged.
2026-04-21 17:00:17 +03:00
gnezim 7d6b23b5af Enforce [-1, +14] date-window guard on Online-Board departure route per TZ 4.1.2-R11
Out-of-window dates now redirect to /{locale}/onlineboard instead of rendering
stale data. Parse failures (malformed URLs) continue to 404 unchanged.
2026-04-21 17:00:12 +03:00
gnezim f2c52ca988 Enforce [-1, +14] date-window guard on Online-Board route route per TZ 4.1.2-R11
Out-of-window dates now redirect to /{locale}/onlineboard instead of rendering
stale data. Parse failures (malformed URLs) continue to 404 unchanged.
2026-04-21 17:00:07 +03:00
gnezim f5304e200e Enforce [-1, +14] date-window guard on Online-Board flight route per TZ 4.1.2-R11
Out-of-window dates now redirect to /{locale}/onlineboard instead of rendering
stale data. Parse failures (malformed URLs) continue to 404 unchanged.
2026-04-21 16:50:17 +03:00
gnezim fbd4438da0 Add boardDateRedirect guard utility for Online-Board date-window per TZ 4.1.2-R11
Shared single-purpose helper: returns redirect path when a parsed yyyymmdd
date falls outside the [-1, +14] day window, null otherwise. Six unit tests
cover both bounds, the in-window case, and locale propagation.
2026-04-21 16:44:03 +03:00
gnezim 8b22f0601f Use shared detailsRequestParam codec for mini-list parent-request (route + flight kinds) 2026-04-21 16:37:32 +03:00
gnezim 531ace6abc Add ?request= query-param codec for Online-Board details URLs per TZ 4.1.2 Table 5 row 6 2026-04-21 16:33:16 +03:00
gnezim 750a328528 Add centralized date-window constants per TZ 4.1.2-R12 (board/schedule/map) 2026-04-21 16:30:04 +03:00
gnezim 13170eb689 Fix review issues in P1 spec rule rows (bracket notation, cross-refs, typo, R8 split) 2026-04-21 16:26:52 +03:00
gnezim 816028603b Populate full rule enumeration for P1 subsections 4.1.2/3/4/8 in TZ audit spec 2026-04-21 16:18:05 +03:00
gnezim a6f7d3df8c Add P1 implementation plan: URLs, breadcrumbs, page names, cross-section nav 2026-04-21 15:59:04 +03:00
gnezim 8e84c41243 Add TZ РИ-07-2538С compliance-audit spec for 4.1 (Online-Board / Schedule / Flight Map) 2026-04-21 15:45:11 +03:00
gnezim 9efc76bab1 Auto-commit exact-match typed city/airport names in CityAutocomplete
Typing a full city name (or airport name) and clicking search without
picking a dropdown row previously did nothing: the parent-held city
code stayed empty and the submit handler silently short-circuited.
Exact case-insensitive name matches now resolve to the owning city
code immediately, so the Schedule and OnlineBoard start pages can act
on keyboard-only input. Partial text still requires a dropdown pick.
2026-04-21 12:19:55 +03:00
gnezim 3ae59dae1d Keep multi-leg operator logos compact (round) when schedule row is expanded
Expanding a connecting-flight row on /schedule/route used to swap the small
round airline badges in the header for the wide rectangular logo, which
overflowed the operator column and overlapped the departure time. The
header now always renders the round variant on schedule pages, regardless
of the expansion state.
2026-04-21 12:10:52 +03:00
gnezim 7577e703c2 Close SharePanel on Escape + mark as role=dialog with aria-label (a11y + PrimeNG parity) 2026-04-21 08:32:21 +03:00
gnezim 36db7d3f2e Add aria-label to OnlineBoard search forms (flight-number + route) for a11y 2026-04-21 08:30:25 +03:00
gnezim 3d815fa9e3 Add aria-label to Schedule search forms (a11y discoverable forms) 2026-04-20 23:08:55 +03:00
gnezim fd101819af Add aria-invalid to flight-number input when error is present (a11y) 2026-04-20 23:07:12 +03:00
gnezim 9948bcd3dc Add role=alert to filter validation tooltips so errors are announced to screen readers 2026-04-20 22:34:25 +03:00
gnezim ebcf21f020 Add role=status to FlightList empty-state banner (a11y) 2026-04-20 22:32:25 +03:00
gnezim 5d5a403bf0 Add role=status + aria-live=polite to SignalR connection status badges (a11y) 2026-04-20 22:25:37 +03:00
gnezim 22d9fca5b2 Add role=alert/status to error+not-found banners across details + search pages (a11y) 2026-04-20 22:24:05 +03:00
gnezim 826a583c4d Add aria-current=page to last breadcrumb item (a11y semantic for current location) 2026-04-20 22:21:35 +03:00
gnezim 57aeba5534 Add aria-current=page to active PageTabs nav link (a11y semantic for current page) 2026-04-20 22:20:36 +03:00
gnezim 590a8aac14 Add aria-pressed to active DayTab + WeekTab buttons (a11y) 2026-04-20 22:12:00 +03:00
gnezim eced09aeb0 Add aria-pressed to selected day-quick-pick buttons (a11y for screen readers) 2026-04-20 22:10:19 +03:00
gnezim 8679a7ecc7 i18n WeekTabs aria-labels (was hardcoded English) using existing A11Y-PREV/NEXT-PAGE keys 2026-04-20 22:07:32 +03:00
gnezim e8701eb5b7 Add aria-hidden to decorative arrow-icon spans in OnlineBoardFilter accordion headers 2026-04-20 22:03:35 +03:00
gnezim 5f5f60ca3e Add aria-hidden to decorative arrow-icon span in SearchHistory accordion header 2026-04-20 22:02:45 +03:00
gnezim 0921c606df Add aria-expanded to expandable FlightCard rows (a11y for screen readers) 2026-04-20 22:01:37 +03:00
gnezim 50cc2350ab Add aria-label to SearchHistory items (a11y — items are decorative without text label) 2026-04-20 22:00:25 +03:00
gnezim 841099287a Add aria-expanded to FlightSchedule + FlightDetailsAccordion accordion triggers (a11y) 2026-04-20 21:53:14 +03:00
gnezim 32d80332ff Add aria-expanded to accordion role=button triggers (a11y parity for filter + SearchHistory) 2026-04-20 21:51:47 +03:00
gnezim 5aae968610 Clarify IOperatingBy.flightNumber doc — it IS used for code-share display 2026-04-20 21:31:45 +03:00
gnezim f7193d09e9 Add SearchHistory icon tooltips for board vs schedule items (Angular pTooltip parity) 2026-04-20 21:20:30 +03:00
gnezim b54111ef28 Replace 'white' with $white token + drop 0px units in _buttons.scss 2026-04-20 21:10:21 +03:00
gnezim 81a6a296fd Drop redundant 'px' on zero-value paddings (CSS lint cleanup) 2026-04-20 21:04:09 +03:00
gnezim e44eedbab7 Tokenize 20px sticky position literals in PageLayout column-left 2026-04-20 21:02:06 +03:00
gnezim 5892310201 Tokenize 20px positioning literals in PageLayout sticky/scroll overlay 2026-04-20 21:00:46 +03:00
gnezim db0365833f Tokenize 12px padding literal in FlightsMiniList 2026-04-20 20:50:04 +03:00
gnezim 9f5ebae747 Tokenize font-weight: normal → fonts.$font-regular across 3 SCSS files 2026-04-20 20:48:27 +03:00
gnezim c9ee0e9043 Add title attribute (tooltip) to OperatorLogo (Angular pTooltip parity) 2026-04-20 20:39:09 +03:00
gnezim 24da3ab9d1 Add tooltips to schedule direction-switch buttons (Angular pTooltip parity) 2026-04-20 20:37:06 +03:00