mobility-toolbox-js 2.0.0-beta.32 → 2.0.0-beta.33

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. package/api/RealtimeAPI.d.ts +268 -0
  2. package/api/RealtimeAPI.d.ts.map +1 -0
  3. package/api/RoutingAPI.d.ts +33 -0
  4. package/api/RoutingAPI.d.ts.map +1 -0
  5. package/api/StopsAPI.d.ts +36 -0
  6. package/api/StopsAPI.d.ts.map +1 -0
  7. package/api/index.d.ts +5 -0
  8. package/api/index.d.ts.map +1 -0
  9. package/api/typedefs.d.ts +105 -0
  10. package/api/typedefs.d.ts.map +1 -0
  11. package/common/api/HttpAPI.d.ts +31 -0
  12. package/common/api/HttpAPI.d.ts.map +1 -0
  13. package/common/api/WebSocketAPI.d.ts +95 -0
  14. package/common/api/WebSocketAPI.d.ts.map +1 -0
  15. package/common/controls/Control.d.ts +74 -0
  16. package/common/controls/Control.d.ts.map +1 -0
  17. package/common/{index.js → index.d.ts} +1 -0
  18. package/common/index.d.ts.map +1 -0
  19. package/common/layers/Layer.d.ts +80 -0
  20. package/common/layers/Layer.d.ts.map +1 -0
  21. package/common/mixins/CopyrightMixin.d.ts +22 -0
  22. package/common/mixins/CopyrightMixin.d.ts.map +1 -0
  23. package/common/mixins/MapboxLayerMixin.d.ts +27 -0
  24. package/common/mixins/MapboxLayerMixin.d.ts.map +1 -0
  25. package/common/mixins/RealtimeLayerMixin.d.ts +58 -0
  26. package/common/mixins/RealtimeLayerMixin.d.ts.map +1 -0
  27. package/common/mixins/StopFinderMixin.d.ts +40 -0
  28. package/common/mixins/StopFinderMixin.d.ts.map +1 -0
  29. package/common/mixins/UserInteractionsLayerMixin.d.ts +42 -0
  30. package/common/mixins/UserInteractionsLayerMixin.d.ts.map +1 -0
  31. package/common/styles/{index.js → index.d.ts} +1 -0
  32. package/common/styles/index.d.ts.map +1 -0
  33. package/common/styles/realtimeDefaultStyle.d.ts +15 -0
  34. package/common/styles/realtimeDefaultStyle.d.ts.map +1 -0
  35. package/common/styles/realtimeDelayStyle.d.ts +11 -0
  36. package/common/styles/realtimeDelayStyle.d.ts.map +1 -0
  37. package/common/styles/realtimeSimpleStyle.d.ts +3 -0
  38. package/common/styles/realtimeSimpleStyle.d.ts.map +1 -0
  39. package/common/typedefs.d.ts +50 -0
  40. package/common/typedefs.d.ts.map +1 -0
  41. package/common/utils/cleanStopTime.d.ts +7 -0
  42. package/common/utils/cleanStopTime.d.ts.map +1 -0
  43. package/common/utils/compareDepartures.d.ts +9 -0
  44. package/common/utils/compareDepartures.d.ts.map +1 -0
  45. package/common/utils/createCanvas.d.ts +9 -0
  46. package/common/utils/createCanvas.d.ts.map +1 -0
  47. package/common/utils/createTrackerFilters.d.ts +12 -0
  48. package/common/utils/createTrackerFilters.d.ts.map +1 -0
  49. package/common/utils/getLayersAsFlatArray.d.ts +3 -0
  50. package/common/utils/getLayersAsFlatArray.d.ts.map +1 -0
  51. package/common/utils/getMapboxMapCopyrights.d.ts +8 -0
  52. package/common/utils/getMapboxMapCopyrights.d.ts.map +1 -0
  53. package/common/utils/getMapboxRender.d.ts +5 -0
  54. package/common/utils/getMapboxRender.d.ts.map +1 -0
  55. package/common/utils/getMaplibreRender.d.ts +5 -0
  56. package/common/utils/getMaplibreRender.d.ts.map +1 -0
  57. package/common/utils/getRealtimeModeSuffix.d.ts +8 -0
  58. package/common/utils/getRealtimeModeSuffix.d.ts.map +1 -0
  59. package/common/utils/getUrlWithParams.d.ts +9 -0
  60. package/common/utils/getUrlWithParams.d.ts.map +1 -0
  61. package/common/utils/getVehiclePosition.d.ts +14 -0
  62. package/common/utils/getVehiclePosition.d.ts.map +1 -0
  63. package/common/utils/{index.js → index.d.ts} +3 -0
  64. package/common/utils/index.d.ts.map +1 -0
  65. package/common/utils/removeDuplicate.d.ts +10 -0
  66. package/common/utils/removeDuplicate.d.ts.map +1 -0
  67. package/common/utils/renderTrajectories.d.ts +20 -0
  68. package/common/utils/renderTrajectories.d.ts.map +1 -0
  69. package/common/utils/sortByDelay.d.ts +3 -0
  70. package/common/utils/sortByDelay.d.ts.map +1 -0
  71. package/common/utils/timeUtils.d.ts +5 -0
  72. package/common/utils/timeUtils.d.ts.map +1 -0
  73. package/common/utils/trackerConfig.d.ts +24 -0
  74. package/common/utils/trackerConfig.d.ts.map +1 -0
  75. package/iife.d.ts +3 -0
  76. package/iife.d.ts.map +1 -0
  77. package/index.d.ts +6 -0
  78. package/index.d.ts.map +1 -0
  79. package/mapbox/controls/CopyrightControl.d.ts +32 -0
  80. package/mapbox/controls/CopyrightControl.d.ts.map +1 -0
  81. package/mapbox/controls/{index.js → index.d.ts} +1 -0
  82. package/mapbox/controls/index.d.ts.map +1 -0
  83. package/mapbox/{index.js → index.d.ts} +1 -0
  84. package/mapbox/index.d.ts.map +1 -0
  85. package/mapbox/layers/Layer.d.ts +47 -0
  86. package/mapbox/layers/Layer.d.ts.map +1 -0
  87. package/mapbox/layers/RealtimeLayer.d.ts +118 -0
  88. package/mapbox/layers/RealtimeLayer.d.ts.map +1 -0
  89. package/mapbox/layers/{index.js → index.d.ts} +1 -0
  90. package/mapbox/layers/index.d.ts.map +1 -0
  91. package/mapbox/utils.d.ts +8 -0
  92. package/mapbox/utils.d.ts.map +1 -0
  93. package/mbt.js +2049 -2106
  94. package/mbt.js.map +3 -3
  95. package/mbt.min.js +18 -18
  96. package/mbt.min.js.map +3 -3
  97. package/ol/controls/CopyrightControl.d.ts +31 -0
  98. package/ol/controls/CopyrightControl.d.ts.map +1 -0
  99. package/ol/controls/RoutingControl.d.ts +180 -0
  100. package/ol/controls/RoutingControl.d.ts.map +1 -0
  101. package/ol/controls/StopFinderControl.d.ts +32 -0
  102. package/ol/controls/StopFinderControl.d.ts.map +1 -0
  103. package/ol/controls/{index.js → index.d.ts} +1 -0
  104. package/ol/controls/index.d.ts.map +1 -0
  105. package/ol/{index.js → index.d.ts} +1 -0
  106. package/ol/index.d.ts.map +1 -0
  107. package/ol/layers/Layer.d.ts +49 -0
  108. package/ol/layers/Layer.d.ts.map +1 -0
  109. package/ol/layers/MapboxLayer.d.ts +42 -0
  110. package/ol/layers/MapboxLayer.d.ts.map +1 -0
  111. package/ol/layers/MapboxStyleLayer.d.ts +146 -0
  112. package/ol/layers/MapboxStyleLayer.d.ts.map +1 -0
  113. package/ol/layers/MaplibreLayer.d.ts +27 -0
  114. package/ol/layers/MaplibreLayer.d.ts.map +1 -0
  115. package/ol/layers/RealtimeLayer.d.ts +119 -0
  116. package/ol/layers/RealtimeLayer.d.ts.map +1 -0
  117. package/ol/layers/RoutingLayer.d.ts +24 -0
  118. package/ol/layers/RoutingLayer.d.ts.map +1 -0
  119. package/ol/layers/VectorLayer.d.ts +23 -0
  120. package/ol/layers/VectorLayer.d.ts.map +1 -0
  121. package/ol/layers/WMSLayer.d.ts +38 -0
  122. package/ol/layers/WMSLayer.d.ts.map +1 -0
  123. package/ol/layers/{index.js → index.d.ts} +1 -0
  124. package/ol/layers/index.d.ts.map +1 -0
  125. package/ol/styles/fullTrajectoryDelayStyle.d.ts +4 -0
  126. package/ol/styles/fullTrajectoryDelayStyle.d.ts.map +1 -0
  127. package/ol/styles/fullTrajectoryStyle.d.ts +4 -0
  128. package/ol/styles/fullTrajectoryStyle.d.ts.map +1 -0
  129. package/ol/styles/{index.js → index.d.ts} +1 -0
  130. package/ol/styles/index.d.ts.map +1 -0
  131. package/package.json +14 -36
  132. package/setupTests.d.ts +2 -0
  133. package/setupTests.d.ts.map +1 -0
  134. package/types/index.d.ts +7 -6
  135. package/types/routing.d.ts +25 -25
  136. package/types/stops.d.ts +19 -19
  137. package/api/RealtimeAPI.js +0 -357
  138. package/api/RealtimeAPI.test.js +0 -67
  139. package/api/RoutingAPI.js +0 -15
  140. package/api/RoutingAPI.test.js +0 -25
  141. package/api/StopsAPI.js +0 -12
  142. package/api/StopsAPI.test.js +0 -22
  143. package/api/index.js +0 -3
  144. package/api/typedefs.js +0 -0
  145. package/common/api/HttpAPI.js +0 -32
  146. package/common/api/HttpAPI.test.js +0 -50
  147. package/common/api/WebSocketAPI.js +0 -175
  148. package/common/api/WebSocketAPI.test.js +0 -311
  149. package/common/controls/Control.js +0 -81
  150. package/common/controls/Control.test.js +0 -87
  151. package/common/layers/Layer.js +0 -140
  152. package/common/layers/Layer.test.js +0 -134
  153. package/common/mixins/CopyrightMixin.js +0 -24
  154. package/common/mixins/RealtimeLayerMixin.js +0 -436
  155. package/common/mixins/StopFinderMixin.js +0 -110
  156. package/common/mixins/UserInteractionsLayerMixin.js +0 -124
  157. package/common/mixins/UserInteractionsLayerMixin.test.js +0 -199
  158. package/common/styles/realtimeDefaultStyle.js +0 -202
  159. package/common/styles/realtimeDelayStyle.js +0 -8
  160. package/common/styles/realtimeSimpleStyle.js +0 -18
  161. package/common/typedefs.js +0 -0
  162. package/common/utils/cleanStopTime.js +0 -19
  163. package/common/utils/compareDepartures.js +0 -25
  164. package/common/utils/createCanvas.js +0 -17
  165. package/common/utils/createTrackerFilters.js +0 -56
  166. package/common/utils/createTrackerFilters.test.js +0 -79
  167. package/common/utils/getLayersAsFlatArray.js +0 -14
  168. package/common/utils/getMapboxMapCopyrights.js +0 -19
  169. package/common/utils/getMapboxMapCopyrights.test.js +0 -40
  170. package/common/utils/getRealtimeModeSuffix.js +0 -2
  171. package/common/utils/getUrlWithParams.js +0 -11
  172. package/common/utils/getVehiclePosition.js +0 -42
  173. package/common/utils/removeDuplicate.js +0 -8
  174. package/common/utils/removeDuplicate.test.js +0 -19
  175. package/common/utils/renderTrajectories.js +0 -86
  176. package/common/utils/sortByDelay.js +0 -18
  177. package/common/utils/timeUtils.js +0 -20
  178. package/common/utils/timeUtils.test.js +0 -10
  179. package/common/utils/trackerConfig.js +0 -129
  180. package/common/utils/trackerConfig.test.js +0 -23
  181. package/index.js +0 -8
  182. package/mapbox/controls/CopyrightControl.js +0 -29
  183. package/mapbox/layers/Layer.js +0 -56
  184. package/mapbox/layers/Layer.test.js +0 -182
  185. package/mapbox/layers/RealtimeLayer.js +0 -185
  186. package/mapbox/layers/RealtimeLayer.test.js +0 -10
  187. package/mapbox/utils.js +0 -32
  188. package/ol/controls/CopyrightControl.js +0 -42
  189. package/ol/controls/CopyrightControl.test.js +0 -165
  190. package/ol/controls/RoutingControl.js +0 -388
  191. package/ol/controls/RoutingControl.test.js +0 -146
  192. package/ol/controls/StopFinderControl.js +0 -10
  193. package/ol/controls/StopFinderControl.test.js +0 -48
  194. package/ol/layers/Layer.js +0 -83
  195. package/ol/layers/Layer.test.js +0 -175
  196. package/ol/layers/MapboxLayer.js +0 -204
  197. package/ol/layers/MapboxLayer.test.js +0 -160
  198. package/ol/layers/MapboxStyleLayer.js +0 -187
  199. package/ol/layers/MapboxStyleLayer.test.js +0 -226
  200. package/ol/layers/MaplibreLayer.js +0 -140
  201. package/ol/layers/RealtimeLayer.js +0 -187
  202. package/ol/layers/RealtimeLayer.test.js +0 -67
  203. package/ol/layers/RoutingLayer.js +0 -61
  204. package/ol/layers/RoutingLayer.test.js +0 -39
  205. package/ol/layers/VectorLayer.js +0 -22
  206. package/ol/layers/VectorLayer.test.js +0 -76
  207. package/ol/layers/WMSLayer.js +0 -38
  208. package/ol/layers/WMSLayer.test.js +0 -57
  209. package/ol/styles/fullTrajectoryDelayStyle.js +0 -31
  210. package/ol/styles/fullTrajectoryStyle.js +0 -42
@@ -1,199 +0,0 @@
1
- import VectorLayer from "ol/layer/Vector";
2
- import VectorSource from "ol/source/Vector";
3
- import BaseLayer from "../layers/Layer";
4
- import mixin from "./UserInteractionsLayerMixin";
5
- const olLayer = new VectorLayer({ source: new VectorSource() });
6
- const Layer = mixin(BaseLayer);
7
- describe("Layer", () => {
8
- test("should initialize.", () => {
9
- const layer = new Layer();
10
- expect(layer).toBeInstanceOf(Layer);
11
- });
12
- test("should define default properties.", () => {
13
- const layer = new Layer();
14
- expect(layer).toBeInstanceOf(Layer);
15
- expect(layer.userInteractions).toEqual(true);
16
- expect(layer.userClickInteractions).toEqual(true);
17
- expect(layer.userHoverInteractions).toEqual(true);
18
- expect(layer.defaultUserInteractions).toBe(true);
19
- expect(layer.userClickCallbacks).toEqual([]);
20
- expect(layer.userHoverCallbacks).toEqual([]);
21
- expect(layer.userClickEventsKeys).toEqual([]);
22
- expect(layer.userHoverEventsKeys).toEqual([]);
23
- });
24
- test("should set userInteractionsXXX to false.", () => {
25
- const options = {
26
- userInteractions: false,
27
- userClickInteractions: false,
28
- userHoverInteractions: false,
29
- defaultUserInteractions: false
30
- };
31
- const layer = new Layer(options);
32
- expect(layer).toBeInstanceOf(Layer);
33
- expect(layer.userInteractions).toBe(false);
34
- expect(layer.userClickInteractions).toBe(false);
35
- expect(layer.userHoverInteractions).toBe(false);
36
- expect(layer.defaultUserInteractions).toBe(false);
37
- });
38
- test("should set onClick using constructor", () => {
39
- const fn = () => {
40
- };
41
- const layer = new Layer({
42
- onClick: fn,
43
- onHover: fn
44
- });
45
- expect(layer.userClickCallbacks[0]).toBe(fn);
46
- expect(layer.userHoverCallbacks[0]).toBe(fn);
47
- expect(layer.userClickEventsKeys.length).toBe(0);
48
- expect(layer.userHoverEventsKeys.length).toBe(0);
49
- });
50
- describe("#attachToMap()", () => {
51
- test("should not add events if no callbacks", () => {
52
- const layer = new Layer({
53
- olLayer
54
- });
55
- expect(layer.map).toBe(void 0);
56
- const obj = {};
57
- layer.attachToMap(obj);
58
- expect(layer.userClickEventsKeys.length).toBe(0);
59
- expect(layer.userHoverEventsKeys.length).toBe(0);
60
- });
61
- test("should add events", () => {
62
- const fn = () => {
63
- };
64
- const layer = new Layer({
65
- olLayer,
66
- onClick: fn,
67
- onHover: fn
68
- });
69
- expect(layer.map).toBe(void 0);
70
- const obj = {};
71
- layer.attachToMap(obj);
72
- expect(layer.userClickEventsKeys.length).toBe(1);
73
- expect(layer.userHoverEventsKeys.length).toBe(1);
74
- });
75
- });
76
- describe("#onClick()", () => {
77
- test("adds function to callback array", () => {
78
- const layer = new Layer();
79
- const fn = jest.fn();
80
- const fn2 = jest.fn();
81
- layer.onClick(fn);
82
- expect(layer.userClickCallbacks).toEqual([fn]);
83
- layer.onClick(fn2);
84
- expect(layer.userClickCallbacks).toEqual([fn, fn2]);
85
- expect(layer.userClickEventsKeys.length).toBe(0);
86
- layer.attachToMap({});
87
- expect(layer.userClickEventsKeys.length).toBe(2);
88
- });
89
- });
90
- describe("#onHover()", () => {
91
- test("adds function to callback array", () => {
92
- const layer = new Layer();
93
- const fn = jest.fn();
94
- const fn2 = jest.fn();
95
- layer.onHover(fn);
96
- expect(layer.userHoverCallbacks).toEqual([fn]);
97
- layer.onHover(fn2);
98
- expect(layer.userHoverCallbacks).toEqual([fn, fn2]);
99
- expect(layer.userHoverEventsKeys.length).toBe(0);
100
- layer.attachToMap({});
101
- expect(layer.userHoverEventsKeys.length).toBe(2);
102
- });
103
- });
104
- describe("#onUserClickCallback()", () => {
105
- const evt = { type: "signleclick", coordinate: [0, 0] };
106
- const getFeatureInfo = (layer, features = []) => ({
107
- features,
108
- layer,
109
- coordinate: evt.coordinate,
110
- event: evt
111
- });
112
- test("calls click callback functions", async (done) => {
113
- const layer = new Layer();
114
- const goodFeatureInfo = getFeatureInfo(layer, [{ name: "test" }]);
115
- const fn = jest.fn();
116
- const fn2 = jest.fn();
117
- const spy = jest.spyOn(layer, "getFeatureInfoAtCoordinate").mockResolvedValue(goodFeatureInfo);
118
- layer.onClick(fn);
119
- layer.onClick(fn2);
120
- layer.attachToMap({});
121
- layer.onUserClickCallback(evt).then((featureInfo) => {
122
- expect(spy).toHaveBeenCalledTimes(1);
123
- expect(spy).toHaveBeenCalledWith(evt.coordinate);
124
- expect(featureInfo).toBe(goodFeatureInfo);
125
- expect(fn).toHaveBeenCalledTimes(1);
126
- expect(fn.mock.calls[0][0]).toBe(goodFeatureInfo.features);
127
- expect(fn.mock.calls[0][1]).toBe(goodFeatureInfo.layer);
128
- expect(fn.mock.calls[0][2]).toBe(goodFeatureInfo.coordinate);
129
- expect(fn2).toHaveBeenCalledTimes(1);
130
- expect(fn2.mock.calls[0][0]).toBe(goodFeatureInfo.features);
131
- expect(fn2.mock.calls[0][1]).toBe(goodFeatureInfo.layer);
132
- expect(fn2.mock.calls[0][2]).toBe(goodFeatureInfo.coordinate);
133
- done();
134
- });
135
- });
136
- describe("returns empty feature info", () => {
137
- test("if an error is thrown in click callback", (done) => {
138
- const layer = new Layer();
139
- layer.onClick(() => {
140
- throw new Error("foo");
141
- });
142
- const goodFeatureInfo = getFeatureInfo(layer, [{ name: "test" }]);
143
- jest.spyOn(layer, "getFeatureInfoAtCoordinate").mockResolvedValue(goodFeatureInfo);
144
- layer.attachToMap({});
145
- layer.onUserClickCallback(evt).then((featureInfo) => {
146
- expect(featureInfo).toEqual(getFeatureInfo(layer));
147
- done();
148
- });
149
- });
150
- });
151
- });
152
- describe("#onUserMoveCallback()", () => {
153
- const evt = { type: "pointermove", coordinate: [0, 0] };
154
- const getFeatureInfo = (layer, features = []) => ({
155
- features,
156
- layer,
157
- coordinate: evt.coordinate,
158
- event: evt
159
- });
160
- test("calls hover callback functions", (done) => {
161
- const layer = new Layer();
162
- const goodFeatureInfo = getFeatureInfo(layer, [{ name: "test" }]);
163
- const fn = jest.fn();
164
- const fn2 = jest.fn();
165
- const spy = jest.spyOn(layer, "getFeatureInfoAtCoordinate").mockResolvedValue(goodFeatureInfo);
166
- layer.onHover(fn);
167
- layer.onHover(fn2);
168
- layer.attachToMap({});
169
- layer.onUserMoveCallback(evt).then((featureInfo) => {
170
- expect(spy).toHaveBeenCalledTimes(1);
171
- expect(spy).toHaveBeenCalledWith(evt.coordinate);
172
- expect(featureInfo).toBe(goodFeatureInfo);
173
- expect(fn).toHaveBeenCalledTimes(1);
174
- expect(fn.mock.calls[0][0]).toBe(goodFeatureInfo.features);
175
- expect(fn.mock.calls[0][1]).toBe(goodFeatureInfo.layer);
176
- expect(fn.mock.calls[0][2]).toBe(goodFeatureInfo.coordinate);
177
- expect(fn2).toHaveBeenCalledTimes(1);
178
- expect(fn2.mock.calls[0][0]).toBe(goodFeatureInfo.features);
179
- expect(fn2.mock.calls[0][1]).toBe(goodFeatureInfo.layer);
180
- expect(fn2.mock.calls[0][2]).toBe(goodFeatureInfo.coordinate);
181
- done();
182
- });
183
- });
184
- describe("returns empty feature info", () => {
185
- test("if an error is thrown in hover callback", (done) => {
186
- const layer = new Layer();
187
- layer.onHover(() => {
188
- throw new Error("foo");
189
- });
190
- jest.spyOn(layer, "getFeatureInfoAtCoordinate").mockResolvedValue(getFeatureInfo(layer, [{ name: "test" }]));
191
- layer.attachToMap({});
192
- layer.onUserMoveCallback(evt).then((featureInfo) => {
193
- expect(featureInfo).toEqual(getFeatureInfo(layer));
194
- done();
195
- });
196
- });
197
- });
198
- });
199
- });
@@ -1,202 +0,0 @@
1
- import createCanvas from "../utils/createCanvas";
2
- const cacheDelayBg = {};
3
- export const getDelayBgCanvas = (origin, radius, color) => {
4
- const key = `${origin}, ${radius}, ${color}`;
5
- if (!cacheDelayBg[key]) {
6
- const canvas = createCanvas(origin * 2, origin * 2);
7
- if (canvas) {
8
- const ctx = canvas.getContext("2d");
9
- ctx.beginPath();
10
- ctx.arc(origin, origin, radius, 0, 2 * Math.PI, false);
11
- ctx.fillStyle = color;
12
- ctx.filter = "blur(1px)";
13
- ctx.fill();
14
- cacheDelayBg[key] = canvas;
15
- }
16
- }
17
- return cacheDelayBg[key];
18
- };
19
- const cacheDelayText = {};
20
- export const getDelayTextCanvas = (width, text, fontSize, font, delayColor, delayOutlineColor = "#000", pixelRatio = 1) => {
21
- const key = `${width}, ${text}, ${font}, ${delayColor}, ${delayOutlineColor}, ${pixelRatio}`;
22
- if (!cacheDelayText[key]) {
23
- const canvas = createCanvas(width, fontSize + 8 * pixelRatio);
24
- if (canvas) {
25
- const ctx = canvas.getContext("2d");
26
- ctx.textAlign = "left";
27
- ctx.textBaseline = "middle";
28
- ctx.font = font;
29
- ctx.fillStyle = delayColor;
30
- ctx.strokeStyle = delayOutlineColor;
31
- ctx.lineWidth = 1.5 * pixelRatio;
32
- const delayText = text;
33
- ctx.strokeText(delayText, 0, fontSize);
34
- ctx.fillText(delayText, 0, fontSize);
35
- cacheDelayText[key] = canvas;
36
- }
37
- }
38
- return cacheDelayText[key];
39
- };
40
- const cacheCircle = {};
41
- export const getCircleCanvas = (origin, radius, color, hasStroke, hasDash, pixelRatio) => {
42
- const key = `${origin}, ${radius}, ${color}, ${hasStroke}, ${hasDash}, ${pixelRatio}`;
43
- if (!cacheCircle[key]) {
44
- const canvas = createCanvas(origin * 2, origin * 2);
45
- if (canvas) {
46
- const ctx = canvas.getContext("2d");
47
- ctx.fillStyle = color;
48
- if (hasStroke) {
49
- ctx.lineWidth = 1 * pixelRatio;
50
- ctx.strokeStyle = "#000000";
51
- }
52
- ctx.beginPath();
53
- ctx.arc(origin, origin, radius, 0, 2 * Math.PI, false);
54
- ctx.fill();
55
- if (hasDash) {
56
- ctx.setLineDash([5, 3]);
57
- }
58
- if (hasStroke) {
59
- ctx.stroke();
60
- }
61
- cacheCircle[key] = canvas;
62
- }
63
- }
64
- return cacheCircle[key];
65
- };
66
- const cacheText = {};
67
- export const getTextCanvas = (text, origin, textSize, fillColor, strokeColor, hasStroke, pixelRatio) => {
68
- const key = `${text}, ${origin}, ${textSize}, ${fillColor},${strokeColor}, ${hasStroke}, ${pixelRatio}`;
69
- if (!cacheText[key]) {
70
- const canvas = createCanvas(origin * 2, origin * 2);
71
- if (canvas) {
72
- const ctx = canvas.getContext("2d");
73
- if (hasStroke) {
74
- ctx.save();
75
- ctx.textBaseline = "middle";
76
- ctx.textAlign = "center";
77
- ctx.font = `bold ${textSize + 2}px Arial`;
78
- ctx.strokeStyle = strokeColor;
79
- ctx.strokeText(text, origin, origin);
80
- ctx.restore();
81
- }
82
- ctx.textBaseline = "middle";
83
- ctx.textAlign = "center";
84
- ctx.fillStyle = fillColor;
85
- ctx.font = `bold ${textSize}px Arial`;
86
- ctx.strokeStyle = strokeColor;
87
- ctx.strokeText(text, origin, origin);
88
- ctx.fillText(text, origin, origin);
89
- cacheText[key] = canvas;
90
- }
91
- }
92
- return cacheText[key];
93
- };
94
- const cache = {};
95
- const realtimeDefaultStyle = (trajectory, viewState, options) => {
96
- const {
97
- hoverVehicleId,
98
- selectedVehicleId,
99
- useDelayStyle,
100
- delayOutlineColor = "#000",
101
- delayDisplay = 3e5,
102
- getRadius,
103
- getBgColor,
104
- getDelayColor,
105
- getDelayText,
106
- getTextColor,
107
- getTextSize
108
- } = options;
109
- const { zoom, pixelRatio } = viewState;
110
- let { type, cancelled } = trajectory.properties;
111
- const {
112
- train_id: id,
113
- line,
114
- delay,
115
- state,
116
- operator_provides_realtime_journey: operatorProvidesRealtime
117
- } = trajectory.properties;
118
- let { name, text_color: textColor, color } = line || {};
119
- cancelled = cancelled === true || state === "JOURNEY_CANCELLED";
120
- if (!type) {
121
- type = "Rail";
122
- }
123
- if (!name) {
124
- name = "I";
125
- }
126
- if (!textColor) {
127
- textColor = "#000000";
128
- }
129
- if (color && color[0] !== "#") {
130
- color = `#${color}`;
131
- }
132
- if (textColor[0] !== "#") {
133
- textColor = `#${textColor}`;
134
- }
135
- const z = Math.min(Math.floor(zoom || 1), 16);
136
- const hover = hoverVehicleId && hoverVehicleId === id;
137
- const selected = selectedVehicleId && selectedVehicleId === id;
138
- let radius = getRadius(type, z) * pixelRatio;
139
- const isDisplayStrokeAndDelay = radius >= 7 * pixelRatio;
140
- if (hover || selected) {
141
- radius = isDisplayStrokeAndDelay ? radius + 5 * pixelRatio : 14 * pixelRatio;
142
- }
143
- const mustDrawText = radius > 10 * pixelRatio;
144
- let key = `${radius}${hover}${selected}${cancelled}${delay}`;
145
- if (useDelayStyle) {
146
- key += `${operatorProvidesRealtime}`;
147
- } else {
148
- key += `${type}${color}`;
149
- }
150
- if (mustDrawText) {
151
- key += `${name}${textColor}`;
152
- }
153
- if (!cache[key]) {
154
- if (radius === 0) {
155
- cache[key] = null;
156
- return null;
157
- }
158
- const margin = 1 * pixelRatio;
159
- const radiusDelay = radius + 2;
160
- const markerSize = radius * 2;
161
- const size = radiusDelay * 2 + margin * 2 + 100 * pixelRatio;
162
- const origin = size / 2;
163
- const canvas = createCanvas(size, size);
164
- if (canvas) {
165
- const ctx = canvas.getContext("2d");
166
- if (isDisplayStrokeAndDelay && delay !== null) {
167
- const delayBg = getDelayBgCanvas(origin, radiusDelay, getDelayColor(delay, cancelled));
168
- ctx.drawImage(delayBg, 0, 0);
169
- }
170
- if (isDisplayStrokeAndDelay && (hover || delay >= delayDisplay || cancelled)) {
171
- const fontSize = Math.max(cancelled ? 19 : 14, Math.min(cancelled ? 19 : 17, radius * 1.2)) * pixelRatio;
172
- const text = getDelayText(delay, cancelled);
173
- if (text) {
174
- const textWidth = text.length * fontSize;
175
- const delayText = getDelayTextCanvas(textWidth, text, fontSize, `bold ${fontSize}px arial, sans-serif`, getDelayColor(delay, cancelled, true), delayOutlineColor, pixelRatio);
176
- ctx.drawImage(delayText, origin + radiusDelay + margin, origin - fontSize);
177
- }
178
- }
179
- let circleFillColor;
180
- if (useDelayStyle) {
181
- circleFillColor = getDelayColor(delay, cancelled);
182
- } else {
183
- circleFillColor = color || getBgColor(type);
184
- }
185
- const hasStroke = isDisplayStrokeAndDelay || hover || selected;
186
- const hasDash = isDisplayStrokeAndDelay && useDelayStyle && delay === null && operatorProvidesRealtime === "yes";
187
- const circle = getCircleCanvas(origin, radius, circleFillColor, hasStroke, hasDash, pixelRatio);
188
- ctx.drawImage(circle, 0, 0);
189
- if (mustDrawText) {
190
- const fontSize = Math.max(radius, 10);
191
- const textSize = getTextSize(ctx, markerSize, name, fontSize);
192
- const textColor2 = !useDelayStyle ? textColor || getTextColor(type) : "#000000";
193
- const hasStroke2 = useDelayStyle && delay === null && operatorProvidesRealtime === "yes";
194
- const text = getTextCanvas(name, origin, textSize, textColor2, circleFillColor, hasStroke2, pixelRatio);
195
- ctx.drawImage(text, 0, 0);
196
- }
197
- cache[key] = canvas;
198
- }
199
- }
200
- return cache[key];
201
- };
202
- export default realtimeDefaultStyle;
@@ -1,8 +0,0 @@
1
- import realtimeDefaultStyle from "./realtimeDefaultStyle";
2
- const realtimeDelayStyle = (trajectory, viewState, options) => {
3
- return realtimeDefaultStyle(trajectory, viewState, {
4
- ...options,
5
- useDelayStyle: true
6
- });
7
- };
8
- export default realtimeDelayStyle;
@@ -1,18 +0,0 @@
1
- let canvas;
2
- const realtimeSimpleStyle = () => {
3
- if (!canvas) {
4
- document.createElement("canvas");
5
- canvas.width = 15;
6
- canvas.height = 15;
7
- const ctx = canvas.getContext("2d");
8
- ctx.arc(8, 8, 5, 0, 2 * Math.PI, false);
9
- ctx.fillStyle = "#8ED6FF";
10
- ctx.fill();
11
- ctx.lineWidth = 3;
12
- ctx.strokeStyle = "black";
13
- ctx.stroke();
14
- ctx.lineWidth = 3;
15
- }
16
- return canvas;
17
- };
18
- export default realtimeSimpleStyle;
File without changes
@@ -1,19 +0,0 @@
1
- const cleanStopTime = (content) => {
2
- if (!content) {
3
- return;
4
- }
5
- content.stations.forEach((station) => {
6
- station.arrivalTimeWithDelay = station.arrivalTime;
7
- if (station.departureTime) {
8
- station.departureTimeWithDelay = station.departureTime;
9
- }
10
- if (station.arrivalDelay) {
11
- station.arrivalTime -= station.arrivalDelay;
12
- if (station.departureTime) {
13
- station.departureTime -= station.arrivalDelay;
14
- }
15
- }
16
- });
17
- return content;
18
- };
19
- export default cleanStopTime;
@@ -1,25 +0,0 @@
1
- const compareDepartures = (a, b, sortByMinArrivalTime = false) => {
2
- const topStates = ["HIDDEN", "LEAVING", "BOARDING"];
3
- const aTop = a.has_fzo && topStates.indexOf(a.state) > -1;
4
- const bTop = b.has_fzo && topStates.indexOf(b.state) > -1;
5
- if (aTop || bTop) {
6
- if (aTop !== bTop) {
7
- return aTop ? -1 : 1;
8
- }
9
- if (a.state !== b.state) {
10
- return topStates.indexOf(a.state) - topStates.indexOf(b.state);
11
- }
12
- }
13
- let aDuration = null;
14
- let bDuration = null;
15
- const now = Date.now();
16
- if (sortByMinArrivalTime) {
17
- aDuration = new Date(a.min_arrival_time || a.time).getTime() - now;
18
- bDuration = new Date(b.min_arrival_time || b.time).getTime() - now;
19
- } else {
20
- aDuration = new Date(a.time).getTime() - now;
21
- bDuration = new Date(b.time).getTime() - now;
22
- }
23
- return aDuration - bDuration;
24
- };
25
- export default compareDepartures;
@@ -1,17 +0,0 @@
1
- const createCanvas = (width, height) => {
2
- let canvas = null;
3
- if (typeof window === "undefined") {
4
- return null;
5
- }
6
- if (document?.createElement) {
7
- canvas = document.createElement("canvas");
8
- canvas.width = width;
9
- canvas.height = height;
10
- } else if (OffscreenCanvas) {
11
- canvas = new OffscreenCanvas(width, height);
12
- } else {
13
- console.error("We didn't find a way to create a canvas element, document.createElement('canvas') and new OffscrenCanvas() are not supported");
14
- }
15
- return canvas;
16
- };
17
- export default createCanvas;
@@ -1,56 +0,0 @@
1
- const createFilters = (line, route, operator, regexLine) => {
2
- const filterList = [];
3
- if (!line && !route && !operator && !regexLine) {
4
- return null;
5
- }
6
- if (regexLine) {
7
- const regexLineList = typeof regexLine === "string" ? [regexLine] : regexLine;
8
- const lineFilter = (item) => {
9
- const name = item.properties.name || item.properties.line && item.properties.line.name || "";
10
- if (!name) {
11
- return false;
12
- }
13
- return regexLineList.some((regexStr) => new RegExp(regexStr, "i").test(name));
14
- };
15
- filterList.push(lineFilter);
16
- }
17
- if (line) {
18
- const lineFiltersList = typeof line === "string" ? line.split(",") : line;
19
- const lineList = lineFiltersList.map((l) => l.replace(/\s+/g, "").toUpperCase());
20
- const lineFilter = (item) => {
21
- const { line: linee, name } = item.properties;
22
- const lineName = (name || linee && linee.name || "").toUpperCase();
23
- if (!lineName) {
24
- return false;
25
- }
26
- return lineList.includes(lineName);
27
- };
28
- filterList.push(lineFilter);
29
- }
30
- if (route) {
31
- const routes = typeof route === "string" ? route.split(",") : route;
32
- const routeList = routes.map((item) => parseInt(item, 10));
33
- const routeFilter = (item) => {
34
- const routeId = parseInt(item.properties.routeIdentifier.split(".")[0], 10);
35
- return routeList.includes(routeId);
36
- };
37
- filterList.push(routeFilter);
38
- }
39
- if (operator) {
40
- const operatorList = typeof operator === "string" ? [operator] : operator;
41
- const operatorFilter = (item) => operatorList.some((op) => new RegExp(op, "i").test(item.properties.operator));
42
- filterList.push(operatorFilter);
43
- }
44
- if (!filterList.length) {
45
- return null;
46
- }
47
- return (t) => {
48
- for (let i = 0; i < filterList.length; i += 1) {
49
- if (!filterList[i](t)) {
50
- return false;
51
- }
52
- }
53
- return true;
54
- };
55
- };
56
- export default createFilters;
@@ -1,79 +0,0 @@
1
- import createTrackerFilters from "./createTrackerFilters";
2
- const u1 = {
3
- properties: {
4
- routeIdentifier: "001.000827.004:7",
5
- operator: "FoO",
6
- line: {
7
- name: "U1"
8
- }
9
- }
10
- };
11
- const ireta = {
12
- properties: {
13
- routeIdentifier: "0022.000827.004:7",
14
- operator: "BAR",
15
- line: {
16
- name: "IRETA"
17
- }
18
- }
19
- };
20
- const arb = {
21
- properties: {
22
- routeIdentifier: "00333.000827.004:7",
23
- operator: "qux",
24
- line: {
25
- name: "ARB"
26
- }
27
- }
28
- };
29
- const trajectories = [u1, ireta, arb];
30
- describe("#createTrackerFilter()", () => {
31
- test("returns null", () => {
32
- const filterFunc = createTrackerFilters();
33
- expect(filterFunc).toBe(null);
34
- });
35
- describe("using line", () => {
36
- test("as string", () => {
37
- const filterFunc = createTrackerFilters("u1,foo");
38
- expect(trajectories.filter(filterFunc)).toEqual([u1]);
39
- });
40
- test("as array of string", () => {
41
- const filterFunc = createTrackerFilters(["u1", "foo", "IRETA"]);
42
- expect(trajectories.filter(filterFunc)).toEqual([u1, ireta]);
43
- });
44
- });
45
- describe("using route identifier", () => {
46
- test("as string", () => {
47
- const filterFunc = createTrackerFilters(null, "1,foo");
48
- expect(trajectories.filter(filterFunc)).toEqual([u1]);
49
- });
50
- test("as array of string", () => {
51
- const filterFunc = createTrackerFilters(null, ["22", "foo", "1"]);
52
- expect(trajectories.filter(filterFunc)).toEqual([u1, ireta]);
53
- });
54
- });
55
- describe("using operator", () => {
56
- test("as string", () => {
57
- const filterFunc = createTrackerFilters(null, null, "foo");
58
- expect(trajectories.filter(filterFunc)).toEqual([u1]);
59
- });
60
- test("as array of string", () => {
61
- const filterFunc = createTrackerFilters(null, null, ["bar", "foo", "1"]);
62
- expect(trajectories.filter(filterFunc)).toEqual([u1, ireta]);
63
- });
64
- });
65
- describe("using regexLine", () => {
66
- test("as string", () => {
67
- const filterFunc = createTrackerFilters(null, null, null, "^(S|R$|RE|PE|D|IRE|RB|TER)");
68
- expect(trajectories.filter(filterFunc)).toEqual([ireta]);
69
- });
70
- test("as array of string", () => {
71
- const filterFunc = createTrackerFilters(null, null, null, [
72
- "^IR",
73
- "^ARB$",
74
- "foo"
75
- ]);
76
- expect(trajectories.filter(filterFunc)).toEqual([ireta, arb]);
77
- });
78
- });
79
- });
@@ -1,14 +0,0 @@
1
- const getLayersAsFlatArray = (layersOrLayer) => {
2
- let layers = layersOrLayer;
3
- if (!Array.isArray(layers)) {
4
- layers = [layersOrLayer];
5
- }
6
- let flatLayers = [];
7
- layers.forEach((layer) => {
8
- flatLayers.push(layer);
9
- const { children } = layer;
10
- flatLayers = flatLayers.concat(getLayersAsFlatArray(children || []));
11
- });
12
- return flatLayers;
13
- };
14
- export default getLayersAsFlatArray;
@@ -1,19 +0,0 @@
1
- import removeDuplicate from "./removeDuplicate";
2
- const getMapboxMapCopyrights = (map) => {
3
- if (!map || !map.style) {
4
- return [];
5
- }
6
- const { sourceCaches } = map.style;
7
- let copyrights = [];
8
- Object.values(sourceCaches).forEach((sourceCache) => {
9
- if (sourceCache.used) {
10
- const source = sourceCache.getSource();
11
- const attribution = source.attribution || source.options && source.options.attribution;
12
- if (attribution) {
13
- copyrights = copyrights.concat(attribution.replace(/&copy;/g, "\xA9").split(/(<a.*?<\/a>)/));
14
- }
15
- }
16
- });
17
- return removeDuplicate(copyrights);
18
- };
19
- export default getMapboxMapCopyrights;