mobility-toolbox-js 2.0.0-beta.8 → 2.0.1-beta.13
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.
- package/api/RoutingAPI.js +15 -0
- package/api/RoutingAPI.test.js +25 -0
- package/api/StopsAPI.js +12 -0
- package/api/StopsAPI.test.js +22 -0
- package/api/TralisAPI.js +359 -0
- package/api/TralisAPI.test.js +67 -0
- package/{src/api/tralis → api}/TralisAPIUtils.js +2 -32
- package/api/index.js +3 -0
- package/{index.html → api/typedefs.js} +0 -0
- package/common/Tracker.js +93 -0
- package/common/api/HttpAPI.js +30 -0
- package/common/api/HttpAPI.test.js +50 -0
- package/common/api/WebSocketAPI.js +175 -0
- package/{src/api/tralis/WebSocketConnector.test.js → common/api/WebSocketAPI.test.js} +100 -145
- package/common/controls/Control.js +81 -0
- package/{src/common → common}/controls/Control.test.js +32 -43
- package/common/index.js +4 -0
- package/common/layers/Layer.js +213 -0
- package/{src/common → common}/layers/Layer.test.js +185 -244
- package/common/mixins/CopyrightMixin.js +24 -0
- package/common/mixins/SearchMixin.js +110 -0
- package/common/mixins/TralisLayerMixin.js +479 -0
- package/common/styles/index.js +4 -0
- package/{src/common → common}/styles/trackerDefaultStyle.js +39 -175
- package/common/styles/trackerDelayStyle.js +8 -0
- package/{src/common → common}/styles/trackerSimpleStyle.js +4 -8
- package/{src/common → common}/trackerConfig.js +61 -99
- package/common/trackerConfig.test.js +23 -0
- package/{src/doc/examples/ol-mapbox-layer.md → common/typedefs.js} +0 -0
- package/common/utils/createTrackerFilters.js +56 -0
- package/common/utils/createTrackerFilters.test.js +79 -0
- package/{src/common → common}/utils/getMapboxMapCopyrights.js +3 -16
- package/common/utils/getMapboxMapCopyrights.test.js +40 -0
- package/{src/common → common}/utils/getMapboxStyleUrl.js +3 -13
- package/{src/common → common}/utils/getVehiclePosition.js +3 -33
- package/common/utils/index.js +5 -0
- package/common/utils/removeDuplicate.js +8 -0
- package/common/utils/removeDuplicate.test.js +19 -0
- package/{src/common → common}/utils/sortByDelay.js +2 -7
- package/common/utils/timeUtils.js +20 -0
- package/common/utils/timeUtils.test.js +10 -0
- package/index.js +8 -0
- package/mapbox/controls/CopyrightControl.js +29 -0
- package/mapbox/controls/index.js +1 -0
- package/mapbox/index.js +4 -0
- package/mapbox/layers/Layer.js +57 -0
- package/mapbox/layers/Layer.test.js +182 -0
- package/mapbox/layers/TralisLayer.js +182 -0
- package/{src/mapbox → mapbox}/layers/TralisLayer.test.js +12 -14
- package/mapbox/layers/index.js +2 -0
- package/{src/mapbox → mapbox}/utils.js +7 -21
- package/mbt.js +50444 -0
- package/mbt.js.map +7 -0
- package/mbt.min.js +1005 -0
- package/mbt.min.js.map +7 -0
- package/ol/controls/CopyrightControl.js +42 -0
- package/ol/controls/CopyrightControl.test.js +165 -0
- package/ol/controls/RoutingControl.js +387 -0
- package/ol/controls/RoutingControl.test.js +151 -0
- package/ol/controls/StopFinderControl.js +10 -0
- package/ol/controls/StopFinderControl.test.js +48 -0
- package/ol/controls/index.js +3 -0
- package/ol/index.js +5 -0
- package/ol/layers/Layer.js +88 -0
- package/ol/layers/Layer.test.js +174 -0
- package/ol/layers/MapboxLayer.js +203 -0
- package/{src/ol → ol}/layers/MapboxLayer.test.js +58 -84
- package/ol/layers/MapboxStyleLayer.js +187 -0
- package/{src/ol → ol}/layers/MapboxStyleLayer.test.js +97 -128
- package/ol/layers/MaplibreLayer.js +139 -0
- package/ol/layers/RoutingLayer.js +61 -0
- package/{src/ol → ol}/layers/RoutingLayer.test.js +15 -24
- package/ol/layers/TralisLayer.js +185 -0
- package/ol/layers/TralisLayer.test.js +79 -0
- package/ol/layers/VectorLayer.js +22 -0
- package/{src/ol → ol}/layers/VectorLayer.test.js +34 -45
- package/ol/layers/WMSLayer.js +38 -0
- package/ol/layers/WMSLayer.test.js +76 -0
- package/ol/layers/index.js +8 -0
- package/{src/ol → ol}/styles/fullTrajectoryDelayStyle.js +11 -15
- package/ol/styles/fullTrajectoryStyle.js +43 -0
- package/ol/styles/index.js +2 -0
- package/package.json +34 -74
- package/.babelrc +0 -6
- package/.esdoc.json +0 -17
- package/.eslintignore +0 -1
- package/.github/workflows/conventional-pr-title.yml +0 -21
- package/.github/workflows/cypress.yml +0 -29
- package/.github/workflows/nodejs.yml +0 -28
- package/.husky/commit-msg +0 -4
- package/.husky/post-checkout +0 -4
- package/.husky/post-merge +0 -4
- package/.husky/post-rebase +0 -4
- package/.husky/pre-commit +0 -4
- package/.neutrinorc.js +0 -176
- package/.nvmrc +0 -1
- package/CHANGELOG.md +0 -10
- package/LICENSE +0 -21
- package/__mocks__/mapbox-gl.js +0 -81
- package/__mocks__/maplibre-gl.js +0 -81
- package/commitlint.config.js +0 -1
- package/cypress/fixtures/example.json +0 -5
- package/cypress/integration/examples/api.spec.js +0 -7
- package/cypress/integration/examples/examples.spec.js +0 -7
- package/cypress/integration/examples/navigation.spec.js +0 -29
- package/cypress/plugins/index.js +0 -21
- package/cypress/support/commands.js +0 -25
- package/cypress/support/index.js +0 -20
- package/cypress.json +0 -4
- package/data/fetchRoute.json +0 -292
- package/data/fetchTrajectories.json +0 -18
- package/data/fetchTrajectoryById.json +0 -3
- package/data/fetchTrajectoryStations.json +0 -18
- package/data/stopsSearch.json +0 -15
- package/documentation.yml +0 -4
- package/esdoc/README.md +0 -27
- package/esdoc/plugins/MyPlugin.js +0 -69
- package/esdoc/plugins/dynamic-property-plugin/Plugin.js +0 -50
- package/esdoc/plugins/externals-plugin/Plugin.js +0 -45
- package/esdoc/plugins/externals-plugin/externals.js +0 -96
- package/global-setup.js +0 -3
- package/indexweb.html +0 -49
- package/jest.config.js +0 -5
- package/pull_request_template.md +0 -17
- package/renovate.json +0 -4
- package/scripts/read-pkg-json.js +0 -22
- package/src/api/index.js +0 -3
- package/src/api/routing/RoutingAPI.js +0 -44
- package/src/api/routing/RoutingAPI.test.js +0 -41
- package/src/api/stops/StopsAPI.js +0 -41
- package/src/api/stops/StopsAPI.test.js +0 -34
- package/src/api/tralis/TralisAPI.js +0 -731
- package/src/api/tralis/TralisAPI.test.js +0 -75
- package/src/api/tralis/WebSocketConnector.js +0 -338
- package/src/api/tralis/typedefs.js +0 -81
- package/src/assets/Lato-Black.ttf +0 -0
- package/src/assets/Lato-BlackItalic.ttf +0 -0
- package/src/assets/Lato-Bold.ttf +0 -0
- package/src/assets/Lato-BoldItalic.ttf +0 -0
- package/src/assets/Lato-Italic.ttf +0 -0
- package/src/assets/Lato-Light.ttf +0 -0
- package/src/assets/Lato-LightItalic.ttf +0 -0
- package/src/assets/Lato-Regular.ttf +0 -0
- package/src/assets/Lato-Thin.ttf +0 -0
- package/src/assets/Lato-ThinItalic.ttf +0 -0
- package/src/assets/OFL.txt +0 -93
- package/src/common/Tracker.js +0 -197
- package/src/common/api/api.js +0 -64
- package/src/common/api/api.test.js +0 -68
- package/src/common/controls/Control.js +0 -146
- package/src/common/index.js +0 -5
- package/src/common/layers/Layer.js +0 -404
- package/src/common/mixins/CopyrightMixin.js +0 -48
- package/src/common/mixins/SearchMixin.js +0 -176
- package/src/common/mixins/TralisLayerMixin.js +0 -930
- package/src/common/styles/index.js +0 -4
- package/src/common/styles/trackerDelayStyle.js +0 -17
- package/src/common/trackerConfig.test.js +0 -25
- package/src/common/typedefs.js +0 -23
- package/src/common/utils/createTrackerFilters.js +0 -87
- package/src/common/utils/createTrackerFilters.test.js +0 -95
- package/src/common/utils/getMapboxMapCopyrights.test.js +0 -47
- package/src/common/utils/index.js +0 -5
- package/src/common/utils/removeDuplicate.js +0 -22
- package/src/common/utils/removeDuplicate.test.js +0 -22
- package/src/common/utils/timeUtils.js +0 -44
- package/src/common/utils/timeUtils.test.js +0 -16
- package/src/doc/App.js +0 -116
- package/src/doc/App.scss +0 -51
- package/src/doc/_redirects +0 -2
- package/src/doc/components/CodeSandboxButton.js +0 -103
- package/src/doc/components/Documentation.js +0 -40
- package/src/doc/components/Esdoc/Anchor.js +0 -57
- package/src/doc/components/Esdoc/ClassDoc.js +0 -272
- package/src/doc/components/Esdoc/DeprecatedHTML.js +0 -16
- package/src/doc/components/Esdoc/DetailDocs.js +0 -281
- package/src/doc/components/Esdoc/DetailHTML.js +0 -33
- package/src/doc/components/Esdoc/DirectSubclassHTML.js +0 -30
- package/src/doc/components/Esdoc/DocBuilderUtils.js +0 -694
- package/src/doc/components/Esdoc/DocLinkHTML.js +0 -62
- package/src/doc/components/Esdoc/DocsLinkHTML.js +0 -38
- package/src/doc/components/Esdoc/Esdoc.js +0 -63
- package/src/doc/components/Esdoc/EsdocContent.js +0 -51
- package/src/doc/components/Esdoc/EsdocNavigation.js +0 -13
- package/src/doc/components/Esdoc/EsdocSearch.js +0 -81
- package/src/doc/components/Esdoc/ExperimentalHTML.js +0 -17
- package/src/doc/components/Esdoc/ExtendsChainHTML.js +0 -32
- package/src/doc/components/Esdoc/FileDocLinkHTML.js +0 -60
- package/src/doc/components/Esdoc/IdentifiersDoc.js +0 -113
- package/src/doc/components/Esdoc/IndirectSubclassHTML.js +0 -30
- package/src/doc/components/Esdoc/InheritedSummaryDoc.js +0 -70
- package/src/doc/components/Esdoc/InheritedSummaryHTML.js +0 -38
- package/src/doc/components/Esdoc/MixinClassesHTML.js +0 -29
- package/src/doc/components/Esdoc/NavDoc.js +0 -112
- package/src/doc/components/Esdoc/OverrideMethod.js +0 -44
- package/src/doc/components/Esdoc/OverrideMethodDescription.js +0 -35
- package/src/doc/components/Esdoc/Properties.js +0 -89
- package/src/doc/components/Esdoc/README.md +0 -45
- package/src/doc/components/Esdoc/SignatureHTML.js +0 -123
- package/src/doc/components/Esdoc/SingleDoc.js +0 -31
- package/src/doc/components/Esdoc/SummaryDoc.js +0 -160
- package/src/doc/components/Esdoc/SummaryHTML.js +0 -96
- package/src/doc/components/Esdoc/TypeDocLinkHTML.js +0 -249
- package/src/doc/components/Esdoc/css/identifiers.css +0 -38
- package/src/doc/components/Esdoc/css/search.css +0 -76
- package/src/doc/components/Esdoc/css/style.css +0 -603
- package/src/doc/components/Esdoc/index.js +0 -7
- package/src/doc/components/Example.js +0 -153
- package/src/doc/components/Examples.js +0 -183
- package/src/doc/components/Home.js +0 -106
- package/src/doc/components/TrackerExample.js +0 -38
- package/src/doc/examples/assets/tralis-live-map/index.js +0 -11
- package/src/doc/examples/assets/tralis-live-map/s1kreis.svg +0 -105
- package/src/doc/examples/assets/tralis-live-map/s20kreis.svg +0 -101
- package/src/doc/examples/assets/tralis-live-map/s2kreis.svg +0 -95
- package/src/doc/examples/assets/tralis-live-map/s3kreis.svg +0 -95
- package/src/doc/examples/assets/tralis-live-map/s4kreis.svg +0 -95
- package/src/doc/examples/assets/tralis-live-map/s6kreis.svg +0 -95
- package/src/doc/examples/assets/tralis-live-map/s7kreis.svg +0 -95
- package/src/doc/examples/assets/tralis-live-map/s8kreis.svg +0 -93
- package/src/doc/examples/assets/tralis-live-map/unknown.svg +0 -107
- package/src/doc/examples/mb-copyright.html +0 -26
- package/src/doc/examples/mb-copyright.js +0 -37
- package/src/doc/examples/mb-tracker.html +0 -1
- package/src/doc/examples/mb-tracker.js +0 -39
- package/src/doc/examples/mb-tracker.md +0 -1
- package/src/doc/examples/mb-tralis.html +0 -1
- package/src/doc/examples/mb-tralis.js +0 -34
- package/src/doc/examples/ol-copyright.html +0 -26
- package/src/doc/examples/ol-copyright.js +0 -43
- package/src/doc/examples/ol-mapbox-layer.html +0 -1
- package/src/doc/examples/ol-mapbox-layer.js +0 -28
- package/src/doc/examples/ol-mapbox-style-layer.html +0 -12
- package/src/doc/examples/ol-mapbox-style-layer.js +0 -44
- package/src/doc/examples/ol-query.html +0 -32
- package/src/doc/examples/ol-query.js +0 -83
- package/src/doc/examples/ol-routing.html +0 -26
- package/src/doc/examples/ol-routing.js +0 -59
- package/src/doc/examples/ol-routing.md +0 -1
- package/src/doc/examples/ol-stop-finder.html +0 -15
- package/src/doc/examples/ol-stop-finder.js +0 -31
- package/src/doc/examples/ol-stop-finder.md +0 -1
- package/src/doc/examples/ol-tracker.html +0 -1
- package/src/doc/examples/ol-tracker.js +0 -44
- package/src/doc/examples/ol-tracker.md +0 -1
- package/src/doc/examples/ol-tralis.html +0 -5
- package/src/doc/examples/ol-tralis.js +0 -57
- package/src/doc/examples/tralis-live-map.html +0 -1
- package/src/doc/examples/tralis-live-map.js +0 -51
- package/src/doc/examples/tralis-live-map.md +0 -3
- package/src/doc/examples.js +0 -107
- package/src/doc/img/examples/live_tracker_mb.jpg +0 -0
- package/src/doc/img/examples/live_tracker_munich.jpg +0 -0
- package/src/doc/img/examples/live_tracker_ol.jpg +0 -0
- package/src/doc/img/examples/mapbox.jpg +0 -0
- package/src/doc/img/examples/mapbox_style.jpg +0 -0
- package/src/doc/img/examples/ol-copyright.png +0 -0
- package/src/doc/img/examples/query_objects.jpg +0 -0
- package/src/doc/img/examples/routing.jpg +0 -0
- package/src/doc/img/examples/simple_map.jpg +0 -0
- package/src/doc/img/examples/stops.jpg +0 -0
- package/src/doc/img/favico.ico +0 -0
- package/src/doc/index.js +0 -21
- package/src/iife.js +0 -7
- package/src/index.js +0 -10
- package/src/mapbox/controls/CopyrightControl.js +0 -58
- package/src/mapbox/controls/index.js +0 -2
- package/src/mapbox/index.js +0 -4
- package/src/mapbox/layers/Layer.js +0 -118
- package/src/mapbox/layers/Layer.test.js +0 -202
- package/src/mapbox/layers/TralisLayer.js +0 -329
- package/src/mapbox/layers/index.js +0 -2
- package/src/ol/README.md +0 -0
- package/src/ol/controls/CopyrightControl.js +0 -80
- package/src/ol/controls/CopyrightControl.test.js +0 -211
- package/src/ol/controls/RoutingControl.js +0 -752
- package/src/ol/controls/RoutingControl.test.js +0 -216
- package/src/ol/controls/StopFinderControl.js +0 -38
- package/src/ol/controls/StopFinderControl.test.js +0 -59
- package/src/ol/controls/index.js +0 -3
- package/src/ol/controls/snapshots/RoutingControlRouteGen10.json +0 -58
- package/src/ol/controls/snapshots/RoutingControlRouteGen100.json +0 -292
- package/src/ol/controls/snapshots/RoutingControlRouteGen30.json +0 -69
- package/src/ol/controls/snapshots/RoutingControlRouteGen5.json +0 -58
- package/src/ol/controls/snapshots/RoutingControlRouteOSM.json +0 -759
- package/src/ol/controls/snapshots/RoutingControlStation1.json +0 -60
- package/src/ol/controls/snapshots/RoutingControlStation2.json +0 -49
- package/src/ol/index.js +0 -5
- package/src/ol/layers/Layer.js +0 -193
- package/src/ol/layers/Layer.test.js +0 -197
- package/src/ol/layers/MapboxLayer.js +0 -378
- package/src/ol/layers/MapboxStyleLayer.js +0 -417
- package/src/ol/layers/MaplibreLayer.js +0 -280
- package/src/ol/layers/RoutingLayer.js +0 -91
- package/src/ol/layers/TralisLayer.js +0 -359
- package/src/ol/layers/TralisLayer.test.js +0 -97
- package/src/ol/layers/VectorLayer.js +0 -43
- package/src/ol/layers/WMSLayer.js +0 -80
- package/src/ol/layers/WMSLayer.test.js +0 -84
- package/src/ol/layers/index.js +0 -8
- package/src/ol/styles/fullTrajectoryStyle.js +0 -51
- package/src/ol/styles/index.js +0 -2
- package/src/setupTests.js +0 -15
- package/webpack.config.js +0 -6
|
@@ -1,180 +1,162 @@
|
|
|
1
|
-
import OlMap from
|
|
2
|
-
import View from
|
|
3
|
-
import gllib from
|
|
4
|
-
import Layer from
|
|
5
|
-
import MaplibreLayer from
|
|
6
|
-
import MapboxStyleLayer from
|
|
7
|
-
|
|
1
|
+
import OlMap from "ol/Map";
|
|
2
|
+
import View from "ol/View";
|
|
3
|
+
import gllib from "maplibre-gl";
|
|
4
|
+
import Layer from "./Layer";
|
|
5
|
+
import MaplibreLayer from "./MaplibreLayer";
|
|
6
|
+
import MapboxStyleLayer from "./MapboxStyleLayer";
|
|
8
7
|
let source;
|
|
9
8
|
let layer;
|
|
10
9
|
let map;
|
|
11
10
|
let onClick;
|
|
12
|
-
|
|
13
11
|
const styleLayer = {
|
|
14
|
-
id:
|
|
12
|
+
id: "layer"
|
|
15
13
|
};
|
|
16
|
-
|
|
17
|
-
describe('MapboxStyleLayer', () => {
|
|
14
|
+
describe("MapboxStyleLayer", () => {
|
|
18
15
|
beforeEach(() => {
|
|
19
16
|
onClick = jest.fn();
|
|
20
17
|
source = new MaplibreLayer({
|
|
21
|
-
name:
|
|
22
|
-
apiKey: false
|
|
18
|
+
name: "Layer",
|
|
19
|
+
apiKey: false
|
|
23
20
|
});
|
|
24
21
|
layer = new MapboxStyleLayer({
|
|
25
|
-
name:
|
|
22
|
+
name: "mapbox layer",
|
|
26
23
|
visible: true,
|
|
27
24
|
mapboxLayer: source,
|
|
28
25
|
styleLayer,
|
|
29
|
-
onClick
|
|
26
|
+
onClick
|
|
30
27
|
});
|
|
31
28
|
map = new OlMap({
|
|
32
|
-
target: document.createElement(
|
|
33
|
-
view: new View({ center: [0, 0] })
|
|
29
|
+
target: document.createElement("div"),
|
|
30
|
+
view: new View({ center: [0, 0] })
|
|
34
31
|
});
|
|
35
32
|
});
|
|
36
|
-
|
|
37
33
|
afterEach(() => {
|
|
38
34
|
if (layer.map) {
|
|
39
|
-
layer.
|
|
35
|
+
layer.detachFromMap(map);
|
|
40
36
|
}
|
|
41
37
|
if (source.map) {
|
|
42
|
-
source.
|
|
38
|
+
source.detachFromMap(map);
|
|
43
39
|
}
|
|
44
40
|
});
|
|
45
|
-
|
|
46
|
-
test('should be instanced.', () => {
|
|
41
|
+
test("should be instanced.", () => {
|
|
47
42
|
expect(layer).toBeInstanceOf(MapboxStyleLayer);
|
|
48
43
|
expect(layer.styleLayers[0]).toBe(styleLayer);
|
|
49
44
|
expect(layer.clickCallbacks[0]).toBe(onClick);
|
|
50
45
|
});
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
layer.init();
|
|
46
|
+
test("should not initalized mapbox map.", () => {
|
|
47
|
+
layer.attachToMap();
|
|
54
48
|
expect(layer.mbMap).toBe();
|
|
55
|
-
layer.
|
|
49
|
+
layer.detachFromMap();
|
|
56
50
|
});
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
layer.init(map);
|
|
51
|
+
test("should initalized mapbox map.", () => {
|
|
52
|
+
source.attachToMap(map);
|
|
53
|
+
layer.attachToMap(map);
|
|
61
54
|
expect(layer.mapboxLayer.mbMap).toBeInstanceOf(gllib.Map);
|
|
62
|
-
layer.
|
|
63
|
-
source.
|
|
55
|
+
layer.detachFromMap();
|
|
56
|
+
source.detachFromMap();
|
|
64
57
|
});
|
|
65
|
-
|
|
66
|
-
test('should add onClick callback.', () => {
|
|
58
|
+
test("should add onClick callback.", () => {
|
|
67
59
|
const onClick2 = jest.fn();
|
|
68
60
|
layer.onClick(onClick2);
|
|
69
61
|
expect(layer.clickCallbacks[1]).toBe(onClick2);
|
|
70
62
|
});
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
layer.init();
|
|
63
|
+
test("should called terminate on initalization.", () => {
|
|
64
|
+
const spy = jest.spyOn(layer, "detachFromMap");
|
|
65
|
+
layer.attachToMap();
|
|
75
66
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
76
|
-
layer.
|
|
67
|
+
layer.detachFromMap(map);
|
|
77
68
|
});
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
layer.init(map);
|
|
69
|
+
test("should return coordinates, features and a layer instance.", async () => {
|
|
70
|
+
source.attachToMap(map);
|
|
71
|
+
layer.attachToMap(map);
|
|
82
72
|
const data = await layer.getFeatureInfoAtCoordinate([50, 50]);
|
|
83
73
|
expect(data.coordinate).toEqual([50, 50]);
|
|
84
74
|
expect(data.features).toEqual([]);
|
|
85
75
|
expect(data.layer).toBeInstanceOf(MapboxStyleLayer);
|
|
86
|
-
layer.
|
|
87
|
-
source.
|
|
76
|
+
layer.detachFromMap(map);
|
|
77
|
+
source.detachFromMap(map);
|
|
88
78
|
});
|
|
89
|
-
|
|
90
|
-
test('should call onClick callback', async () => {
|
|
79
|
+
test("should call onClick callback", async () => {
|
|
91
80
|
const coordinate = [500, 500];
|
|
92
81
|
const features = [];
|
|
93
|
-
const evt = { type:
|
|
94
|
-
layer.
|
|
82
|
+
const evt = { type: "singleclick", map, coordinate };
|
|
83
|
+
layer.attachToMap(map);
|
|
95
84
|
expect(onClick).toHaveBeenCalledTimes(0);
|
|
96
85
|
await map.dispatchEvent(evt);
|
|
97
86
|
expect(onClick).toHaveBeenCalledTimes(1);
|
|
98
87
|
expect(onClick).toHaveBeenCalledWith(features, layer, coordinate);
|
|
99
|
-
layer.
|
|
88
|
+
layer.detachFromMap();
|
|
100
89
|
});
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
layer.terminate(map);
|
|
90
|
+
test("should call super class terminate function.", () => {
|
|
91
|
+
layer.attachToMap(map);
|
|
92
|
+
const spy = jest.spyOn(Layer.prototype, "detachFromMap");
|
|
93
|
+
layer.detachFromMap(map);
|
|
106
94
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
107
95
|
spy.mockRestore();
|
|
108
96
|
});
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
layer.terminate(map);
|
|
97
|
+
test("should call super class terminate if the mapboxLayer associated has been terminated before.", () => {
|
|
98
|
+
layer.attachToMap(map);
|
|
99
|
+
source.detachFromMap(map);
|
|
100
|
+
const spy = jest.spyOn(Layer.prototype, "detachFromMap");
|
|
101
|
+
layer.detachFromMap(map);
|
|
115
102
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
116
103
|
spy.mockRestore();
|
|
117
104
|
});
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
const clone = layer.clone({ name: 'clone' });
|
|
105
|
+
test("should clone", () => {
|
|
106
|
+
const clone = layer.clone({ name: "clone" });
|
|
121
107
|
expect(clone).not.toBe(layer);
|
|
122
|
-
expect(clone.name).toBe(
|
|
108
|
+
expect(clone.name).toBe("clone");
|
|
123
109
|
expect(clone).toBeInstanceOf(MapboxStyleLayer);
|
|
124
110
|
});
|
|
125
|
-
|
|
126
|
-
test('should add layer on load', () => {
|
|
111
|
+
test("should add layer on load", () => {
|
|
127
112
|
const style = { layers: [] };
|
|
128
113
|
layer.mapboxLayer.mbMap = {
|
|
129
114
|
getStyle: () => style,
|
|
130
115
|
getSource: () => ({}),
|
|
131
116
|
getLayer: () => null,
|
|
132
117
|
setLayoutProperty: () => null,
|
|
133
|
-
addLayer: (styleLayerr) => style.layers.push(styleLayerr)
|
|
118
|
+
addLayer: (styleLayerr) => style.layers.push(styleLayerr)
|
|
134
119
|
};
|
|
135
120
|
layer.onLoad();
|
|
136
121
|
expect(style.layers[0]).toBe(styleLayer);
|
|
137
122
|
});
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
test('when layer uses styleLayer property', () => {
|
|
123
|
+
describe("should set disabled property to false on load", () => {
|
|
124
|
+
test("when layer uses styleLayer property", () => {
|
|
141
125
|
const styles = { layers: [] };
|
|
142
126
|
layer.mapboxLayer.mbMap = {
|
|
143
127
|
getStyle: () => styles,
|
|
144
128
|
getSource: () => ({}),
|
|
145
129
|
getLayer: () => null,
|
|
146
130
|
setLayoutProperty: () => null,
|
|
147
|
-
addLayer: (styleLayerr) => styles.layers.push(styleLayerr)
|
|
131
|
+
addLayer: (styleLayerr) => styles.layers.push(styleLayerr)
|
|
148
132
|
};
|
|
149
133
|
expect(layer).toBeInstanceOf(MapboxStyleLayer);
|
|
150
134
|
layer.onLoad();
|
|
151
135
|
expect(layer.disabled).toBe(false);
|
|
152
136
|
});
|
|
153
137
|
});
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
test('when layer uses styleLayersFilter property', () => {
|
|
138
|
+
describe("should set disabled property to true on load", () => {
|
|
139
|
+
test("when layer uses styleLayersFilter property", () => {
|
|
157
140
|
const styles = { layers: [styleLayer] };
|
|
158
141
|
const layer2 = new MapboxStyleLayer({
|
|
159
|
-
name:
|
|
142
|
+
name: "mapbox layer",
|
|
160
143
|
mapboxLayer: source,
|
|
161
|
-
styleLayersFilter: () => false
|
|
144
|
+
styleLayersFilter: () => false
|
|
162
145
|
});
|
|
163
146
|
layer2.mapboxLayer.mbMap = {
|
|
164
147
|
getStyle: () => styles,
|
|
165
148
|
getSource: () => ({}),
|
|
166
149
|
getLayer: () => null,
|
|
167
150
|
setLayoutProperty: () => null,
|
|
168
|
-
addLayer: () => ({})
|
|
151
|
+
addLayer: () => ({})
|
|
169
152
|
};
|
|
170
153
|
layer2.onLoad();
|
|
171
154
|
expect(layer2.disabled).toBe(true);
|
|
172
155
|
});
|
|
173
156
|
});
|
|
174
|
-
|
|
175
|
-
describe('#getFeatureInfoAtCoordinate()', () => {
|
|
157
|
+
describe("#getFeatureInfoAtCoordinate()", () => {
|
|
176
158
|
beforeEach(() => {
|
|
177
|
-
source.
|
|
159
|
+
source.attachToMap(map);
|
|
178
160
|
source.mbMap.isStyleLoaded = jest.fn(() => true);
|
|
179
161
|
source.mbMap.getSource = jest.fn(() => true);
|
|
180
162
|
});
|
|
@@ -182,78 +164,65 @@ describe('MapboxStyleLayer', () => {
|
|
|
182
164
|
source.mbMap.getSource.mockRestore();
|
|
183
165
|
source.mbMap.isStyleLoaded.mockRestore();
|
|
184
166
|
});
|
|
185
|
-
|
|
186
|
-
test('should request features on layers ids from styleLayers property', () => {
|
|
167
|
+
test("should request features on layers ids from styleLayers property", () => {
|
|
187
168
|
source.mbMap.getStyle = jest.fn(() => ({
|
|
188
|
-
layers: [{ id:
|
|
169
|
+
layers: [{ id: "foo" }, { id: "layer" }, { id: "bar" }]
|
|
189
170
|
}));
|
|
190
|
-
layer.
|
|
191
|
-
layer.mapboxLayer.getFeatureInfoAtCoordinate = jest.fn(() =>
|
|
192
|
-
|
|
193
|
-
);
|
|
194
|
-
layer.getFeatureInfoAtCoordinate([0, 0]
|
|
195
|
-
expect(layer.mapboxLayer.getFeatureInfoAtCoordinate).toHaveBeenCalledWith(
|
|
196
|
-
[0, 0],
|
|
197
|
-
{ layers: ['layer'], validate: false },
|
|
198
|
-
);
|
|
171
|
+
layer.attachToMap(map);
|
|
172
|
+
layer.mapboxLayer.getFeatureInfoAtCoordinate = jest.fn(() => Promise.resolve({ features: [] }));
|
|
173
|
+
layer.getFeatureInfoAtCoordinate([0, 0]).then(() => {
|
|
174
|
+
});
|
|
175
|
+
expect(layer.mapboxLayer.getFeatureInfoAtCoordinate).toHaveBeenCalledWith([0, 0], { layers: ["layer"], validate: false });
|
|
199
176
|
layer.mapboxLayer.getFeatureInfoAtCoordinate.mockRestore();
|
|
200
177
|
source.mbMap.getStyle.mockRestore();
|
|
201
178
|
});
|
|
202
|
-
|
|
203
|
-
test('should request features on layers ids from styleLayersFilter property', () => {
|
|
179
|
+
test("should request features on layers ids from styleLayersFilter property", () => {
|
|
204
180
|
source.mbMap.getStyle = jest.fn(() => ({
|
|
205
|
-
layers: [{ id:
|
|
181
|
+
layers: [{ id: "foo" }, { id: "layer" }, { id: "bar" }, { id: "foo2" }]
|
|
206
182
|
}));
|
|
207
183
|
const layer2 = new MapboxStyleLayer({
|
|
208
|
-
name:
|
|
184
|
+
name: "mapbox layer",
|
|
209
185
|
visible: true,
|
|
210
186
|
mapboxLayer: source,
|
|
211
187
|
styleLayer,
|
|
212
|
-
styleLayersFilter: ({ id }) => /foo/.test(id)
|
|
188
|
+
styleLayersFilter: ({ id }) => /foo/.test(id)
|
|
213
189
|
});
|
|
214
|
-
layer2.
|
|
215
|
-
layer2.mapboxLayer.getFeatureInfoAtCoordinate = jest.fn(() =>
|
|
216
|
-
|
|
217
|
-
);
|
|
218
|
-
layer2.getFeatureInfoAtCoordinate([0, 0]
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
).toHaveBeenCalledWith([0, 0], {
|
|
222
|
-
layers: ['foo', 'foo2'],
|
|
223
|
-
validate: false,
|
|
190
|
+
layer2.attachToMap(map);
|
|
191
|
+
layer2.mapboxLayer.getFeatureInfoAtCoordinate = jest.fn(() => Promise.resolve({ features: [] }));
|
|
192
|
+
layer2.getFeatureInfoAtCoordinate([0, 0]).then(() => {
|
|
193
|
+
});
|
|
194
|
+
expect(layer2.mapboxLayer.getFeatureInfoAtCoordinate).toHaveBeenCalledWith([0, 0], {
|
|
195
|
+
layers: ["foo", "foo2"],
|
|
196
|
+
validate: false
|
|
224
197
|
});
|
|
225
198
|
layer2.mapboxLayer.getFeatureInfoAtCoordinate.mockRestore();
|
|
226
199
|
source.mbMap.getStyle.mockRestore();
|
|
227
200
|
});
|
|
228
|
-
|
|
229
|
-
test('should request features on layers ids from queryRenderedLayersFilter property', () => {
|
|
201
|
+
test("should request features on layers ids from queryRenderedLayersFilter property", () => {
|
|
230
202
|
source.mbMap.getStyle = jest.fn(() => ({
|
|
231
203
|
layers: [
|
|
232
|
-
{ id:
|
|
233
|
-
{ id:
|
|
234
|
-
{ id:
|
|
235
|
-
{ id:
|
|
236
|
-
{ id:
|
|
237
|
-
]
|
|
204
|
+
{ id: "foo" },
|
|
205
|
+
{ id: "bar2" },
|
|
206
|
+
{ id: "layer" },
|
|
207
|
+
{ id: "bar" },
|
|
208
|
+
{ id: "foo2" }
|
|
209
|
+
]
|
|
238
210
|
}));
|
|
239
211
|
const layer2 = new MapboxStyleLayer({
|
|
240
|
-
name:
|
|
212
|
+
name: "mapbox layer",
|
|
241
213
|
visible: true,
|
|
242
214
|
mapboxLayer: source,
|
|
243
215
|
styleLayer,
|
|
244
216
|
styleLayersFilter: ({ id }) => /foo/.test(id),
|
|
245
|
-
queryRenderedLayersFilter: ({ id }) => /bar/.test(id)
|
|
217
|
+
queryRenderedLayersFilter: ({ id }) => /bar/.test(id)
|
|
218
|
+
});
|
|
219
|
+
layer2.attachToMap(map);
|
|
220
|
+
layer2.mapboxLayer.getFeatureInfoAtCoordinate = jest.fn(() => Promise.resolve({ features: [] }));
|
|
221
|
+
layer2.getFeatureInfoAtCoordinate([0, 0]).then(() => {
|
|
246
222
|
});
|
|
247
|
-
layer2.
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
);
|
|
251
|
-
layer2.getFeatureInfoAtCoordinate([0, 0]).then(() => {});
|
|
252
|
-
expect(
|
|
253
|
-
layer2.mapboxLayer.getFeatureInfoAtCoordinate,
|
|
254
|
-
).toHaveBeenCalledWith([0, 0], {
|
|
255
|
-
layers: ['bar2', 'bar'],
|
|
256
|
-
validate: false,
|
|
223
|
+
expect(layer2.mapboxLayer.getFeatureInfoAtCoordinate).toHaveBeenCalledWith([0, 0], {
|
|
224
|
+
layers: ["bar2", "bar"],
|
|
225
|
+
validate: false
|
|
257
226
|
});
|
|
258
227
|
layer2.mapboxLayer.getFeatureInfoAtCoordinate.mockRestore();
|
|
259
228
|
source.mbMap.getStyle.mockRestore();
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { toLonLat } from "ol/proj";
|
|
2
|
+
import { Map } from "maplibre-gl";
|
|
3
|
+
import Source from "ol/source/Source";
|
|
4
|
+
import OLLayer from "ol/layer/Layer";
|
|
5
|
+
import GeoJSON from "ol/format/GeoJSON";
|
|
6
|
+
import { toDegrees } from "ol/math";
|
|
7
|
+
import Layer from "./Layer";
|
|
8
|
+
import { getMapboxMapCopyrights, getMapboxStyleUrl } from "../../common/utils";
|
|
9
|
+
export default class MaplibreLayer extends Layer {
|
|
10
|
+
constructor(options = {}) {
|
|
11
|
+
const mbLayer = new OLLayer({
|
|
12
|
+
source: new Source({}),
|
|
13
|
+
render: (frameState) => {
|
|
14
|
+
if (!this.mbMap) {
|
|
15
|
+
console.warn("Mapbox map doesn't exist.");
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const canvas = this.mbMap.getCanvas();
|
|
19
|
+
const { viewState } = frameState;
|
|
20
|
+
const opacity = this.olLayer.getOpacity();
|
|
21
|
+
canvas.style.opacity = opacity;
|
|
22
|
+
this.mbMap.jumpTo({
|
|
23
|
+
center: toLonLat(viewState.center),
|
|
24
|
+
zoom: viewState.zoom - 1,
|
|
25
|
+
bearing: toDegrees(-viewState.rotation),
|
|
26
|
+
animate: false
|
|
27
|
+
});
|
|
28
|
+
if (!canvas.isConnected) {
|
|
29
|
+
this.map.render();
|
|
30
|
+
} else if (canvas.width !== frameState.size[0] || canvas.height !== frameState.size[1]) {
|
|
31
|
+
this.mbMap.resize();
|
|
32
|
+
}
|
|
33
|
+
this.mbMap.redraw();
|
|
34
|
+
return this.mbMap.getContainer();
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
super({
|
|
38
|
+
...options,
|
|
39
|
+
olLayer: mbLayer
|
|
40
|
+
});
|
|
41
|
+
this.styleUrl = options.url;
|
|
42
|
+
this.apiKey = options.apiKey;
|
|
43
|
+
this.apiKeyName = options.apiKeyName || "key";
|
|
44
|
+
this.updateAttribution = this.updateAttribution.bind(this);
|
|
45
|
+
}
|
|
46
|
+
attachToMap(map) {
|
|
47
|
+
super.attachToMap(map);
|
|
48
|
+
if (!this.map) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
this.format = new GeoJSON({
|
|
52
|
+
featureProjection: this.map.getView().getProjection()
|
|
53
|
+
});
|
|
54
|
+
this.loadMbMap();
|
|
55
|
+
}
|
|
56
|
+
detachFromMap() {
|
|
57
|
+
if (this.mbMap) {
|
|
58
|
+
this.mbMap.off("idle", this.updateAttribution);
|
|
59
|
+
this.mbMap.triggerRepaint = () => {
|
|
60
|
+
};
|
|
61
|
+
this.mbMap.remove();
|
|
62
|
+
this.mbMap = null;
|
|
63
|
+
}
|
|
64
|
+
this.loaded = false;
|
|
65
|
+
super.detachFromMap();
|
|
66
|
+
}
|
|
67
|
+
createStyleUrl() {
|
|
68
|
+
return getMapboxStyleUrl(this.apiKey, this.apiKeyName, this.styleUrl);
|
|
69
|
+
}
|
|
70
|
+
loadMbMap() {
|
|
71
|
+
this.olListenersKeys.push(this.map.on("change:target", () => {
|
|
72
|
+
this.loadMbMap();
|
|
73
|
+
}));
|
|
74
|
+
if (!this.map.getTargetElement()) {
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (!this.visible) {
|
|
78
|
+
this.olListenersKeys.push(this.once("change:visible", () => {
|
|
79
|
+
this.loadMbMap();
|
|
80
|
+
}));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const container = document.createElement("div");
|
|
84
|
+
container.style.position = "absolute";
|
|
85
|
+
container.style.width = "100%";
|
|
86
|
+
container.style.height = "100%";
|
|
87
|
+
this.mbMap = new Map({
|
|
88
|
+
style: this.createStyleUrl(),
|
|
89
|
+
container,
|
|
90
|
+
interactive: false,
|
|
91
|
+
trackResize: false,
|
|
92
|
+
attributionControl: false,
|
|
93
|
+
...this.options.mapOptions || {}
|
|
94
|
+
});
|
|
95
|
+
this.mbMap.once("load", () => {
|
|
96
|
+
this.loaded = true;
|
|
97
|
+
this.dispatchEvent({
|
|
98
|
+
type: "load",
|
|
99
|
+
target: this
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
this.mbMap.on("idle", this.updateAttribution);
|
|
103
|
+
}
|
|
104
|
+
updateAttribution(evt) {
|
|
105
|
+
const newAttributions = getMapboxMapCopyrights(evt.target) || [];
|
|
106
|
+
if (this.copyrights?.toString() !== newAttributions.toString()) {
|
|
107
|
+
this.copyrights = newAttributions;
|
|
108
|
+
this.olLayer.getSource().setAttributions(newAttributions);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
getFeatureInfoAtCoordinate(coordinate, options) {
|
|
112
|
+
if (!options || !this.format || !this.mbMap || !this.mbMap.isStyleLoaded()) {
|
|
113
|
+
return Promise.resolve({ coordinate, features: [], layer: this });
|
|
114
|
+
}
|
|
115
|
+
let pixel = coordinate && this.mbMap.project(toLonLat(coordinate));
|
|
116
|
+
if (this.hitTolerance) {
|
|
117
|
+
const { x, y } = pixel;
|
|
118
|
+
pixel = [
|
|
119
|
+
{ x: x - this.hitTolerance, y: y - this.hitTolerance },
|
|
120
|
+
{ x: x + this.hitTolerance, y: y + this.hitTolerance }
|
|
121
|
+
];
|
|
122
|
+
}
|
|
123
|
+
const features = this.mbMap.queryRenderedFeatures(pixel, options).map((feature) => {
|
|
124
|
+
const olFeature = this.format.readFeature(feature);
|
|
125
|
+
if (olFeature) {
|
|
126
|
+
olFeature.set("mapboxFeature", feature);
|
|
127
|
+
}
|
|
128
|
+
return olFeature;
|
|
129
|
+
});
|
|
130
|
+
return Promise.resolve({
|
|
131
|
+
layer: this,
|
|
132
|
+
features,
|
|
133
|
+
coordinate
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
clone(newOptions) {
|
|
137
|
+
return new MaplibreLayer({ ...this.options, ...newOptions });
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { Circle, Fill, Stroke, Style } from "ol/style";
|
|
2
|
+
import { Vector as VectorSource } from "ol/source";
|
|
3
|
+
import { Vector } from "ol/layer";
|
|
4
|
+
import Layer from "./Layer";
|
|
5
|
+
const circleStyle = new Circle({
|
|
6
|
+
radius: 6,
|
|
7
|
+
fill: new Fill({
|
|
8
|
+
color: [255, 0, 0, 1]
|
|
9
|
+
}),
|
|
10
|
+
stroke: new Stroke({
|
|
11
|
+
color: [0, 0, 0, 1],
|
|
12
|
+
width: 1
|
|
13
|
+
})
|
|
14
|
+
});
|
|
15
|
+
const blackBorder = new Style({
|
|
16
|
+
stroke: new Stroke({
|
|
17
|
+
color: [0, 0, 0, 1],
|
|
18
|
+
width: 5
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
const redLine = new Style({
|
|
22
|
+
image: circleStyle,
|
|
23
|
+
stroke: new Stroke({
|
|
24
|
+
color: [255, 0, 0, 1],
|
|
25
|
+
width: 3
|
|
26
|
+
})
|
|
27
|
+
});
|
|
28
|
+
const dashedRedLine = new Style({
|
|
29
|
+
image: circleStyle,
|
|
30
|
+
stroke: new Stroke({
|
|
31
|
+
color: [255, 0, 0, 1],
|
|
32
|
+
width: 3,
|
|
33
|
+
lineDash: [1, 10]
|
|
34
|
+
})
|
|
35
|
+
});
|
|
36
|
+
const defaultStyleFunction = (feature, resolution) => {
|
|
37
|
+
const minResolution = feature.get("minResolution");
|
|
38
|
+
const maxResolution = feature.get("maxResolution");
|
|
39
|
+
const inRange = resolution <= minResolution && resolution > maxResolution;
|
|
40
|
+
if (minResolution && maxResolution && !inRange) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
const mot = feature.get("mot");
|
|
44
|
+
if (mot !== "foot") {
|
|
45
|
+
return [blackBorder, redLine];
|
|
46
|
+
}
|
|
47
|
+
return [dashedRedLine];
|
|
48
|
+
};
|
|
49
|
+
class RoutingLayer extends Layer {
|
|
50
|
+
constructor(options = {}) {
|
|
51
|
+
super(options);
|
|
52
|
+
this.olLayer = options.olLayer || new Vector({
|
|
53
|
+
source: new VectorSource(),
|
|
54
|
+
style: options.style || defaultStyleFunction
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
clone(newOptions) {
|
|
58
|
+
return new RoutingLayer({ ...this.options, ...newOptions });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export default RoutingLayer;
|
|
@@ -1,49 +1,40 @@
|
|
|
1
|
-
import fetch from
|
|
2
|
-
import Map from
|
|
3
|
-
import View from
|
|
4
|
-
import RoutingLayer from
|
|
5
|
-
|
|
1
|
+
import fetch from "jest-fetch-mock";
|
|
2
|
+
import Map from "ol/Map";
|
|
3
|
+
import View from "ol/View";
|
|
4
|
+
import RoutingLayer from "./RoutingLayer";
|
|
6
5
|
let layer;
|
|
7
6
|
let onClick;
|
|
8
7
|
let olMap;
|
|
9
|
-
|
|
10
|
-
describe('RoutingLayer', () => {
|
|
8
|
+
describe("RoutingLayer", () => {
|
|
11
9
|
beforeEach(() => {
|
|
12
10
|
global.fetch = fetch;
|
|
13
11
|
fetch.resetMocks();
|
|
14
|
-
|
|
15
12
|
onClick = jest.fn();
|
|
16
13
|
layer = new RoutingLayer({
|
|
17
14
|
onClick,
|
|
18
|
-
apiKey:
|
|
15
|
+
apiKey: "apiKey"
|
|
19
16
|
});
|
|
20
|
-
|
|
21
17
|
olMap = new Map({
|
|
22
18
|
view: new View({
|
|
23
19
|
center: [831634, 5933959],
|
|
24
|
-
zoom: 9
|
|
25
|
-
})
|
|
20
|
+
zoom: 9
|
|
21
|
+
})
|
|
26
22
|
});
|
|
27
23
|
});
|
|
28
|
-
|
|
29
|
-
test('should be instanced.', () => {
|
|
24
|
+
test("should be instanced.", () => {
|
|
30
25
|
expect(layer).toBeInstanceOf(RoutingLayer);
|
|
31
26
|
expect(layer.clickCallbacks[0]).toBe(onClick);
|
|
32
27
|
});
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
const spy = jest.spyOn(layer, 'terminate');
|
|
36
|
-
|
|
28
|
+
test("should called terminate on initalization.", () => {
|
|
29
|
+
const spy = jest.spyOn(layer, "detachFromMap");
|
|
37
30
|
fetch.mockResponseOnce(JSON.stringify(global.fetchTrajectoriesResponse));
|
|
38
|
-
|
|
39
|
-
layer.init(olMap);
|
|
31
|
+
layer.attachToMap(olMap);
|
|
40
32
|
expect(spy).toHaveBeenCalledTimes(1);
|
|
41
33
|
});
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
const clone = layer.clone({ name: 'clone' });
|
|
34
|
+
test("should clone", () => {
|
|
35
|
+
const clone = layer.clone({ name: "clone" });
|
|
45
36
|
expect(clone).not.toBe(layer);
|
|
46
|
-
expect(clone.name).toBe(
|
|
37
|
+
expect(clone.name).toBe("clone");
|
|
47
38
|
expect(clone).toBeInstanceOf(RoutingLayer);
|
|
48
39
|
});
|
|
49
40
|
});
|