@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,72 +0,0 @@
1
- import { ChangeDetectorRef, ChangeDetectionStrategy, Component, Output, Input, EventEmitter } from '@angular/core';
2
- import GeometryType from 'ol/geom/GeometryType';
3
- import { Draw } from 'ol/interaction';
4
- import { MapComponent } from '../map.component';
5
- export class InteractionDrawComponent {
6
- constructor(changeDetectorRef, mapComponent) {
7
- this.changeDetectorRef = changeDetectorRef;
8
- this.mapComponent = mapComponent;
9
- this.type = GeometryType.LINE_STRING;
10
- this.change = new EventEmitter();
11
- this.drawStart = new EventEmitter();
12
- this.drawEnd = new EventEmitter();
13
- this.drawAbort = new EventEmitter();
14
- // ** emit events
15
- this.emitChangeEvent = (event) => this.change.emit(event);
16
- this.emitDrawStartEvent = (event) => this.drawStart.emit(event);
17
- this.emitDrawEndEvent = (event) => this.drawEnd.emit(event);
18
- this.emitDrawAbortEvent = (event) => this.drawAbort.emit(event);
19
- this.changeDetectorRef.detach();
20
- }
21
- ngOnInit() { }
22
- ngAfterViewInit() {
23
- this.map = this.mapComponent.getMap();
24
- this.addDrawInteraction();
25
- }
26
- ngOnDestroy() {
27
- this.map.removeInteraction(this.interaction);
28
- this.interaction.un('change', this.emitChangeEvent);
29
- this.interaction.un('drawstart', this.emitDrawStartEvent);
30
- this.interaction.un('drawend', this.emitDrawEndEvent);
31
- this.interaction.un('drawabort', this.emitDrawAbortEvent);
32
- this.interaction = null;
33
- }
34
- addDrawInteraction() {
35
- if (undefined !== this.map) {
36
- let opt = {
37
- type: this.type,
38
- stopClick: true
39
- };
40
- if (this.style) {
41
- opt.style = this.style;
42
- }
43
- this.interaction = new Draw(opt);
44
- this.interaction.on('change', this.emitChangeEvent);
45
- this.interaction.on('drawstart', this.emitDrawStartEvent);
46
- this.interaction.on('drawend', this.emitDrawEndEvent);
47
- this.interaction.on('drawabort', this.emitDrawAbortEvent);
48
- this.map.addInteraction(this.interaction);
49
- this.changeDetectorRef.detectChanges();
50
- }
51
- }
52
- }
53
- InteractionDrawComponent.decorators = [
54
- { type: Component, args: [{
55
- selector: 'ol-map > ol-draw',
56
- template: '<ng-content></ng-content>',
57
- changeDetection: ChangeDetectionStrategy.OnPush
58
- },] }
59
- ];
60
- InteractionDrawComponent.ctorParameters = () => [
61
- { type: ChangeDetectorRef },
62
- { type: MapComponent }
63
- ];
64
- InteractionDrawComponent.propDecorators = {
65
- type: [{ type: Input }],
66
- style: [{ type: Input }],
67
- change: [{ type: Output }],
68
- drawStart: [{ type: Output }],
69
- drawEnd: [{ type: Output }],
70
- drawAbort: [{ type: Output }]
71
- };
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb24tZHJhdy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9mYi1vcGVubGF5ZXJzL3NyYy9saWIvaW50ZXJhY3Rpb25zL2ludGVyYWN0aW9uLWRyYXcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFVLEtBQUssRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFMUgsT0FBTyxZQUFZLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3RDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQU9oRCxNQUFNLE9BQU8sd0JBQXdCO0lBR25DLFlBQXNCLGlCQUFvQyxFQUNwQyxZQUEwQjtRQUQxQixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ3BDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBSXZDLFNBQUksR0FBZ0IsWUFBWSxDQUFDLFdBQVcsQ0FBQztRQUc1QyxXQUFNLEdBQTJCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDcEQsY0FBUyxHQUEyQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3ZELFlBQU8sR0FBMkIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNyRCxjQUFTLEdBQTJCLElBQUksWUFBWSxFQUFFLENBQUM7UUFzQ2pFLGlCQUFpQjtRQUNULG9CQUFlLEdBQUcsQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNoRSx1QkFBa0IsR0FBRyxDQUFDLEtBQWdCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RFLHFCQUFnQixHQUFHLENBQUMsS0FBZ0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDbEUsdUJBQWtCLEdBQUcsQ0FBQyxLQUFnQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQW5ENUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFhRCxRQUFRLEtBQUssQ0FBQztJQUVkLGVBQWU7UUFDYixJQUFJLENBQUMsR0FBRyxHQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxXQUFXLEdBQUUsSUFBSSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxTQUFTLEtBQUssSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUMxQixJQUFJLEdBQUcsR0FBTztnQkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsU0FBUyxFQUFFLElBQUk7YUFDaEIsQ0FBQTtZQUNELElBQUcsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFBRSxHQUFHLENBQUMsS0FBSyxHQUFFLElBQUksQ0FBQyxLQUFLLENBQUE7YUFBRTtZQUN4QyxJQUFJLENBQUMsV0FBVyxHQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2hDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1lBQzFELElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN4QztJQUNILENBQUM7OztZQXZERixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsUUFBUSxFQUFFLDJCQUEyQjtnQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7OztZQVpPLGlCQUFpQjtZQU1oQixZQUFZOzs7bUJBZWxCLEtBQUs7b0JBQ0wsS0FBSztxQkFFTCxNQUFNO3dCQUNOLE1BQU07c0JBQ04sTUFBTTt3QkFDTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT3V0cHV0LCBPbkluaXQsIElucHV0LCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hcCB9IGZyb20gJ29sJztcbmltcG9ydCBHZW9tZXRyeVR5cGUgZnJvbSAnb2wvZ2VvbS9HZW9tZXRyeVR5cGUnO1xuaW1wb3J0IHsgRHJhdyB9IGZyb20gJ29sL2ludGVyYWN0aW9uJztcbmltcG9ydCB7IERyYXdFdmVudCB9IGZyb20gJ29sL2ludGVyYWN0aW9uL0RyYXcnO1xuaW1wb3J0IHsgU3R5bGUgfSBmcm9tICdvbC9zdHlsZSc7XG5pbXBvcnQgeyBNYXBDb21wb25lbnQgfSBmcm9tICcuLi9tYXAuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2wtbWFwID4gb2wtZHJhdycsXG4gIHRlbXBsYXRlOiAnPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uRHJhd0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgbWFwQ29tcG9uZW50OiBNYXBDb21wb25lbnQpIHtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGFjaCgpO1xuICB9XG5cbiAgQElucHV0KCkgdHlwZTogR2VvbWV0cnlUeXBlPSBHZW9tZXRyeVR5cGUuTElORV9TVFJJTkc7XG4gIEBJbnB1dCgpIHN0eWxlOiBTdHlsZTtcblxuICBAT3V0cHV0KCkgY2hhbmdlOiBFdmVudEVtaXR0ZXI8RHJhd0V2ZW50Pj0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZHJhd1N0YXJ0OiBFdmVudEVtaXR0ZXI8RHJhd0V2ZW50Pj0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgZHJhd0VuZDogRXZlbnRFbWl0dGVyPERyYXdFdmVudD49IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIGRyYXdBYm9ydDogRXZlbnRFbWl0dGVyPERyYXdFdmVudD49IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcml2YXRlIG1hcDogTWFwO1xuICBwcml2YXRlIGludGVyYWN0aW9uOiBEcmF3O1xuXG4gIG5nT25Jbml0KCkgeyB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMubWFwPSB0aGlzLm1hcENvbXBvbmVudC5nZXRNYXAoKTtcbiAgICB0aGlzLmFkZERyYXdJbnRlcmFjdGlvbigpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5tYXAucmVtb3ZlSW50ZXJhY3Rpb24odGhpcy5pbnRlcmFjdGlvbik7XG4gICAgdGhpcy5pbnRlcmFjdGlvbi51bignY2hhbmdlJywgdGhpcy5lbWl0Q2hhbmdlRXZlbnQpO1xuICAgIHRoaXMuaW50ZXJhY3Rpb24udW4oJ2RyYXdzdGFydCcsIHRoaXMuZW1pdERyYXdTdGFydEV2ZW50KTtcbiAgICB0aGlzLmludGVyYWN0aW9uLnVuKCdkcmF3ZW5kJywgdGhpcy5lbWl0RHJhd0VuZEV2ZW50KTtcbiAgICB0aGlzLmludGVyYWN0aW9uLnVuKCdkcmF3YWJvcnQnLCB0aGlzLmVtaXREcmF3QWJvcnRFdmVudCk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbj0gbnVsbDtcbiAgfVxuXG4gIGFkZERyYXdJbnRlcmFjdGlvbigpIHtcbiAgICBpZiAodW5kZWZpbmVkICE9PSB0aGlzLm1hcCkge1xuICAgICAgbGV0IG9wdDogYW55PSB7XG4gICAgICAgIHR5cGU6IHRoaXMudHlwZSxcbiAgICAgICAgc3RvcENsaWNrOiB0cnVlXG4gICAgICB9XG4gICAgICBpZih0aGlzLnN0eWxlKSB7IG9wdC5zdHlsZT0gdGhpcy5zdHlsZSB9XG4gICAgICB0aGlzLmludGVyYWN0aW9uPSBuZXcgRHJhdyhvcHQpO1xuICAgICAgdGhpcy5pbnRlcmFjdGlvbi5vbignY2hhbmdlJywgdGhpcy5lbWl0Q2hhbmdlRXZlbnQpO1xuICAgICAgdGhpcy5pbnRlcmFjdGlvbi5vbignZHJhd3N0YXJ0JywgdGhpcy5lbWl0RHJhd1N0YXJ0RXZlbnQpO1xuICAgICAgdGhpcy5pbnRlcmFjdGlvbi5vbignZHJhd2VuZCcsIHRoaXMuZW1pdERyYXdFbmRFdmVudCk7XG4gICAgICB0aGlzLmludGVyYWN0aW9uLm9uKCdkcmF3YWJvcnQnLCB0aGlzLmVtaXREcmF3QWJvcnRFdmVudCk7XG4gICAgICB0aGlzLm1hcC5hZGRJbnRlcmFjdGlvbih0aGlzLmludGVyYWN0aW9uKTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cbiAgfVxuXG4gIC8vICoqIGVtaXQgZXZlbnRzXG4gIHByaXZhdGUgZW1pdENoYW5nZUV2ZW50ID0gKGV2ZW50OiBEcmF3RXZlbnQpID0+IHRoaXMuY2hhbmdlLmVtaXQoZXZlbnQpO1xuICBwcml2YXRlIGVtaXREcmF3U3RhcnRFdmVudCA9IChldmVudDogRHJhd0V2ZW50KSA9PiB0aGlzLmRyYXdTdGFydC5lbWl0KGV2ZW50KTtcbiAgcHJpdmF0ZSBlbWl0RHJhd0VuZEV2ZW50ID0gKGV2ZW50OiBEcmF3RXZlbnQpID0+IHRoaXMuZHJhd0VuZC5lbWl0KGV2ZW50KTtcbiAgcHJpdmF0ZSBlbWl0RHJhd0Fib3J0RXZlbnQgPSAoZXZlbnQ6IERyYXdFdmVudCkgPT4gdGhpcy5kcmF3QWJvcnQuZW1pdChldmVudCk7XG5cbn1cbiJdfQ==
@@ -1,72 +0,0 @@
1
- import { ChangeDetectorRef, ChangeDetectionStrategy, Component, Output, Input, EventEmitter } from '@angular/core';
2
- import { Modify } from 'ol/interaction';
3
- import { MapComponent } from '../map.component';
4
- export class InteractionModifyComponent {
5
- constructor(changeDetectorRef, mapComponent) {
6
- this.changeDetectorRef = changeDetectorRef;
7
- this.mapComponent = mapComponent;
8
- this.change = new EventEmitter();
9
- this.modifyStart = new EventEmitter();
10
- this.modifyEnd = new EventEmitter();
11
- this.propertyChange = new EventEmitter();
12
- // ** emit events
13
- this.emitChangeEvent = (event) => this.change.emit(event);
14
- this.emitModifyStartEvent = (event) => this.modifyStart.emit(event);
15
- this.emitModifyEndEvent = (event) => this.modifyEnd.emit(event);
16
- this.emitPropertyChangeEvent = (event) => this.propertyChange.emit(event);
17
- this.changeDetectorRef.detach();
18
- }
19
- ngOnInit() { }
20
- ngAfterViewInit() {
21
- this.map = this.mapComponent.getMap();
22
- this.addModifyInteraction();
23
- }
24
- ngOnDestroy() {
25
- this.map.removeInteraction(this.interaction);
26
- this.interaction.un('change', this.emitChangeEvent);
27
- this.interaction.un('modifystart', this.emitModifyStartEvent);
28
- this.interaction.un('modifyend', this.emitModifyEndEvent);
29
- this.interaction.un('propertychange', this.emitPropertyChangeEvent);
30
- this.interaction = null;
31
- }
32
- addModifyInteraction() {
33
- if (undefined !== this.map) {
34
- this.interaction = new Modify({
35
- features: this.features,
36
- deleteCondition: (e) => {
37
- if (e.type == 'click' && e.originalEvent.ctrlKey) {
38
- return true;
39
- }
40
- else {
41
- return false;
42
- }
43
- }
44
- });
45
- this.interaction.on('change', this.emitChangeEvent);
46
- this.interaction.on('modifystart', this.emitModifyStartEvent);
47
- this.interaction.on('modifyend', this.emitModifyEndEvent);
48
- this.interaction.on('propertychange', this.emitPropertyChangeEvent);
49
- this.map.addInteraction(this.interaction);
50
- this.changeDetectorRef.detectChanges();
51
- }
52
- }
53
- }
54
- InteractionModifyComponent.decorators = [
55
- { type: Component, args: [{
56
- selector: 'ol-map > ol-modify',
57
- template: '<ng-content></ng-content>',
58
- changeDetection: ChangeDetectionStrategy.OnPush
59
- },] }
60
- ];
61
- InteractionModifyComponent.ctorParameters = () => [
62
- { type: ChangeDetectorRef },
63
- { type: MapComponent }
64
- ];
65
- InteractionModifyComponent.propDecorators = {
66
- features: [{ type: Input }],
67
- change: [{ type: Output }],
68
- modifyStart: [{ type: Output }],
69
- modifyEnd: [{ type: Output }],
70
- propertyChange: [{ type: Output }]
71
- };
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb24tbW9kaWZ5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiLW9wZW5sYXllcnMvc3JjL2xpYi9pbnRlcmFjdGlvbnMvaW50ZXJhY3Rpb24tbW9kaWZ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsaUJBQWlCLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxLQUFLLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRzFILE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV4QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPaEQsTUFBTSxPQUFPLDBCQUEwQjtJQUVyQyxZQUFzQixpQkFBb0MsRUFDcEMsWUFBMEI7UUFEMUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQU10QyxXQUFNLEdBQTZCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsZ0JBQVcsR0FBNkIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMzRCxjQUFTLEdBQTZCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDekQsbUJBQWMsR0FBNkIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQXVDeEUsaUJBQWlCO1FBRVQsb0JBQWUsR0FBRyxDQUFDLEtBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xFLHlCQUFvQixHQUFHLENBQUMsS0FBa0IsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUUsdUJBQWtCLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4RSw0QkFBdUIsR0FBRyxDQUFDLEtBQWtCLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBcER4RixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQVlELFFBQVEsS0FBSyxDQUFDO0lBRWQsZUFBZTtRQUNiLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsV0FBVyxHQUFFLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRUQsb0JBQW9CO1FBQ2xCLElBQUksU0FBUyxLQUFLLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDMUIsSUFBSSxDQUFDLFdBQVcsR0FBRSxJQUFJLE1BQU0sQ0FBQztnQkFDM0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO2dCQUN2QixlQUFlLEVBQUUsQ0FBQyxDQUFLLEVBQUMsRUFBRTtvQkFDeEIsSUFBRyxDQUFDLENBQUMsSUFBSSxJQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRTt3QkFBRSxPQUFRLElBQUksQ0FBQTtxQkFBRTt5QkFDMUQ7d0JBQUUsT0FBTyxLQUFLLENBQUE7cUJBQUU7Z0JBQ3ZCLENBQUM7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3BELElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7WUFDMUQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQzFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztTQUN4QztJQUNILENBQUM7OztZQXRERixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsUUFBUSxFQUFFLDJCQUEyQjtnQkFDckMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7OztZQVhPLGlCQUFpQjtZQUtoQixZQUFZOzs7dUJBY2xCLEtBQUs7cUJBRUwsTUFBTTswQkFDTixNQUFNO3dCQUNOLE1BQU07NkJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q2hhbmdlRGV0ZWN0b3JSZWYsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIE91dHB1dCwgT25Jbml0LCBJbnB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXAsIEZlYXR1cmUsIENvbGxlY3Rpb24sIE1hcEJyb3dzZXJFdmVudCB9IGZyb20gJ29sJztcbmltcG9ydCB7IEdlb21ldHJ5IH0gZnJvbSAnb2wvZ2VvbSc7XG5pbXBvcnQgeyBNb2RpZnkgfSBmcm9tICdvbC9pbnRlcmFjdGlvbic7XG5pbXBvcnQgeyBNb2RpZnlFdmVudCB9IGZyb20gJ29sL2ludGVyYWN0aW9uL01vZGlmeSc7XG5pbXBvcnQgeyBNYXBDb21wb25lbnQgfSBmcm9tICcuLi9tYXAuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2wtbWFwID4gb2wtbW9kaWZ5JyxcbiAgdGVtcGxhdGU6ICc8bmctY29udGVudD48L25nLWNvbnRlbnQ+JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgSW50ZXJhY3Rpb25Nb2RpZnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgIHByb3RlY3RlZCBtYXBDb21wb25lbnQ6IE1hcENvbXBvbmVudCkge1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0YWNoKCk7XG4gIH1cblxuICBASW5wdXQoKSBmZWF0dXJlczogQ29sbGVjdGlvbjxGZWF0dXJlPEdlb21ldHJ5Pj47XG5cbiAgQE91dHB1dCgpIGNoYW5nZTogRXZlbnRFbWl0dGVyPE1vZGlmeUV2ZW50Pj0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgbW9kaWZ5U3RhcnQ6IEV2ZW50RW1pdHRlcjxNb2RpZnlFdmVudD49IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIG1vZGlmeUVuZDogRXZlbnRFbWl0dGVyPE1vZGlmeUV2ZW50Pj0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHJvcGVydHlDaGFuZ2U6IEV2ZW50RW1pdHRlcjxNb2RpZnlFdmVudD49IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBwcml2YXRlIG1hcDogTWFwO1xuICBwcml2YXRlIGludGVyYWN0aW9uOiBNb2RpZnk7XG5cbiAgbmdPbkluaXQoKSB7IH1cblxuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5tYXAgPSB0aGlzLm1hcENvbXBvbmVudC5nZXRNYXAoKTtcbiAgICB0aGlzLmFkZE1vZGlmeUludGVyYWN0aW9uKCk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLm1hcC5yZW1vdmVJbnRlcmFjdGlvbih0aGlzLmludGVyYWN0aW9uKTtcbiAgICB0aGlzLmludGVyYWN0aW9uLnVuKCdjaGFuZ2UnLCB0aGlzLmVtaXRDaGFuZ2VFdmVudCk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbi51bignbW9kaWZ5c3RhcnQnLCB0aGlzLmVtaXRNb2RpZnlTdGFydEV2ZW50KTtcbiAgICB0aGlzLmludGVyYWN0aW9uLnVuKCdtb2RpZnllbmQnLCB0aGlzLmVtaXRNb2RpZnlFbmRFdmVudCk7XG4gICAgdGhpcy5pbnRlcmFjdGlvbi51bigncHJvcGVydHljaGFuZ2UnLCB0aGlzLmVtaXRQcm9wZXJ0eUNoYW5nZUV2ZW50KTtcbiAgICB0aGlzLmludGVyYWN0aW9uPSBudWxsO1xuICB9XG5cbiAgYWRkTW9kaWZ5SW50ZXJhY3Rpb24oKSB7XG4gICAgaWYgKHVuZGVmaW5lZCAhPT0gdGhpcy5tYXApIHtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb249IG5ldyBNb2RpZnkoe1xuICAgICAgICBmZWF0dXJlczogdGhpcy5mZWF0dXJlcyxcbiAgICAgICAgZGVsZXRlQ29uZGl0aW9uOiAoZTphbnkpPT4ge1xuICAgICAgICAgIGlmKGUudHlwZT09J2NsaWNrJyAmJiBlLm9yaWdpbmFsRXZlbnQuY3RybEtleSkgeyByZXR1cm4gIHRydWUgfVxuICAgICAgICAgIGVsc2UgeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb24ub24oJ2NoYW5nZScsIHRoaXMuZW1pdENoYW5nZUV2ZW50KTtcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb24ub24oJ21vZGlmeXN0YXJ0JywgdGhpcy5lbWl0TW9kaWZ5U3RhcnRFdmVudCk7XG4gICAgICB0aGlzLmludGVyYWN0aW9uLm9uKCdtb2RpZnllbmQnLCB0aGlzLmVtaXRNb2RpZnlFbmRFdmVudCk7XG4gICAgICB0aGlzLmludGVyYWN0aW9uLm9uKCdwcm9wZXJ0eWNoYW5nZScsIHRoaXMuZW1pdFByb3BlcnR5Q2hhbmdlRXZlbnQpO1xuICAgICAgdGhpcy5tYXAuYWRkSW50ZXJhY3Rpb24odGhpcy5pbnRlcmFjdGlvbik7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG4gIH1cblxuICAvLyAqKiBlbWl0IGV2ZW50c1xuICBcbiAgcHJpdmF0ZSBlbWl0Q2hhbmdlRXZlbnQgPSAoZXZlbnQ6IE1vZGlmeUV2ZW50KSA9PiB0aGlzLmNoYW5nZS5lbWl0KGV2ZW50KTtcbiAgcHJpdmF0ZSBlbWl0TW9kaWZ5U3RhcnRFdmVudCA9IChldmVudDogTW9kaWZ5RXZlbnQpID0+IHRoaXMubW9kaWZ5U3RhcnQuZW1pdChldmVudCk7XG4gIHByaXZhdGUgZW1pdE1vZGlmeUVuZEV2ZW50ID0gKGV2ZW50OiBNb2RpZnlFdmVudCkgPT4gdGhpcy5tb2RpZnlFbmQuZW1pdChldmVudCk7XG4gIHByaXZhdGUgZW1pdFByb3BlcnR5Q2hhbmdlRXZlbnQgPSAoZXZlbnQ6IE1vZGlmeUV2ZW50KSA9PiB0aGlzLnByb3BlcnR5Q2hhbmdlLmVtaXQoZXZlbnQpO1xuXG59XG4iXX0=
@@ -1,61 +0,0 @@
1
- import { ChangeDetectorRef, Directive, Input } from '@angular/core';
2
- import { DoubleClickZoom, DragPan, DragRotate, DragZoom, KeyboardPan, KeyboardZoom, MouseWheelZoom, PinchZoom } from 'ol/interaction';
3
- import { MapComponent } from './map.component';
4
- export class InteractionsDirective {
5
- constructor(changeDetectorRef, mapComponent) {
6
- this.changeDetectorRef = changeDetectorRef;
7
- this.mapComponent = mapComponent;
8
- this.interactions = [];
9
- this.interactionList = {
10
- dragpan: DragPan,
11
- dragrotate: DragRotate,
12
- dragzoom: DragZoom,
13
- doubleclickzoom: DoubleClickZoom,
14
- keyboardpan: KeyboardPan,
15
- keyboardzoom: KeyboardZoom,
16
- mousewheelzoom: MouseWheelZoom,
17
- pinchzoom: PinchZoom
18
- };
19
- this.changeDetectorRef.detach();
20
- }
21
- set olInteractions(value) {
22
- this.interactions = value;
23
- this.setInteractions();
24
- }
25
- ngOnInit() {
26
- this.setInteractions();
27
- }
28
- setInteractions() {
29
- const map = this.mapComponent.getMap();
30
- if (undefined !== map) {
31
- map.getInteractions().clear();
32
- if (!this.interactions || this.interactions.length < 0)
33
- return;
34
- for (const config of this.interactions) {
35
- this.addInteraction(map, config);
36
- }
37
- this.changeDetectorRef.detectChanges();
38
- }
39
- }
40
- addInteraction(map, controlConfig) {
41
- if (!this.interactionList[controlConfig.name]) {
42
- console.error(`Unknown interaction ${controlConfig.name}`);
43
- return;
44
- }
45
- const newInteraction = new this.interactionList[controlConfig.name](controlConfig.options);
46
- map.addInteraction(newInteraction);
47
- }
48
- }
49
- InteractionsDirective.decorators = [
50
- { type: Directive, args: [{
51
- selector: 'ol-map > [olInteractions]'
52
- },] }
53
- ];
54
- InteractionsDirective.ctorParameters = () => [
55
- { type: ChangeDetectorRef },
56
- { type: MapComponent }
57
- ];
58
- InteractionsDirective.propDecorators = {
59
- olInteractions: [{ type: Input }]
60
- };
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJhY3Rpb25zLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2ZiLW9wZW5sYXllcnMvc3JjL2xpYi9pbnRlcmFjdGlvbnMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFTLE1BQU0sZUFBZSxDQUFDO0FBQzFFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsT0FBTyxFQUNQLFVBQVUsRUFDVixRQUFRLEVBQ1IsV0FBVyxFQUNYLFlBQVksRUFDWixjQUFjLEVBQ2QsU0FBUyxFQUNWLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBSzdDLE1BQU0sT0FBTyxxQkFBcUI7SUFjaEMsWUFBc0IsaUJBQW9DLEVBQ3BDLFlBQTBCO1FBRDFCLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDcEMsaUJBQVksR0FBWixZQUFZLENBQWM7UUFieEMsaUJBQVksR0FBRyxFQUFFLENBQUM7UUFDVCxvQkFBZSxHQUFHO1lBQ2pDLE9BQU8sRUFBRSxPQUFPO1lBQ2hCLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLGVBQWUsRUFBRSxlQUFlO1lBQ2hDLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLFlBQVksRUFBRSxZQUFZO1lBQzFCLGNBQWMsRUFBRSxjQUFjO1lBQzlCLFNBQVMsRUFBRSxTQUFTO1NBQ3JCLENBQUM7UUFJQSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQ0ksY0FBYyxDQUFDLEtBQVk7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDMUIsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN2QyxJQUFJLFNBQVMsS0FBSyxHQUFHLEVBQUU7WUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLENBQUM7Z0JBQUUsT0FBTztZQUMvRCxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7Z0JBQ3RDLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO2FBQ2xDO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxDQUFDO1NBQ3hDO0lBQ0gsQ0FBQztJQUVPLGNBQWMsQ0FBQyxHQUFHLEVBQUUsYUFBYTtRQUN2QyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDN0MsT0FBTyxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsYUFBYSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDM0QsT0FBTztTQUNSO1FBQ0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0YsR0FBRyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNyQyxDQUFDOzs7WUFuREYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwyQkFBMkI7YUFDdEM7OztZQWZPLGlCQUFpQjtZQVdqQixZQUFZOzs7NkJBd0JqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbnB1dCwgT25Jbml0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIERvdWJsZUNsaWNrWm9vbSxcbiAgRHJhZ1BhbixcbiAgRHJhZ1JvdGF0ZSxcbiAgRHJhZ1pvb20sXG4gIEtleWJvYXJkUGFuLFxuICBLZXlib2FyZFpvb20sXG4gIE1vdXNlV2hlZWxab29tLFxuICBQaW5jaFpvb21cbn0gZnJvbSAnb2wvaW50ZXJhY3Rpb24nO1xuaW1wb3J0IHtNYXBDb21wb25lbnR9IGZyb20gJy4vbWFwLmNvbXBvbmVudCc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ29sLW1hcCA+IFtvbEludGVyYWN0aW9uc10nXG59KVxuZXhwb3J0IGNsYXNzIEludGVyYWN0aW9uc0RpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHJpdmF0ZSBpbnRlcmFjdGlvbnMgPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbnRlcmFjdGlvbkxpc3QgPSB7XG4gICAgZHJhZ3BhbjogRHJhZ1BhbixcbiAgICBkcmFncm90YXRlOiBEcmFnUm90YXRlLFxuICAgIGRyYWd6b29tOiBEcmFnWm9vbSxcbiAgICBkb3VibGVjbGlja3pvb206IERvdWJsZUNsaWNrWm9vbSxcbiAgICBrZXlib2FyZHBhbjogS2V5Ym9hcmRQYW4sXG4gICAga2V5Ym9hcmR6b29tOiBLZXlib2FyZFpvb20sXG4gICAgbW91c2V3aGVlbHpvb206IE1vdXNlV2hlZWxab29tLFxuICAgIHBpbmNoem9vbTogUGluY2hab29tXG4gIH07XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgICAgICAgcHJvdGVjdGVkIG1hcENvbXBvbmVudDogTWFwQ29tcG9uZW50KSB7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRhY2goKTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCBvbEludGVyYWN0aW9ucyh2YWx1ZTogYW55W10pIHtcbiAgICB0aGlzLmludGVyYWN0aW9ucyA9IHZhbHVlO1xuICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25zKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldEludGVyYWN0aW9ucygpO1xuICB9XG5cbiAgc2V0SW50ZXJhY3Rpb25zKCkge1xuICAgIGNvbnN0IG1hcCA9IHRoaXMubWFwQ29tcG9uZW50LmdldE1hcCgpO1xuICAgIGlmICh1bmRlZmluZWQgIT09IG1hcCkge1xuICAgICAgbWFwLmdldEludGVyYWN0aW9ucygpLmNsZWFyKCk7XG4gICAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25zIHx8IHRoaXMuaW50ZXJhY3Rpb25zLmxlbmd0aCA8IDApIHJldHVybjtcbiAgICAgIGZvciAoY29uc3QgY29uZmlnIG9mIHRoaXMuaW50ZXJhY3Rpb25zKSB7XG4gICAgICAgIHRoaXMuYWRkSW50ZXJhY3Rpb24obWFwLCBjb25maWcpO1xuICAgICAgfVxuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRJbnRlcmFjdGlvbihtYXAsIGNvbnRyb2xDb25maWcpIHtcbiAgICBpZiAoIXRoaXMuaW50ZXJhY3Rpb25MaXN0W2NvbnRyb2xDb25maWcubmFtZV0pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYFVua25vd24gaW50ZXJhY3Rpb24gJHtjb250cm9sQ29uZmlnLm5hbWV9YCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG5ld0ludGVyYWN0aW9uID0gbmV3IHRoaXMuaW50ZXJhY3Rpb25MaXN0W2NvbnRyb2xDb25maWcubmFtZV0oY29udHJvbENvbmZpZy5vcHRpb25zKTtcbiAgICBtYXAuYWRkSW50ZXJhY3Rpb24obmV3SW50ZXJhY3Rpb24pO1xuICB9XG5cbn1cbiJdfQ==
@@ -1,157 +0,0 @@
1
- import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, Output } from '@angular/core';
2
- import ImageLayer from 'ol/layer/Image';
3
- import TileLayer from 'ol/layer/Tile';
4
- import VectorTileLayer from 'ol/layer/VectorTile';
5
- // import VectorImageLayer from 'ol/layer/VectorImage';
6
- import VectorTileSource from 'ol/source/VectorTile';
7
- import { Cluster, ImageWMS, OSM, TileImage, TileWMS, WMTS, XYZ } from 'ol/source';
8
- import VectorLayer from 'ol/layer/Vector';
9
- import VectorSource from 'ol/source/Vector';
10
- import { MapComponent } from './map.component';
11
- import { LayerType, SourceType } from './models';
12
- import { osmLayer, osmSource } from './util';
13
- import { AsyncSubject } from 'rxjs';
14
- export class LayerComponent {
15
- constructor(changeDetectorRef, mapComponent) {
16
- this.changeDetectorRef = changeDetectorRef;
17
- this.mapComponent = mapComponent;
18
- /**
19
- * This event is triggered after the layer is initialized
20
- * Use this to have access to the layer and some helper functions
21
- */
22
- this.layerReady = new AsyncSubject(); // AsyncSubject will only store the last value, and only publish it when the sequence is completed
23
- this.changeDetectorRef.detach();
24
- }
25
- ngOnInit() {
26
- switch (this.layerType) {
27
- case LayerType.IMAGE:
28
- this.source = new ImageWMS(this.sourceOptions);
29
- this.layer = new ImageLayer(Object.assign(this, Object.assign({}, this.properties)));
30
- break;
31
- case LayerType.TILE:
32
- this.source = this.getTileSource(this.sourceOptions);
33
- this.layer = new TileLayer(Object.assign(this, Object.assign({}, this.properties)));
34
- break;
35
- case LayerType.VECTOR_TILE:
36
- this.source = new VectorTileSource(this.sourceOptions);
37
- this.layer = new VectorTileLayer(Object.assign(this, Object.assign({}, this.properties)));
38
- break;
39
- case LayerType.VECTOR:
40
- if (this.sourceOptions.sourceType === SourceType.CLUSTER) {
41
- this.source = new Cluster(this.sourceOptions);
42
- this.layer = new VectorLayer(Object.assign(this, Object.assign({}, this.properties)));
43
- }
44
- else {
45
- this.source = new VectorSource(this.sourceOptions);
46
- this.layer = new VectorLayer(Object.assign(this, Object.assign({}, this.properties)));
47
- }
48
- break;
49
- default:
50
- this.layer = osmLayer();
51
- break;
52
- }
53
- const map = this.mapComponent.getMap();
54
- if (this.layer && map) {
55
- map.addLayer(this.layer);
56
- map.render();
57
- this.layerReady.next(this.layer);
58
- this.layerReady.complete();
59
- }
60
- }
61
- ngOnChanges(changes) {
62
- if (this.layer) {
63
- const properties = {};
64
- for (const key in changes) {
65
- properties[key] = changes[key].currentValue;
66
- }
67
- this.layer.setProperties(properties, false);
68
- }
69
- }
70
- ngOnDestroy() {
71
- const map = this.mapComponent.getMap();
72
- if (this.layer && map) {
73
- map.removeLayer(this.layer);
74
- map.render();
75
- this.layer = null;
76
- }
77
- }
78
- getLayer() {
79
- return this.layer;
80
- }
81
- getMap() {
82
- return this.mapComponent.getMap();
83
- }
84
- getSource() {
85
- let olSource = this.layer.getSource();
86
- if (olSource instanceof Cluster) {
87
- olSource = olSource.getSource();
88
- }
89
- return olSource;
90
- }
91
- getUrl() {
92
- if (this.source instanceof ImageWMS) {
93
- return this.source.getUrl();
94
- }
95
- if (this.source instanceof WMTS) {
96
- return this.source.getUrls()[0];
97
- }
98
- if (this.source instanceof TileWMS) {
99
- return this.source.getUrls()[0];
100
- }
101
- else {
102
- return '';
103
- }
104
- }
105
- updateParams(name, value) {
106
- const params = this.source.getParams();
107
- if (name && value) {
108
- params[name.toUpperCase()] = value;
109
- }
110
- params['T'] = new Date().getMilliseconds();
111
- this.source.updateParams(params); // {'TIME': startDate.toISOString()}
112
- }
113
- getTileSource(sourceOptions) {
114
- switch (sourceOptions.sourceType) {
115
- case SourceType.IMAGEWMS:
116
- return new ImageWMS(sourceOptions);
117
- case SourceType.OSM:
118
- return new OSM(sourceOptions);
119
- case SourceType.TILEWMS:
120
- return new TileWMS(sourceOptions);
121
- case SourceType.TILEIMAGE:
122
- return new TileImage(sourceOptions);
123
- case SourceType.WMTS:
124
- return new WMTS(sourceOptions);
125
- case SourceType.XYZ:
126
- return new XYZ(sourceOptions);
127
- default:
128
- return osmSource();
129
- }
130
- }
131
- }
132
- LayerComponent.decorators = [
133
- { type: Component, args: [{
134
- selector: 'ol-map > ol-layer',
135
- template: '<ng-content></ng-content>',
136
- changeDetection: ChangeDetectionStrategy.OnPush
137
- },] }
138
- ];
139
- LayerComponent.ctorParameters = () => [
140
- { type: ChangeDetectorRef },
141
- { type: MapComponent }
142
- ];
143
- LayerComponent.propDecorators = {
144
- layerReady: [{ type: Output }],
145
- layerType: [{ type: Input }],
146
- sourceType: [{ type: Input }],
147
- opacity: [{ type: Input }],
148
- visible: [{ type: Input }],
149
- extent: [{ type: Input }],
150
- zIndex: [{ type: Input }],
151
- minResolution: [{ type: Input }],
152
- maxResolution: [{ type: Input }],
153
- sourceOptions: [{ type: Input }],
154
- style: [{ type: Input }],
155
- properties: [{ type: Input }]
156
- };
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF5ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvZmItb3BlbmxheWVycy9zcmMvbGliL2xheWVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQzFDLFNBQVMsRUFDVCxLQUFLLEVBSUwsTUFBTSxFQUVQLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sVUFBVSxNQUFNLGdCQUFnQixDQUFDO0FBQ3hDLE9BQU8sU0FBUyxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLGVBQWUsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCx1REFBdUQ7QUFDdkQsT0FBTyxnQkFBZ0IsTUFBTSxzQkFBc0IsQ0FBQztBQUNwRCxPQUFPLEVBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQVUsU0FBUyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQ3hGLE9BQU8sV0FBVyxNQUFNLGlCQUFpQixDQUFDO0FBQzFDLE9BQU8sWUFBWSxNQUFNLGtCQUFrQixDQUFDO0FBRTVDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM3QyxPQUFPLEVBQVMsU0FBUyxFQUFFLFVBQVUsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLFFBQVEsQ0FBQztBQUMzQyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBT2xDLE1BQU0sT0FBTyxjQUFjO0lBdUJ6QixZQUFzQixpQkFBb0MsRUFDcEMsWUFBMEI7UUFEMUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUNwQyxpQkFBWSxHQUFaLFlBQVksQ0FBYztRQW5CaEQ7OztXQUdHO1FBQ08sZUFBVSxHQUF3QixJQUFJLFlBQVksRUFBRSxDQUFDLENBQUMsa0dBQWtHO1FBZ0JoSyxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELFFBQVE7UUFFTixRQUFRLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDdEIsS0FBSyxTQUFTLENBQUMsS0FBSztnQkFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLG9CQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RSxNQUFNO1lBQ1IsS0FBSyxTQUFTLENBQUMsSUFBSTtnQkFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksb0JBQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7Z0JBQ3RFLE1BQU07WUFDUixLQUFLLFNBQVMsQ0FBQyxXQUFXO2dCQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUN2RCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxvQkFBTSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQztnQkFDNUUsTUFBTTtZQUNSLEtBQUssU0FBUyxDQUFDLE1BQU07Z0JBQ25CLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRTtvQkFDeEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7b0JBQzlDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLG9CQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO2lCQUN6RTtxQkFBTTtvQkFDTCxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztvQkFDbkQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksb0JBQU0sSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7aUJBQ3pFO2dCQUNELE1BQU07WUFDUjtnQkFDRSxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixNQUFNO1NBQ1Q7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLEVBQUU7WUFDckIsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDekIsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7U0FDNUI7SUFFSCxDQUFDO0lBRUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNkLE1BQU0sVUFBVSxHQUE2QixFQUFFLENBQUM7WUFFaEQsS0FBSyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUU7Z0JBQ3pCLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxDQUFDO2FBQzdDO1lBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQzdDO0lBQ0gsQ0FBQztJQUVELFdBQVc7UUFDVCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxHQUFHLEVBQUU7WUFDckIsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDNUIsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7U0FDbkI7SUFDSCxDQUFDO0lBRUQsUUFBUTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsTUFBTTtRQUNKLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsU0FBUztRQUNQLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdEMsSUFBSSxRQUFRLFlBQVksT0FBTyxFQUFFO1lBQy9CLFFBQVEsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUM7U0FDakM7UUFDRCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksSUFBSSxDQUFDLE1BQU0sWUFBWSxRQUFRLEVBQUU7WUFDbkMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxZQUFZLElBQUksRUFBRTtZQUMvQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakM7UUFDRCxJQUFJLElBQUksQ0FBQyxNQUFNLFlBQVksT0FBTyxFQUFFO1lBQ2xDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNqQzthQUFNO1lBQ0wsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsSUFBYSxFQUFFLEtBQVc7UUFDckMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUN2QyxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUU7WUFDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQztTQUNwQztRQUNELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsb0NBQW9DO0lBQ3hFLENBQUM7SUFFTyxhQUFhLENBQUMsYUFBa0I7UUFFdEMsUUFBUSxhQUFhLENBQUMsVUFBVSxFQUFFO1lBQ2hDLEtBQUssVUFBVSxDQUFDLFFBQVE7Z0JBQ3RCLE9BQU8sSUFBSSxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDckMsS0FBSyxVQUFVLENBQUMsR0FBRztnQkFDakIsT0FBTyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNoQyxLQUFLLFVBQVUsQ0FBQyxPQUFPO2dCQUNyQixPQUFPLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3BDLEtBQUssVUFBVSxDQUFDLFNBQVM7Z0JBQ3ZCLE9BQU8sSUFBSSxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDdEMsS0FBSyxVQUFVLENBQUMsSUFBSTtnQkFDbEIsT0FBTyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNqQyxLQUFLLFVBQVUsQ0FBQyxHQUFHO2dCQUNqQixPQUFPLElBQUksR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2hDO2dCQUNFLE9BQU8sU0FBUyxFQUFFLENBQUM7U0FDdEI7SUFDSCxDQUFDOzs7WUFySkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLFFBQVEsRUFBRSwyQkFBMkI7Z0JBQ3JDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOzs7WUE1QjBCLGlCQUFpQjtZQW1CcEMsWUFBWTs7O3lCQW1CakIsTUFBTTt3QkFFTixLQUFLO3lCQUNMLEtBQUs7c0JBQ0wsS0FBSztzQkFDTCxLQUFLO3FCQUNMLEtBQUs7cUJBQ0wsS0FBSzs0QkFDTCxLQUFLOzRCQUNMLEtBQUs7NEJBQ0wsS0FBSztvQkFDTCxLQUFLO3lCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlc1xufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TGF5ZXJ9IGZyb20gJ29sL2xheWVyJztcbmltcG9ydCBJbWFnZUxheWVyIGZyb20gJ29sL2xheWVyL0ltYWdlJztcbmltcG9ydCBUaWxlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVGlsZSc7XG5pbXBvcnQgVmVjdG9yVGlsZUxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3RvclRpbGUnO1xuLy8gaW1wb3J0IFZlY3RvckltYWdlTGF5ZXIgZnJvbSAnb2wvbGF5ZXIvVmVjdG9ySW1hZ2UnO1xuaW1wb3J0IFZlY3RvclRpbGVTb3VyY2UgZnJvbSAnb2wvc291cmNlL1ZlY3RvclRpbGUnO1xuaW1wb3J0IHtDbHVzdGVyLCBJbWFnZVdNUywgT1NNLCBTb3VyY2UsIFRpbGVJbWFnZSwgVGlsZVdNUywgV01UUywgWFlafSBmcm9tICdvbC9zb3VyY2UnO1xuaW1wb3J0IFZlY3RvckxheWVyIGZyb20gJ29sL2xheWVyL1ZlY3Rvcic7XG5pbXBvcnQgVmVjdG9yU291cmNlIGZyb20gJ29sL3NvdXJjZS9WZWN0b3InO1xuXG5pbXBvcnQge01hcENvbXBvbmVudH0gZnJvbSAnLi9tYXAuY29tcG9uZW50JztcbmltcG9ydCB7RXh0ZW50LCBMYXllclR5cGUsIFNvdXJjZVR5cGV9IGZyb20gJy4vbW9kZWxzJztcbmltcG9ydCB7b3NtTGF5ZXIsIG9zbVNvdXJjZX0gZnJvbSAnLi91dGlsJztcbmltcG9ydCB7QXN5bmNTdWJqZWN0fSBmcm9tICdyeGpzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnb2wtbWFwID4gb2wtbGF5ZXInLFxuICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50PjwvbmctY29udGVudD4nLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBMYXllckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuXG4gIHByb3RlY3RlZCBsYXllcjogTGF5ZXI7XG4gIHB1YmxpYyBzb3VyY2U6IGFueTtcblxuICAvKipcbiAgICogVGhpcyBldmVudCBpcyB0cmlnZ2VyZWQgYWZ0ZXIgdGhlIGxheWVyIGlzIGluaXRpYWxpemVkXG4gICAqIFVzZSB0aGlzIHRvIGhhdmUgYWNjZXNzIHRvIHRoZSBsYXllciBhbmQgc29tZSBoZWxwZXIgZnVuY3Rpb25zXG4gICAqL1xuICBAT3V0cHV0KCkgbGF5ZXJSZWFkeTogQXN5bmNTdWJqZWN0PExheWVyPiA9IG5ldyBBc3luY1N1YmplY3QoKTsgLy8gQXN5bmNTdWJqZWN0IHdpbGwgb25seSBzdG9yZSB0aGUgbGFzdCB2YWx1ZSwgYW5kIG9ubHkgcHVibGlzaCBpdCB3aGVuIHRoZSBzZXF1ZW5jZSBpcyBjb21wbGV0ZWRcblxuICBASW5wdXQoKSBsYXllclR5cGU6IExheWVyVHlwZTtcbiAgQElucHV0KCkgc291cmNlVHlwZTogU291cmNlVHlwZTtcbiAgQElucHV0KCkgb3BhY2l0eTogbnVtYmVyO1xuICBASW5wdXQoKSB2aXNpYmxlOiBib29sZWFuO1xuICBASW5wdXQoKSBleHRlbnQ6IEV4dGVudDtcbiAgQElucHV0KCkgekluZGV4OiBudW1iZXI7XG4gIEBJbnB1dCgpIG1pblJlc29sdXRpb246IG51bWJlcjtcbiAgQElucHV0KCkgbWF4UmVzb2x1dGlvbjogbnVtYmVyO1xuICBASW5wdXQoKSBzb3VyY2VPcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpIHN0eWxlOiBhbnk7XG4gIEBJbnB1dCgpIHByb3BlcnRpZXM6IHsgW2luZGV4OiBzdHJpbmddOiBhbnkgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICBwcm90ZWN0ZWQgbWFwQ29tcG9uZW50OiBNYXBDb21wb25lbnQpIHtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGFjaCgpO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG5cbiAgICBzd2l0Y2ggKHRoaXMubGF5ZXJUeXBlKSB7XG4gICAgICBjYXNlIExheWVyVHlwZS5JTUFHRTpcbiAgICAgICAgdGhpcy5zb3VyY2UgPSBuZXcgSW1hZ2VXTVModGhpcy5zb3VyY2VPcHRpb25zKTtcbiAgICAgICAgdGhpcy5sYXllciA9IG5ldyBJbWFnZUxheWVyKE9iamVjdC5hc3NpZ24odGhpcywgey4uLnRoaXMucHJvcGVydGllc30pKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIExheWVyVHlwZS5USUxFOlxuICAgICAgICB0aGlzLnNvdXJjZSA9IHRoaXMuZ2V0VGlsZVNvdXJjZSh0aGlzLnNvdXJjZU9wdGlvbnMpO1xuICAgICAgICB0aGlzLmxheWVyID0gbmV3IFRpbGVMYXllcihPYmplY3QuYXNzaWduKHRoaXMsIHsuLi50aGlzLnByb3BlcnRpZXN9KSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBMYXllclR5cGUuVkVDVE9SX1RJTEU6XG4gICAgICAgIHRoaXMuc291cmNlID0gbmV3IFZlY3RvclRpbGVTb3VyY2UodGhpcy5zb3VyY2VPcHRpb25zKTtcbiAgICAgICAgdGhpcy5sYXllciA9IG5ldyBWZWN0b3JUaWxlTGF5ZXIoT2JqZWN0LmFzc2lnbih0aGlzLCB7Li4udGhpcy5wcm9wZXJ0aWVzfSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTGF5ZXJUeXBlLlZFQ1RPUjpcbiAgICAgICAgaWYgKHRoaXMuc291cmNlT3B0aW9ucy5zb3VyY2VUeXBlID09PSBTb3VyY2VUeXBlLkNMVVNURVIpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZSA9IG5ldyBDbHVzdGVyKHRoaXMuc291cmNlT3B0aW9ucyk7XG4gICAgICAgICAgdGhpcy5sYXllciA9IG5ldyBWZWN0b3JMYXllcihPYmplY3QuYXNzaWduKHRoaXMsIHsuLi50aGlzLnByb3BlcnRpZXN9KSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zb3VyY2UgPSBuZXcgVmVjdG9yU291cmNlKHRoaXMuc291cmNlT3B0aW9ucyk7XG4gICAgICAgICAgdGhpcy5sYXllciA9IG5ldyBWZWN0b3JMYXllcihPYmplY3QuYXNzaWduKHRoaXMsIHsuLi50aGlzLnByb3BlcnRpZXN9KSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLmxheWVyID0gb3NtTGF5ZXIoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwID0gdGhpcy5tYXBDb21wb25lbnQuZ2V0TWFwKCk7XG4gICAgaWYgKHRoaXMubGF5ZXIgJiYgbWFwKSB7XG4gICAgICBtYXAuYWRkTGF5ZXIodGhpcy5sYXllcik7XG4gICAgICBtYXAucmVuZGVyKCk7XG4gICAgICB0aGlzLmxheWVyUmVhZHkubmV4dCh0aGlzLmxheWVyKTtcbiAgICAgIHRoaXMubGF5ZXJSZWFkeS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmICh0aGlzLmxheWVyKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0aWVzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBrZXkgaW4gY2hhbmdlcykge1xuICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSBjaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xuICAgICAgfVxuICAgICAgdGhpcy5sYXllci5zZXRQcm9wZXJ0aWVzKHByb3BlcnRpZXMsIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBjb25zdCBtYXAgPSB0aGlzLm1hcENvbXBvbmVudC5nZXRNYXAoKTtcbiAgICBpZiAodGhpcy5sYXllciAmJiBtYXApIHtcbiAgICAgIG1hcC5yZW1vdmVMYXllcih0aGlzLmxheWVyKTtcbiAgICAgIG1hcC5yZW5kZXIoKTtcbiAgICAgIHRoaXMubGF5ZXIgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldExheWVyKCk6IExheWVyIHtcbiAgICByZXR1cm4gdGhpcy5sYXllcjtcbiAgfVxuXG4gIGdldE1hcCgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXBDb21wb25lbnQuZ2V0TWFwKCk7XG4gIH1cblxuICBnZXRTb3VyY2UoKTogU291cmNlIHtcbiAgICBsZXQgb2xTb3VyY2UgPSB0aGlzLmxheWVyLmdldFNvdXJjZSgpO1xuICAgIGlmIChvbFNvdXJjZSBpbnN0YW5jZW9mIENsdXN0ZXIpIHtcbiAgICAgIG9sU291cmNlID0gb2xTb3VyY2UuZ2V0U291cmNlKCk7XG4gICAgfVxuICAgIHJldHVybiBvbFNvdXJjZTtcbiAgfVxuXG4gIGdldFVybCgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnNvdXJjZSBpbnN0YW5jZW9mIEltYWdlV01TKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3VyY2UuZ2V0VXJsKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvdXJjZSBpbnN0YW5jZW9mIFdNVFMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS5nZXRVcmxzKClbMF07XG4gICAgfVxuICAgIGlmICh0aGlzLnNvdXJjZSBpbnN0YW5jZW9mIFRpbGVXTVMpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvdXJjZS5nZXRVcmxzKClbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cblxuICB1cGRhdGVQYXJhbXMobmFtZT86IHN0cmluZywgdmFsdWU/OiBhbnkpIHtcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLnNvdXJjZS5nZXRQYXJhbXMoKTtcbiAgICBpZiAobmFtZSAmJiB2YWx1ZSkge1xuICAgICAgcGFyYW1zW25hbWUudG9VcHBlckNhc2UoKV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcGFyYW1zWydUJ10gPSBuZXcgRGF0ZSgpLmdldE1pbGxpc2Vjb25kcygpO1xuICAgIHRoaXMuc291cmNlLnVwZGF0ZVBhcmFtcyhwYXJhbXMpOyAvLyB7J1RJTUUnOiBzdGFydERhdGUudG9JU09TdHJpbmcoKX1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGlsZVNvdXJjZShzb3VyY2VPcHRpb25zOiBhbnkpIHtcblxuICAgIHN3aXRjaCAoc291cmNlT3B0aW9ucy5zb3VyY2VUeXBlKSB7XG4gICAgICBjYXNlIFNvdXJjZVR5cGUuSU1BR0VXTVM6XG4gICAgICAgIHJldHVybiBuZXcgSW1hZ2VXTVMoc291cmNlT3B0aW9ucyk7XG4gICAgICBjYXNlIFNvdXJjZVR5cGUuT1NNOlxuICAgICAgICByZXR1cm4gbmV3IE9TTShzb3VyY2VPcHRpb25zKTtcbiAgICAgIGNhc2UgU291cmNlVHlwZS5USUxFV01TOlxuICAgICAgICByZXR1cm4gbmV3IFRpbGVXTVMoc291cmNlT3B0aW9ucyk7XG4gICAgICBjYXNlIFNvdXJjZVR5cGUuVElMRUlNQUdFOlxuICAgICAgICByZXR1cm4gbmV3IFRpbGVJbWFnZShzb3VyY2VPcHRpb25zKTtcbiAgICAgIGNhc2UgU291cmNlVHlwZS5XTVRTOlxuICAgICAgICByZXR1cm4gbmV3IFdNVFMoc291cmNlT3B0aW9ucyk7XG4gICAgICBjYXNlIFNvdXJjZVR5cGUuWFlaOlxuICAgICAgICByZXR1cm4gbmV3IFhZWihzb3VyY2VPcHRpb25zKTtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBvc21Tb3VyY2UoKTtcbiAgICB9XG4gIH1cblxufVxuIl19