mobility-toolbox-js 2.3.9 → 2.3.10

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 (471) hide show
  1. package/.esdoc.js +18 -0
  2. package/.eslintignore +1 -0
  3. package/.eslintrc.js +25 -0
  4. package/.fixpackrc +20 -0
  5. package/.github/workflows/build.yml +16 -0
  6. package/.github/workflows/conventional-pr-title.yml +16 -0
  7. package/.github/workflows/cypress.yml +101 -0
  8. package/.github/workflows/test.yml +17 -0
  9. package/.husky/commit-msg +4 -0
  10. package/.husky/post-checkout +4 -0
  11. package/.husky/post-merge +4 -0
  12. package/.husky/post-rebase +4 -0
  13. package/.husky/pre-commit +4 -0
  14. package/.lintstagedrc.js +10 -0
  15. package/.nvmrc +1 -0
  16. package/.prettierrc.js +5 -0
  17. package/.stylelintrc.js +4 -0
  18. package/CHANGELOG.md +132 -0
  19. package/LICENSE +21 -0
  20. package/MIGRATION-V2.md +248 -0
  21. package/README.md +42 -0
  22. package/__mocks__/mapbox-gl.js +81 -0
  23. package/__mocks__/maplibre-gl.js +81 -0
  24. package/babel.config.js +9 -0
  25. package/commitlint.config.js +1 -0
  26. package/cypress/e2e/examples/api.cy.js +7 -0
  27. package/cypress/e2e/examples/examples.cy.js +7 -0
  28. package/cypress/e2e/examples/navigation.cy.js +29 -0
  29. package/cypress/fixtures/example.json +5 -0
  30. package/cypress/plugins/index.js +21 -0
  31. package/cypress/support/commands.js +25 -0
  32. package/cypress/support/e2e.js +20 -0
  33. package/cypress.config.ts +15 -0
  34. package/data/fetchRoute.json +292 -0
  35. package/data/fetchTrajectories.json +18 -0
  36. package/data/fetchTrajectoryById.json +3 -0
  37. package/data/fetchTrajectoryStations.json +18 -0
  38. package/data/stopsSearch.json +15 -0
  39. package/dependabot.yml +15 -0
  40. package/doc/.eslintrc.json +1 -0
  41. package/doc/README.md +34 -0
  42. package/doc/next.config.js +16 -0
  43. package/doc/package.json +41 -0
  44. package/doc/pages/404.js +5 -0
  45. package/doc/pages/_app.js +61 -0
  46. package/doc/pages/_document.js +64 -0
  47. package/doc/pages/doc/[...slug].js +23 -0
  48. package/doc/pages/doc.js +23 -0
  49. package/doc/pages/example/[example].js +52 -0
  50. package/doc/pages/examples.js +34 -0
  51. package/doc/pages/index.js +25 -0
  52. package/doc/public/README.md +15 -0
  53. package/doc/public/favicon.ico +0 -0
  54. package/doc/public/static/assets/Lato-Black.ttf +0 -0
  55. package/doc/public/static/assets/Lato-BlackItalic.ttf +0 -0
  56. package/doc/public/static/assets/Lato-Bold.ttf +0 -0
  57. package/doc/public/static/assets/Lato-BoldItalic.ttf +0 -0
  58. package/doc/public/static/assets/Lato-Italic.ttf +0 -0
  59. package/doc/public/static/assets/Lato-Light.ttf +0 -0
  60. package/doc/public/static/assets/Lato-LightItalic.ttf +0 -0
  61. package/doc/public/static/assets/Lato-Regular.ttf +0 -0
  62. package/doc/public/static/assets/Lato-Thin.ttf +0 -0
  63. package/doc/public/static/assets/Lato-ThinItalic.ttf +0 -0
  64. package/doc/public/static/assets/OFL.txt +93 -0
  65. package/doc/public/static/examples/assets/tralis-live-map/index.js +11 -0
  66. package/doc/public/static/examples/assets/tralis-live-map/s1kreis.svg +105 -0
  67. package/doc/public/static/examples/assets/tralis-live-map/s20kreis.svg +101 -0
  68. package/doc/public/static/examples/assets/tralis-live-map/s2kreis.svg +95 -0
  69. package/doc/public/static/examples/assets/tralis-live-map/s3kreis.svg +95 -0
  70. package/doc/public/static/examples/assets/tralis-live-map/s4kreis.svg +95 -0
  71. package/doc/public/static/examples/assets/tralis-live-map/s6kreis.svg +95 -0
  72. package/doc/public/static/examples/assets/tralis-live-map/s7kreis.svg +95 -0
  73. package/doc/public/static/examples/assets/tralis-live-map/s8kreis.svg +93 -0
  74. package/doc/public/static/examples/assets/tralis-live-map/unknown.svg +107 -0
  75. package/doc/public/static/examples/layers.html +11 -0
  76. package/doc/public/static/examples/layers.js +97 -0
  77. package/doc/public/static/examples/mb-copyright.html +26 -0
  78. package/doc/public/static/examples/mb-copyright.js +37 -0
  79. package/doc/public/static/examples/mb-tracker.html +1 -0
  80. package/doc/public/static/examples/mb-tracker.js +40 -0
  81. package/doc/public/static/examples/mb-tracker.md +1 -0
  82. package/doc/public/static/examples/mb-tralis.html +1 -0
  83. package/doc/public/static/examples/mb-tralis.js +34 -0
  84. package/doc/public/static/examples/ol-copyright.html +26 -0
  85. package/doc/public/static/examples/ol-copyright.js +43 -0
  86. package/doc/public/static/examples/ol-mapbox-layer.html +1 -0
  87. package/doc/public/static/examples/ol-mapbox-layer.js +28 -0
  88. package/doc/public/static/examples/ol-mapbox-style-layer.html +12 -0
  89. package/doc/public/static/examples/ol-mapbox-style-layer.js +48 -0
  90. package/doc/public/static/examples/ol-query.html +32 -0
  91. package/doc/public/static/examples/ol-query.js +83 -0
  92. package/doc/public/static/examples/ol-routing.html +26 -0
  93. package/doc/public/static/examples/ol-routing.js +65 -0
  94. package/doc/public/static/examples/ol-routing.md +1 -0
  95. package/doc/public/static/examples/ol-stop-finder.html +15 -0
  96. package/doc/public/static/examples/ol-stop-finder.js +35 -0
  97. package/doc/public/static/examples/ol-stop-finder.md +1 -0
  98. package/doc/public/static/examples/ol-tracker.html +1 -0
  99. package/doc/public/static/examples/ol-tracker.js +41 -0
  100. package/doc/public/static/examples/ol-tracker.md +1 -0
  101. package/doc/public/static/examples/ol-tralis.html +5 -0
  102. package/doc/public/static/examples/ol-tralis.js +62 -0
  103. package/doc/public/static/examples/tralis-live-map.html +1 -0
  104. package/doc/public/static/examples/tralis-live-map.js +67 -0
  105. package/doc/public/static/examples/tralis-live-map.md +3 -0
  106. package/doc/public/static/img/live_tracker_mb.jpg +0 -0
  107. package/doc/public/static/img/live_tracker_munich.jpg +0 -0
  108. package/doc/public/static/img/live_tracker_ol.jpg +0 -0
  109. package/doc/public/static/img/mapbox.jpg +0 -0
  110. package/doc/public/static/img/mapbox_style.jpg +0 -0
  111. package/doc/public/static/img/ol-copyright.png +0 -0
  112. package/doc/public/static/img/query_objects.jpg +0 -0
  113. package/doc/public/static/img/routing.jpg +0 -0
  114. package/doc/public/static/img/simple_map.jpg +0 -0
  115. package/doc/public/static/img/stops.jpg +0 -0
  116. package/doc/public/vercel.svg +4 -0
  117. package/doc/src/components/CodeSandboxButton.js +102 -0
  118. package/doc/src/components/Documentation.js +42 -0
  119. package/doc/src/components/Esdoc/Anchor.js +57 -0
  120. package/doc/src/components/Esdoc/ClassDoc.js +272 -0
  121. package/doc/src/components/Esdoc/DeprecatedHTML.js +16 -0
  122. package/doc/src/components/Esdoc/DetailDocs.js +279 -0
  123. package/doc/src/components/Esdoc/DetailHTML.js +33 -0
  124. package/doc/src/components/Esdoc/DirectSubclassHTML.js +30 -0
  125. package/doc/src/components/Esdoc/DocBuilderUtils.js +697 -0
  126. package/doc/src/components/Esdoc/DocLinkHTML.js +63 -0
  127. package/doc/src/components/Esdoc/DocsLinkHTML.js +38 -0
  128. package/doc/src/components/Esdoc/Esdoc.js +63 -0
  129. package/doc/src/components/Esdoc/EsdocContent.js +56 -0
  130. package/doc/src/components/Esdoc/EsdocNavigation.js +13 -0
  131. package/doc/src/components/Esdoc/EsdocSearch.js +78 -0
  132. package/doc/src/components/Esdoc/ExperimentalHTML.js +17 -0
  133. package/doc/src/components/Esdoc/ExtendsChainHTML.js +32 -0
  134. package/doc/src/components/Esdoc/FileDocLinkHTML.js +62 -0
  135. package/doc/src/components/Esdoc/IdentifiersDoc.js +113 -0
  136. package/doc/src/components/Esdoc/IndirectSubclassHTML.js +30 -0
  137. package/doc/src/components/Esdoc/InheritedSummaryDoc.js +70 -0
  138. package/doc/src/components/Esdoc/InheritedSummaryHTML.js +38 -0
  139. package/doc/src/components/Esdoc/MixinClassesHTML.js +29 -0
  140. package/doc/src/components/Esdoc/NavDoc.js +112 -0
  141. package/doc/src/components/Esdoc/OverrideMethod.js +44 -0
  142. package/doc/src/components/Esdoc/OverrideMethodDescription.js +35 -0
  143. package/doc/src/components/Esdoc/Properties.js +89 -0
  144. package/doc/src/components/Esdoc/README.md +45 -0
  145. package/doc/src/components/Esdoc/SignatureHTML.js +123 -0
  146. package/doc/src/components/Esdoc/SingleDoc.js +31 -0
  147. package/doc/src/components/Esdoc/SummaryDoc.js +160 -0
  148. package/doc/src/components/Esdoc/SummaryHTML.js +96 -0
  149. package/doc/src/components/Esdoc/TypeDocLinkHTML.js +251 -0
  150. package/doc/src/components/Esdoc/index.js +7 -0
  151. package/doc/src/components/Esdoc/taffydb.js +2070 -0
  152. package/doc/src/components/Example.js +200 -0
  153. package/doc/src/components/ExampleCard.js +126 -0
  154. package/doc/src/components/Examples.js +78 -0
  155. package/doc/src/components/Home.js +121 -0
  156. package/doc/src/components/TrackerExample.js +39 -0
  157. package/doc/src/examples.js +117 -0
  158. package/doc/styles/App.scss +53 -0
  159. package/doc/styles/identifiers.css +38 -0
  160. package/doc/styles/search.css +76 -0
  161. package/doc/styles/style.css +603 -0
  162. package/esdoc/README.md +27 -0
  163. package/esdoc/plugins/MyPlugin.js +69 -0
  164. package/esdoc/plugins/dynamic-property-plugin/Plugin.js +50 -0
  165. package/esdoc/plugins/externals-plugin/Plugin.js +45 -0
  166. package/esdoc/plugins/externals-plugin/externals.js +93 -0
  167. package/esdoc/plugins/optional-chaining-plugin/Plugin.js +8 -0
  168. package/global-setup.js +3 -0
  169. package/jest.config.js +24 -0
  170. package/package.json +18 -18
  171. package/pull_request_template.md +17 -0
  172. package/scripts/read-pkg-json.js +22 -0
  173. package/src/api/RealtimeAPI.test.js +144 -0
  174. package/src/api/RealtimeAPI.ts +712 -0
  175. package/src/api/RoutingAPI.test.js +41 -0
  176. package/src/api/RoutingAPI.ts +47 -0
  177. package/src/api/StopsAPI.test.js +34 -0
  178. package/src/api/StopsAPI.ts +45 -0
  179. package/{api → src/api}/typedefs.js +11 -1
  180. package/src/common/api/HttpAPI.test.js +68 -0
  181. package/src/common/api/HttpAPI.ts +77 -0
  182. package/src/common/api/WebSocketAPI.test.js +421 -0
  183. package/src/common/api/WebSocketAPI.ts +515 -0
  184. package/src/common/controls/ControlCommon.test.js +106 -0
  185. package/src/common/controls/ControlCommon.ts +194 -0
  186. package/src/common/controls/CopyrightControlCommon.ts +41 -0
  187. package/src/common/controls/StopFinderControlCommon.ts +192 -0
  188. package/src/common/layers/LayerCommon.test.js +158 -0
  189. package/src/common/layers/LayerCommon.ts +321 -0
  190. package/src/common/mixins/RealtimeLayerMixin.ts +1168 -0
  191. package/src/common/mixins/UserInteractionsLayerMixin.test.js +227 -0
  192. package/src/common/mixins/UserInteractionsLayerMixin.ts +352 -0
  193. package/src/common/styles/realtimeDefaultStyle.ts +436 -0
  194. package/src/common/styles/realtimeDelayStyle.ts +27 -0
  195. package/src/common/styles/realtimeHeadingStyle.ts +138 -0
  196. package/src/common/styles/realtimeSimpleStyle.ts +25 -0
  197. package/{common → src/common}/typedefs.js +1 -1
  198. package/src/common/utils/compareDepartures.ts +46 -0
  199. package/src/common/utils/createCanvas.ts +33 -0
  200. package/src/common/utils/createRealtimeFilters.test.js +100 -0
  201. package/src/common/utils/createRealtimeFilters.ts +96 -0
  202. package/src/common/utils/debounceDeparturesMessages.ts +52 -0
  203. package/src/common/utils/debounceWebsocketMessages.ts +47 -0
  204. package/src/common/utils/getLayersAsFlatArray.ts +17 -0
  205. package/src/common/utils/getMapboxMapCopyrights.test.js +47 -0
  206. package/src/common/utils/getMapboxMapCopyrights.ts +52 -0
  207. package/src/common/utils/getMapboxRender.ts +104 -0
  208. package/src/common/utils/getMaplibreRender.ts +54 -0
  209. package/{common/utils/getRealtimeModeSuffix.d.ts → src/common/utils/getRealtimeModeSuffix.ts} +4 -2
  210. package/src/common/utils/getUrlWithParams.ts +21 -0
  211. package/src/common/utils/getVehiclePosition.ts +92 -0
  212. package/{common → src/common}/utils/index.js +1 -2
  213. package/src/common/utils/realtimeConfig.test.js +57 -0
  214. package/src/common/utils/realtimeConfig.ts +228 -0
  215. package/src/common/utils/removeDuplicate.test.js +22 -0
  216. package/src/common/utils/removeDuplicate.ts +22 -0
  217. package/src/common/utils/renderTrajectories.ts +194 -0
  218. package/src/common/utils/sortAndFilterDepartures.ts +78 -0
  219. package/src/common/utils/sortByDelay.ts +29 -0
  220. package/src/common/utils/timeUtils.test.js +16 -0
  221. package/src/common/utils/timeUtils.ts +45 -0
  222. package/{iife.js → src/iife.js} +3 -1
  223. package/src/index.js +10 -0
  224. package/{mapbox/controls/CopyrightControl.js → src/mapbox/controls/CopyrightControl.ts} +26 -21
  225. package/src/mapbox/layers/Layer.test.js +217 -0
  226. package/src/mapbox/layers/Layer.ts +144 -0
  227. package/src/mapbox/layers/RealtimeLayer.test.js +13 -0
  228. package/src/mapbox/layers/RealtimeLayer.ts +350 -0
  229. package/src/mapbox/utils/getMercatorResolution.ts +21 -0
  230. package/src/mapbox/utils/getSourceCoordinates.ts +34 -0
  231. package/src/ol/README.md +0 -0
  232. package/src/ol/controls/CopyrightControl.test.js +211 -0
  233. package/src/ol/controls/CopyrightControl.ts +82 -0
  234. package/src/ol/controls/RoutingControl.test.js +205 -0
  235. package/src/ol/controls/RoutingControl.ts +869 -0
  236. package/src/ol/controls/StopFinderControl.test.js +59 -0
  237. package/{ol/controls/StopFinderControl.js → src/ol/controls/StopFinderControl.ts} +10 -7
  238. package/src/ol/controls/snapshots/RoutingControlRouteGen10.json +58 -0
  239. package/src/ol/controls/snapshots/RoutingControlRouteGen100.json +292 -0
  240. package/src/ol/controls/snapshots/RoutingControlRouteGen30.json +69 -0
  241. package/src/ol/controls/snapshots/RoutingControlRouteGen5.json +58 -0
  242. package/src/ol/controls/snapshots/RoutingControlRouteOSM.json +759 -0
  243. package/src/ol/controls/snapshots/RoutingControlStation1.json +60 -0
  244. package/src/ol/controls/snapshots/RoutingControlStation2.json +49 -0
  245. package/src/ol/layers/Layer.test.js +212 -0
  246. package/src/ol/layers/Layer.ts +252 -0
  247. package/src/ol/layers/MapGlLayer.ts +294 -0
  248. package/src/ol/layers/MapboxLayer.test.js +190 -0
  249. package/src/ol/layers/MapboxLayer.ts +136 -0
  250. package/src/ol/layers/MapboxStyleLayer.test.js +258 -0
  251. package/src/ol/layers/MapboxStyleLayer.ts +466 -0
  252. package/{ol/layers/MaplibreLayer.d.ts → src/ol/layers/MaplibreLayer.ts} +21 -10
  253. package/src/ol/layers/RealtimeLayer.test.js +84 -0
  254. package/src/ol/layers/RealtimeLayer.ts +465 -0
  255. package/src/ol/layers/RoutingLayer.test.js +48 -0
  256. package/src/ol/layers/RoutingLayer.ts +113 -0
  257. package/src/ol/layers/VectorLayer.test.js +87 -0
  258. package/src/ol/layers/VectorLayer.ts +48 -0
  259. package/src/ol/layers/WMSLayer.test.js +65 -0
  260. package/src/ol/layers/WMSLayer.ts +114 -0
  261. package/src/ol/styles/fullTrajectoryDelayStyle.ts +37 -0
  262. package/src/ol/styles/fullTrajectoryStyle.ts +56 -0
  263. package/{setupTests.js → src/setupTests.js} +12 -7
  264. package/tsconfig.json +23 -0
  265. package/api/RealtimeAPI.d.ts +0 -290
  266. package/api/RealtimeAPI.d.ts.map +0 -1
  267. package/api/RealtimeAPI.js +0 -483
  268. package/api/RoutingAPI.d.ts +0 -37
  269. package/api/RoutingAPI.d.ts.map +0 -1
  270. package/api/RoutingAPI.js +0 -35
  271. package/api/StopsAPI.d.ts +0 -38
  272. package/api/StopsAPI.d.ts.map +0 -1
  273. package/api/StopsAPI.js +0 -36
  274. package/api/index.d.ts +0 -4
  275. package/api/index.d.ts.map +0 -1
  276. package/api/typedefs.d.ts +0 -179
  277. package/api/typedefs.d.ts.map +0 -1
  278. package/common/api/HttpAPI.d.ts +0 -31
  279. package/common/api/HttpAPI.d.ts.map +0 -1
  280. package/common/api/HttpAPI.js +0 -57
  281. package/common/api/WebSocketAPI.d.ts +0 -153
  282. package/common/api/WebSocketAPI.d.ts.map +0 -1
  283. package/common/api/WebSocketAPI.js +0 -341
  284. package/common/controls/ControlCommon.d.ts +0 -76
  285. package/common/controls/ControlCommon.d.ts.map +0 -1
  286. package/common/controls/ControlCommon.js +0 -150
  287. package/common/controls/CopyrightControlCommon.d.ts +0 -13
  288. package/common/controls/CopyrightControlCommon.d.ts.map +0 -1
  289. package/common/controls/CopyrightControlCommon.js +0 -34
  290. package/common/controls/StopFinderControlCommon.d.ts +0 -55
  291. package/common/controls/StopFinderControlCommon.d.ts.map +0 -1
  292. package/common/controls/StopFinderControlCommon.js +0 -144
  293. package/common/index.d.ts +0 -3
  294. package/common/index.d.ts.map +0 -1
  295. package/common/layers/LayerCommon.d.ts +0 -94
  296. package/common/layers/LayerCommon.d.ts.map +0 -1
  297. package/common/layers/LayerCommon.js +0 -244
  298. package/common/mixins/RealtimeLayerMixin.d.ts +0 -288
  299. package/common/mixins/RealtimeLayerMixin.d.ts.map +0 -1
  300. package/common/mixins/RealtimeLayerMixin.js +0 -779
  301. package/common/mixins/UserInteractionsLayerMixin.d.ts +0 -60
  302. package/common/mixins/UserInteractionsLayerMixin.d.ts.map +0 -1
  303. package/common/mixins/UserInteractionsLayerMixin.js +0 -241
  304. package/common/styles/index.d.ts +0 -5
  305. package/common/styles/index.d.ts.map +0 -1
  306. package/common/styles/realtimeDefaultStyle.d.ts +0 -36
  307. package/common/styles/realtimeDefaultStyle.d.ts.map +0 -1
  308. package/common/styles/realtimeDefaultStyle.js +0 -276
  309. package/common/styles/realtimeDelayStyle.d.ts +0 -12
  310. package/common/styles/realtimeDelayStyle.d.ts.map +0 -1
  311. package/common/styles/realtimeDelayStyle.js +0 -13
  312. package/common/styles/realtimeHeadingStyle.d.ts +0 -12
  313. package/common/styles/realtimeHeadingStyle.d.ts.map +0 -1
  314. package/common/styles/realtimeHeadingStyle.js +0 -87
  315. package/common/styles/realtimeSimpleStyle.d.ts +0 -4
  316. package/common/styles/realtimeSimpleStyle.d.ts.map +0 -1
  317. package/common/styles/realtimeSimpleStyle.js +0 -23
  318. package/common/typedefs.d.ts +0 -183
  319. package/common/typedefs.d.ts.map +0 -1
  320. package/common/utils/compareDepartures.d.ts +0 -11
  321. package/common/utils/compareDepartures.d.ts.map +0 -1
  322. package/common/utils/compareDepartures.js +0 -35
  323. package/common/utils/createCanvas.d.ts +0 -11
  324. package/common/utils/createCanvas.d.ts.map +0 -1
  325. package/common/utils/createCanvas.js +0 -28
  326. package/common/utils/createRealtimeFilters.d.ts +0 -13
  327. package/common/utils/createRealtimeFilters.d.ts.map +0 -1
  328. package/common/utils/createRealtimeFilters.js +0 -74
  329. package/common/utils/debounceDeparturesMessages.d.ts +0 -13
  330. package/common/utils/debounceDeparturesMessages.d.ts.map +0 -1
  331. package/common/utils/debounceDeparturesMessages.js +0 -28
  332. package/common/utils/debounceWebsocketMessages.d.ts +0 -12
  333. package/common/utils/debounceWebsocketMessages.d.ts.map +0 -1
  334. package/common/utils/debounceWebsocketMessages.js +0 -30
  335. package/common/utils/getLayersAsFlatArray.d.ts +0 -4
  336. package/common/utils/getLayersAsFlatArray.d.ts.map +0 -1
  337. package/common/utils/getLayersAsFlatArray.js +0 -16
  338. package/common/utils/getMapboxMapCopyrights.d.ts +0 -18
  339. package/common/utils/getMapboxMapCopyrights.d.ts.map +0 -1
  340. package/common/utils/getMapboxMapCopyrights.js +0 -30
  341. package/common/utils/getMapboxRender.d.ts +0 -8
  342. package/common/utils/getMapboxRender.d.ts.map +0 -1
  343. package/common/utils/getMapboxRender.js +0 -88
  344. package/common/utils/getMaplibreRender.d.ts +0 -9
  345. package/common/utils/getMaplibreRender.d.ts.map +0 -1
  346. package/common/utils/getMaplibreRender.js +0 -40
  347. package/common/utils/getRealtimeModeSuffix.d.ts.map +0 -1
  348. package/common/utils/getRealtimeModeSuffix.js +0 -7
  349. package/common/utils/getUrlWithParams.d.ts +0 -9
  350. package/common/utils/getUrlWithParams.d.ts.map +0 -1
  351. package/common/utils/getUrlWithParams.js +0 -18
  352. package/common/utils/getVehiclePosition.d.ts +0 -16
  353. package/common/utils/getVehiclePosition.d.ts.map +0 -1
  354. package/common/utils/getVehiclePosition.js +0 -72
  355. package/common/utils/index.d.ts +0 -18
  356. package/common/utils/index.d.ts.map +0 -1
  357. package/common/utils/realtimeConfig.d.ts +0 -53
  358. package/common/utils/realtimeConfig.d.ts.map +0 -1
  359. package/common/utils/realtimeConfig.js +0 -202
  360. package/common/utils/removeDuplicate.d.ts +0 -10
  361. package/common/utils/removeDuplicate.d.ts.map +0 -1
  362. package/common/utils/removeDuplicate.js +0 -15
  363. package/common/utils/renderTrajectories.d.ts +0 -17
  364. package/common/utils/renderTrajectories.d.ts.map +0 -1
  365. package/common/utils/renderTrajectories.js +0 -110
  366. package/common/utils/sortAndFilterDepartures.d.ts +0 -16
  367. package/common/utils/sortAndFilterDepartures.d.ts.map +0 -1
  368. package/common/utils/sortAndFilterDepartures.js +0 -58
  369. package/common/utils/sortByDelay.d.ts +0 -4
  370. package/common/utils/sortByDelay.d.ts.map +0 -1
  371. package/common/utils/sortByDelay.js +0 -21
  372. package/common/utils/timeUtils.d.ts +0 -24
  373. package/common/utils/timeUtils.d.ts.map +0 -1
  374. package/common/utils/timeUtils.js +0 -39
  375. package/iife.d.ts +0 -3
  376. package/iife.d.ts.map +0 -1
  377. package/index.d.ts +0 -10
  378. package/index.d.ts.map +0 -1
  379. package/index.js +0 -10
  380. package/mapbox/controls/CopyrightControl.d.ts +0 -29
  381. package/mapbox/controls/CopyrightControl.d.ts.map +0 -1
  382. package/mapbox/controls/index.d.ts +0 -2
  383. package/mapbox/controls/index.d.ts.map +0 -1
  384. package/mapbox/index.d.ts +0 -6
  385. package/mapbox/index.d.ts.map +0 -1
  386. package/mapbox/layers/Layer.d.ts +0 -59
  387. package/mapbox/layers/Layer.d.ts.map +0 -1
  388. package/mapbox/layers/Layer.js +0 -101
  389. package/mapbox/layers/RealtimeLayer.d.ts +0 -180
  390. package/mapbox/layers/RealtimeLayer.d.ts.map +0 -1
  391. package/mapbox/layers/RealtimeLayer.js +0 -270
  392. package/mapbox/layers/index.d.ts +0 -3
  393. package/mapbox/layers/index.d.ts.map +0 -1
  394. package/mapbox/utils/getMercatorResolution.d.ts +0 -9
  395. package/mapbox/utils/getMercatorResolution.d.ts.map +0 -1
  396. package/mapbox/utils/getMercatorResolution.js +0 -18
  397. package/mapbox/utils/getSourceCoordinates.d.ts +0 -9
  398. package/mapbox/utils/getSourceCoordinates.d.ts.map +0 -1
  399. package/mapbox/utils/getSourceCoordinates.js +0 -27
  400. package/mapbox/utils/index.d.ts +0 -3
  401. package/mapbox/utils/index.d.ts.map +0 -1
  402. package/mbt.js +0 -64706
  403. package/mbt.js.map +0 -7
  404. package/mbt.min.js +0 -1090
  405. package/mbt.min.js.map +0 -7
  406. package/ol/controls/CopyrightControl.d.ts +0 -31
  407. package/ol/controls/CopyrightControl.d.ts.map +0 -1
  408. package/ol/controls/CopyrightControl.js +0 -68
  409. package/ol/controls/RoutingControl.d.ts +0 -193
  410. package/ol/controls/RoutingControl.d.ts.map +0 -1
  411. package/ol/controls/RoutingControl.js +0 -631
  412. package/ol/controls/StopFinderControl.d.ts +0 -30
  413. package/ol/controls/StopFinderControl.d.ts.map +0 -1
  414. package/ol/controls/index.d.ts +0 -4
  415. package/ol/controls/index.d.ts.map +0 -1
  416. package/ol/index.d.ts +0 -6
  417. package/ol/index.d.ts.map +0 -1
  418. package/ol/layers/Layer.d.ts +0 -86
  419. package/ol/layers/Layer.d.ts.map +0 -1
  420. package/ol/layers/Layer.js +0 -174
  421. package/ol/layers/MapGlLayer.d.ts +0 -67
  422. package/ol/layers/MapGlLayer.d.ts.map +0 -1
  423. package/ol/layers/MapGlLayer.js +0 -218
  424. package/ol/layers/MapboxLayer.d.ts +0 -50
  425. package/ol/layers/MapboxLayer.d.ts.map +0 -1
  426. package/ol/layers/MapboxLayer.js +0 -109
  427. package/ol/layers/MapboxStyleLayer.d.ts +0 -130
  428. package/ol/layers/MapboxStyleLayer.d.ts.map +0 -1
  429. package/ol/layers/MapboxStyleLayer.js +0 -378
  430. package/ol/layers/MaplibreLayer.d.ts.map +0 -1
  431. package/ol/layers/MaplibreLayer.js +0 -34
  432. package/ol/layers/RealtimeLayer.d.ts +0 -202
  433. package/ol/layers/RealtimeLayer.d.ts.map +0 -1
  434. package/ol/layers/RealtimeLayer.js +0 -332
  435. package/ol/layers/RoutingLayer.d.ts +0 -35
  436. package/ol/layers/RoutingLayer.d.ts.map +0 -1
  437. package/ol/layers/RoutingLayer.js +0 -85
  438. package/ol/layers/VectorLayer.d.ts +0 -25
  439. package/ol/layers/VectorLayer.d.ts.map +0 -1
  440. package/ol/layers/VectorLayer.js +0 -38
  441. package/ol/layers/WMSLayer.d.ts +0 -42
  442. package/ol/layers/WMSLayer.d.ts.map +0 -1
  443. package/ol/layers/WMSLayer.js +0 -88
  444. package/ol/layers/index.d.ts +0 -9
  445. package/ol/layers/index.d.ts.map +0 -1
  446. package/ol/styles/fullTrajectoryDelayStyle.d.ts +0 -4
  447. package/ol/styles/fullTrajectoryDelayStyle.d.ts.map +0 -1
  448. package/ol/styles/fullTrajectoryDelayStyle.js +0 -33
  449. package/ol/styles/fullTrajectoryStyle.d.ts +0 -5
  450. package/ol/styles/fullTrajectoryStyle.d.ts.map +0 -1
  451. package/ol/styles/fullTrajectoryStyle.js +0 -44
  452. package/ol/styles/index.d.ts +0 -3
  453. package/ol/styles/index.d.ts.map +0 -1
  454. package/setupTests.d.ts +0 -2
  455. package/setupTests.d.ts.map +0 -1
  456. /package/{api → src/api}/index.js +0 -0
  457. /package/{common → src/common}/index.js +0 -0
  458. /package/{common → src/common}/styles/index.js +0 -0
  459. /package/{mapbox → src/mapbox}/controls/index.js +0 -0
  460. /package/{mapbox → src/mapbox}/index.js +0 -0
  461. /package/{mapbox → src/mapbox}/layers/index.js +0 -0
  462. /package/{mapbox → src/mapbox}/utils/index.js +0 -0
  463. /package/{ol → src/ol}/controls/index.js +0 -0
  464. /package/{ol → src/ol}/index.js +0 -0
  465. /package/{ol → src/ol}/layers/index.js +0 -0
  466. /package/{ol → src/ol}/styles/index.js +0 -0
  467. /package/{types → src/types}/common.d.ts +0 -0
  468. /package/{types → src/types}/index.d.ts +0 -0
  469. /package/{types → src/types}/realtime.d.ts +0 -0
  470. /package/{types → src/types}/routing.d.ts +0 -0
  471. /package/{types → src/types}/stops.d.ts +0 -0
@@ -0,0 +1,194 @@
1
+ import type { Map as OlMap } from 'ol';
2
+ import BaseObject from 'ol/Object';
3
+ import type { AnyMap, AnyMapboxMap } from '../../types';
4
+
5
+ export type ControlCommonOptions = {
6
+ active?: Boolean;
7
+ element?: HTMLElement;
8
+ target?: HTMLElement;
9
+ render?: () => void;
10
+ };
11
+
12
+ /**
13
+ * A class representing a control to display on map.
14
+ *
15
+ * @example
16
+ * const control = new Control();
17
+ *
18
+ * @classproperty {ol/Map~Map|mapboxgl.Map} map - The map which the control refers to.
19
+ * @classproperty {boolean} active - Active the control.
20
+ * @classproperty {HTMLElement} element - The HTML element used to render the control.
21
+ * @classproperty {HTMLElement} target - The HTML element where to render the element property. Default is the map's element. Read only.
22
+ */
23
+ class ControlCommon extends BaseObject {
24
+ active: Boolean;
25
+
26
+ map?: AnyMap;
27
+
28
+ target?: HTMLElement;
29
+
30
+ element?: HTMLElement;
31
+
32
+ /**
33
+ * Constructor
34
+ *
35
+ * @param {Object} [options] Control options.
36
+ * @param {boolean} [options.active = true] Whether the control is active or not.
37
+ * @param {HTMLElement} [options.element] The HTML element used to render the control.
38
+ * @param {HTMLElement} [options.target] The HTML element where to render the element property. Default is the map's element.
39
+ * @param {function} [options.render] Render function called whenever the control needs to be rerendered.
40
+ */
41
+ constructor(options: ControlCommonOptions = {}) {
42
+ super(options);
43
+ this.defineProperties(options);
44
+
45
+ const { active } = {
46
+ active: options.active !== false,
47
+ ...options,
48
+ };
49
+
50
+ /**
51
+ * @private
52
+ */
53
+ this.active = active;
54
+ }
55
+
56
+ /**
57
+ * Define control's properties.
58
+ *
59
+ * @private
60
+ * @private
61
+ */
62
+ defineProperties(options: ControlCommonOptions) {
63
+ const { target, element, render } = {
64
+ ...options,
65
+ };
66
+
67
+ Object.defineProperties(this, {
68
+ active: {
69
+ get: () => this.get('active'),
70
+ set: (newActive) => {
71
+ this.set('active', newActive);
72
+ if (newActive) {
73
+ this.activate();
74
+ } else {
75
+ this.deactivate();
76
+ }
77
+ this.render();
78
+ },
79
+ },
80
+ map: {
81
+ get: () => this.get('map'),
82
+ set: (map) => {
83
+ // Remove previous node.
84
+ if (this.map && this.element && this.element.parentNode) {
85
+ this.element.parentNode.removeChild(this.element);
86
+ }
87
+
88
+ // Clean listeners
89
+ this.deactivate();
90
+
91
+ this.set('map', map);
92
+
93
+ if (this.map) {
94
+ // Add new node
95
+ const targett =
96
+ this.target ||
97
+ ((this.map as OlMap).getTargetElement &&
98
+ (this.map as OlMap).getTargetElement()) ||
99
+ ((this.map as AnyMapboxMap).getContainer &&
100
+ (this.map as AnyMapboxMap).getContainer());
101
+
102
+ if (!this.element) {
103
+ this.createDefaultElement();
104
+ }
105
+
106
+ if (this.element) {
107
+ targett.appendChild(this.element);
108
+ }
109
+
110
+ // Add listeners
111
+ if (this.active) {
112
+ this.activate();
113
+ }
114
+ }
115
+ this.render();
116
+ },
117
+ },
118
+ target: {
119
+ value: target,
120
+ },
121
+ element: {
122
+ value: element,
123
+ writable: true,
124
+ },
125
+ render: {
126
+ /** @private */
127
+ value: render || this.render,
128
+ writable: true,
129
+ },
130
+ });
131
+ }
132
+
133
+ /**
134
+ * Attach the control to the map. Add events, html element ...
135
+ */
136
+ attachToMap(map: AnyMap) {
137
+ this.map = map;
138
+ }
139
+
140
+ /**
141
+ * Detach the control From the map. Remove events, html element ..
142
+ */
143
+ detachFromMap() {
144
+ this.map = undefined;
145
+ }
146
+
147
+ /**
148
+ * Add listeners then renders the control.
149
+ * To be defined in inherited classes.
150
+ */
151
+ activate() {
152
+ this.deactivate();
153
+ }
154
+
155
+ /**
156
+ * Remove listeners added by activate() function then renders the control.
157
+ * To be defined in inherited classes.
158
+ */
159
+ // eslint-disable-next-line class-methods-use-this
160
+ deactivate() {
161
+ // eslint-disable-next-line no-console
162
+ console.error(
163
+ 'The function deactivate() must be implemented in subclasses',
164
+ );
165
+ }
166
+
167
+ /**
168
+ * The default render function. It renders content in the HTML element.
169
+ * To be defined in inherited classes.
170
+ *
171
+ * @private
172
+ */
173
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
174
+ render(options?: any) {
175
+ // eslint-disable-next-line no-console
176
+ console.error('The function render() must be implemented in subclasses');
177
+ }
178
+
179
+ /**
180
+ * The default element to display if this.element is not defined.
181
+ * To be defined in inherited classes.
182
+ *
183
+ * @private
184
+ */
185
+ // eslint-disable-next-line class-methods-use-this
186
+ createDefaultElement() {
187
+ // eslint-disable-next-line no-console
188
+ console.error(
189
+ 'The function createDefaultElement() must be implemented in subclasses',
190
+ );
191
+ }
192
+ }
193
+
194
+ export default ControlCommon;
@@ -0,0 +1,41 @@
1
+ /* eslint-disable max-classes-per-file */
2
+ import ControlCommon from './ControlCommon';
3
+
4
+ /**
5
+ * A class representing a copyright control to display on map.
6
+ * This class only draw an html element, with an empty string in it.
7
+ * Use subclasses to use it in an ol or mapbox map.
8
+ */
9
+ class CopyrightControlCommon extends ControlCommon {
10
+ render() {
11
+ if (!this.element) {
12
+ return;
13
+ }
14
+ this.element.innerHTML = this.active
15
+ ? this.getCopyrights().join(' | ')
16
+ : '';
17
+ }
18
+
19
+ createDefaultElement() {
20
+ this.element = document.createElement('div');
21
+ this.element.id = 'mbt-copyright';
22
+ Object.assign(this.element.style, {
23
+ position: 'absolute',
24
+ bottom: 0,
25
+ right: 0,
26
+ fontSize: '.8rem',
27
+ padding: '0 10px',
28
+ });
29
+ }
30
+
31
+ getCopyrights() {
32
+ // eslint-disable-next-line no-console
33
+ console.error(
34
+ 'The getCopyrights() function must be implemented in subclasses.',
35
+ this,
36
+ );
37
+ return [] as string[];
38
+ }
39
+ }
40
+
41
+ export default CopyrightControlCommon;
@@ -0,0 +1,192 @@
1
+ /* eslint-disable no-empty-function */
2
+ /* eslint-disable no-useless-constructor */
3
+ /* eslint-disable class-methods-use-this */
4
+ /* eslint-disable max-classes-per-file */
5
+ import { FeatureCollection } from '@turf/helpers';
6
+ import { Feature } from 'geojson';
7
+ import { StopsAPI } from '../../api';
8
+ import { StopsAPIOptions } from '../../api/StopsAPI';
9
+ import { StopsParameters } from '../../types';
10
+ import ControlCommon, { ControlCommonOptions } from './ControlCommon';
11
+
12
+ export type StopFinderControlCommonOptions = ControlCommonOptions &
13
+ StopsAPIOptions & {
14
+ placeholder?: string;
15
+ apiParams: StopsParameters;
16
+ };
17
+
18
+ /**
19
+ * A class representing a stop finder control to display on map.
20
+ * This class only draw the html elements.
21
+ * The geographic logic must be implemented by subclasses.
22
+ */
23
+ class StopFinderControlCommon extends ControlCommon {
24
+ apiParams: StopsParameters;
25
+
26
+ placeholder: string;
27
+
28
+ api: StopsAPI;
29
+
30
+ abortController?: AbortController;
31
+
32
+ suggestionsElt?: HTMLElement;
33
+
34
+ inputElt?: HTMLInputElement;
35
+
36
+ clearElt?: HTMLDivElement;
37
+
38
+ /**
39
+ * Constructor.
40
+ *
41
+ * @param {Object} options Map options
42
+ * @param {string} options.apiKey Access key for [geOps services](https://developer.geops.io/). See StopsAPI.
43
+ * @param {string} [options.url='https://api.geops.io/tracker/v1'] Stops service url. See StopsAPI.
44
+ * @param {string} [options.placeholder='Search for a stop...'] Input field placeholder.
45
+ * @param {StopsSearchParams} [options.apiParams={ limit: 20 }] Request parameters. See [Stops service documentation](https://developer.geops.io/apis/5dcbd702a256d90001cf1361/).
46
+ */
47
+ constructor(options: StopFinderControlCommonOptions) {
48
+ super(options);
49
+ const { apiParams, apiKey, url, placeholder } = options || {};
50
+
51
+ this.apiParams = { limit: 20, ...(apiParams || {}) };
52
+ this.placeholder = placeholder || 'Search for a stop...';
53
+
54
+ const apiOptions: { apiKey?: string; url?: string } = { apiKey };
55
+ if (url) {
56
+ apiOptions.url = url;
57
+ }
58
+ this.api = new StopsAPI(apiOptions);
59
+ this.abortController = new AbortController();
60
+ }
61
+
62
+ deactivate() {}
63
+
64
+ render(featureCollection?: FeatureCollection) {
65
+ const suggestions = featureCollection?.features || [];
66
+ if (!this.suggestionsElt) {
67
+ return;
68
+ }
69
+
70
+ this.suggestionsElt.style.display = suggestions.length ? 'block' : 'none';
71
+
72
+ this.suggestionsElt.innerHTML = '';
73
+
74
+ suggestions.forEach((suggestion) => {
75
+ const suggElt = document.createElement('div');
76
+ suggElt.innerHTML = suggestion?.properties?.name;
77
+ suggElt.onclick = () => {
78
+ // @ts-ignore
79
+ this.onSuggestionClick(suggestion);
80
+ };
81
+ Object.assign(suggElt.style, {
82
+ padding: '5px 12px',
83
+ });
84
+ this.suggestionsElt?.appendChild(suggElt);
85
+ });
86
+ }
87
+
88
+ createDefaultElement() {
89
+ /**
90
+ * Define a default element.
91
+ */
92
+ this.element = document.createElement('div');
93
+ this.element.id = 'mbt-search';
94
+ Object.assign(this.element.style, {
95
+ position: 'absolute',
96
+ top: 0,
97
+ left: '50px',
98
+ margin: '10px',
99
+ display: 'flex',
100
+ flexDirection: 'column',
101
+ width: '320px',
102
+ });
103
+
104
+ // Create input element
105
+ this.inputElt = document.createElement('input');
106
+ this.inputElt.type = 'text';
107
+ this.inputElt.placeholder = this.placeholder;
108
+ this.inputElt.autocomplete = 'off';
109
+ this.inputElt.onkeyup = (evt) => {
110
+ this.abortController?.abort();
111
+ this.abortController = new AbortController();
112
+ // @ts-ignore
113
+ this.search(evt.target.value, this.abortController);
114
+ };
115
+ Object.assign(this.inputElt.style, {
116
+ padding: '10px 30px 10px 10px',
117
+ });
118
+ this.element.appendChild(this.inputElt);
119
+
120
+ // Create suggestions list element
121
+ this.suggestionsElt = document.createElement('div');
122
+ Object.assign(this.suggestionsElt.style, {
123
+ backgroundColor: 'white',
124
+ overflowY: 'auto',
125
+ cursor: 'pointer',
126
+ });
127
+ this.element.appendChild(this.suggestionsElt);
128
+
129
+ this.clearElt = document.createElement('div');
130
+ Object.assign(this.clearElt.style, {
131
+ display: 'none',
132
+ position: 'absolute',
133
+ right: '0',
134
+ padding: '0 10px',
135
+ fontSize: '200%',
136
+ cursor: 'pointer',
137
+ });
138
+ this.clearElt.innerHTML = '×';
139
+ this.clearElt.onclick = () => this.clear();
140
+ this.element.appendChild(this.clearElt);
141
+ }
142
+
143
+ /**
144
+ * Launch a search.
145
+ *
146
+ * @param {String} query The query to search for.
147
+ * @param {AbortController} abortController Abort controller used to cancel the request.
148
+ * @return {Promise<Array<GeoJSONFeature>>} An array of GeoJSON features with coordinates in [EPSG:4326](http://epsg.io/4326).
149
+ */
150
+ search(q: string, abortController: AbortController) {
151
+ if (q !== undefined || q !== null) {
152
+ this.apiParams.q = q;
153
+ }
154
+
155
+ if (this.clearElt) {
156
+ this.clearElt.style.display = 'block';
157
+ }
158
+
159
+ return this.api
160
+ .search(
161
+ this.apiParams,
162
+ abortController && { signal: abortController.signal },
163
+ )
164
+ .then((data) => {
165
+ this.render(data as FeatureCollection);
166
+ })
167
+ .catch(() => {
168
+ this.render();
169
+ });
170
+ }
171
+
172
+ /**
173
+ * To be defined in inherited class
174
+ */
175
+ // eslint-disable-next-line no-unused-vars, @typescript-eslint/no-unused-vars
176
+ onSuggestionClick(suggestion: Feature) {}
177
+
178
+ /**
179
+ * Clear the search field and close the control.
180
+ */
181
+ clear() {
182
+ if (!this.suggestionsElt || !this.inputElt || !this.clearElt) {
183
+ return;
184
+ }
185
+
186
+ this.inputElt.value = '';
187
+ this.suggestionsElt.innerHTML = '';
188
+ this.clearElt.style.display = 'none';
189
+ }
190
+ }
191
+
192
+ export default StopFinderControlCommon;
@@ -0,0 +1,158 @@
1
+ import VectorLayer from 'ol/layer/Vector';
2
+ import VectorSource from 'ol/source/Vector';
3
+ import Layer from './LayerCommon';
4
+
5
+ const olLayer = new VectorLayer({ source: new VectorSource() });
6
+
7
+ describe('Layer', () => {
8
+ test('should initialize.', () => {
9
+ const layer = new Layer({ name: 'Layer', olLayer });
10
+ expect(layer).toBeInstanceOf(Layer);
11
+ });
12
+
13
+ test('should define default properties.', () => {
14
+ const options = {
15
+ name: 'Layer',
16
+ key: 'Layerkey',
17
+ olLayer,
18
+ };
19
+ const layer = new Layer(options);
20
+
21
+ expect(layer).toBeInstanceOf(Layer);
22
+ expect(layer.options).toEqual(options);
23
+ expect(layer.name).toEqual(options.name);
24
+ expect(layer.key).toEqual('Layerkey');
25
+ expect(layer.hitTolerance).toBe(5);
26
+ expect(layer.copyrights).toEqual([]);
27
+ expect(layer.visible).toBe(true);
28
+ expect(layer.properties).toEqual({});
29
+ expect(layer.map).toBe(undefined);
30
+ expect(layer.group).toBe(undefined);
31
+ });
32
+
33
+ test('should be visible by default.', () => {
34
+ const layer = new Layer();
35
+ expect(layer.visible).toBe(true);
36
+ });
37
+
38
+ test('should be hidden using constructor.', () => {
39
+ const layer = new Layer({ visible: false });
40
+ expect(layer.visible).toBe(false);
41
+ });
42
+
43
+ test('should be hidden using setter.', () => {
44
+ const layer = new Layer();
45
+ layer.visible = false;
46
+ expect(layer.visible).toBe(false);
47
+ });
48
+
49
+ test('should visibility stay unchanged', () => {
50
+ const layer = new Layer();
51
+ layer.visible = false;
52
+ expect(layer.visible).toBe(false);
53
+ });
54
+
55
+ test('should return its name.', () => {
56
+ const layer = new Layer({ name: 'Layer' });
57
+ expect(layer.name).toEqual('Layer');
58
+ });
59
+
60
+ test('should called detachFromMap on initialization.', () => {
61
+ const layer = new Layer();
62
+ const spy = jest.spyOn(layer, 'detachFromMap');
63
+ layer.attachToMap();
64
+ expect(spy).toHaveBeenCalledTimes(1);
65
+ });
66
+
67
+ test('should properties correctly set and get.', () => {
68
+ const layer = new Layer({
69
+ name: 'Layer',
70
+ olLayer,
71
+ properties: {
72
+ abc: 'foo',
73
+ },
74
+ });
75
+ expect(layer).toBeInstanceOf(Layer);
76
+ expect(layer.get('abc')).toEqual('foo');
77
+
78
+ layer.set('abc', 'bar');
79
+ expect(layer.get('abc')).toEqual('bar');
80
+ });
81
+
82
+ test('should set children', () => {
83
+ const layer = new Layer({
84
+ children: [new Layer(), new Layer()],
85
+ });
86
+ expect(layer.children.length).toBe(2);
87
+ expect(layer.children[0].parent).toBe(layer);
88
+ expect(layer.children[1].parent).toBe(layer);
89
+ });
90
+
91
+ test('should initialize copyrights property.', () => {
92
+ const layer = new Layer({
93
+ name: 'Layer',
94
+ olLayer,
95
+ copyrights: ['&copy: copyright', 'another copyright'],
96
+ });
97
+
98
+ expect(layer.copyrights[0]).toEqual('&copy: copyright');
99
+ });
100
+
101
+ test('should set and get copyright property.', () => {
102
+ const layer = new Layer({
103
+ name: 'Layer',
104
+ olLayer,
105
+ });
106
+ expect(layer).toBeInstanceOf(Layer);
107
+ expect(layer.copyright).toEqual(undefined);
108
+
109
+ layer.copyright = '&copy; OSM Contributors';
110
+ expect(layer.copyright).toEqual('&copy; OSM Contributors');
111
+ });
112
+
113
+ describe('#attachToMap()', () => {
114
+ test('should set map.', () => {
115
+ const layer = new Layer({
116
+ name: 'Layer',
117
+ olLayer,
118
+ });
119
+
120
+ expect(layer.map).toBe(undefined);
121
+ const obj = {};
122
+ layer.attachToMap(obj);
123
+ expect(layer.map).toBe(obj);
124
+ });
125
+
126
+ test('should call terminate.', () => {
127
+ const layer = new Layer({
128
+ name: 'Layer',
129
+ olLayer,
130
+ });
131
+ const spy = jest.spyOn(layer, 'detachFromMap');
132
+ layer.attachToMap();
133
+ expect(spy).toHaveBeenCalledTimes(1);
134
+ });
135
+ });
136
+
137
+ describe('#getFeatureInfoAtCoordinate()', () => {
138
+ test('return an empty fetaureInfo object and display an error message', (done) => {
139
+ // eslint-disable-next-line no-console
140
+ console.error = jest.fn();
141
+ const layer = new Layer({
142
+ name: 'Layer',
143
+ olLayer,
144
+ });
145
+ const coord = [0, 0];
146
+ layer.getFeatureInfoAtCoordinate(coord).then((featureInfo) => {
147
+ expect(featureInfo.features).toEqual([]);
148
+ expect(featureInfo.layer).toEqual(layer);
149
+ expect(featureInfo.coordinate).toEqual(coord);
150
+ // eslint-disable-next-line no-console
151
+ expect(console.error).toHaveBeenCalledTimes(1);
152
+ done();
153
+ // eslint-disable-next-line no-console
154
+ console.error.mockRestore();
155
+ });
156
+ });
157
+ });
158
+ });