@signalk/freeboard-sk 2.0.0-beta.2 → 2.0.0-beta.4

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 (149) hide show
  1. package/CHANGELOG.md +55 -1
  2. package/package.json +24 -20
  3. package/public/590.4431be8bbcdbb3f8.js +1 -0
  4. package/public/assets/help/img/settings_course.png +0 -0
  5. package/public/assets/help/img/settings_other_vessels.png +0 -0
  6. package/public/assets/help/index.html +46 -15
  7. package/public/assets/img/alarms/weather.png +0 -0
  8. package/public/index.html +2 -2
  9. package/public/main.a54a56a8a0f02b2d.js +1 -0
  10. package/public/polyfills.12ddee7e4cb46a02.js +1 -0
  11. package/public/runtime.0360fd4b1168b48a.js +1 -0
  12. package/public/styles.a0bf4282aea78b28.css +1 -0
  13. package/dist/fb-openlayers/README.md +0 -17
  14. package/dist/fb-openlayers/bundles/fb-openlayers.umd.js +0 -4884
  15. package/dist/fb-openlayers/bundles/fb-openlayers.umd.js.map +0 -1
  16. package/dist/fb-openlayers/esm2015/fb-openlayers.js +0 -5
  17. package/dist/fb-openlayers/esm2015/index.js +0 -92
  18. package/dist/fb-openlayers/esm2015/lib/alarms/layer-anchor-alarm.component.js +0 -136
  19. package/dist/fb-openlayers/esm2015/lib/alarms/layer-cpa-alarm.component.js +0 -135
  20. package/dist/fb-openlayers/esm2015/lib/content.component.js +0 -16
  21. package/dist/fb-openlayers/esm2015/lib/control.component.js +0 -37
  22. package/dist/fb-openlayers/esm2015/lib/controls.directive.js +0 -61
  23. package/dist/fb-openlayers/esm2015/lib/interactions/interaction-draw.component.js +0 -72
  24. package/dist/fb-openlayers/esm2015/lib/interactions/interaction-modify.component.js +0 -72
  25. package/dist/fb-openlayers/esm2015/lib/interactions.directive.js +0 -61
  26. package/dist/fb-openlayers/esm2015/lib/layer.component.js +0 -157
  27. package/dist/fb-openlayers/esm2015/lib/map.component.js +0 -206
  28. package/dist/fb-openlayers/esm2015/lib/map.service.js +0 -70
  29. package/dist/fb-openlayers/esm2015/lib/models.js +0 -37
  30. package/dist/fb-openlayers/esm2015/lib/navigation/layer-arrival-circle.component.js +0 -116
  31. package/dist/fb-openlayers/esm2015/lib/navigation/layer-bearing-line.component.js +0 -229
  32. package/dist/fb-openlayers/esm2015/lib/navigation/layer-xte-path.component.js +0 -120
  33. package/dist/fb-openlayers/esm2015/lib/overlay.component.js +0 -56
  34. package/dist/fb-openlayers/esm2015/lib/resources/layer-charts.component.js +0 -141
  35. package/dist/fb-openlayers/esm2015/lib/resources/layer-notes.component.js +0 -177
  36. package/dist/fb-openlayers/esm2015/lib/resources/layer-regions.component.js +0 -184
  37. package/dist/fb-openlayers/esm2015/lib/resources/layer-resourceset.component.js +0 -226
  38. package/dist/fb-openlayers/esm2015/lib/resources/layer-routes.component.js +0 -188
  39. package/dist/fb-openlayers/esm2015/lib/resources/layer-sktarget-tracks.component.js +0 -213
  40. package/dist/fb-openlayers/esm2015/lib/resources/layer-sktargets.component.js +0 -269
  41. package/dist/fb-openlayers/esm2015/lib/resources/layer-skvessels.component.js +0 -410
  42. package/dist/fb-openlayers/esm2015/lib/resources/layer-tracks.component.js +0 -175
  43. package/dist/fb-openlayers/esm2015/lib/resources/layer-waypoints.component.js +0 -238
  44. package/dist/fb-openlayers/esm2015/lib/util.js +0 -124
  45. package/dist/fb-openlayers/esm2015/lib/vessel/layer-vessel-trail.component.js +0 -178
  46. package/dist/fb-openlayers/esm2015/lib/vessel/layer-vessel.component.js +0 -229
  47. package/dist/fb-openlayers/esm2015/lib/view.directive.js +0 -141
  48. package/dist/fb-openlayers/fb-openlayers.d.ts +0 -5
  49. package/dist/fb-openlayers/fb-openlayers.d.ts.map +0 -1
  50. package/dist/fb-openlayers/fb-openlayers.metadata.json +0 -1
  51. package/dist/fb-openlayers/fesm2015/fb-openlayers.js +0 -4326
  52. package/dist/fb-openlayers/fesm2015/fb-openlayers.js.map +0 -1
  53. package/dist/fb-openlayers/index.d.ts +0 -33
  54. package/dist/fb-openlayers/index.d.ts.map +0 -1
  55. package/dist/fb-openlayers/index.ngfactory.d.ts.map +0 -1
  56. package/dist/fb-openlayers/lib/alarms/layer-anchor-alarm.component.d.ts +0 -44
  57. package/dist/fb-openlayers/lib/alarms/layer-anchor-alarm.component.d.ts.map +0 -1
  58. package/dist/fb-openlayers/lib/alarms/layer-anchor-alarm.component.ngfactory.d.ts.map +0 -1
  59. package/dist/fb-openlayers/lib/alarms/layer-cpa-alarm.component.d.ts +0 -39
  60. package/dist/fb-openlayers/lib/alarms/layer-cpa-alarm.component.d.ts.map +0 -1
  61. package/dist/fb-openlayers/lib/alarms/layer-cpa-alarm.component.ngfactory.d.ts.map +0 -1
  62. package/dist/fb-openlayers/lib/content.component.d.ts +0 -6
  63. package/dist/fb-openlayers/lib/content.component.d.ts.map +0 -1
  64. package/dist/fb-openlayers/lib/content.component.ngfactory.d.ts.map +0 -1
  65. package/dist/fb-openlayers/lib/control.component.d.ts +0 -14
  66. package/dist/fb-openlayers/lib/control.component.d.ts.map +0 -1
  67. package/dist/fb-openlayers/lib/control.component.ngfactory.d.ts.map +0 -1
  68. package/dist/fb-openlayers/lib/controls.directive.d.ts +0 -14
  69. package/dist/fb-openlayers/lib/controls.directive.d.ts.map +0 -1
  70. package/dist/fb-openlayers/lib/controls.directive.ngfactory.d.ts.map +0 -1
  71. package/dist/fb-openlayers/lib/interactions/interaction-draw.component.d.ts +0 -27
  72. package/dist/fb-openlayers/lib/interactions/interaction-draw.component.d.ts.map +0 -1
  73. package/dist/fb-openlayers/lib/interactions/interaction-draw.component.ngfactory.d.ts.map +0 -1
  74. package/dist/fb-openlayers/lib/interactions/interaction-modify.component.d.ts +0 -26
  75. package/dist/fb-openlayers/lib/interactions/interaction-modify.component.d.ts.map +0 -1
  76. package/dist/fb-openlayers/lib/interactions/interaction-modify.component.ngfactory.d.ts.map +0 -1
  77. package/dist/fb-openlayers/lib/interactions.directive.d.ts +0 -14
  78. package/dist/fb-openlayers/lib/interactions.directive.d.ts.map +0 -1
  79. package/dist/fb-openlayers/lib/interactions.directive.ngfactory.d.ts.map +0 -1
  80. package/dist/fb-openlayers/lib/layer.component.d.ts +0 -41
  81. package/dist/fb-openlayers/lib/layer.component.d.ts.map +0 -1
  82. package/dist/fb-openlayers/lib/layer.component.ngfactory.d.ts.map +0 -1
  83. package/dist/fb-openlayers/lib/map.component.d.ts +0 -71
  84. package/dist/fb-openlayers/lib/map.component.d.ts.map +0 -1
  85. package/dist/fb-openlayers/lib/map.component.ngfactory.d.ts.map +0 -1
  86. package/dist/fb-openlayers/lib/map.component.scss.shim.ngstyle.d.ts.map +0 -1
  87. package/dist/fb-openlayers/lib/map.service.d.ts +0 -19
  88. package/dist/fb-openlayers/lib/map.service.d.ts.map +0 -1
  89. package/dist/fb-openlayers/lib/map.service.ngfactory.d.ts.map +0 -1
  90. package/dist/fb-openlayers/lib/models.d.ts +0 -42
  91. package/dist/fb-openlayers/lib/models.d.ts.map +0 -1
  92. package/dist/fb-openlayers/lib/navigation/layer-arrival-circle.component.d.ts +0 -39
  93. package/dist/fb-openlayers/lib/navigation/layer-arrival-circle.component.d.ts.map +0 -1
  94. package/dist/fb-openlayers/lib/navigation/layer-arrival-circle.component.ngfactory.d.ts.map +0 -1
  95. package/dist/fb-openlayers/lib/navigation/layer-bearing-line.component.d.ts +0 -49
  96. package/dist/fb-openlayers/lib/navigation/layer-bearing-line.component.d.ts.map +0 -1
  97. package/dist/fb-openlayers/lib/navigation/layer-bearing-line.component.ngfactory.d.ts.map +0 -1
  98. package/dist/fb-openlayers/lib/navigation/layer-xte-path.component.d.ts +0 -39
  99. package/dist/fb-openlayers/lib/navigation/layer-xte-path.component.d.ts.map +0 -1
  100. package/dist/fb-openlayers/lib/navigation/layer-xte-path.component.ngfactory.d.ts.map +0 -1
  101. package/dist/fb-openlayers/lib/overlay.component.d.ts +0 -25
  102. package/dist/fb-openlayers/lib/overlay.component.d.ts.map +0 -1
  103. package/dist/fb-openlayers/lib/overlay.component.ngfactory.d.ts.map +0 -1
  104. package/dist/fb-openlayers/lib/resources/layer-charts.component.d.ts +0 -20
  105. package/dist/fb-openlayers/lib/resources/layer-charts.component.d.ts.map +0 -1
  106. package/dist/fb-openlayers/lib/resources/layer-charts.component.ngfactory.d.ts.map +0 -1
  107. package/dist/fb-openlayers/lib/resources/layer-notes.component.d.ts +0 -51
  108. package/dist/fb-openlayers/lib/resources/layer-notes.component.d.ts.map +0 -1
  109. package/dist/fb-openlayers/lib/resources/layer-notes.component.ngfactory.d.ts.map +0 -1
  110. package/dist/fb-openlayers/lib/resources/layer-regions.component.d.ts +0 -53
  111. package/dist/fb-openlayers/lib/resources/layer-regions.component.d.ts.map +0 -1
  112. package/dist/fb-openlayers/lib/resources/layer-regions.component.ngfactory.d.ts.map +0 -1
  113. package/dist/fb-openlayers/lib/resources/layer-resourceset.component.d.ts +0 -49
  114. package/dist/fb-openlayers/lib/resources/layer-resourceset.component.d.ts.map +0 -1
  115. package/dist/fb-openlayers/lib/resources/layer-resourceset.component.ngfactory.d.ts.map +0 -1
  116. package/dist/fb-openlayers/lib/resources/layer-routes.component.d.ts +0 -52
  117. package/dist/fb-openlayers/lib/resources/layer-routes.component.d.ts.map +0 -1
  118. package/dist/fb-openlayers/lib/resources/layer-routes.component.ngfactory.d.ts.map +0 -1
  119. package/dist/fb-openlayers/lib/resources/layer-sktarget-tracks.component.d.ts +0 -44
  120. package/dist/fb-openlayers/lib/resources/layer-sktarget-tracks.component.d.ts.map +0 -1
  121. package/dist/fb-openlayers/lib/resources/layer-sktarget-tracks.component.ngfactory.d.ts.map +0 -1
  122. package/dist/fb-openlayers/lib/resources/layer-sktargets.component.d.ts +0 -51
  123. package/dist/fb-openlayers/lib/resources/layer-sktargets.component.d.ts.map +0 -1
  124. package/dist/fb-openlayers/lib/resources/layer-sktargets.component.ngfactory.d.ts.map +0 -1
  125. package/dist/fb-openlayers/lib/resources/layer-skvessels.component.d.ts +0 -60
  126. package/dist/fb-openlayers/lib/resources/layer-skvessels.component.d.ts.map +0 -1
  127. package/dist/fb-openlayers/lib/resources/layer-skvessels.component.ngfactory.d.ts.map +0 -1
  128. package/dist/fb-openlayers/lib/resources/layer-tracks.component.d.ts +0 -50
  129. package/dist/fb-openlayers/lib/resources/layer-tracks.component.d.ts.map +0 -1
  130. package/dist/fb-openlayers/lib/resources/layer-tracks.component.ngfactory.d.ts.map +0 -1
  131. package/dist/fb-openlayers/lib/resources/layer-waypoints.component.d.ts +0 -57
  132. package/dist/fb-openlayers/lib/resources/layer-waypoints.component.d.ts.map +0 -1
  133. package/dist/fb-openlayers/lib/resources/layer-waypoints.component.ngfactory.d.ts.map +0 -1
  134. package/dist/fb-openlayers/lib/util.d.ts +0 -19
  135. package/dist/fb-openlayers/lib/util.d.ts.map +0 -1
  136. package/dist/fb-openlayers/lib/vessel/layer-vessel-trail.component.d.ts +0 -45
  137. package/dist/fb-openlayers/lib/vessel/layer-vessel-trail.component.d.ts.map +0 -1
  138. package/dist/fb-openlayers/lib/vessel/layer-vessel-trail.component.ngfactory.d.ts.map +0 -1
  139. package/dist/fb-openlayers/lib/vessel/layer-vessel.component.d.ts +0 -55
  140. package/dist/fb-openlayers/lib/vessel/layer-vessel.component.d.ts.map +0 -1
  141. package/dist/fb-openlayers/lib/vessel/layer-vessel.component.ngfactory.d.ts.map +0 -1
  142. package/dist/fb-openlayers/lib/view.directive.d.ts +0 -44
  143. package/dist/fb-openlayers/lib/view.directive.d.ts.map +0 -1
  144. package/dist/fb-openlayers/lib/view.directive.ngfactory.d.ts.map +0 -1
  145. package/public/53.4babe18f9baabeea.js +0 -1
  146. package/public/main.a668c86ee67ed842.js +0 -1
  147. package/public/polyfills.1ba4e1a897c69e24.js +0 -1
  148. package/public/runtime.55118010dbcb6e60.js +0 -1
  149. package/public/styles.f013b594260c141e.css +0 -1
@@ -1,206 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output } from '@angular/core';
2
- import { Map } from 'ol';
3
- import { MapService } from './map.service';
4
- import { AsyncSubject } from 'rxjs';
5
- import { toLonLat, transformExtent } from 'ol/proj';
6
- export class MapComponent {
7
- constructor(changeDetectorRef, element, mapService) {
8
- this.changeDetectorRef = changeDetectorRef;
9
- this.element = element;
10
- this.mapService = mapService;
11
- /**
12
- * This event is triggered after the map is initialized
13
- * Use this to have access to the maps and some helper functions
14
- */
15
- this.mapReady = new AsyncSubject(); // AsyncSubject will only store the last value, and only publish it when the sequence is completed
16
- /**
17
- * This event is triggered after the user clicks on the map.
18
- * A true single click with no dragging and no double click.
19
- * Note that this event is delayed by 250 ms to ensure that it is not a double click.
20
- */
21
- this.mapClick = new EventEmitter();
22
- this.mapSingleClick = new EventEmitter();
23
- this.mapDblClick = new EventEmitter();
24
- this.mapMoveStart = new EventEmitter();
25
- this.mapMoveEnd = new EventEmitter();
26
- this.mapPointerDrag = new EventEmitter();
27
- this.mapPointerMove = new EventEmitter();
28
- this.mapPostCompose = new EventEmitter();
29
- this.mapPostRender = new EventEmitter();
30
- this.mapPreCompose = new EventEmitter();
31
- this.mapPropertyChange = new EventEmitter();
32
- this.setFocus = false;
33
- this.hitTolerance = 5;
34
- // Only arrow function works with addEventListener
35
- this.emitClickEvent = (event) => {
36
- this.mapClick.emit(this.augmentClickEvent(event));
37
- };
38
- this.emitSingleClickEvent = (event) => {
39
- this.mapSingleClick.emit(this.augmentClickEvent(event));
40
- };
41
- this.emitDblClickEvent = (event) => {
42
- this.mapDblClick.emit(this.augmentClickEvent(event));
43
- };
44
- this.emitMoveStartEvent = (event) => {
45
- this.mapMoveStart.emit(this.augmentMoveEvent(event));
46
- };
47
- this.emitMoveEndEvent = (event) => {
48
- this.mapMoveEnd.emit(this.augmentMoveEvent(event));
49
- };
50
- this.emitPointerDragEvent = (event) => {
51
- this.mapPointerDrag.emit(this.augmentPointerEvent(event));
52
- };
53
- this.emitPointerMoveEvent = (event) => {
54
- this.mapPointerMove.emit(this.augmentPointerEvent(event));
55
- };
56
- this.emitPostComposeEvent = (event) => this.mapPostCompose.emit(event);
57
- this.emitPostRenderEvent = (event) => this.mapPostRender.emit(event);
58
- this.emitPreComposeEvent = (event) => this.mapPreCompose.emit(event);
59
- this.emitPropertyChangeEvent = (event) => this.mapPropertyChange.emit(event);
60
- this.updateSizeThrottle = () => {
61
- clearTimeout(this.timeoutId);
62
- this.timeoutId = setTimeout(() => {
63
- this.map.updateSize();
64
- }, 100);
65
- };
66
- this.changeDetectorRef.detach();
67
- }
68
- ngOnInit() {
69
- const target = this.element.nativeElement.firstElementChild;
70
- this.map = new Map(this);
71
- this.map.setTarget(target);
72
- this.map.setProperties(this.properties, true);
73
- // register the map in the injectable mapService
74
- this.mapService.addMap(this.map);
75
- this.map.once('postrender', event => {
76
- this.afterMapReady();
77
- });
78
- }
79
- ngOnDestroy() {
80
- this.map.un('singleclick', this.emitSingleClickEvent);
81
- this.map.un('dblclick', this.emitDblClickEvent);
82
- this.map.un('click', this.emitClickEvent);
83
- this.map.un('movestart', this.emitMoveStartEvent);
84
- this.map.un('moveend', this.emitMoveEndEvent);
85
- this.map.un('pointerdrag', this.emitPointerDragEvent);
86
- this.map.un('pointermove', this.emitPointerMoveEvent);
87
- this.map.un('postcompose', this.emitPostComposeEvent);
88
- this.map.un('postrender', this.emitPostRenderEvent);
89
- this.map.un('precompose', this.emitPreComposeEvent);
90
- this.map.un('propertychange', this.emitPropertyChangeEvent);
91
- window.removeEventListener('resize', this.updateSizeThrottle);
92
- window.removeEventListener('orientationchange', this.updateSizeThrottle);
93
- this.map.setTarget(null);
94
- this.map = null;
95
- }
96
- ngOnChanges(changes) {
97
- if (this.map && typeof changes.setFocus !== 'undefined') {
98
- if (changes.setFocus.currentValue) {
99
- this.focusMap();
100
- }
101
- }
102
- }
103
- afterMapReady() {
104
- // register map events
105
- this.map.on('singleclick', this.emitSingleClickEvent);
106
- this.map.on('dblclick', this.emitDblClickEvent);
107
- this.map.on('click', this.emitClickEvent);
108
- this.map.on('movestart', this.emitMoveStartEvent);
109
- this.map.on('moveend', this.emitMoveEndEvent);
110
- this.map.on('pointerdrag', this.emitPointerDragEvent);
111
- this.map.on('pointermove', this.emitPointerMoveEvent);
112
- this.map.on('postcompose', this.emitPostComposeEvent);
113
- this.map.on('postrender', this.emitPostRenderEvent);
114
- this.map.on('precompose', this.emitPreComposeEvent);
115
- this.map.on('propertychange', this.emitPropertyChangeEvent);
116
- // react on window events
117
- window.addEventListener('resize', this.updateSizeThrottle, false);
118
- window.addEventListener('orientationchange', this.updateSizeThrottle, false);
119
- this.updateSize();
120
- this.mapReady.next({ map: this.map, mapService: this.mapService });
121
- this.mapReady.complete();
122
- if (this.setFocus) {
123
- this.focusMap();
124
- }
125
- }
126
- focusMap() {
127
- this.element.nativeElement.firstElementChild.focus();
128
- }
129
- getMap() {
130
- return this.map;
131
- }
132
- updateSize() {
133
- this.updateSizeThrottle();
134
- }
135
- getMapCenter() {
136
- if (!this.map) {
137
- return [0, 0];
138
- }
139
- return toLonLat(this.map.getView().getCenter());
140
- }
141
- getMapExtent() {
142
- if (!this.map) {
143
- return [0, 0, 0, 0];
144
- }
145
- let v = this.map.getView();
146
- let mrid = v.getProjection().getCode();
147
- return transformExtent(v.calculateExtent(this.map.getSize()), mrid, 'EPSG:4326');
148
- }
149
- // ** add {lonlat, features}fields to event
150
- augmentClickEvent(event) {
151
- return Object.assign(event, {
152
- features: this.map.getFeaturesAtPixel(event.pixel, { hitTolerance: this.hitTolerance }),
153
- lonlat: toLonLat(event.coordinate)
154
- });
155
- }
156
- // ** add {lonlat, zoom, extent, projection code} fields to event
157
- augmentMoveEvent(event) {
158
- return Object.assign(event, {
159
- lonlat: this.getMapCenter(),
160
- zoom: this.map.getView().getZoom(),
161
- extent: this.getMapExtent(),
162
- projCode: this.map.getView().getProjection().getCode()
163
- });
164
- }
165
- // ** add {lonlat} field to event
166
- augmentPointerEvent(event) {
167
- return Object.assign(event, { lonlat: toLonLat(event.coordinate) });
168
- }
169
- }
170
- MapComponent.decorators = [
171
- { type: Component, args: [{
172
- selector: 'ol-map',
173
- template: `
174
- <div style="width: 100%; height: 100%; margin: 0; padding: 0; touch-action: none;" tabindex=-1>
175
- </div><ng-content></ng-content>
176
- `,
177
- changeDetection: ChangeDetectionStrategy.OnPush,
178
- styles: [".ol-box{box-sizing:border-box;border-radius:2px;border:2px solid blue}.ol-mouse-position{top:8px;right:8px;position:absolute}.ol-scale-line{background:rgba(0,60,136,.3);border-radius:4px;bottom:8px;left:8px;padding:2px;position:absolute}.ol-scale-line-inner{border:1px solid #eee;border-top:none;color:#eee;font-size:10px;text-align:center;margin:1px;will-change:contents,width;transition:all .25s}.ol-scale-bar{position:absolute;bottom:8px;left:8px}.ol-scale-step-marker{width:1px;height:15px;background-color:#000;float:right;z-Index:10}.ol-scale-step-text{bottom:-5px;font-size:12px;z-Index:11}.ol-scale-step-text,.ol-scale-text{position:absolute;color:#000;text-shadow:-2px 0 #fff,0 2px #fff,2px 0 #fff,0 -2px #fff}.ol-scale-text{font-size:14px;text-align:center;bottom:25px}.ol-scale-singlebar{position:relative;height:10px;z-Index:9;box-sizing:border-box;border:1px solid #000}.ol-unsupported{display:none}.ol-unselectable,.ol-viewport{-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;user-select:none;-webkit-tap-highlight-color:rgba(0,0,0,0)}.ol-selectable{-webkit-touch-callout:default;-webkit-user-select:text;-moz-user-select:text;user-select:text}.ol-grabbing{cursor:-webkit-grabbing;cursor:grabbing}.ol-grab{cursor:move;cursor:-webkit-grab;cursor:grab}.ol-control{position:absolute;background-color:hsla(0,0%,100%,.4);border-radius:4px;padding:2px}.ol-control:hover{background-color:hsla(0,0%,100%,.6)}.ol-zoom{top:.5em;left:.5em}.ol-rotate{top:.5em;right:.5em;transition:opacity .25s linear,visibility 0s linear}.ol-rotate.ol-hidden{opacity:0;visibility:hidden;transition:opacity .25s linear,visibility 0s linear .25s}.ol-zoom-extent{top:4.643em;left:.5em}.ol-full-screen{right:.5em;top:.5em}.ol-control button{display:block;margin:1px;padding:0;color:#fff;font-size:1.14em;font-weight:700;text-decoration:none;text-align:center;height:1.375em;width:1.375em;line-height:.4em;background-color:rgba(0,60,136,.5);border:none;border-radius:2px}.ol-control button::-moz-focus-inner{border:none;padding:0}.ol-zoom-extent button{line-height:1.4em}.ol-compass{display:block;font-weight:400;font-size:1.2em;will-change:transform}.ol-touch .ol-control button{font-size:1.5em}.ol-touch .ol-zoom-extent{top:5.5em}.ol-control button:focus,.ol-control button:hover{text-decoration:none;background-color:rgba(0,60,136,.7)}.ol-zoom .ol-zoom-in{border-radius:2px 2px 0 0}.ol-zoom .ol-zoom-out{border-radius:0 0 2px 2px}.ol-attribution{text-align:right;bottom:.5em;right:.5em;max-width:calc(100% - 1.3em)}.ol-attribution ul{margin:0;padding:0 .5em;color:#000;text-shadow:0 0 2px #fff}.ol-attribution li{display:inline;list-style:none}.ol-attribution li:not(:last-child):after{content:\" \"}.ol-attribution img{max-height:2em;max-width:inherit;vertical-align:middle}.ol-attribution button,.ol-attribution ul{display:inline-block}.ol-attribution.ol-collapsed ul{display:none}.ol-attribution:not(.ol-collapsed){background:hsla(0,0%,100%,.8)}.ol-attribution.ol-uncollapsible{bottom:0;right:0;border-radius:4px 0 0}.ol-attribution.ol-uncollapsible img{margin-top:-.2em;max-height:1.6em}.ol-attribution.ol-uncollapsible button{display:none}.ol-zoomslider{top:4.5em;left:.5em;height:200px}.ol-zoomslider button{position:relative;height:10px}.ol-touch .ol-zoomslider{top:5.5em}.ol-overviewmap{left:.5em;bottom:.5em}.ol-overviewmap.ol-uncollapsible{bottom:0;left:0;border-radius:0 4px 0 0}.ol-overviewmap .ol-overviewmap-map,.ol-overviewmap button{display:inline-block}.ol-overviewmap .ol-overviewmap-map{border:1px solid #7b98bc;height:150px;margin:2px;width:150px}.ol-overviewmap:not(.ol-collapsed) button{bottom:1px;left:2px;position:absolute}.ol-overviewmap.ol-collapsed .ol-overviewmap-map,.ol-overviewmap.ol-uncollapsible button{display:none}.ol-overviewmap:not(.ol-collapsed){background:hsla(0,0%,100%,.8)}.ol-overviewmap-box{border:2px dotted rgba(0,60,136,.7)}.ol-overviewmap .ol-overviewmap-box:hover{cursor:move}"]
179
- },] }
180
- ];
181
- MapComponent.ctorParameters = () => [
182
- { type: ChangeDetectorRef },
183
- { type: ElementRef },
184
- { type: MapService }
185
- ];
186
- MapComponent.propDecorators = {
187
- mapReady: [{ type: Output }],
188
- mapClick: [{ type: Output }],
189
- mapSingleClick: [{ type: Output }],
190
- mapDblClick: [{ type: Output }],
191
- mapMoveStart: [{ type: Output }],
192
- mapMoveEnd: [{ type: Output }],
193
- mapPointerDrag: [{ type: Output }],
194
- mapPointerMove: [{ type: Output }],
195
- mapPostCompose: [{ type: Output }],
196
- mapPostRender: [{ type: Output }],
197
- mapPreCompose: [{ type: Output }],
198
- mapPropertyChange: [{ type: Output }],
199
- pixelRatio: [{ type: Input }],
200
- keyboardEventTarget: [{ type: Input }],
201
- logo: [{ type: Input }],
202
- properties: [{ type: Input }],
203
- setFocus: [{ type: Input }],
204
- hitTolerance: [{ type: Input }]
205
- };
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiLW9wZW5sYXllcnMvc3JjL2xpYi9tYXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFBRSxpQkFBaUIsRUFDMUMsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUdMLE1BQU0sRUFFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsR0FBRyxFQUFrQixNQUFNLElBQUksQ0FBQztBQUl4QyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFbEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFZcEQsTUFBTSxPQUFPLFlBQVk7SUFtQ3ZCLFlBQXNCLGlCQUFvQyxFQUNwQyxPQUFtQixFQUNuQixVQUFzQjtRQUZ0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLFlBQU8sR0FBUCxPQUFPLENBQVk7UUFDbkIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWhDNUM7OztXQUdHO1FBQ08sYUFBUSxHQUFnQyxJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsa0dBQWtHO1FBRXhLOzs7O1dBSUc7UUFDTyxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEQsbUJBQWMsR0FBa0MsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDcEYsZ0JBQVcsR0FBa0MsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDakYsaUJBQVksR0FBMkIsSUFBSSxZQUFZLEVBQVksQ0FBQztRQUNwRSxlQUFVLEdBQTJCLElBQUksWUFBWSxFQUFZLENBQUM7UUFDbEUsbUJBQWMsR0FBa0MsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFDcEYsbUJBQWMsR0FB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QUNOLE1BQU07MEJBQ04sTUFBTTsyQkFDTixNQUFNO3lCQUNOLE1BQU07NkJBQ04sTUFBTTs2QkFDTixNQUFNOzZCQUNOLE1BQU07NEJBQ04sTUFBTTs0QkFDTixNQUFNO2dDQUNOLE1BQU07eUJBRU4sS0FBSztrQ0FDTCxLQUFLO21CQUNMLEtBQUs7eUJBQ0wsS0FBSzt1QkFDTCxLQUFLOzJCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWFwLCBNYXBCcm93c2VyRXZlbnR9IGZyb20gJ29sJztcbmltcG9ydCBNYXBFdmVudCBmcm9tICdvbC9NYXBFdmVudCc7XG5pbXBvcnQgT2JqZWN0RXZlbnQgZnJvbSAnb2wvT2JqZWN0JztcbmltcG9ydCBSZW5kZXJFdmVudCBmcm9tICdvbC9yZW5kZXIvRXZlbnQnO1xuaW1wb3J0IHtNYXBTZXJ2aWNlfSBmcm9tICcuL21hcC5zZXJ2aWNlJztcbmltcG9ydCB7TWFwUmVhZHlFdmVudH0gZnJvbSAnLi9tb2RlbHMnO1xuaW1wb3J0IHtBc3luY1N1YmplY3R9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtNYXBPcHRpb25zfSBmcm9tICdvbC9QbHVnZ2FibGVNYXAnO1xuaW1wb3J0IHsgdG9Mb25MYXQsIHRyYW5zZm9ybUV4dGVudCB9IGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IHsgQ29vcmRpbmF0ZSB9IGZyb20gJ29sL2Nvb3JkaW5hdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvbC1tYXAnLFxuICBzdHlsZVVybHM6IFsnLi9tYXAuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgbWFyZ2luOiAwOyBwYWRkaW5nOiAwOyB0b3VjaC1hY3Rpb246IG5vbmU7XCIgdGFiaW5kZXg9LTE+XG4gICAgPC9kaXY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNYXBDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgcHJpdmF0ZSBtYXA6IE1hcDtcbiAgcHJpdmF0ZSB0aW1lb3V0SWQ6IGFueTtcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgdGhlIG1hcCBpcyBpbml0aWFsaXplZFxuICAgKiBVc2UgdGhpcyB0byBoYXZlIGFjY2VzcyB0byB0aGUgbWFwcyBhbmQgc29tZSBoZWxwZXIgZnVuY3Rpb25zXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwUmVhZHk6IEFzeW5jU3ViamVjdDxNYXBSZWFkeUV2ZW50PiA9IG5ldyBBc3luY1N1YmplY3QoKTsgLy8gQXN5bmNTdWJqZWN0IHdpbGwgb25seSBzdG9yZSB0aGUgbGFzdCB2YWx1ZSwgYW5kIG9ubHkgcHVibGlzaCBpdCB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBjb21wbGV0ZWRcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgdGhlIHVzZXIgY2xpY2tzIG9uIHRoZSBtYXAuXG4gICAqIEEgdHJ1ZSBzaW5nbGUgY2xpY2sgd2l0aCBubyBkcmFnZ2luZyBhbmQgbm8gZG91YmxlIGNsaWNrLlxuICAgKiBOb3RlIHRoYXQgdGhpcyBldmVudCBpcyBkZWxheWVkIGJ5IDI1MCBtcyB0byBlbnN1cmUgdGhhdCBpdCBpcyBub3QgYSBkb3VibGUgY2xpY2suXG4gICAqL1xuICBAT3V0cHV0KCkgbWFwQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBtYXBTaW5nbGVDbGljazogRXZlbnRFbWl0dGVyPE1hcEJyb3dzZXJFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1hcEJyb3dzZXJFdmVudD4oKTtcbiAgQE91dHB1dCgpIG1hcERibENsaWNrOiBFdmVudEVtaXR0ZXI8TWFwQnJvd3NlckV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TWFwQnJvd3NlckV2ZW50PigpO1xuICBAT3V0cHV0KCkgbWFwTW92ZVN0YXJ0OiBFdmVudEVtaXR0ZXI8TWFwRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNYXBFdmVudD4oKTtcbiAgQE91dHB1dCgpIG1hcE1vdmVFbmQ6IEV2ZW50RW1pdHRlcjxNYXBFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1hcEV2ZW50PigpO1xuICBAT3V0cHV0KCkgbWFwUG9pbnRlckRyYWc6IEV2ZW50RW1pdHRlcjxNYXBCcm93c2VyRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxNYXBCcm93c2VyRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBtYXBQb2ludGVyTW92ZTogRXZlbnRFbWl0dGVyPE1hcEJyb3dzZXJFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1hcEJyb3dzZXJFdmVudD4oKTtcbiAgQE91dHB1dCgpIG1hcFBvc3RDb21wb3NlOiBFdmVudEVtaXR0ZXI8UmVuZGVyRXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxSZW5kZXJFdmVudD4oKTtcbiAgQE91dHB1dCgpIG1hcFBvc3RSZW5kZXI6IEV2ZW50RW1pdHRlcjxNYXBFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPE1hcEV2ZW50PigpO1xuICBAT3V0cHV0KCkgbWFwUHJlQ29tcG9zZTogRXZlbnRFbWl0dGVyPFJlbmRlckV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8UmVuZGVyRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBtYXBQcm9wZXJ0eUNoYW5nZTogRXZlbnRFbWl0dGVyPE9iamVjdEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8T2JqZWN0RXZlbnQ+KCk7XG5cbiAgQElucHV0KCkgcGl4ZWxSYXRpbzogbnVtYmVyO1xuICBASW5wdXQoKSBrZXlib2FyZEV2ZW50VGFyZ2V0OiBFbGVtZW50IHwgc3RyaW5nO1xuICBASW5wdXQoKSBsb2dvOiBzdHJpbmcgfCBib29sZWFuO1xuICBASW5wdXQoKSBwcm9wZXJ0aWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH07XG4gIEBJbnB1dCgpIHNldEZvY3VzOiBib29sZWFuPSBmYWxzZTtcbiAgQElucHV0KCkgaGl0VG9sZXJhbmNlOiBudW1iZXI9IDU7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIGVsZW1lbnQ6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBtYXBTZXJ2aWNlOiBNYXBTZXJ2aWNlKSB7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRhY2goKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkO1xuICAgIHRoaXMubWFwID0gbmV3IE1hcCh0aGlzIGFzIE1hcE9wdGlvbnMpO1xuICAgIHRoaXMubWFwLnNldFRhcmdldCh0YXJnZXQpO1xuICAgIHRoaXMubWFwLnNldFByb3BlcnRpZXModGhpcy5wcm9wZXJ0aWVzLCB0cnVlKTtcbiAgICAvLyByZWdpc3RlciB0aGUgbWFwIGluIHRoZSBpbmplY3RhYmxlIG1hcFNlcnZpY2VcbiAgICB0aGlzLm1hcFNlcnZpY2UuYWRkTWFwKHRoaXMubWFwKTtcblxuICAgIHRoaXMubWFwLm9uY2UoJ3Bvc3RyZW5kZXInLCBldmVudCA9PiB7XG4gICAgICB0aGlzLmFmdGVyTWFwUmVhZHkoKTtcbiAgICB9KTtcblxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5tYXAudW4oJ3NpbmdsZWNsaWNrJywgdGhpcy5lbWl0U2luZ2xlQ2xpY2tFdmVudCk7XG4gICAgdGhpcy5tYXAudW4oJ2RibGNsaWNrJywgdGhpcy5lbWl0RGJsQ2xpY2tFdmVudCk7XG4gICAgdGhpcy5tYXAudW4oJ2NsaWNrJywgdGhpcy5lbWl0Q2xpY2tFdmVudCk7XG4gICAgdGhpcy5tYXAudW4oJ21vdmVzdGFydCcsIHRoaXMuZW1pdE1vdmVTdGFydEV2ZW50KTtcbiAgICB0aGlzLm1hcC51bignbW92ZWVuZCcsIHRoaXMuZW1pdE1vdmVFbmRFdmVudCk7XG4gICAgdGhpcy5tYXAudW4oJ3BvaW50ZXJkcmFnJywgdGhpcy5lbWl0UG9pbnRlckRyYWdFdmVudCk7XG4gICAgdGhpcy5tYXAudW4oJ3BvaW50ZXJtb3ZlJywgdGhpcy5lbWl0UG9pbnRlck1vdmVFdmVudCk7XG4gICAgdGhpcy5tYXAudW4oJ3Bvc3Rjb21wb3NlJywgdGhpcy5lbWl0UG9zdENvbXBvc2VFdmVudCk7XG4gICAgdGhpcy5tYXAudW4oJ3Bvc3RyZW5kZXInLCB0aGlzLmVtaXRQb3N0UmVuZGVyRXZlbnQpO1xuICAgIHRoaXMubWFwLnVuKCdwcmVjb21wb3NlJywgdGhpcy5lbWl0UHJlQ29tcG9zZUV2ZW50KTtcbiAgICB0aGlzLm1hcC51bigncHJvcGVydHljaGFuZ2UnLCB0aGlzLmVtaXRQcm9wZXJ0eUNoYW5nZUV2ZW50KTtcblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLnVwZGF0ZVNpemVUaHJvdHRsZSk7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ29yaWVudGF0aW9uY2hhbmdlJywgdGhpcy51cGRhdGVTaXplVGhyb3R0bGUpO1xuXG4gICAgdGhpcy5tYXAuc2V0VGFyZ2V0KG51bGwpO1xuICAgIHRoaXMubWFwID0gbnVsbDtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZih0aGlzLm1hcCAmJiB0eXBlb2YgY2hhbmdlcy5zZXRGb2N1cyE9PSd1bmRlZmluZWQnKSB7XG4gICAgICBpZihjaGFuZ2VzLnNldEZvY3VzLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICB0aGlzLmZvY3VzTWFwKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWZ0ZXJNYXBSZWFkeSgpIHtcbiAgICAvLyByZWdpc3RlciBtYXAgZXZlbnRzXG4gICAgdGhpcy5tYXAub24oJ3NpbmdsZWNsaWNrJywgdGhpcy5lbWl0U2luZ2xlQ2xpY2tFdmVudCk7XG4gICAgdGhpcy5tYXAub24oJ2RibGNsaWNrJywgdGhpcy5lbWl0RGJsQ2xpY2tFdmVudCk7XG4gICAgdGhpcy5tYXAub24oJ2NsaWNrJywgdGhpcy5lbWl0Q2xpY2tFdmVudCk7XG4gICAgdGhpcy5tYXAub24oJ21vdmVzdGFydCcsIHRoaXMuZW1pdE1vdmVTdGFydEV2ZW50KTtcbiAgICB0aGlzLm1hcC5vbignbW92ZWVuZCcsIHRoaXMuZW1pdE1vdmVFbmRFdmVudCk7XG4gICAgdGhpcy5tYXAub24oJ3BvaW50ZXJkcmFnJywgdGhpcy5lbWl0UG9pbnRlckRyYWdFdmVudCk7XG4gICAgdGhpcy5tYXAub24oJ3BvaW50ZXJtb3ZlJywgdGhpcy5lbWl0UG9pbnRlck1vdmVFdmVudCk7XG4gICAgdGhpcy5tYXAub24oJ3Bvc3Rjb21wb3NlJywgdGhpcy5lbWl0UG9zdENvbXBvc2VFdmVudCk7XG4gICAgdGhpcy5tYXAub24oJ3Bvc3RyZW5kZXInLCB0aGlzLmVtaXRQb3N0UmVuZGVyRXZlbnQpO1xuICAgIHRoaXMubWFwLm9uKCdwcmVjb21wb3NlJywgdGhpcy5lbWl0UHJlQ29tcG9zZUV2ZW50KTtcbiAgICB0aGlzLm1hcC5vbigncHJvcGVydHljaGFuZ2UnLCB0aGlzLmVtaXRQcm9wZXJ0eUNoYW5nZUV2ZW50KTtcblxuICAgIC8vIHJlYWN0IG9uIHdpbmRvdyBldmVudHNcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy51cGRhdGVTaXplVGhyb3R0bGUsIGZhbHNlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb3JpZW50YXRpb25jaGFuZ2UnLCB0aGlzLnVwZGF0ZVNpemVUaHJvdHRsZSwgZmFsc2UpO1xuXG4gICAgdGhpcy51cGRhdGVTaXplKCk7XG5cbiAgICB0aGlzLm1hcFJlYWR5Lm5leHQoe21hcDogdGhpcy5tYXAsIG1hcFNlcnZpY2U6IHRoaXMubWFwU2VydmljZX0pO1xuICAgIHRoaXMubWFwUmVhZHkuY29tcGxldGUoKTtcblxuICAgIGlmKHRoaXMuc2V0Rm9jdXMpIHsgdGhpcy5mb2N1c01hcCgpIH1cbiAgfVxuXG4gIGZvY3VzTWFwKCkge1xuICAgIHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkLmZvY3VzKCk7XG4gIH1cblxuICBnZXRNYXAoKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwO1xuICB9XG5cbiAgdXBkYXRlU2l6ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZVNpemVUaHJvdHRsZSgpO1xuICB9XG5cbiAgZ2V0TWFwQ2VudGVyKCk6IENvb3JkaW5hdGUge1xuICAgIGlmKCF0aGlzLm1hcCkgeyByZXR1cm4gWzAsMF0gfVxuICAgIHJldHVybiB0b0xvbkxhdCh0aGlzLm1hcC5nZXRWaWV3KCkuZ2V0Q2VudGVyKCkpO1xuICB9XG5cbiAgZ2V0TWFwRXh0ZW50KCkge1xuICAgIGlmKCF0aGlzLm1hcCkgeyByZXR1cm4gWzAsMCwwLDBdIH1cbiAgICBsZXQgdj0gdGhpcy5tYXAuZ2V0VmlldygpO1xuICAgIGxldCBtcmlkPSB2LmdldFByb2plY3Rpb24oKS5nZXRDb2RlKCk7XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtRXh0ZW50KFxuICAgICAgICB2LmNhbGN1bGF0ZUV4dGVudCh0aGlzLm1hcC5nZXRTaXplKCkpLFxuICAgICAgICBtcmlkLCBcbiAgICAgICAgJ0VQU0c6NDMyNidcbiAgICApO1xuICB9XG5cbiAgLy8gT25seSBhcnJvdyBmdW5jdGlvbiB3b3JrcyB3aXRoIGFkZEV2ZW50TGlzdGVuZXJcbiAgcHJpdmF0ZSBlbWl0Q2xpY2tFdmVudCA9IChldmVudDogTWFwQnJvd3NlckV2ZW50KSA9PiB7XG4gICAgdGhpcy5tYXBDbGljay5lbWl0KFxuICAgICAgdGhpcy5hdWdtZW50Q2xpY2tFdmVudChldmVudClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0U2luZ2xlQ2xpY2tFdmVudCA9IChldmVudDogTWFwQnJvd3NlckV2ZW50KSA9PiB7XG4gICAgdGhpcy5tYXBTaW5nbGVDbGljay5lbWl0KFxuICAgICAgdGhpcy5hdWdtZW50Q2xpY2tFdmVudChldmVudClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZW1pdERibENsaWNrRXZlbnQgPSAoZXZlbnQ6IE1hcEJyb3dzZXJFdmVudCkgPT4ge1xuICAgIHRoaXMubWFwRGJsQ2xpY2suZW1pdChcbiAgICAgIHRoaXMuYXVnbWVudENsaWNrRXZlbnQoZXZlbnQpXG4gICAgKTtcbiAgfVxuXG4gIC8vICoqIGFkZCB7bG9ubGF0LCBmZWF0dXJlc31maWVsZHMgdG8gZXZlbnQgXG4gIHByaXZhdGUgYXVnbWVudENsaWNrRXZlbnQoZXZlbnQ6IE1hcEJyb3dzZXJFdmVudCkge1xuICAgIHJldHVybiBPYmplY3QuYXNzaWduKGV2ZW50LCB7XG4gICAgICBmZWF0dXJlczogdGhpcy5tYXAuZ2V0RmVhdHVyZXNBdFBpeGVsKGV2ZW50LnBpeGVsLCB7aGl0VG9sZXJhbmNlOiB0aGlzLmhpdFRvbGVyYW5jZX0pLFxuICAgICAgbG9ubGF0OiB0b0xvbkxhdChldmVudC5jb29yZGluYXRlKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0TW92ZVN0YXJ0RXZlbnQgPSAoZXZlbnQ6IE1hcEV2ZW50KSA9PiB7XG4gICAgdGhpcy5tYXBNb3ZlU3RhcnQuZW1pdChcbiAgICAgIHRoaXMuYXVnbWVudE1vdmVFdmVudChldmVudClcbiAgICApO1xuICB9XG4gIHByaXZhdGUgZW1pdE1vdmVFbmRFdmVudCA9IChldmVudDogTWFwRXZlbnQpID0+IHtcbiAgICB0aGlzLm1hcE1vdmVFbmQuZW1pdChcbiAgICAgIHRoaXMuYXVnbWVudE1vdmVFdmVudChldmVudClcbiAgICApO1xuICB9XG5cbiAgLy8gKiogYWRkIHtsb25sYXQsIHpvb20sIGV4dGVudCwgcHJvamVjdGlvbiBjb2RlfSBmaWVsZHMgdG8gZXZlbnQgXG4gIHByaXZhdGUgYXVnbWVudE1vdmVFdmVudChldmVudDogTWFwRXZlbnQpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihldmVudCwge1xuICAgICAgbG9ubGF0OiB0aGlzLmdldE1hcENlbnRlcigpLFxuICAgICAgem9vbTogdGhpcy5tYXAuZ2V0VmlldygpLmdldFpvb20oKSxcbiAgICAgIGV4dGVudDogdGhpcy5nZXRNYXBFeHRlbnQoKSxcbiAgICAgIHByb2pDb2RlOiB0aGlzLm1hcC5nZXRWaWV3KCkuZ2V0UHJvamVjdGlvbigpLmdldENvZGUoKVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBlbWl0UG9pbnRlckRyYWdFdmVudCA9IChldmVudDogTWFwQnJvd3NlckV2ZW50KSA9PiB7XG4gICAgdGhpcy5tYXBQb2ludGVyRHJhZy5lbWl0KFxuICAgICAgdGhpcy5hdWdtZW50UG9pbnRlckV2ZW50KGV2ZW50KVxuICAgICk7XG4gIH1cbiAgcHJpdmF0ZSBlbWl0UG9pbnRlck1vdmVFdmVudCA9IChldmVudDogTWFwQnJvd3NlckV2ZW50KSA9PiB7XG4gICAgdGhpcy5tYXBQb2ludGVyTW92ZS5lbWl0KFxuICAgICAgdGhpcy5hdWdtZW50UG9pbnRlckV2ZW50KGV2ZW50KVxuICAgICk7XG4gIH1cblxuICAvLyAqKiBhZGQge2xvbmxhdH0gZmllbGQgdG8gZXZlbnQgXG4gIHByaXZhdGUgYXVnbWVudFBvaW50ZXJFdmVudChldmVudDogTWFwQnJvd3NlckV2ZW50KSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZXZlbnQsIHsgbG9ubGF0OiB0b0xvbkxhdChldmVudC5jb29yZGluYXRlKSB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFBvc3RDb21wb3NlRXZlbnQgPSAoZXZlbnQ6IFJlbmRlckV2ZW50KSA9PiB0aGlzLm1hcFBvc3RDb21wb3NlLmVtaXQoZXZlbnQpO1xuICBwcml2YXRlIGVtaXRQb3N0UmVuZGVyRXZlbnQgPSAoZXZlbnQ6IE1hcEV2ZW50KSA9PiB0aGlzLm1hcFBvc3RSZW5kZXIuZW1pdChldmVudCk7XG4gIHByaXZhdGUgZW1pdFByZUNvbXBvc2VFdmVudCA9IChldmVudDogUmVuZGVyRXZlbnQpID0+IHRoaXMubWFwUHJlQ29tcG9zZS5lbWl0KGV2ZW50KTtcbiAgcHJpdmF0ZSBlbWl0UHJvcGVydHlDaGFuZ2VFdmVudCA9IChldmVudDogT2JqZWN0RXZlbnQpID0+IHRoaXMubWFwUHJvcGVydHlDaGFuZ2UuZW1pdChldmVudCk7XG5cbiAgcHJpdmF0ZSB1cGRhdGVTaXplVGhyb3R0bGUgPSAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dElkKTtcbiAgICB0aGlzLnRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5tYXAudXBkYXRlU2l6ZSgpO1xuICAgIH0sIDEwMCk7XG4gIH1cblxufVxuIl19
@@ -1,70 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { get as getProj } from 'ol/proj';
3
- import { register } from 'ol/proj/proj4.js';
4
- import proj4 from 'proj4';
5
- import * as i0 from "@angular/core";
6
- export class MapService {
7
- constructor() {
8
- this.maps = [];
9
- }
10
- /**
11
- * Retrieves all the maps
12
- */
13
- getMaps() {
14
- return this.maps;
15
- }
16
- /**
17
- * Returns a map object from the maps array
18
- */
19
- getMapById(id) {
20
- let map = null;
21
- for (let i = 0; i < this.maps.length; i++) {
22
- if (this.maps[i].getTarget() === id) {
23
- map = this.maps[i];
24
- break;
25
- }
26
- }
27
- return map;
28
- }
29
- getLayerByKey(key, value) {
30
- let tl;
31
- this.maps.forEach(map => {
32
- map.getLayers().forEach(layer => {
33
- if (layer.get(key) === value) {
34
- tl = layer;
35
- }
36
- });
37
- });
38
- return tl;
39
- }
40
- addMap(map) {
41
- this.maps.push(map);
42
- }
43
- updateSize() {
44
- this.maps.forEach(map => {
45
- map.updateSize();
46
- });
47
- }
48
- addProj4(epsg, proj4Def, extent) {
49
- let projection = getProj(epsg);
50
- if (!projection) {
51
- proj4.defs(epsg, proj4Def);
52
- register(proj4);
53
- projection = getProj(epsg);
54
- if (extent) {
55
- projection.setExtent(extent);
56
- }
57
- }
58
- if (!projection) {
59
- console.error(`Failed to register ${epsg} projection in OpenLayers`);
60
- }
61
- }
62
- }
63
- MapService.ɵprov = i0.ɵɵdefineInjectable({ factory: function MapService_Factory() { return new MapService(); }, token: MapService, providedIn: "root" });
64
- MapService.decorators = [
65
- { type: Injectable, args: [{
66
- providedIn: 'root'
67
- },] }
68
- ];
69
- MapService.ctorParameters = () => [];
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9mYi1vcGVubGF5ZXJzL3NyYy9saWIvbWFwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUl6QyxPQUFPLEVBQUMsR0FBRyxJQUFJLE9BQU8sRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUN2QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQUsxQixNQUFNLE9BQU8sVUFBVTtJQUduQjtRQUNJLElBQUksQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFRDs7T0FFRztJQUNILE9BQU87UUFDSCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDckIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLEVBQVU7UUFDakIsSUFBSSxHQUFHLEdBQVEsSUFBSSxDQUFDO1FBQ3BCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNqQyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbkIsTUFBTTthQUNUO1NBQ0o7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxhQUFhLENBQUMsR0FBVyxFQUFFLEtBQWE7UUFDcEMsSUFBSSxFQUFhLENBQUM7UUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEIsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDaEMsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssRUFBRTtvQkFDMUIsRUFBRSxHQUFFLEtBQUssQ0FBQztpQkFDYjtZQUNELENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxNQUFNLENBQUMsR0FBUTtRQUNYLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVO1FBQ04sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDcEIsR0FBRyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZLEVBQUUsUUFBZ0IsRUFBRSxNQUFZO1FBQ2pELElBQUksVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMvQixJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDM0IsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2hCLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsVUFBVSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNoQztTQUNKO1FBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLElBQUksMkJBQTJCLENBQUMsQ0FBQztTQUN4RTtJQUNMLENBQUM7Ozs7WUFsRUosVUFBVSxTQUFDO2dCQUNSLFVBQVUsRUFBRSxNQUFNO2FBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TWFwfSBmcm9tICdvbCc7XG5pbXBvcnQgeyBMYXllciB9IGZyb20gJ29sL2xheWVyJztcbmltcG9ydCBCYXNlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvQmFzZSdcbmltcG9ydCB7Z2V0IGFzIGdldFByb2p9IGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IHtyZWdpc3Rlcn0gZnJvbSAnb2wvcHJvai9wcm9qNC5qcyc7XG5pbXBvcnQgcHJvajQgZnJvbSAncHJvajQnO1xuXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIE1hcFNlcnZpY2Uge1xuICAgIG1hcHM6IE1hcFtdO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubWFwcyA9IFtdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHJpZXZlcyBhbGwgdGhlIG1hcHNcbiAgICAgKi9cbiAgICBnZXRNYXBzKCk6IE1hcFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWFwcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgbWFwIG9iamVjdCBmcm9tIHRoZSBtYXBzIGFycmF5XG4gICAgICovXG4gICAgZ2V0TWFwQnlJZChpZDogc3RyaW5nKTogTWFwIHtcbiAgICAgICAgbGV0IG1hcDogTWFwID0gbnVsbDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1hcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hcHNbaV0uZ2V0VGFyZ2V0KCkgPT09IGlkKSB7XG4gICAgICAgICAgICAgICAgbWFwID0gdGhpcy5tYXBzW2ldO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXA7XG4gICAgfVxuXG4gICAgZ2V0TGF5ZXJCeUtleShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IEJhc2VMYXllciB7XG4gICAgICAgIGxldCB0bDogQmFzZUxheWVyO1xuICAgICAgICB0aGlzLm1hcHMuZm9yRWFjaChtYXAgPT4ge1xuICAgICAgICAgICAgbWFwLmdldExheWVycygpLmZvckVhY2gobGF5ZXIgPT4ge1xuICAgICAgICAgICAgaWYgKGxheWVyLmdldChrZXkpID09PSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRsPSBsYXllcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRsO1xuICAgIH1cblxuICAgIGFkZE1hcChtYXA6IE1hcCk6IHZvaWQge1xuICAgICAgICB0aGlzLm1hcHMucHVzaChtYXApO1xuICAgIH1cblxuICAgIHVwZGF0ZVNpemUoKSB7XG4gICAgICAgIHRoaXMubWFwcy5mb3JFYWNoKG1hcCA9PiB7XG4gICAgICAgICAgICBtYXAudXBkYXRlU2l6ZSgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhZGRQcm9qNChlcHNnOiBzdHJpbmcsIHByb2o0RGVmOiBzdHJpbmcsIGV4dGVudD86IGFueSkge1xuICAgICAgICBsZXQgcHJvamVjdGlvbiA9IGdldFByb2ooZXBzZyk7XG4gICAgICAgIGlmICghcHJvamVjdGlvbikge1xuICAgICAgICAgICAgcHJvajQuZGVmcyhlcHNnLCBwcm9qNERlZik7XG4gICAgICAgICAgICByZWdpc3Rlcihwcm9qNCk7XG4gICAgICAgICAgICBwcm9qZWN0aW9uID0gZ2V0UHJvaihlcHNnKTtcbiAgICAgICAgICAgIGlmIChleHRlbnQpIHtcbiAgICAgICAgICAgICAgICBwcm9qZWN0aW9uLnNldEV4dGVudChleHRlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghcHJvamVjdGlvbikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHJlZ2lzdGVyICR7ZXBzZ30gcHJvamVjdGlvbiBpbiBPcGVuTGF5ZXJzYCk7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
@@ -1,37 +0,0 @@
1
- /* enum types */
2
- export var LayerType;
3
- (function (LayerType) {
4
- LayerType[LayerType["IMAGE"] = 0] = "IMAGE";
5
- LayerType[LayerType["TILE"] = 1] = "TILE";
6
- LayerType[LayerType["VECTOR_TILE"] = 2] = "VECTOR_TILE";
7
- LayerType[LayerType["VECTOR"] = 3] = "VECTOR";
8
- })(LayerType || (LayerType = {}));
9
- export var SourceType;
10
- (function (SourceType) {
11
- SourceType[SourceType["BINGMAPS"] = 0] = "BINGMAPS";
12
- SourceType[SourceType["CARTODB"] = 1] = "CARTODB";
13
- SourceType[SourceType["CLUSTER"] = 2] = "CLUSTER";
14
- SourceType[SourceType["IMAGE"] = 3] = "IMAGE";
15
- SourceType[SourceType["IMAGEARCGISREST"] = 4] = "IMAGEARCGISREST";
16
- SourceType[SourceType["IMAGECANVAS"] = 5] = "IMAGECANVAS";
17
- SourceType[SourceType["IMAGEMAPGUIDE"] = 6] = "IMAGEMAPGUIDE";
18
- SourceType[SourceType["IMAGESTATIC"] = 7] = "IMAGESTATIC";
19
- SourceType[SourceType["IMAGEVECTOR"] = 8] = "IMAGEVECTOR";
20
- SourceType[SourceType["IMAGEWMS"] = 9] = "IMAGEWMS";
21
- SourceType[SourceType["OSM"] = 10] = "OSM";
22
- SourceType[SourceType["RASTER"] = 11] = "RASTER";
23
- SourceType[SourceType["STAMEN"] = 12] = "STAMEN";
24
- SourceType[SourceType["TILEARCGISREST"] = 13] = "TILEARCGISREST";
25
- SourceType[SourceType["TILEDEBUG"] = 14] = "TILEDEBUG";
26
- SourceType[SourceType["TILEIMAGE"] = 15] = "TILEIMAGE";
27
- SourceType[SourceType["TILEJSON"] = 16] = "TILEJSON";
28
- SourceType[SourceType["TILEUTFGRID"] = 17] = "TILEUTFGRID";
29
- SourceType[SourceType["TILEWMS"] = 18] = "TILEWMS";
30
- SourceType[SourceType["URLTILE"] = 19] = "URLTILE";
31
- SourceType[SourceType["VECTOR"] = 20] = "VECTOR";
32
- SourceType[SourceType["VECTORTILE"] = 21] = "VECTORTILE";
33
- SourceType[SourceType["WMTS"] = 22] = "WMTS";
34
- SourceType[SourceType["XYZ"] = 23] = "XYZ";
35
- SourceType[SourceType["ZOOMIFY"] = 24] = "ZOOMIFY";
36
- })(SourceType || (SourceType = {}));
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZmItb3BlbmxheWVycy9zcmMvbGliL21vZGVscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxnQkFBZ0I7QUFFaEIsTUFBTSxDQUFOLElBQVksU0FFWDtBQUZELFdBQVksU0FBUztJQUNuQiwyQ0FBSyxDQUFBO0lBQUUseUNBQUksQ0FBQTtJQUFFLHVEQUFXLENBQUE7SUFBRSw2Q0FBTSxDQUFBO0FBQ2xDLENBQUMsRUFGVyxTQUFTLEtBQVQsU0FBUyxRQUVwQjtBQUVELE1BQU0sQ0FBTixJQUFZLFVBMEJYO0FBMUJELFdBQVksVUFBVTtJQUNwQixtREFBUSxDQUFBO0lBQ1IsaURBQU8sQ0FBQTtJQUNQLGlEQUFPLENBQUE7SUFDUCw2Q0FBSyxDQUFBO0lBQ0wsaUVBQWUsQ0FBQTtJQUNmLHlEQUFXLENBQUE7SUFDWCw2REFBYSxDQUFBO0lBQ2IseURBQVcsQ0FBQTtJQUNYLHlEQUFXLENBQUE7SUFDWCxtREFBUSxDQUFBO0lBQ1IsMENBQUcsQ0FBQTtJQUNILGdEQUFNLENBQUE7SUFDTixnREFBTSxDQUFBO0lBQ04sZ0VBQWMsQ0FBQTtJQUNkLHNEQUFTLENBQUE7SUFDVCxzREFBUyxDQUFBO0lBQ1Qsb0RBQVEsQ0FBQTtJQUNSLDBEQUFXLENBQUE7SUFDWCxrREFBTyxDQUFBO0lBQ1Asa0RBQU8sQ0FBQTtJQUNQLGdEQUFNLENBQUE7SUFDTix3REFBVSxDQUFBO0lBQ1YsNENBQUksQ0FBQTtJQUNKLDBDQUFHLENBQUE7SUFDSCxrREFBTyxDQUFBO0FBQ1QsQ0FBQyxFQTFCVyxVQUFVLEtBQVYsVUFBVSxRQTBCckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge01hcH0gZnJvbSAnb2wnO1xuaW1wb3J0IHtNYXBTZXJ2aWNlfSBmcm9tICcuL21hcC5zZXJ2aWNlJztcblxuLyogZW51bSB0eXBlcyAqL1xuXG5leHBvcnQgZW51bSBMYXllclR5cGUge1xuICBJTUFHRSwgVElMRSwgVkVDVE9SX1RJTEUsIFZFQ1RPUlxufVxuXG5leHBvcnQgZW51bSBTb3VyY2VUeXBlIHtcbiAgQklOR01BUFMsXG4gIENBUlRPREIsXG4gIENMVVNURVIsXG4gIElNQUdFLFxuICBJTUFHRUFSQ0dJU1JFU1QsXG4gIElNQUdFQ0FOVkFTLFxuICBJTUFHRU1BUEdVSURFLFxuICBJTUFHRVNUQVRJQyxcbiAgSU1BR0VWRUNUT1IsXG4gIElNQUdFV01TLFxuICBPU00sXG4gIFJBU1RFUixcbiAgU1RBTUVOLFxuICBUSUxFQVJDR0lTUkVTVCxcbiAgVElMRURFQlVHLFxuICBUSUxFSU1BR0UsXG4gIFRJTEVKU09OLFxuICBUSUxFVVRGR1JJRCxcbiAgVElMRVdNUyxcbiAgVVJMVElMRSxcbiAgVkVDVE9SLFxuICBWRUNUT1JUSUxFLFxuICBXTVRTLFxuICBYWVosXG4gIFpPT01JRlksXG59XG5cbi8qIGludGVyZmFjZSB0eXBlcyAqL1xuZXhwb3J0IHR5cGUgQ29vcmRpbmF0ZSA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyP107XG5cbmV4cG9ydCB0eXBlIEV4dGVudCA9IFtudW1iZXIsIG51bWJlciwgbnVtYmVyLCBudW1iZXJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hcFJlYWR5RXZlbnQge1xuICAgIG1hcDogTWFwO1xuICAgIG1hcFNlcnZpY2U6IE1hcFNlcnZpY2U7XG59XG4iXX0=
@@ -1,116 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, Output } from '@angular/core';
2
- import { Feature } from 'ol';
3
- import VectorLayer from 'ol/layer/Vector';
4
- import VectorSource from 'ol/source/Vector';
5
- import { Style, Stroke, Fill } from 'ol/style';
6
- import { Circle } from 'ol/geom';
7
- import { fromLonLat } from 'ol/proj';
8
- import { MapComponent } from '../map.component';
9
- import { mapifyRadius } from '../util';
10
- import { AsyncSubject } from 'rxjs';
11
- // ** Freeboard Arrival Circle component **
12
- export class ArrivalCircleComponent {
13
- constructor(changeDetectorRef, mapComponent) {
14
- this.changeDetectorRef = changeDetectorRef;
15
- this.mapComponent = mapComponent;
16
- /**
17
- * This event is triggered after the layer is initialized
18
- * Use this to have access to the layer and some helper functions
19
- */
20
- this.layerReady = new AsyncSubject(); // AsyncSubject will only store the last value, and only publish it when the sequence is completed
21
- this.mapifiedLine = [];
22
- this.changeDetectorRef.detach();
23
- }
24
- ngOnInit() {
25
- this.parseValues();
26
- this.source = new VectorSource({ features: this.features });
27
- this.layer = new VectorLayer(Object.assign(this, Object.assign({}, this.layerProperties)));
28
- const map = this.mapComponent.getMap();
29
- if (this.layer && map) {
30
- map.addLayer(this.layer);
31
- map.render();
32
- this.layerReady.next(this.layer);
33
- this.layerReady.complete();
34
- }
35
- }
36
- ngOnChanges(changes) {
37
- if (this.layer) {
38
- const properties = {};
39
- for (const key in changes) {
40
- if (key == 'position' || key == 'radius') {
41
- this.parseValues();
42
- if (this.source) {
43
- this.source.clear();
44
- this.source.addFeatures(this.features);
45
- }
46
- }
47
- else if (key == 'layerProperties') {
48
- this.layer.setProperties(properties, false);
49
- }
50
- else {
51
- properties[key] = changes[key].currentValue;
52
- }
53
- }
54
- this.layer.setProperties(properties, false);
55
- }
56
- }
57
- ngOnDestroy() {
58
- const map = this.mapComponent.getMap();
59
- if (this.layer && map) {
60
- map.removeLayer(this.layer);
61
- map.render();
62
- this.layer = null;
63
- }
64
- }
65
- parseValues() {
66
- let fa = [];
67
- let f = new Feature({
68
- geometry: new Circle(fromLonLat(this.position), mapifyRadius(this.radius, this.position))
69
- });
70
- f.setStyle(this.buildStyle());
71
- fa.push(f);
72
- this.features = fa;
73
- }
74
- // build target style
75
- buildStyle() {
76
- let cs;
77
- if (this.layerProperties && this.layerProperties.style) {
78
- cs = this.layerProperties.style;
79
- }
80
- else { // default style
81
- cs = new Style({
82
- fill: new Fill({ color: 'rgba(255, 255, 255, .1)' }),
83
- stroke: new Stroke({
84
- color: 'rgba(242, 153, 10, 1)',
85
- width: 2,
86
- lineDash: [5, 5]
87
- })
88
- });
89
- }
90
- return cs;
91
- }
92
- }
93
- ArrivalCircleComponent.decorators = [
94
- { type: Component, args: [{
95
- selector: 'ol-map > fb-arrival-circle',
96
- template: '<ng-content></ng-content>',
97
- changeDetection: ChangeDetectionStrategy.OnPush
98
- },] }
99
- ];
100
- ArrivalCircleComponent.ctorParameters = () => [
101
- { type: ChangeDetectorRef },
102
- { type: MapComponent }
103
- ];
104
- ArrivalCircleComponent.propDecorators = {
105
- layerReady: [{ type: Output }],
106
- position: [{ type: Input }],
107
- radius: [{ type: Input }],
108
- opacity: [{ type: Input }],
109
- visible: [{ type: Input }],
110
- extent: [{ type: Input }],
111
- zIndex: [{ type: Input }],
112
- minResolution: [{ type: Input }],
113
- maxResolution: [{ type: Input }],
114
- layerProperties: [{ type: Input }]
115
- };
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXItYXJyaXZhbC1jaXJjbGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZmItb3BlbmxheWVycy9zcmMvbGliL25hdmlnYXRpb24vbGF5ZXItYXJyaXZhbC1jaXJjbGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFBRSxpQkFBaUIsRUFDMUMsU0FBUyxFQUNULEtBQUssRUFJTCxNQUFNLEVBRVAsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksQ0FBQztBQUM3QixPQUFPLFdBQVcsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLFlBQVksTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNqQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHcEMsMkNBQTJDO0FBTTNDLE1BQU0sT0FBTyxzQkFBc0I7SUF5QmpDLFlBQXNCLGlCQUFvQyxFQUNwQyxZQUEwQjtRQUQxQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBcEJoRDs7O1dBR0c7UUFDTyxlQUFVLEdBQXdCLElBQUksWUFBWSxFQUFFLENBQUMsQ0FBQyxrR0FBa0c7UUFhM0osaUJBQVksR0FBcUIsRUFBRSxDQUFDO1FBSXpDLElBQUksQ0FBQyxpQkFBaUIs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Q0FBQztRQUNkLElBQUcsSUFBSSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUNyRCxFQUFFLEdBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUE7U0FDL0I7YUFDSSxFQUFFLGdCQUFnQjtZQUNyQixFQUFFLEdBQUUsSUFBSSxLQUFLLENBQUM7Z0JBQ1osSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLHlCQUF5QixFQUFFLENBQUM7Z0JBQ3BELE1BQU0sRUFBRSxJQUFJLE1BQU0sQ0FBQztvQkFDakIsS0FBSyxFQUFFLHVCQUF1QjtvQkFDOUIsS0FBSyxFQUFFLENBQUM7b0JBQ1IsUUFBUSxFQUFFLENBQUMsQ0FBQyxFQUFDLENBQUMsQ0FBQztpQkFDaEIsQ0FBQzthQUNILENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDOzs7WUE3R0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSw0QkFBNEI7Z0JBQ3RDLFFBQVEsRUFBRSwyQkFBMkI7Z0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOzs7WUEzQjBCLGlCQUFpQjtZQWdCbkMsWUFBWTs7O3lCQXNCbEIsTUFBTTt1QkFFTixLQUFLO3FCQUNOLEtBQUs7c0JBQ0osS0FBSztzQkFDTCxLQUFLO3FCQUNMLEtBQUs7cUJBQ0wsS0FBSzs0QkFDTCxLQUFLOzRCQUNMLEtBQUs7OEJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTGF5ZXIgfSBmcm9tICdvbC9sYXllcic7XG5pbXBvcnQgeyBGZWF0dXJlIH0gZnJvbSAnb2wnO1xuaW1wb3J0IFZlY3RvckxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3Rvcic7XG5pbXBvcnQgVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuaW1wb3J0IHsgU3R5bGUsIFN0cm9rZSwgRmlsbCB9IGZyb20gJ29sL3N0eWxlJztcbmltcG9ydCB7IENpcmNsZSB9IGZyb20gJ29sL2dlb20nO1xuaW1wb3J0IHsgZnJvbUxvbkxhdCB9IGZyb20gJ29sL3Byb2onO1xuaW1wb3J0IHsgTWFwQ29tcG9uZW50IH0gZnJvbSAnLi4vbWFwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFeHRlbnQsIENvb3JkaW5hdGUgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgbWFwaWZ5UmFkaXVzIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgeyBBc3luY1N1YmplY3QgfSBmcm9tICdyeGpzJztcblxuXG4vLyAqKiBGcmVlYm9hcmQgQXJyaXZhbCBDaXJjbGUgY29tcG9uZW50ICoqXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdvbC1tYXAgPiBmYi1hcnJpdmFsLWNpcmNsZScsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEFycml2YWxDaXJjbGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcblxuICBwcm90ZWN0ZWQgbGF5ZXI6IExheWVyO1xuICBwdWJsaWMgc291cmNlOiBWZWN0b3JTb3VyY2U7XG4gIHByb3RlY3RlZCBmZWF0dXJlczogQXJyYXk8RmVhdHVyZT47XG5cbiAgLyoqXG4gICAqIFRoaXMgZXZlbnQgaXMgdHJpZ2dlcmVkIGFmdGVyIHRoZSBsYXllciBpcyBpbml0aWFsaXplZFxuICAgKiBVc2UgdGhpcyB0byBoYXZlIGFjY2VzcyB0byB0aGUgbGF5ZXIgYW5kIHNvbWUgaGVscGVyIGZ1bmN0aW9uc1xuICAgKi9cbiAgQE91dHB1dCgpIGxheWVyUmVhZHk6IEFzeW5jU3ViamVjdDxMYXllcj4gPSBuZXcgQXN5bmNTdWJqZWN0KCk7IC8vIEFzeW5jU3ViamVjdCB3aWxsIG9ubHkgc3RvcmUgdGhlIGxhc3QgdmFsdWUsIGFuZCBvbmx5IHB1Ymxpc2ggaXQgd2hlbiB0aGUgc2VxdWVuY2UgaXMgY29tcGxldGVkXG5cbiAgQElucHV0KCkgcG9zaXRpb246IENvb3JkaW5hdGU7XG5cdEBJbnB1dCgpIHJhZGl1czogbnVtYmVyO1xuICBASW5wdXQoKSBvcGFjaXR5OiBudW1iZXI7XG4gIEBJbnB1dCgpIHZpc2libGU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGV4dGVudDogRXh0ZW50O1xuICBASW5wdXQoKSB6SW5kZXg6IG51bWJlcjtcbiAgQElucHV0KCkgbWluUmVzb2x1dGlvbjogbnVtYmVyO1xuICBASW5wdXQoKSBtYXhSZXNvbHV0aW9uOiBudW1iZXI7XG4gIEBJbnB1dCgpIGxheWVyUHJvcGVydGllczogeyBbaW5kZXg6IHN0cmluZ106IGFueSB9O1xuXG5cbiAgcHVibGljIG1hcGlmaWVkTGluZTogQXJyYXk8Q29vcmRpbmF0ZT49IFtdO1xuICBcbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIG1hcENvbXBvbmVudDogTWFwQ29tcG9uZW50KSB7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRhY2goKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMucGFyc2VWYWx1ZXMoKTtcbiAgICB0aGlzLnNvdXJjZSA9IG5ldyBWZWN0b3JTb3VyY2Uoe2ZlYXR1cmVzOiB0aGlzLmZlYXR1cmVzfSk7XG4gICAgdGhpcy5sYXllciA9IG5ldyBWZWN0b3JMYXllcihPYmplY3QuYXNzaWduKHRoaXMsIHsuLi50aGlzLmxheWVyUHJvcGVydGllc30pKTtcblxuICAgIGNvbnN0IG1hcCA9IHRoaXMubWFwQ29tcG9uZW50LmdldE1hcCgpO1xuICAgIGlmKHRoaXMubGF5ZXIgJiYgbWFwKSB7XG4gICAgICBtYXAuYWRkTGF5ZXIodGhpcy5sYXllcik7XG4gICAgICBtYXAucmVuZGVyKCk7XG4gICAgICB0aGlzLmxheWVyUmVhZHkubmV4dCh0aGlzLmxheWVyKTtcbiAgICAgIHRoaXMubGF5ZXJSZWFkeS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmKHRoaXMubGF5ZXIpIHtcbiAgICAgIGNvbnN0IHByb3BlcnRpZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgICBmb3IoY29uc3Qga2V5IGluIGNoYW5nZXMpIHtcbiAgICAgICAgaWYoa2V5PT0ncG9zaXRpb24nIHx8IGtleT09J3JhZGl1cycpIHtcbiAgICAgICAgICB0aGlzLnBhcnNlVmFsdWVzKCk7XG4gICAgICAgICAgaWYodGhpcy5zb3VyY2UpIHsgXG4gICAgICAgICAgICB0aGlzLnNvdXJjZS5jbGVhcigpO1xuICAgICAgICAgICAgdGhpcy5zb3VyY2UuYWRkRmVhdHVyZXModGhpcy5mZWF0dXJlcyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYoIGtleT09J2xheWVyUHJvcGVydGllcycpIHsgXG4gICAgICAgICAgdGhpcy5sYXllci5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSBjaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmxheWVyLnNldFByb3BlcnRpZXMocHJvcGVydGllcywgZmFsc2UpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMubWFwQ29tcG9uZW50LmdldE1hcCgpO1xuICAgIGlmICh0aGlzLmxheWVyICYmIG1hcCkge1xuICAgICAgbWFwLnJlbW92ZUxheWVyKHRoaXMubGF5ZXIpO1xuICAgICAgbWFwLnJlbmRlcigpO1xuICAgICAgdGhpcy5sYXllciA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcGFyc2VWYWx1ZXMoKSB7XG4gICAgbGV0IGZhOiBGZWF0dXJlW109IFtdO1xuICAgIGxldCBmPSBuZXcgRmVhdHVyZSh7XG4gICAgICBnZW9tZXRyeTogbmV3IENpcmNsZSggZnJvbUxvbkxhdCh0aGlzLnBvc2l0aW9uKSwgbWFwaWZ5UmFkaXVzKHRoaXMucmFkaXVzLCB0aGlzLnBvc2l0aW9uKSApXG4gICAgfSk7XG4gICAgZi5zZXRTdHlsZSh0aGlzLmJ1aWxkU3R5bGUoKSk7XG4gICAgZmEucHVzaChmKTtcbiAgICB0aGlzLmZlYXR1cmVzPSBmYTtcbiAgfVxuXG4gIC8vIGJ1aWxkIHRhcmdldCBzdHlsZVxuICBidWlsZFN0eWxlKCk6U3R5bGUge1xuICAgIGxldCBjczogU3R5bGU7XG4gICAgaWYodGhpcy5sYXllclByb3BlcnRpZXMgJiYgdGhpcy5sYXllclByb3BlcnRpZXMuc3R5bGUpIHsgXG4gICAgICBjcz0gdGhpcy5sYXllclByb3BlcnRpZXMuc3R5bGUgXG4gICAgfVxuICAgIGVsc2UgeyAvLyBkZWZhdWx0IHN0eWxlXG4gICAgICBjcz0gbmV3IFN0eWxlKHtcbiAgICAgICAgZmlsbDogbmV3IEZpbGwoeyBjb2xvcjogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgLjEpJyB9KSxcbiAgICAgICAgc3Ryb2tlOiBuZXcgU3Ryb2tlKHsgXG4gICAgICAgICAgY29sb3I6ICdyZ2JhKDI0MiwgMTUzLCAxMCwgMSknLFxuICAgICAgICAgIHdpZHRoOiAyLFxuICAgICAgICAgIGxpbmVEYXNoOiBbNSw1XVxuICAgICAgICB9KVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBjc1xuICB9XG5cbn1cbiJdfQ==