aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/RenderUtil.ts
blob: c6963bc8dde183944f314ff7eaa10a398d5b28d6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import { Mode, type StopTime } from './motis-types';
import { m } from './paraglide/messages';

export const getPictogram = (mode: Mode) => {
  switch (true) {
    case mode === Mode.Bike:
      return 'Velo_l';
    case mode === Mode.ODM:
    case mode === Mode.Rental:
      return 'Taxi_l';
    case mode === Mode.Car:
    case mode === Mode.CarDropoff:
    case mode === Mode.CarParking:
      return 'Auto_l';

    // Transit //
    case mode === Mode.Airplane:
      return 'Abflug_l';
    case mode === Mode.LongDistanceRail:
    case mode === Mode.RegionalFastRail:
    case mode === Mode.RegionalRail:
    case mode === Mode.Metro:
    case mode === Mode.HighspeedRail:
      return 'Zug_l';
    case mode === Mode.NightRail:
      return 'Schlafwagen';
    case mode === Mode.Subway:
      return 'Metro_l_' + (m.lang_short() === 'en' ? 'de' : m.lang_short());
    case mode === Mode.Bus:
      return 'Bus_l';
    case mode === Mode.Coach:
      return 'Fernbus_l';
    case mode === Mode.Tram:
    case mode === Mode.CableTram:
      return 'Tram_l';
    case mode === Mode.Funicular:
      return 'Zahnradbahn_l';
    case mode === Mode.AerialLift:
      // return 'Gondelbahn_l';
      return 'Luftseilbahn_l';
    case mode === Mode.Ferry:
      return 'Schiff_l';
    case mode === Mode.Other:
    default:
      return 'Licht';
  }
};
export const stopTimeToShortName = (stopTime: StopTime) => {
  let n = stopTime.routeShortName;
  if (n.startsWith('EC ')) n = n.replace('EC ', 'EC');
  if (stopTime.mode === 'TRAM' && !isNaN(parseInt(n))) n = 'T ' + n;
  if (stopTime.mode === 'BUS' && !isNaN(parseInt(n))) n = 'B ' + n;
  if (
    stopTime.routeShortName === 'European Sleeper' &&
    stopTime.agencyName === 'Eu Sleeper'
  )
    n = 'EN'; // TODO: validate these are real euronights
  if (n === '?') n = '';
  if (n.startsWith('FlixTrain ')) n = n.substring(10);
  // Note: may also catch ECs/ICs/EXTs operated by DB
  if (
    stopTime.agencyId === '12681' &&
    stopTime.agencyName === 'DB Fernverkehr AG' &&
    stopTime.mode === 'HIGHSPEED_RAIL' &&
    stopTime.source.startsWith('de_DELFI.gtfs.zip/') &&
    !isNaN(parseInt(n))
  )
    n = `ICE ${n}`;
  return n;
};
export const stopTimeShouldRenderGlyph = (
  stopTime: StopTime,
  routeShortName: string
) =>
  ([
    Mode.NightRail,
    Mode.HighspeedRail,
    Mode.LongDistanceRail,
    Mode.RegionalFastRail,
    Mode.RegionalRail,
  ].includes(stopTime.mode) ||
    (stopTime.mode === 'BUS' && routeShortName.startsWith('EV')) ||
    (stopTime.mode === 'METRO' && stopTime.routeShortName.startsWith('S'))) &&
  !stopTime.routeShortName.startsWith('FlixTrain');
export const blacklistedAgencyURLs = ['http://www.rta.ae'];