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
@@ -1,190 +0,0 @@
1
- import Feature from 'ol/Feature';
2
- import { fromLonLat } from 'ol/proj';
3
- import { buffer, getWidth } from 'ol/extent';
4
- import { MultiPoint, LineString } from 'ol/geom';
5
- import { Style, Fill, Stroke, Circle } from 'ol/style';
6
- import { unByKey } from 'ol/Observable';
7
- import TrackerLayer from './TrackerLayer';
8
-
9
- import mixin from '../../common/mixins/TrajservLayerMixin';
10
-
11
- /**
12
- * Responsible for loading and display data from a Trajserv service.
13
- *
14
- * @example
15
- * import { TrajservLayer } from 'mobility-toolbox-js/mapbox';
16
- *
17
- * const layer = new TrajservLayer({
18
- * url: 'https://api.geops.io/tracker/v1',
19
- * apiKey: [yourApiKey],
20
- * });
21
- *
22
- *
23
- * @see <a href="/api/class/src/api/trajserv/TrajservAPI%20js~TrajservAPI%20html">TrajservAPI</a>
24
- * @see <a href="/example/ol-tracker">OL tracker example</a>
25
- *
26
- * @extends {TrackerLayer}
27
- * @implements {TrajservLayerInterface}
28
- * @deprecated Use {@link TralisLayer} instead.
29
- */
30
- class TrajservLayer extends mixin(TrackerLayer) {
31
- /**
32
- * Start the layer.
33
- * @override
34
- */
35
- start() {
36
- if (!this.map) {
37
- return;
38
- }
39
- super.start();
40
- /**
41
- * Array of ol events key, returned by on() or once().
42
- * @type {Array<ol/events~EventsKey>}
43
- * @ignore
44
- */
45
- this.olEventsKeys = [
46
- this.map.on('movestart', () => {
47
- this.abortFetchTrajectories();
48
- }),
49
- this.map.on('moveend', this.onMoveEnd.bind(this)),
50
- ];
51
- }
52
-
53
- stop() {
54
- unByKey(this.olEventsKeys);
55
- super.stop();
56
- }
57
-
58
- /**
59
- * Callback on 'moveend' event.
60
- * @private
61
- */
62
- onMoveEnd() {
63
- const z = this.map.getView().getZoom();
64
-
65
- if (z !== this.currentZoom) {
66
- /**
67
- * Current value of the zoom.
68
- * @type {number}
69
- * @ignore
70
- */
71
- this.currentZoom = z;
72
-
73
- // This will restart the timeouts.
74
- // TODO maybe find a calculation a bit less approximative.
75
- /** @ignore */
76
- this.requestIntervalSeconds = 200 / z || 1000;
77
- }
78
-
79
- this.abortFetchTrajectories();
80
- if (
81
- !this.map.getView().getAnimating() &&
82
- !this.map.getView().getInteracting()
83
- ) {
84
- this.updateTrajectories();
85
- }
86
-
87
- if (this.selectedVehicleId && this.journeyId) {
88
- this.highlightTrajectory();
89
- }
90
- }
91
-
92
- /**
93
- * Draw the trajectory as a line with points for each stop.
94
- * @param {Array} stationsCoords Array of station coordinates in epsg:4326.
95
- * @param {Array<ol/coordinate~Coordinate>} lineCoords A list of coordinates.
96
- * @param {string} color The color of the line.
97
- * @private
98
- */
99
- drawFullTrajectory(stationsCoords, lineCoords, color) {
100
- const vectorSource = this.vectorLayer.getSource();
101
- vectorSource.clear();
102
-
103
- // Add station points
104
- if (stationsCoords) {
105
- const geometry = new MultiPoint(
106
- stationsCoords.map((coords) => fromLonLat(coords)),
107
- );
108
- const aboveStationsFeature = new Feature(geometry);
109
- aboveStationsFeature.setStyle(
110
- new Style({
111
- zIndex: 1,
112
- image: new Circle({
113
- radius: 5,
114
- fill: new Fill({
115
- color: '#000000',
116
- }),
117
- }),
118
- }),
119
- );
120
- const belowStationsFeature = new Feature(geometry);
121
- belowStationsFeature.setStyle(
122
- new Style({
123
- zIndex: 4,
124
- image: new Circle({
125
- radius: 4,
126
- fill: new Fill({
127
- color,
128
- }),
129
- }),
130
- }),
131
- );
132
- vectorSource.addFeatures([aboveStationsFeature, belowStationsFeature]);
133
- }
134
-
135
- // Add line.
136
- if (lineCoords) {
137
- const lineFeat = new Feature({
138
- geometry: new LineString(lineCoords),
139
- });
140
- lineFeat.setStyle([
141
- new Style({
142
- zIndex: 2,
143
- stroke: new Stroke({
144
- color: '#000000',
145
- width: 6,
146
- }),
147
- }),
148
- new Style({
149
- zIndex: 3,
150
- stroke: new Stroke({
151
- color,
152
- width: 4,
153
- }),
154
- }),
155
- ]);
156
- vectorSource.addFeature(lineFeat);
157
- }
158
- }
159
-
160
- /**
161
- * @override
162
- * * Returns the URL parameters.
163
- * @param {Object} extraParams Extra parameters
164
- * @return {Object}
165
- * @private
166
- */
167
- getParams(extraParams = {}) {
168
- const ext = this.map.getView().calculateExtent();
169
- const bbox = buffer(ext, getWidth(ext) / 10).join(',');
170
- const zoom = this.map.getView().getZoom();
171
-
172
- return super.getParams({
173
- ...extraParams,
174
- bbox,
175
- s: zoom < 10 ? 1 : 0,
176
- z: zoom,
177
- });
178
- }
179
-
180
- /**
181
- * Create a copy of the TrajservLayer.
182
- * @param {Object} newOptions Options to override
183
- * @return {TrajservLayer} A TrajservLayer
184
- */
185
- clone(newOptions) {
186
- return new TrajservLayer({ ...this.options, ...newOptions });
187
- }
188
- }
189
-
190
- export default TrajservLayer;
@@ -1,113 +0,0 @@
1
- import fetch from 'jest-fetch-mock';
2
- import Map from 'ol/Map';
3
- import View from 'ol/View';
4
- import TrajservLayer from './TrajservLayer';
5
-
6
- let layer;
7
- let onClick;
8
- let olMap;
9
-
10
- describe('TrajservLayer', () => {
11
- beforeEach(() => {
12
- global.fetch = fetch;
13
- fetch.resetMocks();
14
-
15
- onClick = jest.fn();
16
- layer = new TrajservLayer({
17
- apiKey: 'apiKey',
18
- onClick,
19
- });
20
-
21
- olMap = new Map({
22
- view: new View({
23
- center: [831634, 5933959],
24
- zoom: 9,
25
- }),
26
- });
27
- });
28
-
29
- test('should be instanced.', () => {
30
- expect(layer).toBeInstanceOf(TrajservLayer);
31
- expect(layer.clickCallbacks[0]).toBe(onClick);
32
- });
33
-
34
- test('should called terminate on initalization.', () => {
35
- const spy = jest.spyOn(layer, 'terminate');
36
-
37
- fetch.mockResponseOnce(JSON.stringify(global.fetchTrajectoriesResponse));
38
-
39
- layer.init(olMap);
40
- expect(spy).toHaveBeenCalledTimes(1);
41
- });
42
-
43
- test('#onClick', () => {
44
- const f = () => {};
45
- layer.onClick(f);
46
- expect(layer.clickCallbacks[1]).toBe(f);
47
- expect(layer.clickCallbacks.length).toBe(2);
48
- layer.onClick(f);
49
- expect(layer.clickCallbacks.length).toBe(2);
50
- });
51
-
52
- test('#unClick', () => {
53
- const foo = () => {};
54
- const bar = () => {};
55
- layer.onClick(foo);
56
- layer.onClick(bar);
57
- expect(layer.clickCallbacks[1]).toBe(foo);
58
- expect(layer.clickCallbacks[2]).toBe(bar);
59
- expect(layer.clickCallbacks.length).toBe(3);
60
- layer.unClick(foo);
61
- expect(layer.clickCallbacks[1]).toBe(bar);
62
- expect(layer.clickCallbacks.length).toBe(2);
63
- });
64
-
65
- test("map events should be called if zoom doesn't change", () => {
66
- const spy2 = jest.spyOn(layer, 'onMoveEnd');
67
-
68
- // Mock response for the following calls
69
- fetch.mockResponse(JSON.stringify(global.fetchTrajectoriesResponse));
70
-
71
- // init uses mockResponse
72
- layer.init(olMap);
73
-
74
- // Start uses mockResponse
75
- layer.start();
76
-
77
- // dispatchEvent uses mockResponse
78
- const evt2 = { type: 'moveend', olMap };
79
- olMap.dispatchEvent(evt2);
80
- expect(spy2).toHaveBeenCalledTimes(2);
81
- olMap.dispatchEvent(evt2);
82
- expect(spy2).toHaveBeenCalledTimes(4);
83
- });
84
-
85
- test('should create a default api with default url.', () => {
86
- expect(layer).toBeInstanceOf(TrajservLayer);
87
- expect(layer.api.url).toBe('https://api.geops.io/tracker/v1');
88
- expect(layer.api.apiKey).toBe('apiKey');
89
- });
90
-
91
- test('should create an api with custom url and apiKey.', () => {
92
- const layr = new TrajservLayer({
93
- url: 'https:foo.ch',
94
- apiKey: 'bar',
95
- });
96
- expect(layr).toBeInstanceOf(TrajservLayer);
97
- expect(layr.api.url).toBe('https:foo.ch');
98
- expect(layr.api.apiKey).toBe('bar');
99
- });
100
-
101
- test('should clone', () => {
102
- const layr = new TrajservLayer({
103
- name: 'test',
104
- url: 'https:foo.ch',
105
- apiKey: 'bar',
106
- });
107
- const clone = layr.clone({ name: 'clone' });
108
- expect(layr.name).toBe('test');
109
- expect(clone).not.toBe(layr);
110
- expect(clone.name).toBe('clone');
111
- expect(clone).toBeInstanceOf(TrajservLayer);
112
- });
113
- });
@@ -1,177 +0,0 @@
1
- import GeoJSON from 'ol/format/GeoJSON';
2
- import { Style, Fill, Stroke, Circle } from 'ol/style';
3
- import TrackerLayer from './TrackerLayer';
4
- import mixin from '../../common/mixins/TralisLayerMixin';
5
- import { getBgColor } from '../../common/trackerConfig';
6
-
7
- const format = new GeoJSON();
8
-
9
- /**
10
- * Responsible for loading and display data from a Tralis service.
11
- *
12
- * @example
13
- * import { TralisLayer } from 'mobility-toolbox-js/ol';
14
- *
15
- * const layer = new TralisLayer({
16
- * url: [yourUrl],
17
- * apiKey: [yourApiKey],
18
- * });
19
- *
20
- *
21
- * @see <a href="/api/class/src/api/tralis/TralisAPI%20js~TralisAPI%20html">TralisAPI</a>
22
- *
23
- * @extends {TrackerLayer}
24
- * @implements {TralisLayerInterface}
25
- */
26
- class TralisLayer extends mixin(TrackerLayer) {
27
- /**
28
- * Remove the trajectory form the list if necessary.
29
- *
30
- * @private
31
- */
32
- purgeTrajectory(trajectory, extent, zoom) {
33
- return super.purgeTrajectory(
34
- trajectory,
35
- extent || this.map.getView().calculateExtent(),
36
- zoom || this.map.getView().getZoom(),
37
- );
38
- }
39
-
40
- /**
41
- * Send the current bbox to the websocket
42
- *
43
- * @private
44
- */
45
- setBbox(extent, zoom) {
46
- let newExtent = extent;
47
- let newZoom = zoom;
48
- if (!newExtent && this.isUpdateBboxOnMoveEnd) {
49
- newExtent = extent || this.map.getView().calculateExtent();
50
- newZoom = Math.floor(this.map.getView().getZoom());
51
- }
52
- super.setBbox(newExtent, newZoom);
53
- }
54
-
55
- /**
56
- * On move end we update the websocket with the new bbox.
57
- *
58
- * @param {ol/MapEvent~MapEvent} evt Moveend event
59
- * @private
60
- * @override
61
- */
62
- onMoveEnd(evt) {
63
- super.onMoveEnd(evt);
64
-
65
- if (this.visible && this.isUpdateBboxOnMoveEnd) {
66
- this.setBbox();
67
- }
68
-
69
- if (
70
- this.visible &&
71
- this.isUpdateBboxOnMoveEnd &&
72
- this.isClickActive &&
73
- this.selectedVehicleId
74
- ) {
75
- this.highlightTrajectory(this.selectedVehicleId);
76
- }
77
- }
78
-
79
- /**
80
- * Callback when user clicks on the map.
81
- * It sets the layer's selectedVehicleId property with the current selected vehicle's id.
82
- *
83
- * @private
84
- * @override
85
- */
86
- onFeatureClick(features, layer, coordinate) {
87
- super.onFeatureClick(features, layer, coordinate);
88
- if (this.selectedVehicleId) {
89
- this.highlightTrajectory(this.selectedVehicleId);
90
- }
91
- }
92
-
93
- /**
94
- * Highlight the trajectory of journey.
95
- * @private
96
- */
97
- highlightTrajectory(id) {
98
- this.api
99
- .getFullTrajectory(id, this.mode, this.generalizationLevel)
100
- .then((fullTrajectory) => {
101
- const vectorSource = this.vectorLayer.getSource();
102
- vectorSource.clear();
103
-
104
- if (
105
- !fullTrajectory ||
106
- !fullTrajectory.features ||
107
- !fullTrajectory.features.length
108
- ) {
109
- return;
110
- }
111
-
112
- let lineColor = '#ffffff'; // white
113
-
114
- if (this.useDelayStyle) {
115
- lineColor = '#a0a0a0'; // grey
116
- } else {
117
- const props = fullTrajectory.features[0].properties;
118
- const { type } = props;
119
- let { stroke } = props;
120
-
121
- if (stroke && stroke[0] !== '#') {
122
- stroke = `#${stroke}`;
123
- }
124
-
125
- lineColor = stroke || getBgColor(type);
126
-
127
- // Don't allow white lines, use red instead.
128
- lineColor = /#ffffff/i.test(lineColor) ? '#ff0000' : lineColor;
129
- }
130
- const style = [
131
- new Style({
132
- zIndex: 2,
133
- image: new Circle({
134
- radius: 5,
135
- fill: new Fill({
136
- color: '#000000',
137
- }),
138
- }),
139
- stroke: new Stroke({
140
- color: '#000000',
141
- width: 6,
142
- }),
143
- }),
144
- new Style({
145
- zIndex: 3,
146
- image: new Circle({
147
- radius: 4,
148
- fill: new Fill({
149
- color: lineColor,
150
- }),
151
- }),
152
- stroke: new Stroke({
153
- color: lineColor,
154
- width: 4,
155
- }),
156
- }),
157
- ];
158
- this.vectorLayer.setStyle(style);
159
- const features = format.readFeatures(fullTrajectory);
160
- features.forEach((feature) => {
161
- feature.setStyle(style);
162
- });
163
- this.vectorLayer.getSource().addFeatures(features);
164
- });
165
- }
166
-
167
- /**
168
- * Create a copy of the TralisLayer.
169
- * @param {Object} newOptions Options to override
170
- * @return {TralisLayer} A TralisLayer
171
- */
172
- clone(newOptions) {
173
- return new TralisLayer({ ...this.options, ...newOptions });
174
- }
175
- }
176
-
177
- export default TralisLayer;