@theseam/ui-common 0.3.0 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/breadcrumbs/_breadcrumbs-theme.scss +3 -0
- package/breadcrumbs/breadcrumbs/breadcrumbs.component.scss +10 -0
- package/breadcrumbs/styles/_utilities.scss +3 -0
- package/breadcrumbs/styles/_variables.scss +1 -0
- package/breadcrumbs/theseam-ui-common-breadcrumbs.metadata.json +1 -1
- package/bundles/theseam-ui-common-breadcrumbs.umd.js +2 -1
- package/bundles/theseam-ui-common-breadcrumbs.umd.js.map +1 -1
- package/bundles/theseam-ui-common-dynamic.umd.js +1 -0
- package/bundles/theseam-ui-common-dynamic.umd.js.map +1 -1
- package/bundles/theseam-ui-common-form-field.umd.js +1 -1
- package/bundles/theseam-ui-common-form-field.umd.js.map +1 -1
- package/bundles/theseam-ui-common-framework.umd.js +18 -15
- package/bundles/theseam-ui-common-framework.umd.js.map +1 -1
- package/bundles/theseam-ui-common-google-maps.umd.js +2202 -0
- package/bundles/theseam-ui-common-google-maps.umd.js.map +1 -0
- package/bundles/theseam-ui-common-menu.umd.js +1 -0
- package/bundles/theseam-ui-common-menu.umd.js.map +1 -1
- package/bundles/theseam-ui-common-modal.umd.js +21 -1
- package/bundles/theseam-ui-common-modal.umd.js.map +1 -1
- package/bundles/theseam-ui-common-utils.umd.js +610 -136
- package/bundles/theseam-ui-common-utils.umd.js.map +1 -1
- package/bundles/theseam-ui-common-widget.umd.js +4 -2
- package/bundles/theseam-ui-common-widget.umd.js.map +1 -1
- package/esm2015/breadcrumbs/breadcrumbs/breadcrumbs.component.js +4 -3
- package/esm2015/dynamic/evaluators/jexl-evaluator/jexl-evaluator.js +2 -1
- package/esm2015/form-field/input.directive.js +2 -2
- package/esm2015/framework/base-layout/base-layout.component.js +3 -3
- package/esm2015/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.js +5 -5
- package/esm2015/framework/top-bar/top-bar-title/top-bar-title.component.js +4 -3
- package/esm2015/framework/top-bar/top-bar.component.js +10 -8
- package/esm2015/google-maps/google-maps/google-maps.component.js +261 -0
- package/esm2015/google-maps/google-maps-contextmenu.js +113 -0
- package/esm2015/google-maps/google-maps-controls.service.js +70 -0
- package/esm2015/google-maps/google-maps-feature-helpers.js +177 -0
- package/esm2015/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.js +195 -0
- package/esm2015/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.directive.js +163 -0
- package/esm2015/google-maps/google-maps-recenter-button-control/google-maps-recenter-button-control.component.js +57 -0
- package/esm2015/google-maps/google-maps-upload-button-control/google-maps-upload-button-control.component.js +119 -0
- package/esm2015/google-maps/google-maps.module.js +45 -0
- package/esm2015/google-maps/google-maps.service.js +344 -0
- package/esm2015/google-maps/map-control.component.js +65 -0
- package/esm2015/google-maps/map-controls-service.js +4 -0
- package/esm2015/google-maps/map-file-drop/map-file-drop.component.js +135 -0
- package/esm2015/google-maps/map-value-manager.service.js +46 -0
- package/esm2015/google-maps/public-api.js +14 -0
- package/esm2015/google-maps/theseam-ui-common-google-maps.js +6 -0
- package/esm2015/menu/menu-toggle.directive.js +2 -1
- package/esm2015/modal/modal-ref.js +22 -2
- package/esm2015/utils/geo-json/coerce-feature-collection.js +44 -0
- package/esm2015/utils/geo-json/geo-json-to-area.js +11 -0
- package/esm2015/utils/geo-json/is-feature-collection.validator.js +21 -0
- package/esm2015/utils/geo-json/is-only-geometry-types.js +23 -0
- package/esm2015/utils/geo-json/is-only-geometry-types.validator.js +32 -0
- package/esm2015/utils/geo-json/merge-polygons.js +35 -0
- package/esm2015/utils/geo-json/no-inner-rings.validator.js +63 -0
- package/esm2015/utils/geo-json/no-kinks.validator.js +39 -0
- package/esm2015/utils/geo-json/read-geo-file.js +99 -0
- package/esm2015/utils/geo-json/split-multi-polygons.js +29 -0
- package/esm2015/utils/is-null-or-undefined.js +1 -1
- package/esm2015/utils/public-api.js +11 -1
- package/esm2015/widget/widget/widget.component.js +1 -1
- package/esm2015/widget/widget-content-components/widget-tile/widget-tile.component.js +4 -2
- package/fesm2015/theseam-ui-common-breadcrumbs.js +3 -2
- package/fesm2015/theseam-ui-common-breadcrumbs.js.map +1 -1
- package/fesm2015/theseam-ui-common-dynamic.js +1 -0
- package/fesm2015/theseam-ui-common-dynamic.js.map +1 -1
- package/fesm2015/theseam-ui-common-form-field.js +1 -1
- package/fesm2015/theseam-ui-common-form-field.js.map +1 -1
- package/fesm2015/theseam-ui-common-framework.js +15 -12
- package/fesm2015/theseam-ui-common-framework.js.map +1 -1
- package/fesm2015/theseam-ui-common-google-maps.js +1729 -0
- package/fesm2015/theseam-ui-common-google-maps.js.map +1 -0
- package/fesm2015/theseam-ui-common-menu.js +1 -0
- package/fesm2015/theseam-ui-common-menu.js.map +1 -1
- package/fesm2015/theseam-ui-common-modal.js +21 -1
- package/fesm2015/theseam-ui-common-modal.js.map +1 -1
- package/fesm2015/theseam-ui-common-utils.js +477 -94
- package/fesm2015/theseam-ui-common-utils.js.map +1 -1
- package/fesm2015/theseam-ui-common-widget.js +4 -2
- package/fesm2015/theseam-ui-common-widget.js.map +1 -1
- package/form-field/theseam-ui-common-form-field.metadata.json +1 -1
- package/framework/base-layout/base-layout.component.scss +14 -0
- package/framework/base-layout/styles/_variables.scss +14 -0
- package/framework/theseam-ui-common-framework.metadata.json +1 -1
- package/framework/top-bar/_top-bar-theme.scss +5 -0
- package/framework/top-bar/styles/_utilities.scss +3 -0
- package/framework/top-bar/styles/_variables.scss +18 -0
- package/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.d.ts +3 -1
- package/framework/top-bar/top-bar-menu-button/top-bar-menu-button.component.scss +15 -0
- package/framework/top-bar/top-bar-title/top-bar-title.component.scss +6 -0
- package/framework/top-bar/top-bar.component.d.ts +3 -0
- package/framework/top-bar/top-bar.component.scss +39 -0
- package/google-maps/google-maps/google-maps.component.d.ts +89 -0
- package/google-maps/google-maps-contextmenu.d.ts +15 -0
- package/google-maps/google-maps-controls.service.d.ts +23 -0
- package/google-maps/google-maps-feature-helpers.d.ts +37 -0
- package/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.component.d.ts +104 -0
- package/google-maps/google-maps-places-autocomplete/google-maps-places-autocomplete.directive.d.ts +80 -0
- package/google-maps/google-maps-recenter-button-control/google-maps-recenter-button-control.component.d.ts +21 -0
- package/google-maps/google-maps-upload-button-control/google-maps-upload-button-control.component.d.ts +34 -0
- package/google-maps/google-maps.module.d.ts +2 -0
- package/google-maps/google-maps.service.d.ts +53 -0
- package/google-maps/map-control.component.d.ts +20 -0
- package/google-maps/map-controls-service.d.ts +13 -0
- package/google-maps/map-file-drop/map-file-drop.component.d.ts +34 -0
- package/google-maps/map-value-manager.service.d.ts +18 -0
- package/google-maps/package.json +11 -0
- package/google-maps/public-api.d.ts +13 -0
- package/google-maps/theseam-ui-common-google-maps.d.ts +5 -0
- package/google-maps/theseam-ui-common-google-maps.metadata.json +1 -0
- package/modal/modal-ref.d.ts +1 -0
- package/modal/theseam-ui-common-modal.metadata.json +1 -1
- package/package.json +17 -10
- package/utils/geo-json/coerce-feature-collection.d.ts +2 -0
- package/utils/geo-json/geo-json-to-area.d.ts +6 -0
- package/utils/geo-json/is-feature-collection.validator.d.ts +3 -0
- package/utils/geo-json/is-only-geometry-types.d.ts +5 -0
- package/utils/geo-json/is-only-geometry-types.validator.d.ts +4 -0
- package/utils/geo-json/merge-polygons.d.ts +9 -0
- package/utils/geo-json/no-inner-rings.validator.d.ts +10 -0
- package/utils/geo-json/no-kinks.validator.d.ts +3 -0
- package/utils/geo-json/read-geo-file.d.ts +7 -0
- package/utils/geo-json/split-multi-polygons.d.ts +8 -0
- package/utils/is-null-or-undefined.d.ts +1 -1
- package/utils/public-api.d.ts +10 -0
- package/utils/theseam-ui-common-utils.metadata.json +1 -1
- package/widget/styles/_variables.scss +3 -0
- package/widget/theseam-ui-common-widget.metadata.json +1 -1
- package/widget/widget/widget.component.scss +2 -0
- package/widget/widget-content-components/widget-tile/widget-tile.component.d.ts +2 -0
- package/widget/widget-content-components/widget-tile/widget-tile.component.scss +1 -1
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { FocusMonitor } from '@angular/cdk/a11y';
|
|
3
|
+
import { coerceNumberProperty } from '@angular/cdk/coercion';
|
|
4
|
+
import { ChangeDetectionStrategy, Component, ElementRef, EventEmitter, forwardRef, HostBinding, Input, Output, ViewChild, } from '@angular/core';
|
|
5
|
+
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
6
|
+
import { fromEvent, Subject } from 'rxjs';
|
|
7
|
+
import { takeUntil, tap } from 'rxjs/operators';
|
|
8
|
+
import { AgmMap } from '@agm/core';
|
|
9
|
+
import { faCrosshairs, faFileImport } from '@fortawesome/free-solid-svg-icons';
|
|
10
|
+
import { InputBoolean, InputNumber, mixinDisabled } from '@theseam/ui-common/core';
|
|
11
|
+
import { MenuComponent } from '@theseam/ui-common/menu';
|
|
12
|
+
import { GoogleMapsControlsService } from '../google-maps-controls.service';
|
|
13
|
+
import { TheSeamGoogleMapsRecenterButtonControlComponent } from '../google-maps-recenter-button-control/google-maps-recenter-button-control.component';
|
|
14
|
+
import { TheSeamGoogleMapsUploadButtonControlComponent } from '../google-maps-upload-button-control/google-maps-upload-button-control.component';
|
|
15
|
+
import { GoogleMapsService } from '../google-maps.service';
|
|
16
|
+
import { MAP_CONTROLS_SERVICE } from '../map-controls-service';
|
|
17
|
+
import { MapValueManagerService, MapValueSource } from '../map-value-manager.service';
|
|
18
|
+
class TheSeamGoogleMapsComponentBase {
|
|
19
|
+
constructor(_elementRef) {
|
|
20
|
+
this._elementRef = _elementRef;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const _TheSeamGoogleMapsMixinBase = mixinDisabled(TheSeamGoogleMapsComponentBase);
|
|
24
|
+
/**
|
|
25
|
+
* A wrapper for googlemap.
|
|
26
|
+
*/
|
|
27
|
+
export class TheSeamGoogleMapsComponent extends _TheSeamGoogleMapsMixinBase {
|
|
28
|
+
constructor(elementRef, _focusMonitor, _googleMaps, _mapValueManager) {
|
|
29
|
+
super(elementRef);
|
|
30
|
+
this._focusMonitor = _focusMonitor;
|
|
31
|
+
this._googleMaps = _googleMaps;
|
|
32
|
+
this._mapValueManager = _mapValueManager;
|
|
33
|
+
this._ngUnsubscribe = new Subject();
|
|
34
|
+
this._fileUploadControlDef = {
|
|
35
|
+
component: TheSeamGoogleMapsUploadButtonControlComponent,
|
|
36
|
+
data: { label: 'Import Geo File', icon: faFileImport },
|
|
37
|
+
position: 6 /* google.maps.ControlPosition.LEFT_BOTTOM */,
|
|
38
|
+
};
|
|
39
|
+
this._reCenterControlDef = {
|
|
40
|
+
component: TheSeamGoogleMapsRecenterButtonControlComponent,
|
|
41
|
+
data: { label: 'Center on Field', icon: faCrosshairs },
|
|
42
|
+
position: 9 /* google.maps.ControlPosition.RIGHT_BOTTOM */,
|
|
43
|
+
};
|
|
44
|
+
this._focusOrigin = null;
|
|
45
|
+
/**
|
|
46
|
+
* Set the tab index to `-1` to allow the root element of the
|
|
47
|
+
* component to receive `focus` event from javascript, but not get focused by
|
|
48
|
+
* keyboard navigation.
|
|
49
|
+
*/
|
|
50
|
+
this._tabIndex = -1;
|
|
51
|
+
this.fileDropEnabled = true;
|
|
52
|
+
this.fileUploadControlEnabled = false;
|
|
53
|
+
this.fullscreenControlEnabled = true;
|
|
54
|
+
this.reCenterControlEnabled = true;
|
|
55
|
+
this.mapTypeControlEnabled = true;
|
|
56
|
+
this.streetViewControlEnabled = false;
|
|
57
|
+
this.allowDrawingHoleInPolygon = false;
|
|
58
|
+
this.zoom = 14;
|
|
59
|
+
this.longitude = -98.570209;
|
|
60
|
+
this.latitude = 37.633814;
|
|
61
|
+
this.mapReady = new EventEmitter();
|
|
62
|
+
this._focusMonitor.monitor(this._elementRef, true).pipe(tap(origin => this._focusOrigin = origin), takeUntil(this._ngUnsubscribe)).subscribe();
|
|
63
|
+
this._mapValueManager.valueChanged.pipe(tap(change => {
|
|
64
|
+
if (this.onChange) {
|
|
65
|
+
this.onChange(change.value);
|
|
66
|
+
}
|
|
67
|
+
if (this.onTouched) {
|
|
68
|
+
this.onTouched();
|
|
69
|
+
}
|
|
70
|
+
}), tap(changed => {
|
|
71
|
+
if (this._googleMaps.mapReady && changed.source !== MapValueSource.FeatureChange) {
|
|
72
|
+
this._googleMaps.setData(changed.value);
|
|
73
|
+
}
|
|
74
|
+
}), takeUntil(this._ngUnsubscribe)).subscribe();
|
|
75
|
+
this._googleMaps.setBaseLatLng(this.latitude, this.longitude);
|
|
76
|
+
}
|
|
77
|
+
set value(value) {
|
|
78
|
+
this._mapValueManager.setValue(value, MapValueSource.Input);
|
|
79
|
+
}
|
|
80
|
+
get value() {
|
|
81
|
+
return this._mapValueManager.value;
|
|
82
|
+
}
|
|
83
|
+
set tabIndex(value) { this._tabIndex = coerceNumberProperty(value); }
|
|
84
|
+
get tabIndex() { return this._tabIndex; }
|
|
85
|
+
set fileImportHandler(value) {
|
|
86
|
+
this._googleMaps.setFileInputHandler(value);
|
|
87
|
+
}
|
|
88
|
+
get _attrDisabled() { return this.disabled || null; }
|
|
89
|
+
get _attrTabIndex() { return this.disabled ? -1 : (this.tabIndex || 0); }
|
|
90
|
+
/** @ignore */
|
|
91
|
+
ngOnInit() {
|
|
92
|
+
this._googleMaps.setFeatureContextMenu(this.featureContextMenu);
|
|
93
|
+
fromEvent(window, 'keydown').pipe(tap((event) => {
|
|
94
|
+
switch (event.code) {
|
|
95
|
+
case 'Delete':
|
|
96
|
+
this._googleMaps.deleteSelection();
|
|
97
|
+
event.preventDefault();
|
|
98
|
+
event.stopPropagation();
|
|
99
|
+
break;
|
|
100
|
+
case 'Escape':
|
|
101
|
+
this._googleMaps.stopDrawing();
|
|
102
|
+
event.preventDefault();
|
|
103
|
+
event.stopPropagation();
|
|
104
|
+
break;
|
|
105
|
+
case 'ContextMenu':
|
|
106
|
+
this._googleMaps.openContextMenu();
|
|
107
|
+
event.preventDefault();
|
|
108
|
+
event.stopPropagation();
|
|
109
|
+
break;
|
|
110
|
+
}
|
|
111
|
+
}), takeUntil(this._ngUnsubscribe)).subscribe();
|
|
112
|
+
}
|
|
113
|
+
/** @ignore */
|
|
114
|
+
ngOnDestroy() {
|
|
115
|
+
this._focusMonitor.stopMonitoring(this._elementRef);
|
|
116
|
+
this._ngUnsubscribe.next();
|
|
117
|
+
this._ngUnsubscribe.complete();
|
|
118
|
+
}
|
|
119
|
+
/** @ignore */
|
|
120
|
+
ngAfterViewInit() { }
|
|
121
|
+
ngOnChanges(changes) {
|
|
122
|
+
let updateBase = false;
|
|
123
|
+
if (changes.hasOwnProperty('latitude')) {
|
|
124
|
+
this.latitude = changes['latitude'].currentValue;
|
|
125
|
+
updateBase = true;
|
|
126
|
+
}
|
|
127
|
+
if (changes.hasOwnProperty('longitude')) {
|
|
128
|
+
this.longitude = changes['longitude'].currentValue;
|
|
129
|
+
updateBase = true;
|
|
130
|
+
}
|
|
131
|
+
if (updateBase) {
|
|
132
|
+
this._googleMaps.setBaseLatLng(this.latitude, this.longitude);
|
|
133
|
+
}
|
|
134
|
+
if (changes.hasOwnProperty('allowDrawingHoleInPolygon')) {
|
|
135
|
+
this._googleMaps.allowDrawingHoleInPolygon(this.allowDrawingHoleInPolygon);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
writeValue(value) {
|
|
139
|
+
this.value = value;
|
|
140
|
+
}
|
|
141
|
+
registerOnChange(fn) {
|
|
142
|
+
this.onChange = fn;
|
|
143
|
+
}
|
|
144
|
+
registerOnTouched(fn) {
|
|
145
|
+
this.onTouched = fn;
|
|
146
|
+
}
|
|
147
|
+
setDisabledState(isDisabled) {
|
|
148
|
+
this.disabled = isDisabled;
|
|
149
|
+
}
|
|
150
|
+
fitBounds(bounds, padding) {
|
|
151
|
+
this._googleMaps.fitBounds(bounds, padding);
|
|
152
|
+
}
|
|
153
|
+
getGeoJson() {
|
|
154
|
+
return this._googleMaps.getGeoJson();
|
|
155
|
+
}
|
|
156
|
+
hasFocus() {
|
|
157
|
+
return this._focusOrigin !== null && this._focusOrigin !== undefined;
|
|
158
|
+
}
|
|
159
|
+
/** Focuses the button. */
|
|
160
|
+
focus() {
|
|
161
|
+
this._getHostElement().focus();
|
|
162
|
+
}
|
|
163
|
+
_getHostElement() {
|
|
164
|
+
return this._elementRef.nativeElement;
|
|
165
|
+
}
|
|
166
|
+
_onMapReady(theMap) {
|
|
167
|
+
var _a;
|
|
168
|
+
this._googleMaps.setMap(theMap);
|
|
169
|
+
this._googleMaps.setData(this._mapValueManager.value);
|
|
170
|
+
// NOTE: AgmMap has a race condition problem that causes the input latitude,
|
|
171
|
+
// longitude, and zoom to get ignored, before googlemaps emits
|
|
172
|
+
// 'center_changed'. This should avoid the issue, until we stop using AgmMap
|
|
173
|
+
// or upgrade to a more recent version that may not have the issue anymore.
|
|
174
|
+
this._googleMaps.reCenterOnFeatures();
|
|
175
|
+
(_a = this._googleMaps.googleMap) === null || _a === void 0 ? void 0 : _a.setZoom(this.zoom);
|
|
176
|
+
}
|
|
177
|
+
_onClickDeleteFeature() {
|
|
178
|
+
this._googleMaps.deleteSelection();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
TheSeamGoogleMapsComponent.decorators = [
|
|
182
|
+
{ type: Component, args: [{
|
|
183
|
+
selector: 'seam-google-maps',
|
|
184
|
+
template: "<agm-map\n [latitude]=\"latitude\"\n [longitude]=\"longitude\"\n [zoom]=\"zoom\"\n [mapTypeControl]=\"true\"\n mapTypeId=\"hybrid\"\n [streetViewControl]=\"false\"\n (mapReady)=\"_onMapReady($event)\"\n [fullscreenControl]=\"$any(fullscreenControlEnabled)\">\n</agm-map>\n<seam-menu #featureContextMenu>\n <button seamMenuItem (click)=\"_onClickDeleteFeature()\">Delete</button>\n</seam-menu>\n<seam-map-file-drop *ngIf=\"fileDropEnabled\"></seam-map-file-drop>\n\n<seam-map-control *ngIf=\"fileUploadControlEnabled\" [def]=\"_fileUploadControlDef\"></seam-map-control>\n<seam-map-control *ngIf=\"reCenterControlEnabled\" [def]=\"_reCenterControlDef\"></seam-map-control>\n",
|
|
185
|
+
inputs: [
|
|
186
|
+
'disabled'
|
|
187
|
+
],
|
|
188
|
+
providers: [
|
|
189
|
+
MapValueManagerService,
|
|
190
|
+
GoogleMapsService,
|
|
191
|
+
{ provide: MAP_CONTROLS_SERVICE, useClass: GoogleMapsControlsService },
|
|
192
|
+
{
|
|
193
|
+
provide: NG_VALUE_ACCESSOR,
|
|
194
|
+
// tslint:disable-next-line: no-use-before-declare
|
|
195
|
+
useExisting: forwardRef(() => TheSeamGoogleMapsComponent),
|
|
196
|
+
multi: true
|
|
197
|
+
}
|
|
198
|
+
],
|
|
199
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
200
|
+
exportAs: 'seamGoogleMaps',
|
|
201
|
+
styles: [":host{display:block;position:relative;height:400px;width:100%}:host.show-focus-border.cdk-focused{outline:0;box-shadow:0 0 0 .2rem #357ebd40}:host.show-focus-border[disabled]{opacity:.65}agm-map{height:inherit;width:inherit}\n"]
|
|
202
|
+
},] }
|
|
203
|
+
];
|
|
204
|
+
TheSeamGoogleMapsComponent.ctorParameters = () => [
|
|
205
|
+
{ type: ElementRef },
|
|
206
|
+
{ type: FocusMonitor },
|
|
207
|
+
{ type: GoogleMapsService },
|
|
208
|
+
{ type: MapValueManagerService }
|
|
209
|
+
];
|
|
210
|
+
TheSeamGoogleMapsComponent.propDecorators = {
|
|
211
|
+
value: [{ type: Input }],
|
|
212
|
+
tabIndex: [{ type: Input }],
|
|
213
|
+
fileDropEnabled: [{ type: Input }],
|
|
214
|
+
fileUploadControlEnabled: [{ type: Input }],
|
|
215
|
+
fullscreenControlEnabled: [{ type: Input }],
|
|
216
|
+
reCenterControlEnabled: [{ type: Input }],
|
|
217
|
+
mapTypeControlEnabled: [{ type: Input }],
|
|
218
|
+
streetViewControlEnabled: [{ type: Input }],
|
|
219
|
+
allowDrawingHoleInPolygon: [{ type: Input }],
|
|
220
|
+
fileImportHandler: [{ type: Input }],
|
|
221
|
+
_attrDisabled: [{ type: HostBinding, args: ['attr.disabled',] }],
|
|
222
|
+
_attrTabIndex: [{ type: HostBinding, args: ['attr.tabindex',] }],
|
|
223
|
+
zoom: [{ type: Input }],
|
|
224
|
+
longitude: [{ type: Input }],
|
|
225
|
+
latitude: [{ type: Input }],
|
|
226
|
+
mapReady: [{ type: Output }],
|
|
227
|
+
agmMap: [{ type: ViewChild, args: [AgmMap, { static: true },] }],
|
|
228
|
+
featureContextMenu: [{ type: ViewChild, args: ['featureContextMenu', { static: true, read: MenuComponent },] }],
|
|
229
|
+
agmMapTpl: [{ type: ViewChild, args: [AgmMap, { static: true, read: ElementRef },] }]
|
|
230
|
+
};
|
|
231
|
+
__decorate([
|
|
232
|
+
InputBoolean()
|
|
233
|
+
], TheSeamGoogleMapsComponent.prototype, "fileDropEnabled", void 0);
|
|
234
|
+
__decorate([
|
|
235
|
+
InputBoolean()
|
|
236
|
+
], TheSeamGoogleMapsComponent.prototype, "fileUploadControlEnabled", void 0);
|
|
237
|
+
__decorate([
|
|
238
|
+
InputBoolean()
|
|
239
|
+
], TheSeamGoogleMapsComponent.prototype, "fullscreenControlEnabled", void 0);
|
|
240
|
+
__decorate([
|
|
241
|
+
InputBoolean()
|
|
242
|
+
], TheSeamGoogleMapsComponent.prototype, "reCenterControlEnabled", void 0);
|
|
243
|
+
__decorate([
|
|
244
|
+
InputBoolean()
|
|
245
|
+
], TheSeamGoogleMapsComponent.prototype, "mapTypeControlEnabled", void 0);
|
|
246
|
+
__decorate([
|
|
247
|
+
InputBoolean()
|
|
248
|
+
], TheSeamGoogleMapsComponent.prototype, "streetViewControlEnabled", void 0);
|
|
249
|
+
__decorate([
|
|
250
|
+
InputBoolean()
|
|
251
|
+
], TheSeamGoogleMapsComponent.prototype, "allowDrawingHoleInPolygon", void 0);
|
|
252
|
+
__decorate([
|
|
253
|
+
InputNumber()
|
|
254
|
+
], TheSeamGoogleMapsComponent.prototype, "zoom", void 0);
|
|
255
|
+
__decorate([
|
|
256
|
+
InputNumber()
|
|
257
|
+
], TheSeamGoogleMapsComponent.prototype, "longitude", void 0);
|
|
258
|
+
__decorate([
|
|
259
|
+
InputNumber()
|
|
260
|
+
], TheSeamGoogleMapsComponent.prototype, "latitude", void 0);
|
|
261
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWktY29tbW9uL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzL2dvb2dsZS1tYXBzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFlBQVksRUFBZSxNQUFNLG1CQUFtQixDQUFBO0FBQzdELE9BQU8sRUFBZ0Isb0JBQW9CLEVBQWUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN2RixPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixXQUFXLEVBQ1gsS0FBSyxFQUlMLE1BQU0sRUFFTixTQUFTLEdBQ1YsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQ3hFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFL0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUNsQyxPQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQzlFLE9BQU8sRUFBOEIsWUFBWSxFQUFFLFdBQVcsRUFBRSxhQUFhLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFHdkQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0saUNBQWlDLENBQUE7QUFDM0UsT0FBTyxFQUFFLCtDQUErQyxFQUFFLE1BQU0sc0ZBQXNGLENBQUE7QUFDdEosT0FBTyxFQUFFLDZDQUE2QyxFQUFFLE1BQU0sa0ZBQWtGLENBQUE7QUFDaEosT0FBTyxFQUFFLGlC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QUFDO3dCQUN6RCxLQUFLLEVBQUUsSUFBSTtxQkFDWjtpQkFDRjtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtnQkFDL0MsUUFBUSxFQUFFLGdCQUFnQjs7YUFDM0I7OztZQTVEQyxVQUFVO1lBTkgsWUFBWTtZQStCWixpQkFBaUI7WUFFUCxzQkFBc0I7OztvQkFnRXRDLEtBQUs7dUJBUUwsS0FBSzs4QkFVTCxLQUFLO3VDQUVMLEtBQUs7dUNBQ0wsS0FBSztxQ0FDTCxLQUFLO29DQUNMLEtBQUs7dUNBQ0wsS0FBSzt3Q0FFTCxLQUFLO2dDQUVMLEtBQUs7NEJBS0wsV0FBVyxTQUFDLGVBQWU7NEJBRzNCLFdBQVcsU0FBQyxlQUFlO21CQU0zQixLQUFLO3dCQUNMLEtBQUs7dUJBQ0wsS0FBSzt1QkFFTCxNQUFNO3FCQUVOLFNBQVMsU0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2lDQUNsQyxTQUFTLFNBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUU7d0JBRXJFLFNBQVMsU0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7O0FBakM1QjtJQUFmLFlBQVksRUFBRTttRUFBZ0M7QUFFL0I7SUFBZixZQUFZLEVBQUU7NEVBQTBDO0FBQ3pDO0lBQWYsWUFBWSxFQUFFOzRFQUF5QztBQUN4QztJQUFmLFlBQVksRUFBRTswRUFBdUM7QUFDdEM7SUFBZixZQUFZLEVBQUU7eUVBQXNDO0FBQ3JDO0lBQWYsWUFBWSxFQUFFOzRFQUEwQztBQUV6QztJQUFmLFlBQVksRUFBRTs2RUFBMkM7QUFnQjNDO0lBQWQsV0FBVyxFQUFFO3dEQUFrQjtBQUNqQjtJQUFkLFdBQVcsRUFBRTs2REFBK0I7QUFDOUI7SUFBZCxXQUFXLEVBQUU7NERBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9jdXNNb25pdG9yLCBGb2N1c09yaWdpbiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5J1xuaW1wb3J0IHsgQm9vbGVhbklucHV0LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSwgTnVtYmVySW5wdXQgfSBmcm9tICdAYW5ndWxhci9jZGsvY29lcmNpb24nXG5pbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIGZvcndhcmRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7IGZyb21FdmVudCwgU3ViamVjdCB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBBZ21NYXAgfSBmcm9tICdAYWdtL2NvcmUnXG5pbXBvcnQgeyBmYUNyb3NzaGFpcnMsIGZhRmlsZUltcG9ydCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucydcbmltcG9ydCB7IENhbkRpc2FibGUsIENhbkRpc2FibGVDdG9yLCBJbnB1dEJvb2xlYW4sIElucHV0TnVtYmVyLCBtaXhpbkRpc2FibGVkIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2NvcmUnXG5pbXBvcnQgeyBNZW51Q29tcG9uZW50IH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL21lbnUnXG5cbmltcG9ydCB7IEZlYXR1cmVDb2xsZWN0aW9uIH0gZnJvbSAnZ2VvanNvbidcbmltcG9ydCB7IEdvb2dsZU1hcHNDb250cm9sc1NlcnZpY2UgfSBmcm9tICcuLi9nb29nbGUtbWFwcy1jb250cm9scy5zZXJ2aWNlJ1xuaW1wb3J0IHsgVGhlU2VhbUdvb2dsZU1hcHNSZWNlbnRlckJ1dHRvbkNvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuLi9nb29nbGUtbWFwcy1yZWNlbnRlci1idXR0b24tY29udHJvbC9nb29nbGUtbWFwcy1yZWNlbnRlci1idXR0b24tY29udHJvbC5jb21wb25lbnQnXG5pbXBvcnQgeyBUaGVTZWFtR29vZ2xlTWFwc1VwbG9hZEJ1dHRvbkNvbnRyb2xDb21wb25lbnQgfSBmcm9tICcuLi9nb29nbGUtbWFwcy11cGxvYWQtYnV0dG9uLWNvbnRyb2wvZ29vZ2xlLW1hcHMtdXBsb2FkLWJ1dHRvbi1jb250cm9sLmNvbXBvbmVudCdcbmltcG9ydCB7IEdvb2dsZU1hcHNTZXJ2aWNlIH0gZnJvbSAnLi4vZ29vZ2xlLW1hcHMuc2VydmljZSdcbmltcG9ydCB7IE1hcENvbnRyb2wsIE1BUF9DT05UUk9MU19TRVJWSUNFIH0gZnJvbSAnLi4vbWFwLWNvbnRyb2xzLXNlcnZpY2UnXG5pbXBvcnQgeyBNYXBWYWx1ZSwgTWFwVmFsdWVNYW5hZ2VyU2VydmljZSwgTWFwVmFsdWVTb3VyY2UgfSBmcm9tICcuLi9tYXAtdmFsdWUtbWFuYWdlci5zZXJ2aWNlJ1xuXG5jbGFzcyBUaGVTZWFtR29vZ2xlTWFwc0NvbXBvbmVudEJhc2Uge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYpIHt9XG59XG5cbmNvbnN0IF9UaGVTZWFtR29vZ2xlTWFwc01peGluQmFzZTogQ2FuRGlzYWJsZUN0b3IgJlxuICB0eXBlb2YgVGhlU2VhbUdvb2dsZU1hcHNDb21wb25lbnRCYXNlID1cbiAgICBtaXhpbkRpc2FibGVkKFRoZVNlYW1Hb29nbGVNYXBzQ29tcG9uZW50QmFzZSlcblxuLyoqXG4gKiBBIHdyYXBwZXIgZm9yIGdvb2dsZW1hcC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VhbS1nb29nbGUtbWFwcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9nb29nbGUtbWFwcy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2dvb2dsZS1tYXBzLmNvbXBvbmVudC5zY3NzJ10sXG4gIGlucHV0czogW1xuICAgICdkaXNhYmxlZCdcbiAgXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgTWFwVmFsdWVNYW5hZ2VyU2VydmljZSxcbiAgICBHb29nbGVNYXBzU2VydmljZSxcbiAgICB7IHByb3ZpZGU6IE1BUF9DT05UUk9MU19TRVJWSUNFLCB1c2VDbGFzczogR29vZ2xlTWFwc0NvbnRyb2xzU2VydmljZSB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFRoZVNlYW1Hb29nbGVNYXBzQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZXhwb3J0QXM6ICdzZWFtR29vZ2xlTWFwcydcbn0pXG5leHBvcnQgY2xhc3MgVGhlU2VhbUdvb2dsZU1hcHNDb21wb25lbnQgZXh0ZW5kcyBfVGhlU2VhbUdvb2dsZU1hcHNNaXhpbkJhc2VcbiAgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBDYW5EaXNhYmxlLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9kaXNhYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV96b29tOiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbG9uZ2l0dWRlOiBOdW1iZXJJbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfbGF0aXR1ZGU6IE51bWJlcklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9maWxlRHJvcEVuYWJsZWQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfZmlsZVVwbG9hZENvbnRyb2xFbmFibGVkOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2Z1bGxzY3JlZW5Db250cm9sRW5hYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9yZUNlbnRlckNvbnRyb2xFbmFibGVkOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX21hcFR5cGVDb250cm9sRW5hYmxlZDogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9zdHJlZXRWaWV3Q29udHJvbEVuYWJsZWQ6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfYWxsb3dEcmF3aW5nSG9sZUluUG9seWdvbjogQm9vbGVhbklucHV0XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICByZWFkb25seSBfZmlsZVVwbG9hZENvbnRyb2xEZWY6IE1hcENvbnRyb2wgPSB7XG4gICAgY29tcG9uZW50OiBUaGVTZWFtR29vZ2xlTWFwc1VwbG9hZEJ1dHRvbkNvbnRyb2xDb21wb25lbnQsXG4gICAgZGF0YTogeyBsYWJlbDogJ0ltcG9ydCBHZW8gRmlsZScsIGljb246IGZhRmlsZUltcG9ydCB9LFxuICAgIHBvc2l0aW9uOiA2IC8qIGdvb2dsZS5tYXBzLkNvbnRyb2xQb3NpdGlvbi5MRUZUX0JPVFRPTSAqLyxcbiAgfVxuXG4gIHJlYWRvbmx5IF9yZUNlbnRlckNvbnRyb2xEZWY6IE1hcENvbnRyb2wgPSB7XG4gICAgY29tcG9uZW50OiBUaGVTZWFtR29vZ2xlTWFwc1JlY2VudGVyQnV0dG9uQ29udHJvbENvbXBvbmVudCxcbiAgICBkYXRhOiB7IGxhYmVsOiAnQ2VudGVyIG9uIEZpZWxkJywgaWNvbjogZmFDcm9zc2hhaXJzIH0sXG4gICAgcG9zaXRpb246IDkgLyogZ29vZ2xlLm1hcHMuQ29udHJvbFBvc2l0aW9uLlJJR0hUX0JPVFRPTSAqLyxcbiAgfVxuXG4gIHByaXZhdGUgX2ZvY3VzT3JpZ2luOiBGb2N1c09yaWdpbiA9IG51bGxcblxuICBASW5wdXQoKVxuICBzZXQgdmFsdWUodmFsdWU6IE1hcFZhbHVlKSB7XG4gICAgdGhpcy5fbWFwVmFsdWVNYW5hZ2VyLnNldFZhbHVlKHZhbHVlLCBNYXBWYWx1ZVNvdXJjZS5JbnB1dClcbiAgfVxuICBnZXQgdmFsdWUoKTogTWFwVmFsdWUge1xuICAgIHJldHVybiB0aGlzLl9tYXBWYWx1ZU1hbmFnZXIudmFsdWVcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB0YWJJbmRleCh2YWx1ZTogbnVtYmVyKSB7IHRoaXMuX3RhYkluZGV4ID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpIH1cbiAgZ2V0IHRhYkluZGV4KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl90YWJJbmRleCB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIHRhYiBpbmRleCB0byBgLTFgIHRvIGFsbG93IHRoZSByb290IGVsZW1lbnQgb2YgdGhlXG4gICAqIGNvbXBvbmVudCB0byByZWNlaXZlIGBmb2N1c2AgZXZlbnQgZnJvbSBqYXZhc2NyaXB0LCBidXQgbm90IGdldCBmb2N1c2VkIGJ5XG4gICAqIGtleWJvYXJkIG5hdmlnYXRpb24uXG4gICAqL1xuICBwcml2YXRlIF90YWJJbmRleCA9IC0xXG5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGZpbGVEcm9wRW5hYmxlZDogYm9vbGVhbiA9IHRydWVcblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgZmlsZVVwbG9hZENvbnRyb2xFbmFibGVkOiBib29sZWFuID0gZmFsc2VcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGZ1bGxzY3JlZW5Db250cm9sRW5hYmxlZDogYm9vbGVhbiA9IHRydWVcbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIHJlQ2VudGVyQ29udHJvbEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBtYXBUeXBlQ29udHJvbEVuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBzdHJlZXRWaWV3Q29udHJvbEVuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZVxuXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBhbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uOiBib29sZWFuID0gZmFsc2VcblxuICBASW5wdXQoKVxuICBzZXQgZmlsZUltcG9ydEhhbmRsZXIodmFsdWU6ICgoZmlsZTogRmlsZSkgPT4gdm9pZCkgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRGaWxlSW5wdXRIYW5kbGVyKHZhbHVlKVxuICB9XG5cbiAgQEhvc3RCaW5kaW5nKCdhdHRyLmRpc2FibGVkJylcbiAgZ2V0IF9hdHRyRGlzYWJsZWQoKSB7IHJldHVybiB0aGlzLmRpc2FibGVkIHx8IG51bGwgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci50YWJpbmRleCcpXG4gIGdldCBfYXR0clRhYkluZGV4KCkgeyByZXR1cm4gdGhpcy5kaXNhYmxlZCA/IC0xIDogKHRoaXMudGFiSW5kZXggfHwgMCkgfVxuXG4gIG9uQ2hhbmdlOiBhbnlcbiAgb25Ub3VjaGVkOiBhbnlcblxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSB6b29tOiBudW1iZXIgPSAxNFxuICBASW5wdXQoKSBASW5wdXROdW1iZXIoKSBsb25naXR1ZGU6IG51bWJlciA9IC05OC41NzAyMDlcbiAgQElucHV0KCkgQElucHV0TnVtYmVyKCkgbGF0aXR1ZGU6IG51bWJlciA9IDM3LjYzMzgxNFxuXG4gIEBPdXRwdXQoKSBtYXBSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuXG4gIEBWaWV3Q2hpbGQoQWdtTWFwLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgYWdtTWFwITogQWdtTWFwXG4gIEBWaWV3Q2hpbGQoJ2ZlYXR1cmVDb250ZXh0TWVudScsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBNZW51Q29tcG9uZW50IH0pIHB1YmxpYyBmZWF0dXJlQ29udGV4dE1lbnUhOiBNZW51Q29tcG9uZW50XG5cbiAgQFZpZXdDaGlsZChBZ21NYXAsIHsgc3RhdGljOiB0cnVlLCByZWFkOiBFbGVtZW50UmVmIH0pIHB1YmxpYyBhZ21NYXBUcGwhOiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PlxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNNb25pdG9yOiBGb2N1c01vbml0b3IsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZ29vZ2xlTWFwczogR29vZ2xlTWFwc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfbWFwVmFsdWVNYW5hZ2VyOiBNYXBWYWx1ZU1hbmFnZXJTZXJ2aWNlLFxuICApIHtcbiAgICBzdXBlcihlbGVtZW50UmVmKVxuXG4gICAgdGhpcy5fZm9jdXNNb25pdG9yLm1vbml0b3IodGhpcy5fZWxlbWVudFJlZiwgdHJ1ZSkucGlwZShcbiAgICAgIHRhcChvcmlnaW4gPT4gdGhpcy5fZm9jdXNPcmlnaW4gPSBvcmlnaW4pLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpLFxuICAgICkuc3Vic2NyaWJlKClcblxuICAgIHRoaXMuX21hcFZhbHVlTWFuYWdlci52YWx1ZUNoYW5nZWQucGlwZShcbiAgICAgIHRhcChjaGFuZ2UgPT4ge1xuICAgICAgICBpZiAodGhpcy5vbkNoYW5nZSkgeyB0aGlzLm9uQ2hhbmdlKGNoYW5nZS52YWx1ZSkgfVxuICAgICAgICBpZiAodGhpcy5vblRvdWNoZWQpIHsgdGhpcy5vblRvdWNoZWQoKSB9XG4gICAgICB9KSxcbiAgICAgIHRhcChjaGFuZ2VkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2dvb2dsZU1hcHMubWFwUmVhZHkgJiYgY2hhbmdlZC5zb3VyY2UgIT09IE1hcFZhbHVlU291cmNlLkZlYXR1cmVDaGFuZ2UpIHtcbiAgICAgICAgICB0aGlzLl9nb29nbGVNYXBzLnNldERhdGEoY2hhbmdlZC52YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfSksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSksXG4gICAgKS5zdWJzY3JpYmUoKVxuXG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRCYXNlTGF0TG5nKHRoaXMubGF0aXR1ZGUsIHRoaXMubG9uZ2l0dWRlKVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRGZWF0dXJlQ29udGV4dE1lbnUodGhpcy5mZWF0dXJlQ29udGV4dE1lbnUpXG5cbiAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4od2luZG93LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICB0YXAoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xuICAgICAgICAgIGNhc2UgJ0RlbGV0ZSc6IHRoaXMuX2dvb2dsZU1hcHMuZGVsZXRlU2VsZWN0aW9uKCk7IGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOyBicmVha1xuICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6IHRoaXMuX2dvb2dsZU1hcHMuc3RvcERyYXdpbmcoKTsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ICBicmVha1xuICAgICAgICAgIGNhc2UgJ0NvbnRleHRNZW51JzogdGhpcy5fZ29vZ2xlTWFwcy5vcGVuQ29udGV4dE1lbnUoKTsgZXZlbnQucHJldmVudERlZmF1bHQoKTsgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7ICBicmVha1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIHRha2VVbnRpbCh0aGlzLl9uZ1Vuc3Vic2NyaWJlKVxuICAgICkuc3Vic2NyaWJlKClcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2ZvY3VzTW9uaXRvci5zdG9wTW9uaXRvcmluZyh0aGlzLl9lbGVtZW50UmVmKVxuXG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5uZXh0KClcbiAgICB0aGlzLl9uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKClcbiAgfVxuXG4gIC8qKiBAaWdub3JlICovXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHsgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBsZXQgdXBkYXRlQmFzZSA9IGZhbHNlXG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2xhdGl0dWRlJykpIHtcbiAgICAgIHRoaXMubGF0aXR1ZGUgPSBjaGFuZ2VzWydsYXRpdHVkZSddLmN1cnJlbnRWYWx1ZVxuICAgICAgdXBkYXRlQmFzZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKGNoYW5nZXMuaGFzT3duUHJvcGVydHkoJ2xvbmdpdHVkZScpKSB7XG4gICAgICB0aGlzLmxvbmdpdHVkZSA9IGNoYW5nZXNbJ2xvbmdpdHVkZSddLmN1cnJlbnRWYWx1ZVxuICAgICAgdXBkYXRlQmFzZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHVwZGF0ZUJhc2UpIHtcbiAgICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0QmFzZUxhdExuZyh0aGlzLmxhdGl0dWRlLCB0aGlzLmxvbmdpdHVkZSlcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5oYXNPd25Qcm9wZXJ0eSgnYWxsb3dEcmF3aW5nSG9sZUluUG9seWdvbicpKSB7XG4gICAgICB0aGlzLl9nb29nbGVNYXBzLmFsbG93RHJhd2luZ0hvbGVJblBvbHlnb24odGhpcy5hbGxvd0RyYXdpbmdIb2xlSW5Qb2x5Z29uKVxuICAgIH1cbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IE1hcFZhbHVlKTogdm9pZCB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ2hhbmdlID0gZm5cbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuXG4gIH1cblxuICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWRcbiAgfVxuXG4gIHB1YmxpYyBmaXRCb3VuZHMoYm91bmRzOiBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHMgfCBnb29nbGUubWFwcy5MYXRMbmdCb3VuZHNMaXRlcmFsLCBwYWRkaW5nPzogbnVtYmVyIHwgZ29vZ2xlLm1hcHMuUGFkZGluZyk6IHZvaWQge1xuICAgIHRoaXMuX2dvb2dsZU1hcHMuZml0Qm91bmRzKGJvdW5kcywgcGFkZGluZylcbiAgfVxuXG4gIHB1YmxpYyBnZXRHZW9Kc29uKCk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2dvb2dsZU1hcHMuZ2V0R2VvSnNvbigpXG4gIH1cblxuICBwdWJsaWMgaGFzRm9jdXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2ZvY3VzT3JpZ2luICE9PSBudWxsICYmIHRoaXMuX2ZvY3VzT3JpZ2luICE9PSB1bmRlZmluZWRcbiAgfVxuXG4gIC8qKiBGb2N1c2VzIHRoZSBidXR0b24uICovXG4gIHB1YmxpYyBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLl9nZXRIb3N0RWxlbWVudCgpLmZvY3VzKClcbiAgfVxuXG4gIHByaXZhdGUgX2dldEhvc3RFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnRcbiAgfVxuXG4gIF9vbk1hcFJlYWR5KHRoZU1hcDogZ29vZ2xlLm1hcHMuTWFwKSB7XG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5zZXRNYXAodGhlTWFwKVxuICAgIHRoaXMuX2dvb2dsZU1hcHMuc2V0RGF0YSh0aGlzLl9tYXBWYWx1ZU1hbmFnZXIudmFsdWUpXG4gICAgLy8gTk9URTogQWdtTWFwIGhhcyBhIHJhY2UgY29uZGl0aW9uIHByb2JsZW0gdGhhdCBjYXVzZXMgdGhlIGlucHV0IGxhdGl0dWRlLFxuICAgIC8vIGxvbmdpdHVkZSwgYW5kIHpvb20gdG8gZ2V0IGlnbm9yZWQsIGJlZm9yZSBnb29nbGVtYXBzIGVtaXRzXG4gICAgLy8gJ2NlbnRlcl9jaGFuZ2VkJy4gVGhpcyBzaG91bGQgYXZvaWQgdGhlIGlzc3VlLCB1bnRpbCB3ZSBzdG9wIHVzaW5nIEFnbU1hcFxuICAgIC8vIG9yIHVwZ3JhZGUgdG8gYSBtb3JlIHJlY2VudCB2ZXJzaW9uIHRoYXQgbWF5IG5vdCBoYXZlIHRoZSBpc3N1ZSBhbnltb3JlLlxuICAgIHRoaXMuX2dvb2dsZU1hcHMucmVDZW50ZXJPbkZlYXR1cmVzKClcbiAgICB0aGlzLl9nb29nbGVNYXBzLmdvb2dsZU1hcD8uc2V0Wm9vbSh0aGlzLnpvb20pXG4gIH1cblxuICBfb25DbGlja0RlbGV0ZUZlYXR1cmUoKSB7XG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5kZWxldGVTZWxlY3Rpb24oKVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { ESCAPE } from '@angular/cdk/keycodes';
|
|
2
|
+
import { fromEvent, Subject } from 'rxjs';
|
|
3
|
+
import { takeUntil } from 'rxjs/operators';
|
|
4
|
+
import { isFeatureSelected } from './google-maps-feature-helpers';
|
|
5
|
+
// TODO: Close on map losing focus.
|
|
6
|
+
export class GoogleMapsContextMenu {
|
|
7
|
+
constructor(_map, _menu, _position, _vcr, _ngZone, _data, _feature) {
|
|
8
|
+
this._map = _map;
|
|
9
|
+
this._menu = _menu;
|
|
10
|
+
this._vcr = _vcr;
|
|
11
|
+
this._ngZone = _ngZone;
|
|
12
|
+
this._data = _data;
|
|
13
|
+
this._feature = _feature;
|
|
14
|
+
const tplRef = this._menu.templateRef;
|
|
15
|
+
if (tplRef === undefined || tplRef === null) {
|
|
16
|
+
throw Error(`Menu template is not defined.`);
|
|
17
|
+
}
|
|
18
|
+
const ref = this._vcr.createEmbeddedView(tplRef);
|
|
19
|
+
ref.detectChanges();
|
|
20
|
+
const listeners = [];
|
|
21
|
+
const ngUnsubscribe = new Subject();
|
|
22
|
+
// TODO: Fix the initial focus. setTimeout avoids the wrong contextmenu
|
|
23
|
+
// getting triggered, but the first item flashes and looks off this way.
|
|
24
|
+
setTimeout(() => {
|
|
25
|
+
this._menu.focusFirstItem('program');
|
|
26
|
+
});
|
|
27
|
+
this._menu.closed.pipe(takeUntil(ngUnsubscribe)).subscribe(v => {
|
|
28
|
+
this.close();
|
|
29
|
+
});
|
|
30
|
+
fromEvent(document, 'keydown').pipe(takeUntil(ngUnsubscribe)).subscribe((event) => {
|
|
31
|
+
if (event.keyCode === ESCAPE) {
|
|
32
|
+
this.close();
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
const __cleanup = () => this._cleanupFn();
|
|
36
|
+
class GoogleMapsContextMenuOverlayView extends google.maps.OverlayView {
|
|
37
|
+
constructor(position, content) {
|
|
38
|
+
super();
|
|
39
|
+
this.position = position;
|
|
40
|
+
this.position = position;
|
|
41
|
+
this.containerDiv = document.createElement('div');
|
|
42
|
+
this.containerDiv.style.cursor = 'auto';
|
|
43
|
+
this.containerDiv.style.height = '0',
|
|
44
|
+
this.containerDiv.style.position = 'absolute';
|
|
45
|
+
this.containerDiv.appendChild(content);
|
|
46
|
+
// Optionally stop clicks, etc., from bubbling up to the map.
|
|
47
|
+
GoogleMapsContextMenuOverlayView.preventMapHitsAndGesturesFrom(this.containerDiv);
|
|
48
|
+
}
|
|
49
|
+
/** Called when the view is added to the map. */
|
|
50
|
+
onAdd() {
|
|
51
|
+
// tslint:disable-next-line: no-non-null-assertion
|
|
52
|
+
this.getPanes().floatPane.appendChild(this.containerDiv);
|
|
53
|
+
}
|
|
54
|
+
/** Called when the view is removed from the map. */
|
|
55
|
+
onRemove() {
|
|
56
|
+
if (this.containerDiv.parentElement) {
|
|
57
|
+
this.containerDiv.parentElement.removeChild(this.containerDiv);
|
|
58
|
+
}
|
|
59
|
+
__cleanup();
|
|
60
|
+
}
|
|
61
|
+
/** Called each frame when the view needs to draw itself. */
|
|
62
|
+
draw() {
|
|
63
|
+
// tslint:disable-next-line: no-non-null-assertion
|
|
64
|
+
const divPosition = this.getProjection().fromLatLngToDivPixel(this.position);
|
|
65
|
+
// Hide the popup when it is far out of view.
|
|
66
|
+
const display = Math.abs(divPosition.x) < 4000 && Math.abs(divPosition.y) < 4000
|
|
67
|
+
? 'block'
|
|
68
|
+
: 'none';
|
|
69
|
+
if (display === 'block') {
|
|
70
|
+
this.containerDiv.style.left = divPosition.x + 'px';
|
|
71
|
+
this.containerDiv.style.top = divPosition.y + 'px';
|
|
72
|
+
}
|
|
73
|
+
if (this.containerDiv.style.display !== display) {
|
|
74
|
+
this.containerDiv.style.display = display;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
this._overlayView = new GoogleMapsContextMenuOverlayView(_position, ref.rootNodes[0]);
|
|
79
|
+
this._overlayView.setMap(this._map);
|
|
80
|
+
this._ngZone.runOutsideAngular(() => {
|
|
81
|
+
listeners.push(this._data.addListener('removefeature', (event) => {
|
|
82
|
+
if (event.feature === this._feature) {
|
|
83
|
+
this._ngZone.run(() => { this.close(); });
|
|
84
|
+
}
|
|
85
|
+
}));
|
|
86
|
+
listeners.push(this._data.addListener('setproperty', (event) => {
|
|
87
|
+
if (event.feature === this._feature && !isFeatureSelected(this._feature)) {
|
|
88
|
+
this._ngZone.run(() => { this.close(); });
|
|
89
|
+
}
|
|
90
|
+
}));
|
|
91
|
+
listeners.push(this._data.addListener('removeproperty', (event) => {
|
|
92
|
+
if (event.feature === this._feature && !isFeatureSelected(this._feature)) {
|
|
93
|
+
this._ngZone.run(() => { this.close(); });
|
|
94
|
+
}
|
|
95
|
+
}));
|
|
96
|
+
listeners.push(this._map.addListener('click', (event) => {
|
|
97
|
+
this._ngZone.run(() => { this.close(); });
|
|
98
|
+
}));
|
|
99
|
+
listeners.push(this._data.addListener('click', (event) => {
|
|
100
|
+
this._ngZone.run(() => { this.close(); });
|
|
101
|
+
}));
|
|
102
|
+
});
|
|
103
|
+
this._cleanupFn = () => {
|
|
104
|
+
ngUnsubscribe.next();
|
|
105
|
+
ngUnsubscribe.complete();
|
|
106
|
+
listeners.forEach(google.maps.event.removeListener);
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
close() {
|
|
110
|
+
this._overlayView.setMap(null);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMtY29udGV4dG1lbnUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vZ29vZ2xlLW1hcHMvZ29vZ2xlLW1hcHMtY29udGV4dG1lbnUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBRTlDLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3pDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUkxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUVqRSxtQ0FBbUM7QUFFbkMsTUFBTSxPQUFPLHFCQUFxQjtJQUtoQyxZQUNtQixJQUFxQixFQUNyQixLQUFvQixFQUNyQyxTQUE2QixFQUNaLElBQXNCLEVBQ3RCLE9BQWUsRUFDZixLQUF1QixFQUN2QixRQUFrQztRQU5sQyxTQUFJLEdBQUosSUFBSSxDQUFpQjtRQUNyQixVQUFLLEdBQUwsS0FBSyxDQUFlO1FBRXBCLFNBQUksR0FBSixJQUFJLENBQWtCO1FBQ3RCLFlBQU8sR0FBUCxPQUFPLENBQVE7UUFDZixVQUFLLEdBQUwsS0FBSyxDQUFrQjtRQUN2QixhQUFRLEdBQVIsUUFBUSxDQUEwQjtRQUVuRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQTtRQUNyQyxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLElBQUksRUFBRTtZQUMzQyxNQUFNLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO1NBQzdDO1FBRUQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUNoRCxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUE7UUFFbkIsTUFBTSxTQUFTLEdBQW9D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QyxVQUFVLEdBQUcsR0FBRyxFQUFFO1lBQ3JCLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUNwQixhQUFhLENBQUMsUUFBUSxFQUFFLENBQUE7WUFDeEIsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQTtRQUNyRCxDQUFDLENBQUE7SUFDSCxDQUFDO0lBRU0sS0FBSztRQUNWLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2hDLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEVTQ0FQRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2RlcydcbmltcG9ydCB7IE5nWm9uZSwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5cbmltcG9ydCB7IE1lbnVDb21wb25lbnQgfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vbWVudSdcblxuaW1wb3J0IHsgaXNGZWF0dXJlU2VsZWN0ZWQgfSBmcm9tICcuL2dvb2dsZS1tYXBzLWZlYXR1cmUtaGVscGVycydcblxuLy8gVE9ETzogQ2xvc2Ugb24gbWFwIGxvc2luZyBmb2N1cy5cblxuZXhwb3J0IGNsYXNzIEdvb2dsZU1hcHNDb250ZXh0TWVudSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3ZlcmxheVZpZXc6IGdvb2dsZS5tYXBzLk92ZXJsYXlWaWV3XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NsZWFudXBGbjogKCkgPT4gdm9pZFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21hcDogZ29vZ2xlLm1hcHMuTWFwLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX21lbnU6IE1lbnVDb21wb25lbnQsXG4gICAgX3Bvc2l0aW9uOiBnb29nbGUubWFwcy5MYXRMbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdmNyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX25nWm9uZTogTmdab25lLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2RhdGE6IGdvb2dsZS5tYXBzLkRhdGEsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZmVhdHVyZTogZ29vZ2xlLm1hcHMuRGF0YS5GZWF0dXJlLFxuICApIHtcbiAgICBjb25zdCB0cGxSZWYgPSB0aGlzLl9tZW51LnRlbXBsYXRlUmVmXG4gICAgaWYgKHRwbFJlZiA9PT0gdW5kZWZpbmVkIHx8IHRwbFJlZiA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoYE1lbnUgdGVtcGxhdGUgaXMgbm90IGRlZmluZWQuYClcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSB0aGlzLl92Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRwbFJlZilcbiAgICByZWYuZGV0ZWN0Q2hhbmdlcygpXG5cbiAgICBjb25zdCBsaXN0ZW5lcnM6IGdvb2dsZS5tYXBzLk1hcHNFdmVudExpc3RlbmVyW10gPSBbXVxuICAgIGNvbnN0IG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgICAvLyBUT0RPOiBGaXggdGhlIGluaXRpYWwgZm9jdXMuIHNldFRpbWVvdXQgYXZvaWRzIHRoZSB3cm9uZyBjb250ZXh0bWVudVxuICAgIC8vIGdldHRpbmcgdHJpZ2dlcmVkLCBidXQgdGhlIGZpcnN0IGl0ZW0gZmxhc2hlcyBhbmQgbG9va3Mgb2ZmIHRoaXMgd2F5LlxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5fbWVudS5mb2N1c0ZpcnN0SXRlbSgncHJvZ3JhbScpXG4gICAgfSlcbiAgICB0aGlzLl9tZW51LmNsb3NlZC5waXBlKFxuICAgICAgdGFrZVVudGlsKG5nVW5zdWJzY3JpYmUpXG4gICAgKS5zdWJzY3JpYmUodiA9PiB7XG4gICAgICB0aGlzLmNsb3NlKClcbiAgICB9KVxuXG4gICAgZnJvbUV2ZW50KGRvY3VtZW50LCAna2V5ZG93bicpLnBpcGUoXG4gICAgICB0YWtlVW50aWwobmdVbnN1YnNjcmliZSlcbiAgICApLnN1YnNjcmliZSgoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRSkge1xuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgX19jbGVhbnVwID0gKCkgPT4gdGhpcy5fY2xlYW51cEZuKClcbiAgICBjbGFzcyBHb29nbGVNYXBzQ29udGV4dE1lbnVPdmVybGF5VmlldyBleHRlbmRzIGdvb2dsZS5tYXBzLk92ZXJsYXlWaWV3IHtcbiAgICAgIHB1YmxpYyBjb250YWluZXJEaXY6IEhUTUxEaXZFbGVtZW50XG5cbiAgICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcG9zaXRpb246IGdvb2dsZS5tYXBzLkxhdExuZyxcbiAgICAgICAgY29udGVudDogSFRNTEVsZW1lbnRcbiAgICAgICkge1xuICAgICAgICBzdXBlcigpXG4gICAgICAgIHRoaXMucG9zaXRpb24gPSBwb3NpdGlvblxuXG4gICAgICAgIHRoaXMuY29udGFpbmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgICAgdGhpcy5jb250YWluZXJEaXYuc3R5bGUuY3Vyc29yID0gJ2F1dG8nXG4gICAgICAgIHRoaXMuY29udGFpbmVyRGl2LnN0eWxlLmhlaWdodCA9ICcwJyxcbiAgICAgICAgdGhpcy5jb250YWluZXJEaXYuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnXG4gICAgICAgIHRoaXMuY29udGFpbmVyRGl2LmFwcGVuZENoaWxkKGNvbnRlbnQpXG5cbiAgICAgICAgLy8gT3B0aW9uYWxseSBzdG9wIGNsaWNrcywgZXRjLiwgZnJvbSBidWJibGluZyB1cCB0byB0aGUgbWFwLlxuICAgICAgICBHb29nbGVNYXBzQ29udGV4dE1lbnVPdmVybGF5Vmlldy5wcmV2ZW50TWFwSGl0c0FuZEdlc3R1cmVzRnJvbSh0aGlzLmNvbnRhaW5lckRpdilcbiAgICAgIH1cblxuICAgICAgLyoqIENhbGxlZCB3aGVuIHRoZSB2aWV3IGlzIGFkZGVkIHRvIHRoZSBtYXAuICovXG4gICAgICBvbkFkZCgpIHtcbiAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBuby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgdGhpcy5nZXRQYW5lcygpIS5mbG9hdFBhbmUuYXBwZW5kQ2hpbGQodGhpcy5jb250YWluZXJEaXYpXG4gICAgICB9XG5cbiAgICAgIC8qKiBDYWxsZWQgd2hlbiB0aGUgdmlldyBpcyByZW1vdmVkIGZyb20gdGhlIG1hcC4gKi9cbiAgICAgIG9uUmVtb3ZlKCkge1xuICAgICAgICBpZiAodGhpcy5jb250YWluZXJEaXYucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRoaXMuY29udGFpbmVyRGl2LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5jb250YWluZXJEaXYpXG4gICAgICAgIH1cbiAgICAgICAgX19jbGVhbnVwKClcbiAgICAgIH1cblxuICAgICAgLyoqIENhbGxlZCBlYWNoIGZyYW1lIHdoZW4gdGhlIHZpZXcgbmVlZHMgdG8gZHJhdyBpdHNlbGYuICovXG4gICAgICBkcmF3KCkge1xuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG5vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICBjb25zdCBkaXZQb3NpdGlvbiA9IHRoaXMuZ2V0UHJvamVjdGlvbigpLmZyb21MYXRMbmdUb0RpdlBpeGVsKHRoaXMucG9zaXRpb24pIVxuXG4gICAgICAgIC8vIEhpZGUgdGhlIHBvcHVwIHdoZW4gaXQgaXMgZmFyIG91dCBvZiB2aWV3LlxuICAgICAgICBjb25zdCBkaXNwbGF5ID1cbiAgICAgICAgICBNYXRoLmFicyhkaXZQb3NpdGlvbi54KSA8IDQwMDAgJiYgTWF0aC5hYnMoZGl2UG9zaXRpb24ueSkgPCA0MDAwXG4gICAgICAgICAgICA/ICdibG9jaydcbiAgICAgICAgICAgIDogJ25vbmUnXG5cbiAgICAgICAgaWYgKGRpc3BsYXkgPT09ICdibG9jaycpIHtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lckRpdi5zdHlsZS5sZWZ0ID0gZGl2UG9zaXRpb24ueCArICdweCdcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lckRpdi5zdHlsZS50b3AgPSBkaXZQb3NpdGlvbi55ICsgJ3B4J1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyRGl2LnN0eWxlLmRpc3BsYXkgIT09IGRpc3BsYXkpIHtcbiAgICAgICAgICB0aGlzLmNvbnRhaW5lckRpdi5zdHlsZS5kaXNwbGF5ID0gZGlzcGxheVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fb3ZlcmxheVZpZXcgPSBuZXcgR29vZ2xlTWFwc0NvbnRleHRNZW51T3ZlcmxheVZpZXcoX3Bvc2l0aW9uLCByZWYucm9vdE5vZGVzWzBdKVxuICAgIHRoaXMuX292ZXJsYXlWaWV3LnNldE1hcCh0aGlzLl9tYXApXG5cbiAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgbGlzdGVuZXJzLnB1c2godGhpcy5fZGF0YS5hZGRMaXN0ZW5lcigncmVtb3ZlZmVhdHVyZScsIChldmVudDogZ29vZ2xlLm1hcHMuRGF0YS5SZW1vdmVGZWF0dXJlRXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmZlYXR1cmUgPT09IHRoaXMuX2ZlYXR1cmUpIHtcbiAgICAgICAgICB0aGlzLl9uZ1pvbmUucnVuKCgpID0+IHsgdGhpcy5jbG9zZSgpIH0pXG4gICAgICAgIH1cbiAgICAgIH0pKVxuXG4gICAgICBsaXN0ZW5lcnMucHVzaCh0aGlzLl9kYXRhLmFkZExpc3RlbmVyKCdzZXRwcm9wZXJ0eScsIChldmVudDogZ29vZ2xlLm1hcHMuRGF0YS5TZXRQcm9wZXJ0eUV2ZW50KSA9PiB7XG4gICAgICAgIGlmIChldmVudC5mZWF0dXJlID09PSB0aGlzLl9mZWF0dXJlICYmICFpc0ZlYXR1cmVTZWxlY3RlZCh0aGlzLl9mZWF0dXJlKSkge1xuICAgICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4geyB0aGlzLmNsb3NlKCkgfSlcbiAgICAgICAgfVxuICAgICAgfSkpXG5cbiAgICAgIGxpc3RlbmVycy5wdXNoKHRoaXMuX2RhdGEuYWRkTGlzdGVuZXIoJ3JlbW92ZXByb3BlcnR5JywgKGV2ZW50OiBnb29nbGUubWFwcy5EYXRhLlJlbW92ZVByb3BlcnR5RXZlbnQpID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmZlYXR1cmUgPT09IHRoaXMuX2ZlYXR1cmUgJiYgIWlzRmVhdHVyZVNlbGVjdGVkKHRoaXMuX2ZlYXR1cmUpKSB7XG4gICAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7IHRoaXMuY2xvc2UoKSB9KVxuICAgICAgICB9XG4gICAgICB9KSlcblxuICAgICAgbGlzdGVuZXJzLnB1c2godGhpcy5fbWFwLmFkZExpc3RlbmVyKCdjbGljaycsIChldmVudDogZ29vZ2xlLm1hcHMuTWFwTW91c2VFdmVudCB8IGdvb2dsZS5tYXBzLkljb25Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4geyB0aGlzLmNsb3NlKCkgfSlcbiAgICAgIH0pKVxuXG4gICAgICBsaXN0ZW5lcnMucHVzaCh0aGlzLl9kYXRhLmFkZExpc3RlbmVyKCdjbGljaycsIChldmVudDogZ29vZ2xlLm1hcHMuRGF0YS5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgICAgIHRoaXMuX25nWm9uZS5ydW4oKCkgPT4geyB0aGlzLmNsb3NlKCkgfSlcbiAgICAgIH0pKVxuICAgIH0pXG5cbiAgICB0aGlzLl9jbGVhbnVwRm4gPSAoKSA9PiB7XG4gICAgICBuZ1Vuc3Vic2NyaWJlLm5leHQoKVxuICAgICAgbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpXG4gICAgICBsaXN0ZW5lcnMuZm9yRWFjaChnb29nbGUubWFwcy5ldmVudC5yZW1vdmVMaXN0ZW5lcilcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fb3ZlcmxheVZpZXcuc2V0TWFwKG51bGwpXG4gIH1cblxufVxuIl19
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ComponentFactoryResolver, Injectable, Injector } from '@angular/core';
|
|
2
|
+
import { Subject } from 'rxjs';
|
|
3
|
+
import { GoogleMapsService } from './google-maps.service';
|
|
4
|
+
import { MAP_CONTROL_DATA } from './map-controls-service';
|
|
5
|
+
export class MapControlRef {
|
|
6
|
+
constructor(_googleMaps, _componentFactoryResolver, _injector, _controlDef) {
|
|
7
|
+
var _a;
|
|
8
|
+
this._googleMaps = _googleMaps;
|
|
9
|
+
this._componentFactoryResolver = _componentFactoryResolver;
|
|
10
|
+
this._injector = _injector;
|
|
11
|
+
this._controlDef = _controlDef;
|
|
12
|
+
this._destroyedSubject = new Subject();
|
|
13
|
+
this.destroyed = this._destroyedSubject.asObservable();
|
|
14
|
+
const component = this._controlDef.component;
|
|
15
|
+
const factory = this._componentFactoryResolver.resolveComponentFactory(component);
|
|
16
|
+
const providers = [];
|
|
17
|
+
if (this._controlDef.data) {
|
|
18
|
+
providers.push({
|
|
19
|
+
provide: MAP_CONTROL_DATA,
|
|
20
|
+
useValue: this._controlDef.data
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
const injector = Injector.create({
|
|
24
|
+
providers,
|
|
25
|
+
parent: this._injector,
|
|
26
|
+
});
|
|
27
|
+
this._componentRef = factory.create(injector);
|
|
28
|
+
this._componentRef.changeDetectorRef.detectChanges();
|
|
29
|
+
const position = (_a = this._controlDef.position) !== null && _a !== void 0 ? _a : google.maps.ControlPosition.LEFT_BOTTOM;
|
|
30
|
+
this._googleMaps.addControl(this._componentRef.location.nativeElement, position);
|
|
31
|
+
this._addedAtPosition = position;
|
|
32
|
+
}
|
|
33
|
+
destroy() {
|
|
34
|
+
const googleMaps = this._googleMaps.googleMap;
|
|
35
|
+
if (googleMaps !== undefined) {
|
|
36
|
+
let idx = -1;
|
|
37
|
+
googleMaps.controls[this._addedAtPosition].forEach((elem, index) => {
|
|
38
|
+
if (elem === this._componentRef.location.nativeElement) {
|
|
39
|
+
idx = index;
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
if (idx === -1) {
|
|
43
|
+
throw Error(`Unable to destroy control. Control not found.`);
|
|
44
|
+
}
|
|
45
|
+
googleMaps.controls[this._addedAtPosition].removeAt(idx);
|
|
46
|
+
}
|
|
47
|
+
this._componentRef.destroy();
|
|
48
|
+
this._destroyedSubject.next();
|
|
49
|
+
this._destroyedSubject.complete();
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
export class GoogleMapsControlsService {
|
|
53
|
+
constructor(_googleMaps, _componentFactoryResolver, _injector) {
|
|
54
|
+
this._googleMaps = _googleMaps;
|
|
55
|
+
this._componentFactoryResolver = _componentFactoryResolver;
|
|
56
|
+
this._injector = _injector;
|
|
57
|
+
}
|
|
58
|
+
add(control) {
|
|
59
|
+
return new MapControlRef(this._googleMaps, this._componentFactoryResolver, this._injector, control);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
GoogleMapsControlsService.decorators = [
|
|
63
|
+
{ type: Injectable }
|
|
64
|
+
];
|
|
65
|
+
GoogleMapsControlsService.ctorParameters = () => [
|
|
66
|
+
{ type: GoogleMapsService },
|
|
67
|
+
{ type: ComponentFactoryResolver },
|
|
68
|
+
{ type: Injector }
|
|
69
|
+
];
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcHMtY29udHJvbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9nb29nbGUtbWFwcy9nb29nbGUtbWFwcy1jb250cm9scy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx3QkFBd0IsRUFBZ0IsVUFBVSxFQUFFLFFBQVEsRUFBa0IsTUFBTSxlQUFlLENBQUE7QUFDNUcsT0FBTyxFQUFjLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUUxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN6RCxPQUFPLEVBQWtDLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUE7QUFFekYsTUFBTSxPQUFPLGFBQWE7SUFTeEIsWUFDbUIsV0FBOEIsRUFDOUIseUJBQW1ELEVBQ25ELFNBQW1CLEVBQ25CLFdBQXVCOztRQUh2QixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFDOUIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEwQjtRQUNuRCxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQ25CLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBWHpCLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUE7UUFhdEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxFQUFFLENBQUE7UUFFdEQsTUFBTSxTQUFTLEdBQVEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUE7UUFDakQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBRWpGLE1BQU0sU0FBUyxHQUFxQixFQUFFLENBQUE7UUFDdEMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtZQUN6QixTQUFTLENBQUMsSUFBSSxDQUFDO2dCQUNiLE9BQU8sRUFBRSxnQkFBZ0I7Z0JBQ3pCLFFBQVEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7YUFDaEMsQ0FBQyxDQUFBO1NBQ0g7UUFDRCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQy9CLFNBQVM7WUFDVCxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVM7U0FDdkIsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLGFBQWEsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBQzdDLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLENBQUE7UUFFcEQsTUFBTSxRQUFRLEdBQUcsTUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsbUNBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFBO1FBRXJGLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUN6QixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQ3pDLFFBQVEsQ0FDVCxDQUFBO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFFBQVEsQ0FBQTtJQUNsQyxDQUFDO0lBRU0sT0FBTztRQUNaLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFBO1FBQzdDLElBQUksVUFBVSxLQUFLLFNBQVMsRUFBRTtZQUM1QixJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQTtZQUNaLFVBQVUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUNqRSxJQUFJLElBQUksS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxhQUFhLEVBQUU7b0JBQ3RELEdBQUcsR0FBRyxLQUFLLENBQUE7aUJBQ1o7WUFDSCxDQUFDLENBQUMsQ0FBQTtZQUNGLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUNkLE1BQU0sS0FBSyxDQUFDLCtDQUErQyxDQUFDLENBQUE7YUFDN0Q7WUFDRCxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQTtTQUN6RDtRQUNELElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUE7UUFFNUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFBO1FBQzdCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQTtJQUNuQyxDQUFDO0NBRUY7QUFHRCxNQUFNLE9BQU8seUJBQXlCO0lBRXBDLFlBQ21CLFdBQThCLEVBQzlCLHlCQUFtRCxFQUNuRCxTQUFtQjtRQUZuQixnQkFBVyxHQUFYLFdBQVcsQ0FBbUI7UUFDOUIsOEJBQXlCLEdBQXpCLHlCQUF5QixDQUEwQjtRQUNuRCxjQUFTLEdBQVQsU0FBUyxDQUFVO0lBQ2xDLENBQUM7SUFFRSxHQUFHLENBQUMsT0FBbUI7UUFDNUIsT0FBTyxJQUFJLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyx5QkFBeUIsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3JHLENBQUM7OztZQVhGLFVBQVU7OztZQXRFRixpQkFBaUI7WUFIakIsd0JBQXdCO1lBQTRCLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsIENvbXBvbmVudFJlZiwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIFN0YXRpY1Byb3ZpZGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBHb29nbGVNYXBzU2VydmljZSB9IGZyb20gJy4vZ29vZ2xlLW1hcHMuc2VydmljZSdcbmltcG9ydCB7IE1hcENvbnRyb2wsIE1hcENvbnRyb2xzU2VydmljZSwgTUFQX0NPTlRST0xfREFUQSB9IGZyb20gJy4vbWFwLWNvbnRyb2xzLXNlcnZpY2UnXG5cbmV4cG9ydCBjbGFzcyBNYXBDb250cm9sUmVmIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95ZWRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuXG4gIHByaXZhdGUgX2NvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT5cbiAgcHJpdmF0ZSBfYWRkZWRBdFBvc2l0aW9uOiBnb29nbGUubWFwcy5Db250cm9sUG9zaXRpb25cblxuICBwdWJsaWMgZGVzdHJveWVkOiBPYnNlcnZhYmxlPHZvaWQ+XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfZ29vZ2xlTWFwczogR29vZ2xlTWFwc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbnRyb2xEZWY6IE1hcENvbnRyb2xcbiAgKSB7XG4gICAgdGhpcy5kZXN0cm95ZWQgPSB0aGlzLl9kZXN0cm95ZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpXG5cbiAgICBjb25zdCBjb21wb25lbnQ6IGFueSA9IHRoaXMuX2NvbnRyb2xEZWYuY29tcG9uZW50XG4gICAgY29uc3QgZmFjdG9yeSA9IHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnQpXG5cbiAgICBjb25zdCBwcm92aWRlcnM6IFN0YXRpY1Byb3ZpZGVyW10gPSBbXVxuICAgIGlmICh0aGlzLl9jb250cm9sRGVmLmRhdGEpIHtcbiAgICAgIHByb3ZpZGVycy5wdXNoKHtcbiAgICAgICAgcHJvdmlkZTogTUFQX0NPTlRST0xfREFUQSxcbiAgICAgICAgdXNlVmFsdWU6IHRoaXMuX2NvbnRyb2xEZWYuZGF0YVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgaW5qZWN0b3IgPSBJbmplY3Rvci5jcmVhdGUoe1xuICAgICAgcHJvdmlkZXJzLFxuICAgICAgcGFyZW50OiB0aGlzLl9pbmplY3RvcixcbiAgICB9KVxuXG4gICAgdGhpcy5fY29tcG9uZW50UmVmID0gZmFjdG9yeS5jcmVhdGUoaW5qZWN0b3IpXG4gICAgdGhpcy5fY29tcG9uZW50UmVmLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKVxuXG4gICAgY29uc3QgcG9zaXRpb24gPSB0aGlzLl9jb250cm9sRGVmLnBvc2l0aW9uID8/IGdvb2dsZS5tYXBzLkNvbnRyb2xQb3NpdGlvbi5MRUZUX0JPVFRPTVxuXG4gICAgdGhpcy5fZ29vZ2xlTWFwcy5hZGRDb250cm9sKFxuICAgICAgdGhpcy5fY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIHRoaXMuX2FkZGVkQXRQb3NpdGlvbiA9IHBvc2l0aW9uXG4gIH1cblxuICBwdWJsaWMgZGVzdHJveSgpIHtcbiAgICBjb25zdCBnb29nbGVNYXBzID0gdGhpcy5fZ29vZ2xlTWFwcy5nb29nbGVNYXBcbiAgICBpZiAoZ29vZ2xlTWFwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBsZXQgaWR4ID0gLTFcbiAgICAgIGdvb2dsZU1hcHMuY29udHJvbHNbdGhpcy5fYWRkZWRBdFBvc2l0aW9uXS5mb3JFYWNoKChlbGVtLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiAoZWxlbSA9PT0gdGhpcy5fY29tcG9uZW50UmVmLmxvY2F0aW9uLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICBpZHggPSBpbmRleFxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYFVuYWJsZSB0byBkZXN0cm95IGNvbnRyb2wuIENvbnRyb2wgbm90IGZvdW5kLmApXG4gICAgICB9XG4gICAgICBnb29nbGVNYXBzLmNvbnRyb2xzW3RoaXMuX2FkZGVkQXRQb3NpdGlvbl0ucmVtb3ZlQXQoaWR4KVxuICAgIH1cbiAgICB0aGlzLl9jb21wb25lbnRSZWYuZGVzdHJveSgpXG5cbiAgICB0aGlzLl9kZXN0cm95ZWRTdWJqZWN0Lm5leHQoKVxuICAgIHRoaXMuX2Rlc3Ryb3llZFN1YmplY3QuY29tcGxldGUoKVxuICB9XG5cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEdvb2dsZU1hcHNDb250cm9sc1NlcnZpY2UgaW1wbGVtZW50cyBNYXBDb250cm9sc1NlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2dvb2dsZU1hcHM6IEdvb2dsZU1hcHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX2luamVjdG9yOiBJbmplY3RvcixcbiAgKSB7IH1cblxuICBwdWJsaWMgYWRkKGNvbnRyb2w6IE1hcENvbnRyb2wpOiBNYXBDb250cm9sUmVmIHtcbiAgICByZXR1cm4gbmV3IE1hcENvbnRyb2xSZWYodGhpcy5fZ29vZ2xlTWFwcywgdGhpcy5fY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCB0aGlzLl9pbmplY3RvciwgY29udHJvbClcbiAgfVxufVxuIl19
|