mobility-toolbox-js 2.0.0-beta.1 → 2.0.0-beta.6

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 (303) hide show
  1. package/.babelrc +6 -0
  2. package/.esdoc.json +17 -0
  3. package/.eslintignore +1 -0
  4. package/.github/workflows/conventional-pr-title.yml +21 -0
  5. package/.github/workflows/cypress.yml +29 -0
  6. package/.github/workflows/nodejs.yml +28 -0
  7. package/.husky/commit-msg +4 -0
  8. package/.husky/post-checkout +4 -0
  9. package/.husky/post-merge +4 -0
  10. package/.husky/post-rebase +4 -0
  11. package/.husky/pre-commit +4 -0
  12. package/.neutrinorc.js +176 -0
  13. package/.nvmrc +1 -0
  14. package/CHANGELOG.md +10 -0
  15. package/LICENSE +21 -0
  16. package/Layer.js +2 -0
  17. package/Layer.js.map +7 -0
  18. package/README.md +7 -4
  19. package/__mocks__/mapbox-gl.js +81 -0
  20. package/__mocks__/maplibre-gl.js +81 -0
  21. package/commitlint.config.js +1 -0
  22. package/cypress/fixtures/example.json +5 -0
  23. package/cypress/integration/examples/api.spec.js +7 -0
  24. package/cypress/integration/examples/examples.spec.js +7 -0
  25. package/cypress/integration/examples/navigation.spec.js +29 -0
  26. package/cypress/plugins/index.js +21 -0
  27. package/cypress/support/commands.js +25 -0
  28. package/cypress/support/index.js +20 -0
  29. package/cypress.json +4 -0
  30. package/data/fetchRoute.json +292 -0
  31. package/data/fetchTrajectories.json +18 -0
  32. package/data/fetchTrajectoryById.json +3 -0
  33. package/data/fetchTrajectoryStations.json +18 -0
  34. package/data/stopsSearch.json +15 -0
  35. package/documentation.yml +4 -0
  36. package/esdoc/README.md +27 -0
  37. package/esdoc/plugins/MyPlugin.js +69 -0
  38. package/esdoc/plugins/dynamic-property-plugin/Plugin.js +50 -0
  39. package/esdoc/plugins/externals-plugin/Plugin.js +45 -0
  40. package/esdoc/plugins/externals-plugin/externals.js +96 -0
  41. package/global-setup.js +3 -0
  42. package/{ol/README.md → index.html} +0 -0
  43. package/indexweb.html +49 -0
  44. package/jest.config.js +5 -0
  45. package/package.json +34 -13
  46. package/pull_request_template.md +17 -0
  47. package/renovate.json +4 -0
  48. package/scripts/read-pkg-json.js +22 -0
  49. package/{api → src/api}/index.js +0 -1
  50. package/{api → src/api}/routing/RoutingAPI.js +0 -0
  51. package/{api → src/api}/routing/RoutingAPI.test.js +0 -0
  52. package/{api → src/api}/stops/StopsAPI.js +0 -0
  53. package/{api → src/api}/stops/StopsAPI.test.js +0 -0
  54. package/{api → src/api}/tralis/TralisAPI.js +1 -1
  55. package/{api → src/api}/tralis/TralisAPI.test.js +0 -0
  56. package/{api → src/api}/tralis/TralisAPIUtils.js +0 -0
  57. package/{api → src/api}/tralis/WebSocketConnector.js +0 -0
  58. package/{api → src/api}/tralis/WebSocketConnector.test.js +0 -0
  59. package/{api → src/api}/tralis/typedefs.js +0 -0
  60. package/src/assets/Lato-Black.ttf +0 -0
  61. package/src/assets/Lato-BlackItalic.ttf +0 -0
  62. package/src/assets/Lato-Bold.ttf +0 -0
  63. package/src/assets/Lato-BoldItalic.ttf +0 -0
  64. package/src/assets/Lato-Italic.ttf +0 -0
  65. package/src/assets/Lato-Light.ttf +0 -0
  66. package/src/assets/Lato-LightItalic.ttf +0 -0
  67. package/src/assets/Lato-Regular.ttf +0 -0
  68. package/src/assets/Lato-Thin.ttf +0 -0
  69. package/src/assets/Lato-ThinItalic.ttf +0 -0
  70. package/src/assets/OFL.txt +93 -0
  71. package/{common → src/common}/Tracker.js +0 -0
  72. package/{common → src/common}/api/api.js +0 -0
  73. package/{common → src/common}/api/api.test.js +0 -0
  74. package/{common → src/common}/controls/Control.js +4 -1
  75. package/{common → src/common}/controls/Control.test.js +0 -0
  76. package/{common → src/common}/layers/Layer.js +18 -49
  77. package/{common → src/common}/layers/Layer.test.js +2 -106
  78. package/{common → src/common}/mixins/CopyrightMixin.js +0 -0
  79. package/{common → src/common}/mixins/SearchMixin.js +1 -1
  80. package/{common/mixins/TrackerLayerMixin.js → src/common/mixins/TralisLayerMixin.js} +380 -195
  81. package/src/common/styles/index.js +4 -0
  82. package/{common/utils/delayTrackerStyle.js → src/common/styles/trackerDefaultStyle.js} +8 -8
  83. package/src/common/styles/trackerDelayStyle.js +17 -0
  84. package/src/common/styles/trackerSimpleStyle.js +22 -0
  85. package/{common → src/common}/trackerConfig.js +0 -0
  86. package/{common → src/common}/trackerConfig.test.js +0 -13
  87. package/{common → src/common}/typedefs.js +0 -0
  88. package/{common → src/common}/utils/createTrackerFilters.js +0 -0
  89. package/{common → src/common}/utils/createTrackerFilters.test.js +0 -0
  90. package/{common → src/common}/utils/getMapboxMapCopyrights.js +1 -0
  91. package/{common → src/common}/utils/getMapboxMapCopyrights.test.js +0 -0
  92. package/{common → src/common}/utils/getMapboxStyleUrl.js +0 -0
  93. package/{common → src/common}/utils/getVehiclePosition.js +0 -0
  94. package/{common → src/common}/utils/index.js +2 -3
  95. package/{common → src/common}/utils/removeDuplicate.js +0 -0
  96. package/{common → src/common}/utils/removeDuplicate.test.js +0 -0
  97. package/src/common/utils/sortByDelay.js +23 -0
  98. package/{common → src/common}/utils/timeUtils.js +0 -0
  99. package/{common → src/common}/utils/timeUtils.test.js +0 -0
  100. package/src/doc/App.js +116 -0
  101. package/src/doc/App.scss +51 -0
  102. package/src/doc/_redirects +2 -0
  103. package/src/doc/components/CodeSandboxButton.js +103 -0
  104. package/src/doc/components/Documentation.js +40 -0
  105. package/src/doc/components/Esdoc/Anchor.js +57 -0
  106. package/src/doc/components/Esdoc/ClassDoc.js +272 -0
  107. package/src/doc/components/Esdoc/DeprecatedHTML.js +16 -0
  108. package/src/doc/components/Esdoc/DetailDocs.js +281 -0
  109. package/src/doc/components/Esdoc/DetailHTML.js +33 -0
  110. package/src/doc/components/Esdoc/DirectSubclassHTML.js +30 -0
  111. package/src/doc/components/Esdoc/DocBuilderUtils.js +694 -0
  112. package/src/doc/components/Esdoc/DocLinkHTML.js +62 -0
  113. package/src/doc/components/Esdoc/DocsLinkHTML.js +38 -0
  114. package/src/doc/components/Esdoc/Esdoc.js +63 -0
  115. package/src/doc/components/Esdoc/EsdocContent.js +51 -0
  116. package/src/doc/components/Esdoc/EsdocNavigation.js +13 -0
  117. package/src/doc/components/Esdoc/EsdocSearch.js +81 -0
  118. package/src/doc/components/Esdoc/ExperimentalHTML.js +17 -0
  119. package/src/doc/components/Esdoc/ExtendsChainHTML.js +32 -0
  120. package/src/doc/components/Esdoc/FileDocLinkHTML.js +60 -0
  121. package/src/doc/components/Esdoc/IdentifiersDoc.js +113 -0
  122. package/src/doc/components/Esdoc/IndirectSubclassHTML.js +30 -0
  123. package/src/doc/components/Esdoc/InheritedSummaryDoc.js +70 -0
  124. package/src/doc/components/Esdoc/InheritedSummaryHTML.js +38 -0
  125. package/src/doc/components/Esdoc/MixinClassesHTML.js +29 -0
  126. package/src/doc/components/Esdoc/NavDoc.js +112 -0
  127. package/src/doc/components/Esdoc/OverrideMethod.js +44 -0
  128. package/src/doc/components/Esdoc/OverrideMethodDescription.js +35 -0
  129. package/src/doc/components/Esdoc/Properties.js +89 -0
  130. package/src/doc/components/Esdoc/README.md +45 -0
  131. package/src/doc/components/Esdoc/SignatureHTML.js +123 -0
  132. package/src/doc/components/Esdoc/SingleDoc.js +31 -0
  133. package/src/doc/components/Esdoc/SummaryDoc.js +160 -0
  134. package/src/doc/components/Esdoc/SummaryHTML.js +96 -0
  135. package/src/doc/components/Esdoc/TypeDocLinkHTML.js +249 -0
  136. package/src/doc/components/Esdoc/css/identifiers.css +38 -0
  137. package/src/doc/components/Esdoc/css/search.css +76 -0
  138. package/src/doc/components/Esdoc/css/style.css +603 -0
  139. package/src/doc/components/Esdoc/index.js +7 -0
  140. package/src/doc/components/Example.js +153 -0
  141. package/src/doc/components/Examples.js +183 -0
  142. package/src/doc/components/Home.js +106 -0
  143. package/src/doc/components/TrackerExample.js +38 -0
  144. package/src/doc/components/esm.min.js +2 -0
  145. package/src/doc/components/examples/assets/tralis-live-map/index.js +11 -0
  146. package/src/doc/components/examples/assets/tralis-live-map/s1kreis.svg +105 -0
  147. package/src/doc/components/examples/assets/tralis-live-map/s20kreis.svg +101 -0
  148. package/src/doc/components/examples/assets/tralis-live-map/s2kreis.svg +95 -0
  149. package/src/doc/components/examples/assets/tralis-live-map/s3kreis.svg +95 -0
  150. package/src/doc/components/examples/assets/tralis-live-map/s4kreis.svg +95 -0
  151. package/src/doc/components/examples/assets/tralis-live-map/s6kreis.svg +95 -0
  152. package/src/doc/components/examples/assets/tralis-live-map/s7kreis.svg +95 -0
  153. package/src/doc/components/examples/assets/tralis-live-map/s8kreis.svg +93 -0
  154. package/src/doc/components/examples/assets/tralis-live-map/unknown.svg +107 -0
  155. package/src/doc/components/examples/mb-copyright.html +26 -0
  156. package/src/doc/components/examples/mb-copyright.js +37 -0
  157. package/src/doc/components/examples/mb-tracker.html +1 -0
  158. package/src/doc/components/examples/mb-tracker.js +39 -0
  159. package/src/doc/components/examples/mb-tracker.md +1 -0
  160. package/src/doc/components/examples/mb-tralis.html +1 -0
  161. package/src/doc/components/examples/mb-tralis.js +34 -0
  162. package/src/doc/components/examples/ol-copyright.html +26 -0
  163. package/src/doc/components/examples/ol-copyright.js +43 -0
  164. package/src/doc/components/examples/ol-mapbox-layer.html +1 -0
  165. package/src/doc/components/examples/ol-mapbox-layer.js +28 -0
  166. package/src/doc/components/examples/ol-mapbox-layer.md +0 -0
  167. package/src/doc/components/examples/ol-mapbox-style-layer.html +12 -0
  168. package/src/doc/components/examples/ol-mapbox-style-layer.js +44 -0
  169. package/src/doc/components/examples/ol-query.html +32 -0
  170. package/src/doc/components/examples/ol-query.js +83 -0
  171. package/src/doc/components/examples/ol-routing.html +26 -0
  172. package/src/doc/components/examples/ol-routing.js +59 -0
  173. package/src/doc/components/examples/ol-routing.md +1 -0
  174. package/src/doc/components/examples/ol-stop-finder.html +15 -0
  175. package/src/doc/components/examples/ol-stop-finder.js +31 -0
  176. package/src/doc/components/examples/ol-stop-finder.md +1 -0
  177. package/src/doc/components/examples/ol-tracker.html +1 -0
  178. package/src/doc/components/examples/ol-tracker.js +44 -0
  179. package/src/doc/components/examples/ol-tracker.md +1 -0
  180. package/src/doc/components/examples/ol-tralis.html +5 -0
  181. package/src/doc/components/examples/ol-tralis.js +57 -0
  182. package/src/doc/components/examples/tralis-live-map.html +1 -0
  183. package/src/doc/components/examples/tralis-live-map.js +51 -0
  184. package/src/doc/components/examples/tralis-live-map.md +3 -0
  185. package/src/doc/examples/assets/tralis-live-map/index.js +11 -0
  186. package/src/doc/examples/assets/tralis-live-map/s1kreis.svg +105 -0
  187. package/src/doc/examples/assets/tralis-live-map/s20kreis.svg +101 -0
  188. package/src/doc/examples/assets/tralis-live-map/s2kreis.svg +95 -0
  189. package/src/doc/examples/assets/tralis-live-map/s3kreis.svg +95 -0
  190. package/src/doc/examples/assets/tralis-live-map/s4kreis.svg +95 -0
  191. package/src/doc/examples/assets/tralis-live-map/s6kreis.svg +95 -0
  192. package/src/doc/examples/assets/tralis-live-map/s7kreis.svg +95 -0
  193. package/src/doc/examples/assets/tralis-live-map/s8kreis.svg +93 -0
  194. package/src/doc/examples/assets/tralis-live-map/unknown.svg +107 -0
  195. package/src/doc/examples/mb-copyright.html +26 -0
  196. package/src/doc/examples/mb-copyright.js +37 -0
  197. package/src/doc/examples/mb-tracker.html +1 -0
  198. package/src/doc/examples/mb-tracker.js +39 -0
  199. package/src/doc/examples/mb-tracker.md +1 -0
  200. package/src/doc/examples/mb-tralis.html +1 -0
  201. package/src/doc/examples/mb-tralis.js +34 -0
  202. package/src/doc/examples/ol-copyright.html +26 -0
  203. package/src/doc/examples/ol-copyright.js +43 -0
  204. package/src/doc/examples/ol-mapbox-layer.html +1 -0
  205. package/src/doc/examples/ol-mapbox-layer.js +28 -0
  206. package/src/doc/examples/ol-mapbox-layer.md +0 -0
  207. package/src/doc/examples/ol-mapbox-style-layer.html +12 -0
  208. package/src/doc/examples/ol-mapbox-style-layer.js +44 -0
  209. package/src/doc/examples/ol-query.html +32 -0
  210. package/src/doc/examples/ol-query.js +83 -0
  211. package/src/doc/examples/ol-routing.html +26 -0
  212. package/src/doc/examples/ol-routing.js +59 -0
  213. package/src/doc/examples/ol-routing.md +1 -0
  214. package/src/doc/examples/ol-stop-finder.html +15 -0
  215. package/src/doc/examples/ol-stop-finder.js +31 -0
  216. package/src/doc/examples/ol-stop-finder.md +1 -0
  217. package/src/doc/examples/ol-tracker.html +1 -0
  218. package/src/doc/examples/ol-tracker.js +44 -0
  219. package/src/doc/examples/ol-tracker.md +1 -0
  220. package/src/doc/examples/ol-tralis.html +5 -0
  221. package/src/doc/examples/ol-tralis.js +57 -0
  222. package/src/doc/examples/tralis-live-map.html +1 -0
  223. package/src/doc/examples/tralis-live-map.js +51 -0
  224. package/src/doc/examples/tralis-live-map.md +3 -0
  225. package/src/doc/examples.js +107 -0
  226. package/src/doc/img/examples/live_tracker_mb.jpg +0 -0
  227. package/src/doc/img/examples/live_tracker_munich.jpg +0 -0
  228. package/src/doc/img/examples/live_tracker_ol.jpg +0 -0
  229. package/src/doc/img/examples/mapbox.jpg +0 -0
  230. package/src/doc/img/examples/mapbox_style.jpg +0 -0
  231. package/src/doc/img/examples/ol-copyright.png +0 -0
  232. package/src/doc/img/examples/query_objects.jpg +0 -0
  233. package/src/doc/img/examples/routing.jpg +0 -0
  234. package/src/doc/img/examples/simple_map.jpg +0 -0
  235. package/src/doc/img/examples/stops.jpg +0 -0
  236. package/src/doc/img/favico.ico +0 -0
  237. package/src/doc/index.js +21 -0
  238. package/src/iife.js +7 -0
  239. package/{module.js → src/index.js} +3 -9
  240. package/{mapbox → src/mapbox}/controls/CopyrightControl.js +5 -1
  241. package/{mapbox → src/mapbox}/index.js +0 -2
  242. package/{mapbox → src/mapbox}/layers/Layer.js +0 -0
  243. package/{mapbox → src/mapbox}/layers/Layer.test.js +2 -2
  244. package/{mapbox/layers/TrackerLayer.js → src/mapbox/layers/TralisLayer.js} +71 -24
  245. package/src/mapbox/layers/TralisLayer.test.js +40 -0
  246. package/{mapbox → src/mapbox}/utils.js +0 -0
  247. package/src/ol/README.md +0 -0
  248. package/{ol → src/ol}/controls/CopyrightControl.js +4 -4
  249. package/{ol → src/ol}/controls/CopyrightControl.test.js +16 -16
  250. package/{ol → src/ol}/controls/RoutingControl.js +9 -7
  251. package/{ol → src/ol}/controls/RoutingControl.test.js +1 -1
  252. package/{ol → src/ol}/controls/StopFinderControl.js +8 -6
  253. package/{ol → src/ol}/controls/StopFinderControl.test.js +1 -1
  254. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen10.json +0 -0
  255. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen100.json +0 -0
  256. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen30.json +0 -0
  257. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteGen5.json +0 -0
  258. package/{ol → src/ol}/controls/snapshots/RoutingControlRouteOSM.json +0 -0
  259. package/{ol → src/ol}/controls/snapshots/RoutingControlStation1.json +0 -0
  260. package/{ol → src/ol}/controls/snapshots/RoutingControlStation2.json +0 -0
  261. package/{ol → src/ol}/index.js +3 -3
  262. package/{ol → src/ol}/layers/Layer.js +9 -0
  263. package/{ol → src/ol}/layers/Layer.test.js +22 -7
  264. package/{ol → src/ol}/layers/MapboxLayer.js +39 -44
  265. package/{ol → src/ol}/layers/MapboxLayer.test.js +5 -5
  266. package/{ol → src/ol}/layers/MapboxStyleLayer.js +0 -6
  267. package/{ol → src/ol}/layers/MapboxStyleLayer.test.js +22 -6
  268. package/src/ol/layers/MaplibreLayer.js +280 -0
  269. package/{ol → src/ol}/layers/RoutingLayer.js +0 -0
  270. package/{ol → src/ol}/layers/RoutingLayer.test.js +1 -1
  271. package/{ol/layers/TrackerLayer.js → src/ol/layers/TralisLayer.js} +96 -33
  272. package/{ol → src/ol}/layers/TralisLayer.test.js +1 -49
  273. package/{ol → src/ol}/layers/VectorLayer.js +0 -0
  274. package/{ol → src/ol}/layers/VectorLayer.test.js +1 -1
  275. package/{ol → src/ol}/layers/WMSLayer.js +0 -0
  276. package/{ol → src/ol}/layers/WMSLayer.test.js +6 -2
  277. package/src/ol/styles/fullTrajectoryDelayStyle.js +35 -0
  278. package/src/ol/styles/fullTrajectoryStyle.js +51 -0
  279. package/src/ol/styles/index.js +2 -0
  280. package/src/setupTests.js +15 -0
  281. package/webpack.config.js +6 -0
  282. package/api/trajserv/TrajservAPI.js +0 -71
  283. package/api/trajserv/TrajservAPI.test.js +0 -171
  284. package/api/trajserv/TrajservAPIUtils.js +0 -191
  285. package/api/trajserv/TrajservAPIUtils.test.js +0 -40
  286. package/api/trajserv/typedefs.js +0 -44
  287. package/common/mixins/MapMixin.js +0 -103
  288. package/common/mixins/TrajservLayerMixin.js +0 -544
  289. package/common/mixins/TralisLayerMixin.js +0 -402
  290. package/common/utils/simpleTrackerStyle.js +0 -18
  291. package/index.js +0 -2
  292. package/index.js.map +0 -1
  293. package/mapbox/Map.js +0 -87
  294. package/mapbox/layers/TrackerLayer.test.js +0 -68
  295. package/mapbox/layers/TrajservLayer.js +0 -114
  296. package/mapbox/layers/TrajservLayer.test.js +0 -90
  297. package/mapbox/layers/TralisLayer.js +0 -64
  298. package/ol/Map.js +0 -109
  299. package/ol/Map.test.js +0 -34
  300. package/ol/layers/TrackerLayer.test.js +0 -70
  301. package/ol/layers/TrajservLayer.js +0 -190
  302. package/ol/layers/TrajservLayer.test.js +0 -113
  303. package/ol/layers/TralisLayer.js +0 -177
package/mapbox/Map.js DELETED
@@ -1,87 +0,0 @@
1
- import { Map as MBMap } from 'maplibre-gl';
2
- import Layer from '../common/layers/Layer';
3
- import mixin from '../common/mixins/MapMixin';
4
- import CopyrightControl from './controls/CopyrightControl';
5
- import getMapboxStyleUrl from '../common/utils/getMapboxStyleUrl';
6
-
7
- /**
8
- * An Mapbox Map](https://docs.mapbox.com/mapbox-gl-js/api/map) for handling mobility layers and controls.
9
- *
10
- * @extends {mapboxgl.Map}
11
- * @implements {MapInterface}
12
- */
13
- class Map extends mixin(MBMap) {
14
- /**
15
- * Constructor.
16
- */
17
- constructor(options) {
18
- const { style } = options;
19
- const apiKey = options.apiKey || false;
20
- const apiKeyName = options.apiKeyName || 'key';
21
- let newStyle = options.style;
22
- if (typeof style === 'string') {
23
- newStyle = getMapboxStyleUrl(apiKey, apiKeyName, style);
24
- }
25
- super({
26
- attributionControl: false,
27
- controls: [new CopyrightControl()],
28
- ...options,
29
- style: newStyle,
30
- });
31
- }
32
-
33
- /**
34
- * Adds a layer to the map.
35
- * @param {Layer|mapboxgl.Layer} layer The layer to add.
36
- * @param {number} beforeId See [mapbox-gl-js doc](https://docs.mapbox.com/mapbox-gl-js/api/map/#map#addlayer)
37
- */
38
- addLayer(layer, beforeId) {
39
- if (layer instanceof Layer) {
40
- this.mobilityLayers.push(layer);
41
- this.fire('change:mobilityLayers');
42
-
43
- if (this.isStyleLoaded()) {
44
- layer.init(this, beforeId);
45
- } else {
46
- this.on('load', () => {
47
- layer.init(this, beforeId);
48
- });
49
- }
50
- } else {
51
- super.addLayer(layer, beforeId);
52
- }
53
- }
54
-
55
- /**
56
- * Removes a given layer from the map.
57
- * @param {Layer|number} layer The layer to remove.
58
- * If it's a mapbox-layer, pass the id instead..
59
- */
60
- removeLayer(layer) {
61
- if (layer instanceof Layer) {
62
- layer.terminate();
63
- this.mobilityLayers = this.mobilityLayers.filter((l) => l !== layer);
64
- } else {
65
- super.removeLayer(layer);
66
- }
67
- }
68
-
69
- /**
70
- * Adds a given control to the map.
71
- * @param {Control|mapboxgl.IControl} control The control to add.
72
- * @param {mapboxgl.position} position Position of the control. Only if control parameter is an <mapboxgl.IControl>.
73
- */
74
- addControl(control, position) {
75
- super.addControl(control, position);
76
- }
77
-
78
- /**
79
- * Removes a given control to the map.
80
- * @param {Control|mapboxgl.IControl} control The control to remove.
81
- */
82
- removeControl(control) {
83
- super.removeControl(control);
84
- }
85
- }
86
-
87
- export default Map;
@@ -1,68 +0,0 @@
1
- import maplibre from 'maplibre-gl';
2
- import { toLonLat } from 'ol/proj';
3
- import TrackerLayer from './TrackerLayer';
4
-
5
- let layer;
6
- let onClick;
7
-
8
- describe('TrackerLayer', () => {
9
- beforeEach(() => {
10
- onClick = jest.fn();
11
- layer = new TrackerLayer({
12
- onClick,
13
- });
14
- });
15
-
16
- test('should be instanced.', () => {
17
- expect(layer).toBeInstanceOf(TrackerLayer);
18
- expect(layer.clickCallbacks[0]).toBe(onClick);
19
- });
20
-
21
- test('should called terminate on initalization.', () => {
22
- const spy = jest.spyOn(layer, 'terminate');
23
-
24
- const mapElement = document.createElement('div');
25
- const { style } = mapElement;
26
- style.position = 'absolute';
27
- style.left = '0px';
28
- style.top = '0px';
29
- style.width = '400px';
30
- style.height = '400px';
31
- mapElement.setAttribute('id', 'map');
32
- document.body.appendChild(mapElement);
33
-
34
- layer.init(
35
- new maplibre.Map({
36
- container: document.getElementById('map'),
37
- style: `path/to/style`,
38
- center: toLonLat([831634, 5933959]),
39
- zoom: 9,
40
- }),
41
- );
42
-
43
- expect(spy).toHaveBeenCalledTimes(1);
44
- document.body.removeChild(mapElement);
45
- });
46
-
47
- test('#onClick', () => {
48
- const f = () => {};
49
- layer.onClick(f);
50
- expect(layer.clickCallbacks[1]).toBe(f);
51
- expect(layer.clickCallbacks.length).toBe(2);
52
- layer.onClick(f);
53
- expect(layer.clickCallbacks.length).toBe(2);
54
- });
55
-
56
- test('#unClick', () => {
57
- const foo = () => {};
58
- const bar = () => {};
59
- layer.onClick(foo);
60
- layer.onClick(bar);
61
- expect(layer.clickCallbacks[1]).toBe(foo);
62
- expect(layer.clickCallbacks[2]).toBe(bar);
63
- expect(layer.clickCallbacks.length).toBe(3);
64
- layer.unClick(foo);
65
- expect(layer.clickCallbacks[1]).toBe(bar);
66
- expect(layer.clickCallbacks.length).toBe(2);
67
- });
68
- });
@@ -1,114 +0,0 @@
1
- import { fromLonLat } from 'ol/proj';
2
- import { buffer, getWidth } from 'ol/extent';
3
- import { unByKey } from 'ol/Observable';
4
- import TrackerLayer from './TrackerLayer';
5
- import mixin from '../../common/mixins/TrajservLayerMixin';
6
-
7
- /**
8
- * Responsible for loading and display data from a Trajserv service.
9
- *
10
- * @example
11
- * import { TrajservLayer } from 'mobility-toolbox-js/mapbox';
12
- *
13
- * const layer = new TrajservLayer({
14
- * url: 'https://api.geops.io/tracker/v1',
15
- * apiKey: [yourApiKey],
16
- * });
17
- *
18
- * @see <a href="/api/class/src/api/trajserv/TrajservAPI%20js~TrajservAPI%20html">TrajservAPI</a>
19
- * @see <a href="/example/mapbox-tracker">Mapbox tracker example</a>
20
- *
21
- * @extends {TrackerLayer}
22
- * @implements {TrajservLayerInterface}
23
- * @deprecated
24
- */
25
- class TrajservLayer extends mixin(TrackerLayer) {
26
- constructor(options = {}) {
27
- super({ ...options });
28
- this.onMove = this.onMove.bind(this);
29
- this.onMoveEnd = this.onMoveEnd.bind(this);
30
- this.onVisibilityChange = this.onVisibilityChange.bind(this);
31
- }
32
-
33
- /**
34
- * Remove the mapbox layer and the mapbox source.
35
- *
36
- * @override
37
- */
38
- terminate() {
39
- if (this.map) {
40
- this.listeners.forEach((listener) => {
41
- unByKey(listener);
42
- });
43
- this.map.removeLayer(this.key);
44
- this.map.removeSource(this.key);
45
- }
46
- super.terminate();
47
- }
48
-
49
- start() {
50
- if (!this.map) {
51
- return;
52
- }
53
- super.start();
54
- this.map.on('move', this.onMove);
55
- this.map.on('moveend', this.onMoveEnd);
56
- }
57
-
58
- stop() {
59
- if (this.map) {
60
- this.map.off('move', this.onMove);
61
- this.map.off('moveend', this.onMoveEnd);
62
- }
63
- super.stop();
64
- }
65
-
66
- /**
67
- * Callback on 'moveend' event.
68
- * @private
69
- */
70
- onMoveEnd() {
71
- this.updateTrajectories();
72
- if (this.selectedVehicleId && this.journeyId) {
73
- this.highlightTrajectory();
74
- }
75
- }
76
-
77
- /**
78
- * Returns the URL parameters.
79
- * @param {Object} extraParams Extra parameters
80
- * @return {Object}
81
- * @private
82
- */
83
- getParams(extraParams = {}) {
84
- const bounds = this.map.getBounds().toArray();
85
- const southWest = fromLonLat(bounds[0]);
86
- const northEast = fromLonLat(bounds[1]);
87
- const ext = [...southWest, ...northEast];
88
- const bbox = buffer(ext, getWidth(ext) / 10).join(',');
89
- const zoom = this.map.getZoom();
90
-
91
- return super.getParams({
92
- ...extraParams,
93
- bbox,
94
- s: zoom < 10 ? 1 : 0,
95
- z: zoom,
96
- });
97
- }
98
-
99
- /**
100
- * Draw the trajectory as a line with points for each stop.
101
- *
102
- * @param {Array} stationsCoords Array of station coordinates in EPSG:4326.
103
- * @param {Array<ol/coordinate~Coordinate>} lineCoords A list of coordinates in EPSG:3857.
104
- * @param {string} color The color of the line.
105
- * @private
106
- */
107
- // eslint-disable-next-line no-unused-vars,class-methods-use-this
108
- drawFullTrajectory(stationsCoords, lineCoords, color) {
109
- // eslint-disable-next-line no-console
110
- console.log('to be implemented');
111
- }
112
- }
113
-
114
- export default TrajservLayer;
@@ -1,90 +0,0 @@
1
- import maplibre from 'maplibre-gl';
2
- import fetch from 'jest-fetch-mock';
3
- import { toLonLat } from 'ol/proj';
4
- import TrajservLayer from './TrajservLayer';
5
-
6
- let layer;
7
- let onClick;
8
-
9
- describe('TrajservLayer', () => {
10
- beforeEach(() => {
11
- global.fetch = fetch;
12
- fetch.resetMocks();
13
-
14
- onClick = jest.fn();
15
- layer = new TrajservLayer({
16
- apiKey: 'foo',
17
- onClick,
18
- });
19
- });
20
-
21
- test('should be instanced.', () => {
22
- expect(layer).toBeInstanceOf(TrajservLayer);
23
- expect(layer.clickCallbacks[0]).toBe(onClick);
24
- });
25
-
26
- test('should called terminate on initalization.', () => {
27
- const spy = jest.spyOn(layer, 'terminate');
28
-
29
- fetch.mockResponseOnce(JSON.stringify(global.fetchTrajectoriesResponse));
30
-
31
- const mapElement = document.createElement('div');
32
- const { style } = mapElement;
33
- style.position = 'absolute';
34
- style.left = '0px';
35
- style.top = '0px';
36
- style.width = '400px';
37
- style.height = '400px';
38
- mapElement.setAttribute('id', 'map');
39
- document.body.appendChild(mapElement);
40
-
41
- layer.init(
42
- new maplibre.Map({
43
- container: document.getElementById('map'),
44
- style: `path/to/style`,
45
- center: toLonLat([831634, 5933959]),
46
- zoom: 9,
47
- }),
48
- );
49
-
50
- expect(spy).toHaveBeenCalledTimes(1);
51
- });
52
-
53
- test('#onClick', () => {
54
- const f = () => {};
55
- layer.onClick(f);
56
- expect(layer.clickCallbacks[1]).toBe(f);
57
- expect(layer.clickCallbacks.length).toBe(2);
58
- layer.onClick(f);
59
- expect(layer.clickCallbacks.length).toBe(2);
60
- });
61
-
62
- test('#unClick', () => {
63
- const foo = () => {};
64
- const bar = () => {};
65
- layer.onClick(foo);
66
- layer.onClick(bar);
67
- expect(layer.clickCallbacks[1]).toBe(foo);
68
- expect(layer.clickCallbacks[2]).toBe(bar);
69
- expect(layer.clickCallbacks.length).toBe(3);
70
- layer.unClick(foo);
71
- expect(layer.clickCallbacks[1]).toBe(bar);
72
- expect(layer.clickCallbacks.length).toBe(2);
73
- });
74
-
75
- test('should create a default api with default url.', () => {
76
- expect(layer).toBeInstanceOf(TrajservLayer);
77
- expect(layer.api.url).toBe('https://api.geops.io/tracker/v1');
78
- expect(layer.api.apiKey).toBe('foo');
79
- });
80
-
81
- test('should create an api with custom url and apiKey.', () => {
82
- const layr = new TrajservLayer({
83
- url: 'https:foo.ch',
84
- apiKey: 'bar',
85
- });
86
- expect(layr).toBeInstanceOf(TrajservLayer);
87
- expect(layr.api.url).toBe('https:foo.ch');
88
- expect(layr.api.apiKey).toBe('bar');
89
- });
90
- });
@@ -1,64 +0,0 @@
1
- import TrackerLayer from './TrackerLayer';
2
- import mixin from '../../common/mixins/TralisLayerMixin';
3
-
4
- /**
5
- * Responsible for loading and display data from a Tralis service.
6
- *
7
- * @example
8
- * import { TralisLayer } from 'mobility-toolbox-js/mapbox';
9
- *
10
- * const layer = new TralisLayer({
11
- * url: [yourUrl],
12
- * apiKey: [yourApiKey],
13
- * });
14
- *
15
- *
16
- * @see <a href="/api/class/src/api/tralis/TralisAPI%20js~TralisAPI%20html">TralisAPI</a>
17
- *
18
- * @extends {TrackerLayer}
19
- * @implements {TralisLayerInterface}
20
- */
21
- class TralisLayer extends mixin(TrackerLayer) {
22
- /**
23
- * Remove the trajectory form the list if necessary.
24
- *
25
- * @private
26
- */
27
- purgeTrajectory(trajectory, extent, zoom) {
28
- return super.purgeTrajectory(
29
- trajectory,
30
- extent || this.getMercatorExtent(),
31
- zoom || Math.floor(this.map.getZoom() + 1),
32
- );
33
- }
34
-
35
- /**
36
- * Send the current bbox to the websocket
37
- */
38
- setBbox(extent, zoom) {
39
- let newExtent = extent;
40
- let newZoom = zoom;
41
- if (!newExtent && this.isUpdateBboxOnMoveEnd) {
42
- newExtent = extent || this.getMercatorExtent();
43
- newZoom = Math.floor(this.getOlZoom());
44
- }
45
- super.setBbox(newExtent, newZoom);
46
- }
47
-
48
- /**
49
- * Send the new BBOX to the websocket.
50
- *
51
- * @param {ol/MapEvent~MapEvent} evt Moveend event
52
- * @private
53
- * @override
54
- */
55
- onMoveEnd(evt) {
56
- super.onMoveEnd(evt);
57
-
58
- if (this.visible && this.isUpdateBboxOnMoveEnd) {
59
- this.setBbox();
60
- }
61
- }
62
- }
63
-
64
- export default TralisLayer;
package/ol/Map.js DELETED
@@ -1,109 +0,0 @@
1
- import OLMap from 'ol/Map';
2
- import { defaults as defaultControls } from 'ol/control';
3
- import Layer from './layers/Layer';
4
- import mixin from '../common/mixins/MapMixin';
5
- import CopyrightControl from './controls/CopyrightControl';
6
-
7
- /**
8
- * An OpenLayers map for handling mobility layers and controls.
9
- *
10
- * @example
11
- * import { Map } from 'mobility-toolbox-js/ol';
12
- *
13
- * const map = new Map({
14
- * target: 'map',
15
- * view: new View({
16
- * center: [0, 0],
17
- * zoom: 1,
18
- * }),
19
- * });
20
- *
21
- * @see <a href="/example/ol-map">Map example</a>
22
- *
23
- * @extends {ol/Map~Map}
24
- */
25
- class Map extends mixin(OLMap) {
26
- /**
27
- * Constructor.
28
- *
29
- * @param {Object} options See [ol/Map~Map](https://openlayers.org/en/latest/apidoc/module-ol_Map-Map.html) options documentation.
30
- * @param {Array<Layer|ol/layer/Layer~Layer>} [options.layers] Array of layers.
31
- */
32
- constructor(options = {}) {
33
- super({
34
- controls: [
35
- ...defaultControls({ attribution: false }).getArray(),
36
- new CopyrightControl(),
37
- ],
38
- ...options,
39
- });
40
- }
41
-
42
- /**
43
- * Get the HTML element containing the map.
44
- *
45
- * @return {HTMLElement} The HTML element of the container.
46
- */
47
- getContainer() {
48
- return this.getTargetElement();
49
- }
50
-
51
- /**
52
- * Adds a layer to the map.
53
- * @param {Layer|ol/layer/Layer~Layer} layer The layer to add.
54
- */
55
- addLayer(layer) {
56
- if (layer instanceof Layer) {
57
- // layer is an mobility layer
58
- layer.init(this);
59
- this.mobilityLayers.push(layer);
60
-
61
- if (layer.olLayer) {
62
- super.addLayer(layer.olLayer);
63
- }
64
-
65
- this.dispatchEvent({
66
- type: 'change:mobilityLayers',
67
- target: this,
68
- });
69
- } else {
70
- // layer is an OpenLayer layer
71
- super.addLayer(layer);
72
- }
73
- }
74
-
75
- /**
76
- * Removes a given layer from the map.
77
- * @param {Layer|ol/layer/Layer~Layer} layer The layer to remove.
78
- */
79
- removeLayer(layer) {
80
- if (layer instanceof Layer) {
81
- layer.terminate();
82
- this.mobilityLayers = this.mobilityLayers.filter((l) => l !== layer);
83
- if (layer.olLayer) {
84
- super.removeLayer(layer);
85
- }
86
- } else {
87
- // layer is an OpenLayer layer
88
- super.removeLayer(layer);
89
- }
90
- }
91
-
92
- /**
93
- * Adds a given control to the map.
94
- * @param {Control|ol/control/Control~Control} control The control to add.
95
- */
96
- addControl(control) {
97
- super.addControl(control);
98
- }
99
-
100
- /**
101
- * Removes a given control to the map.
102
- * @param {Control|ol/control/Control~Control} control The control to remove.
103
- */
104
- removeControl(control) {
105
- super.removeControl(control);
106
- }
107
- }
108
-
109
- export default Map;
package/ol/Map.test.js DELETED
@@ -1,34 +0,0 @@
1
- import VectorLayer from 'ol/layer/Vector';
2
- import VectorSource from 'ol/source/Vector';
3
- import Map from './Map';
4
- import Layer from './layers/Layer';
5
-
6
- const olLayer = new VectorLayer({ source: new VectorSource() });
7
-
8
- describe('Map', () => {
9
- let map;
10
-
11
- beforeEach(() => {
12
- map = new Map({ target: document.body });
13
- });
14
-
15
- test('should init layer on add.', () => {
16
- const layer = new Layer({ name: 'Layer', olLayer });
17
- const spy = jest.spyOn(layer, 'init');
18
- map.addLayer(layer);
19
- expect(spy).toHaveBeenCalledTimes(1);
20
- expect(map.getLayers().getLength()).toBe(1);
21
- });
22
-
23
- test('should terminate layer on remove.', () => {
24
- const layer = new Layer({ name: 'Layer', olLayer });
25
- const spy = jest.spyOn(layer, 'terminate');
26
- map.addLayer(layer);
27
- expect(map.getLayers().getLength()).toBe(1);
28
- expect(spy).toHaveBeenCalledTimes(1);
29
- map.removeLayer(layer);
30
- expect(spy).toHaveBeenCalledTimes(2);
31
- expect(layer.visible).toBe(true);
32
- expect(map.getLayers().getLength()).toBe(1);
33
- });
34
- });
@@ -1,70 +0,0 @@
1
- import Map from 'ol/Map';
2
- import View from 'ol/View';
3
- import TrackerLayer from './TrackerLayer';
4
-
5
- let layer;
6
- let onClick;
7
-
8
- describe('TrackerLayer', () => {
9
- beforeEach(() => {
10
- onClick = jest.fn();
11
- layer = new TrackerLayer({
12
- onClick,
13
- });
14
- });
15
-
16
- test('should be instanced.', () => {
17
- expect(layer).toBeInstanceOf(TrackerLayer);
18
- expect(layer.clickCallbacks[0]).toBe(onClick);
19
- });
20
-
21
- test('should called terminate on initalization.', () => {
22
- const spy = jest.spyOn(layer, 'terminate');
23
- layer.init(
24
- new Map({
25
- view: new View({
26
- center: [831634, 5933959],
27
- zoom: 9,
28
- }),
29
- }),
30
- );
31
- expect(spy).toHaveBeenCalledTimes(1);
32
- });
33
-
34
- test('#onClick', () => {
35
- const f = () => {};
36
- layer.onClick(f);
37
- expect(layer.clickCallbacks[1]).toBe(f);
38
- expect(layer.clickCallbacks.length).toBe(2);
39
- layer.onClick(f);
40
- expect(layer.clickCallbacks.length).toBe(2);
41
- });
42
-
43
- test('#unClick', () => {
44
- const foo = () => {};
45
- const bar = () => {};
46
- layer.onClick(foo);
47
- layer.onClick(bar);
48
- expect(layer.clickCallbacks[1]).toBe(foo);
49
- expect(layer.clickCallbacks[2]).toBe(bar);
50
- expect(layer.clickCallbacks.length).toBe(3);
51
- layer.unClick(foo);
52
- expect(layer.clickCallbacks[1]).toBe(bar);
53
- expect(layer.clickCallbacks.length).toBe(2);
54
- });
55
-
56
- describe('#terminate', () => {
57
- test('should set container to null', () => {
58
- layer.container = 'foo';
59
- layer.terminate();
60
- expect(layer.container).toBe(null);
61
- });
62
- });
63
-
64
- test('should clone', () => {
65
- const clone = layer.clone({ name: 'clone' });
66
- expect(clone).not.toBe(layer);
67
- expect(clone.name).toBe('clone');
68
- expect(clone).toBeInstanceOf(TrackerLayer);
69
- });
70
- });