@bnsights/bbsf-controls 1.0.0
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/README.md +24 -0
- package/bnsights-bbsf-controls.d.ts +26 -0
- package/bnsights-bbsf-controls.metadata.json +1 -0
- package/bundles/bnsights-bbsf-controls.umd.js +6375 -0
- package/bundles/bnsights-bbsf-controls.umd.js.map +1 -0
- package/esm2015/bnsights-bbsf-controls.js +27 -0
- package/esm2015/lib/Shared/Enums/CalendarView.js +8 -0
- package/esm2015/lib/Shared/Enums/ControlLayout.js +6 -0
- package/esm2015/lib/Shared/Enums/Countries.js +247 -0
- package/esm2015/lib/Shared/Enums/FileType.js +22 -0
- package/esm2015/lib/Shared/Enums/FilterType.js +11 -0
- package/esm2015/lib/Shared/Enums/FontSize.js +7 -0
- package/esm2015/lib/Shared/Enums/ForceDirection.js +6 -0
- package/esm2015/lib/Shared/Enums/IconPosition.js +6 -0
- package/esm2015/lib/Shared/Enums/ImageType.js +10 -0
- package/esm2015/lib/Shared/Enums/InputType.js +9 -0
- package/esm2015/lib/Shared/Enums/Insert.js +9 -0
- package/esm2015/lib/Shared/Enums/LanguageMode.js +11 -0
- package/esm2015/lib/Shared/Enums/Misc.js +7 -0
- package/esm2015/lib/Shared/Enums/PagingActionMode.js +6 -0
- package/esm2015/lib/Shared/Enums/Para.js +9 -0
- package/esm2015/lib/Shared/Enums/PickerType.js +7 -0
- package/esm2015/lib/Shared/Enums/SelectMode.js +6 -0
- package/esm2015/lib/Shared/Enums/StartView.js +7 -0
- package/esm2015/lib/Shared/Enums/Style.js +8 -0
- package/esm2015/lib/Shared/Enums/menu-list-enum.js +6 -0
- package/esm2015/lib/Shared/Models/Attribute.js +3 -0
- package/esm2015/lib/Shared/Models/AutocompleteDTO.js +7 -0
- package/esm2015/lib/Shared/Models/AutocompleteOptions.js +29 -0
- package/esm2015/lib/Shared/Models/CalendarEventDTO.js +3 -0
- package/esm2015/lib/Shared/Models/CalendarOptions.js +17 -0
- package/esm2015/lib/Shared/Models/CancelDTO.js +7 -0
- package/esm2015/lib/Shared/Models/CheckBoxOptions.js +12 -0
- package/esm2015/lib/Shared/Models/CustomValidation.js +14 -0
- package/esm2015/lib/Shared/Models/DropdownListItem.js +3 -0
- package/esm2015/lib/Shared/Models/DropdownOptions.js +18 -0
- package/esm2015/lib/Shared/Models/EditPersonalImage.js +7 -0
- package/esm2015/lib/Shared/Models/EnglishArabicDTO.js +3 -0
- package/esm2015/lib/Shared/Models/FileDTO.js +2 -0
- package/esm2015/lib/Shared/Models/FileUploadModel.js +3 -0
- package/esm2015/lib/Shared/Models/FileUploadOptions.js +15 -0
- package/esm2015/lib/Shared/Models/FilterItem.js +8 -0
- package/esm2015/lib/Shared/Models/FormOptions.js +26 -0
- package/esm2015/lib/Shared/Models/HtmlEditorOptions.js +16 -0
- package/esm2015/lib/Shared/Models/ImageUploadOptions.js +18 -0
- package/esm2015/lib/Shared/Models/MapAutoCompleteOptions.js +11 -0
- package/esm2015/lib/Shared/Models/MapAutocompleteDTO.js +3 -0
- package/esm2015/lib/Shared/Models/MultiLingualHtmlEditorOptions.js +19 -0
- package/esm2015/lib/Shared/Models/MultiLingualTextAreaOptions.js +19 -0
- package/esm2015/lib/Shared/Models/MultilingualTextBoxOptions.js +22 -0
- package/esm2015/lib/Shared/Models/MultipleFileUploadModel.js +9 -0
- package/esm2015/lib/Shared/Models/PagingDTO.js +13 -0
- package/esm2015/lib/Shared/Models/PagingOptions.js +43 -0
- package/esm2015/lib/Shared/Models/PhoneOptions.js +15 -0
- package/esm2015/lib/Shared/Models/ProfileImageUploadOptions.js +15 -0
- package/esm2015/lib/Shared/Models/ProfilePictureDTO.js +3 -0
- package/esm2015/lib/Shared/Models/RadioButtonItem.js +3 -0
- package/esm2015/lib/Shared/Models/RadioButtonOptions.js +10 -0
- package/esm2015/lib/Shared/Models/RangeNumber.js +3 -0
- package/esm2015/lib/Shared/Models/SaveDTO.js +7 -0
- package/esm2015/lib/Shared/Models/TagsInputDTO.js +3 -0
- package/esm2015/lib/Shared/Models/TagsInputOptions.js +45 -0
- package/esm2015/lib/Shared/Models/TextAreaOptions.js +14 -0
- package/esm2015/lib/Shared/Models/TextBoxOptions.js +21 -0
- package/esm2015/lib/Shared/Models/ToggleslideOptions.js +9 -0
- package/esm2015/lib/Shared/Models/UploadPersonalImage.js +7 -0
- package/esm2015/lib/Shared/Models/datePickerOptions.js +24 -0
- package/esm2015/lib/Shared/config/environment.js +12 -0
- package/esm2015/lib/Shared/services/ControlUtility.js +114 -0
- package/esm2015/lib/Shared/services/OnPagingFiltersChange.service.js +22 -0
- package/esm2015/lib/Shared/services/validationErrorMassage.service.js +122 -0
- package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +236 -0
- package/esm2015/lib/controls/Calendar/Calendar.component.js +176 -0
- package/esm2015/lib/controls/CheckBox/CheckBox.component.js +111 -0
- package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +148 -0
- package/esm2015/lib/controls/DropdownList/DropdownList.component.js +172 -0
- package/esm2015/lib/controls/FileUplaod/FileUplaod.component.js +319 -0
- package/esm2015/lib/controls/Form/Form.component.js +82 -0
- package/esm2015/lib/controls/HtmlEditor/HtmlEditor.component.js +202 -0
- package/esm2015/lib/controls/ImageUpload/ImageUpload.component.js +304 -0
- package/esm2015/lib/controls/MapAutoComplete/MapAutoComplete.component.js +283 -0
- package/esm2015/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.js +383 -0
- package/esm2015/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.js +325 -0
- package/esm2015/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.js +326 -0
- package/esm2015/lib/controls/Paging/JwPagination.component.js +127 -0
- package/esm2015/lib/controls/Paging/Paging.component.js +215 -0
- package/esm2015/lib/controls/Phone/Phone.component.js +114 -0
- package/esm2015/lib/controls/ProfileImageUploader/ProfileImageUploader.component.js +326 -0
- package/esm2015/lib/controls/RadioButton/RadioButton.component.js +98 -0
- package/esm2015/lib/controls/TagsInput/TagsInput.component.js +205 -0
- package/esm2015/lib/controls/TextArea/TextArea.component.js +148 -0
- package/esm2015/lib/controls/TextBox/TextBox.component.js +217 -0
- package/esm2015/lib/controls/Toggleslide/toggleslide.component.js +71 -0
- package/esm2015/lib/controls/bbsf-controls.module.js +208 -0
- package/esm2015/public-api.js +101 -0
- package/fesm2015/bnsights-bbsf-controls.js +5794 -0
- package/fesm2015/bnsights-bbsf-controls.js.map +1 -0
- package/lib/Shared/Enums/CalendarView.d.ts +6 -0
- package/lib/Shared/Enums/ControlLayout.d.ts +4 -0
- package/lib/Shared/Enums/Countries.d.ts +245 -0
- package/lib/Shared/Enums/FileType.d.ts +20 -0
- package/lib/Shared/Enums/FilterType.d.ts +9 -0
- package/lib/Shared/Enums/FontSize.d.ts +5 -0
- package/lib/Shared/Enums/ForceDirection.d.ts +4 -0
- package/lib/Shared/Enums/IconPosition.d.ts +4 -0
- package/lib/Shared/Enums/ImageType.d.ts +8 -0
- package/lib/Shared/Enums/InputType.d.ts +7 -0
- package/lib/Shared/Enums/Insert.d.ts +7 -0
- package/lib/Shared/Enums/LanguageMode.d.ts +9 -0
- package/lib/Shared/Enums/Misc.d.ts +5 -0
- package/lib/Shared/Enums/PagingActionMode.d.ts +4 -0
- package/lib/Shared/Enums/Para.d.ts +7 -0
- package/lib/Shared/Enums/PickerType.d.ts +5 -0
- package/lib/Shared/Enums/SelectMode.d.ts +4 -0
- package/lib/Shared/Enums/StartView.d.ts +5 -0
- package/lib/Shared/Enums/Style.d.ts +6 -0
- package/lib/Shared/Enums/menu-list-enum.d.ts +4 -0
- package/lib/Shared/Models/Attribute.d.ts +4 -0
- package/lib/Shared/Models/AutocompleteDTO.d.ts +4 -0
- package/lib/Shared/Models/AutocompleteOptions.d.ts +74 -0
- package/lib/Shared/Models/CalendarEventDTO.d.ts +8 -0
- package/lib/Shared/Models/CalendarOptions.d.ts +29 -0
- package/lib/Shared/Models/CancelDTO.d.ts +5 -0
- package/lib/Shared/Models/CheckBoxOptions.d.ts +38 -0
- package/lib/Shared/Models/CustomValidation.d.ts +10 -0
- package/lib/Shared/Models/DropdownListItem.d.ts +4 -0
- package/lib/Shared/Models/DropdownOptions.d.ts +67 -0
- package/lib/Shared/Models/EditPersonalImage.d.ts +5 -0
- package/lib/Shared/Models/EnglishArabicDTO.d.ts +4 -0
- package/lib/Shared/Models/FileDTO.d.ts +19 -0
- package/lib/Shared/Models/FileUploadModel.d.ts +4 -0
- package/lib/Shared/Models/FileUploadOptions.d.ts +56 -0
- package/lib/Shared/Models/FilterItem.d.ts +13 -0
- package/lib/Shared/Models/FormOptions.d.ts +15 -0
- package/lib/Shared/Models/HtmlEditorOptions.d.ts +66 -0
- package/lib/Shared/Models/ImageUploadOptions.d.ts +59 -0
- package/lib/Shared/Models/MapAutoCompleteOptions.d.ts +44 -0
- package/lib/Shared/Models/MapAutocompleteDTO.d.ts +7 -0
- package/lib/Shared/Models/MultiLingualHtmlEditorOptions.d.ts +97 -0
- package/lib/Shared/Models/MultiLingualTextAreaOptions.d.ts +85 -0
- package/lib/Shared/Models/MultilingualTextBoxOptions.d.ts +83 -0
- package/lib/Shared/Models/MultipleFileUploadModel.d.ts +7 -0
- package/lib/Shared/Models/PagingDTO.d.ts +11 -0
- package/lib/Shared/Models/PagingOptions.d.ts +51 -0
- package/lib/Shared/Models/PhoneOptions.d.ts +56 -0
- package/lib/Shared/Models/ProfileImageUploadOptions.d.ts +64 -0
- package/lib/Shared/Models/ProfilePictureDTO.d.ts +12 -0
- package/lib/Shared/Models/RadioButtonItem.d.ts +4 -0
- package/lib/Shared/Models/RadioButtonOptions.d.ts +44 -0
- package/lib/Shared/Models/RangeNumber.d.ts +4 -0
- package/lib/Shared/Models/SaveDTO.d.ts +5 -0
- package/lib/Shared/Models/TagsInputDTO.d.ts +4 -0
- package/lib/Shared/Models/TagsInputOptions.d.ts +91 -0
- package/lib/Shared/Models/TextAreaOptions.d.ts +60 -0
- package/lib/Shared/Models/TextBoxOptions.d.ts +70 -0
- package/lib/Shared/Models/ToggleslideOptions.d.ts +36 -0
- package/lib/Shared/Models/UploadPersonalImage.d.ts +5 -0
- package/lib/Shared/Models/datePickerOptions.d.ts +65 -0
- package/lib/Shared/config/environment.d.ts +1 -0
- package/lib/Shared/services/ControlUtility.d.ts +23 -0
- package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +7 -0
- package/lib/Shared/services/validationErrorMassage.service.d.ts +13 -0
- package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +51 -0
- package/lib/controls/Calendar/Calendar.component.d.ts +40 -0
- package/lib/controls/CheckBox/CheckBox.component.d.ts +33 -0
- package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +41 -0
- package/lib/controls/DropdownList/DropdownList.component.d.ts +47 -0
- package/lib/controls/FileUplaod/FileUplaod.component.d.ts +49 -0
- package/lib/controls/Form/Form.component.d.ts +15 -0
- package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +44 -0
- package/lib/controls/ImageUpload/ImageUpload.component.d.ts +64 -0
- package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +52 -0
- package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +58 -0
- package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +59 -0
- package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +57 -0
- package/lib/controls/Paging/JwPagination.component.d.ts +24 -0
- package/lib/controls/Paging/Paging.component.d.ts +44 -0
- package/lib/controls/Phone/Phone.component.d.ts +37 -0
- package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +65 -0
- package/lib/controls/RadioButton/RadioButton.component.d.ts +31 -0
- package/lib/controls/TagsInput/TagsInput.component.d.ts +47 -0
- package/lib/controls/TextArea/TextArea.component.d.ts +41 -0
- package/lib/controls/TextBox/TextBox.component.d.ts +50 -0
- package/lib/controls/Toggleslide/toggleslide.component.d.ts +26 -0
- package/lib/controls/bbsf-controls.module.d.ts +10 -0
- package/package.json +85 -0
- package/public-api.d.ts +66 -0
- package/src/lib/assets/Style.css +1149 -0
- package/src/lib/assets/i18n/ar.json +29 -0
- package/src/lib/assets/i18n/en.json +24 -0
- package/src/lib/assets/images/imagenotfound.png +0 -0
- package/src/lib/assets/images/uploadimg.png +0 -0
- package/src/lib/assets/images/userimg.png +0 -0
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { Component, Input, Optional, NgZone, ViewChild, EventEmitter, Output } from '@angular/core';
|
|
2
|
+
import { FormControl, Validators, ControlContainer, FormGroupDirective } from '@angular/forms';
|
|
3
|
+
import { ErrorMassageValidation } from '../../Shared/services/validationErrorMassage.service';
|
|
4
|
+
import { ControlUtility } from '../../Shared/services/ControlUtility';
|
|
5
|
+
import { MapAutocompleteDTO } from '../../Shared/Models/MapAutocompleteDTO';
|
|
6
|
+
import { Title } from '@angular/platform-browser';
|
|
7
|
+
import { MapsAPILoader, LazyMapsAPILoader } from '@agm/core';
|
|
8
|
+
import { BBSFTranslateService, ControlValidationService, UtilityService } from '@bnsights/bbsf-utilities';
|
|
9
|
+
export class MapAutoCompleteComponent {
|
|
10
|
+
constructor(mapsAPILoader, ngZone, titleService, ErrorHandler, controlUtility, controlContainer, MapAutoCompleteControlHost, UtilityService, translate, controlValidationService) {
|
|
11
|
+
this.mapsAPILoader = mapsAPILoader;
|
|
12
|
+
this.ngZone = ngZone;
|
|
13
|
+
this.titleService = titleService;
|
|
14
|
+
this.ErrorHandler = ErrorHandler;
|
|
15
|
+
this.controlUtility = controlUtility;
|
|
16
|
+
this.controlContainer = controlContainer;
|
|
17
|
+
this.MapAutoCompleteControlHost = MapAutoCompleteControlHost;
|
|
18
|
+
this.UtilityService = UtilityService;
|
|
19
|
+
this.translate = translate;
|
|
20
|
+
this.controlValidationService = controlValidationService;
|
|
21
|
+
this.OnChange = new EventEmitter();
|
|
22
|
+
this.MapAutoCompleteModel = new MapAutocompleteDTO();
|
|
23
|
+
this.CurrentLanguage = "";
|
|
24
|
+
this.onAutocompleteSelected = new EventEmitter();
|
|
25
|
+
this.onGermanAddressMapped = new EventEmitter();
|
|
26
|
+
this.onLocationSelected = new EventEmitter();
|
|
27
|
+
this.markAllAsTouched = false;
|
|
28
|
+
this.validationRules = [];
|
|
29
|
+
this.validationRulesasync = [];
|
|
30
|
+
this.resetError = () => {
|
|
31
|
+
this.controlValidationService.RemoveGlobalError();
|
|
32
|
+
};
|
|
33
|
+
//External Method
|
|
34
|
+
this.RemoveRequiredValidation = () => {
|
|
35
|
+
this.controlUtility.RemoveRequiredValidation(this.MapAutoCompleteFormControl, this.validationRules, this.options);
|
|
36
|
+
};
|
|
37
|
+
//External Method
|
|
38
|
+
this.AddRequiredValidation = () => {
|
|
39
|
+
this.controlUtility.AddRequiredValidation(this.MapAutoCompleteFormControl, this.validationRules, this.options);
|
|
40
|
+
};
|
|
41
|
+
//External Method
|
|
42
|
+
this.RemoveCustomValidation = (CustomValidation) => {
|
|
43
|
+
this.controlUtility.RemoveCustomValidation(this.MapAutoCompleteFormControl, this.validationRules, CustomValidation);
|
|
44
|
+
};
|
|
45
|
+
//External Method
|
|
46
|
+
this.AddCustomValidation = (CustomValidation) => {
|
|
47
|
+
this.controlUtility.AddCustomValidation(this.MapAutoCompleteFormControl, this.validationRules, CustomValidation);
|
|
48
|
+
};
|
|
49
|
+
//External Method
|
|
50
|
+
this.IsValid = () => {
|
|
51
|
+
this.controlUtility.IsValid(this.MapAutoCompleteFormControl);
|
|
52
|
+
};
|
|
53
|
+
MapAutoCompleteComponent.controlContainerstatic = this.controlContainer;
|
|
54
|
+
this.CurrentLanguage = translate.currentLang != undefined ? translate.currentLang : translate.defaultLang;
|
|
55
|
+
}
|
|
56
|
+
ngOnInit() {
|
|
57
|
+
this.controlValidationService.isCreatedBefor = false;
|
|
58
|
+
this.MapAutoCompleteModel = new MapAutocompleteDTO();
|
|
59
|
+
this.translate.onLangChange.subscribe((event) => {
|
|
60
|
+
this.CurrentLanguage = event.lang;
|
|
61
|
+
;
|
|
62
|
+
if (this.CurrentLanguage == 'ar')
|
|
63
|
+
this.mapsAPILoader["_config"]["localeId"] = "ar-EG";
|
|
64
|
+
if (this.CurrentLanguage == 'en')
|
|
65
|
+
this.mapsAPILoader["_config"]["localeId"] = "en-US";
|
|
66
|
+
this.mapsAPILoader["_scriptLoadingPromise"] = null;
|
|
67
|
+
this.mapsAPILoader["_config"]["apiKey"] = `AIzaSyA75ojhZhEhDaO3vfn3mxTY32sq5flAwlY&language=${this.CurrentLanguage}`;
|
|
68
|
+
var ScriptTag = document.getElementById(this.mapsAPILoader["_SCRIPT_ID"]);
|
|
69
|
+
if (ScriptTag)
|
|
70
|
+
ScriptTag.remove();
|
|
71
|
+
var elements = document.getElementsByClassName("pac-container");
|
|
72
|
+
while (elements.length > 0)
|
|
73
|
+
elements[0].remove();
|
|
74
|
+
let window = this.mapsAPILoader["_windowRef"].getNativeWindow();
|
|
75
|
+
window.google = null;
|
|
76
|
+
this.LazyMapsAPILoader = new LazyMapsAPILoader({
|
|
77
|
+
// &language=${UtilityService.CurrentLanguage}
|
|
78
|
+
apiKey: `AIzaSyA75ojhZhEhDaO3vfn3mxTY32sq5flAwlY&language=${this.CurrentLanguage}`,
|
|
79
|
+
libraries: ['places'],
|
|
80
|
+
}, this.mapsAPILoader["_windowRef"], this.mapsAPILoader["_documentRef"], this.mapsAPILoader["_config"]["localeId"]);
|
|
81
|
+
this.LazyMapsAPILoader.load().then(() => {
|
|
82
|
+
let autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement, {
|
|
83
|
+
types: ["address"]
|
|
84
|
+
});
|
|
85
|
+
autocomplete.addListener('place_changed', ( /**
|
|
86
|
+
* @return {?}
|
|
87
|
+
*/() => {
|
|
88
|
+
this.ngZone.run(( /**
|
|
89
|
+
* @return {?}
|
|
90
|
+
*/() => {
|
|
91
|
+
// get the place result
|
|
92
|
+
/** @type {?} */
|
|
93
|
+
const place = autocomplete.getPlace();
|
|
94
|
+
/** @type {?} */
|
|
95
|
+
const germanAddress = {
|
|
96
|
+
gmID: place.id,
|
|
97
|
+
icon: place.icon,
|
|
98
|
+
url: place.url,
|
|
99
|
+
placeID: place.place_id,
|
|
100
|
+
displayAddress: place.formatted_address,
|
|
101
|
+
name: place.name,
|
|
102
|
+
vicinity: place.vicinity,
|
|
103
|
+
locality: {},
|
|
104
|
+
state: {},
|
|
105
|
+
country: {},
|
|
106
|
+
geoLocation: { latitude: -1, longitude: -1 },
|
|
107
|
+
};
|
|
108
|
+
if (place.geometry && place.geometry.location) {
|
|
109
|
+
germanAddress.geoLocation.latitude = place.geometry.location.lat();
|
|
110
|
+
germanAddress.geoLocation.longitude = place.geometry.location.lng();
|
|
111
|
+
}
|
|
112
|
+
place.address_components.forEach(( /**
|
|
113
|
+
* @param {?} value
|
|
114
|
+
* @return {?}
|
|
115
|
+
*//**
|
|
116
|
+
* @param {?} value
|
|
117
|
+
* @return {?}
|
|
118
|
+
*/ value => {
|
|
119
|
+
if (value.types.indexOf('street_number') > -1) {
|
|
120
|
+
germanAddress["streetNumber"] = value.short_name;
|
|
121
|
+
}
|
|
122
|
+
if (value.types.indexOf('route') > -1) {
|
|
123
|
+
germanAddress["streetName"] = value.long_name;
|
|
124
|
+
}
|
|
125
|
+
if (value.types.indexOf('postal_code') > -1) {
|
|
126
|
+
germanAddress["postalCode"] = Number(value.short_name);
|
|
127
|
+
}
|
|
128
|
+
if (value.types.indexOf('sublocality') > -1) {
|
|
129
|
+
germanAddress["sublocality"] = value.long_name;
|
|
130
|
+
}
|
|
131
|
+
if (value.types.indexOf('locality') > -1) {
|
|
132
|
+
germanAddress.locality["long"] = value.long_name;
|
|
133
|
+
germanAddress.locality["short"] = value.short_name;
|
|
134
|
+
}
|
|
135
|
+
if (value.types.indexOf('administrative_area_level_1') > -1) {
|
|
136
|
+
germanAddress.state["long"] = value.long_name;
|
|
137
|
+
germanAddress.state["short"] = value.short_name;
|
|
138
|
+
}
|
|
139
|
+
if (value.types.indexOf('country') > -1) {
|
|
140
|
+
germanAddress.country["long"] = value.long_name;
|
|
141
|
+
germanAddress.country["short"] = value.short_name;
|
|
142
|
+
}
|
|
143
|
+
if (value.types.indexOf('administrative_area_level_3') > -1) {
|
|
144
|
+
germanAddress.locality["short"] = value.short_name;
|
|
145
|
+
}
|
|
146
|
+
}));
|
|
147
|
+
this.onGermanAddressMapped.emit(germanAddress);
|
|
148
|
+
this.GermanAddressMapped(germanAddress);
|
|
149
|
+
if (!place.place_id || place.geometry === undefined || place.geometry === null) {
|
|
150
|
+
// place result is not valid
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
// show dialog to select a address from the input
|
|
155
|
+
// emit failed event
|
|
156
|
+
}
|
|
157
|
+
// this.address = place.formatted_address;
|
|
158
|
+
this.onAutocompleteSelected.emit(place);
|
|
159
|
+
this.AutocompleteSelected(place);
|
|
160
|
+
this.onLocationSelected.emit({
|
|
161
|
+
latitude: place.geometry.location.lat(),
|
|
162
|
+
longitude: place.geometry.location.lng()
|
|
163
|
+
});
|
|
164
|
+
}));
|
|
165
|
+
}));
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
;
|
|
169
|
+
if (this.CurrentLanguage == 'ar')
|
|
170
|
+
this.mapsAPILoader["_config"]["localeId"] = "ar-EG";
|
|
171
|
+
if (this.CurrentLanguage == 'en')
|
|
172
|
+
this.mapsAPILoader["_config"]["localeId"] = "en-US";
|
|
173
|
+
this.mapsAPILoader["_scriptLoadingPromise"] = null;
|
|
174
|
+
this.mapsAPILoader["_config"]["apiKey"] = `AIzaSyA75ojhZhEhDaO3vfn3mxTY32sq5flAwlY&language=${this.CurrentLanguage}`;
|
|
175
|
+
var leftSection = document.getElementById(this.mapsAPILoader["_SCRIPT_ID"]);
|
|
176
|
+
if (leftSection)
|
|
177
|
+
leftSection.remove();
|
|
178
|
+
this.LazyMapsAPILoader = new LazyMapsAPILoader({
|
|
179
|
+
apiKey: `AIzaSyA75ojhZhEhDaO3vfn3mxTY32sq5flAwlY&language=${this.CurrentLanguage}`,
|
|
180
|
+
libraries: ['places'],
|
|
181
|
+
}, this.mapsAPILoader["_windowRef"], this.mapsAPILoader["_documentRef"], this.mapsAPILoader["_config"]["localeId"]);
|
|
182
|
+
this.LazyMapsAPILoader.load();
|
|
183
|
+
this.mapsAPILoader.load().then(() => {
|
|
184
|
+
let autocomplete = new google.maps.places.Autocomplete(this.searchElementRef.nativeElement, {
|
|
185
|
+
types: ["address"]
|
|
186
|
+
});
|
|
187
|
+
});
|
|
188
|
+
this.group.addControl(this.options.Name, new FormControl(''));
|
|
189
|
+
this.MapAutoCompleteFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
|
|
190
|
+
if (this.options.IsRequired) {
|
|
191
|
+
this.validationRules.push(Validators.required);
|
|
192
|
+
}
|
|
193
|
+
if (this.options.LabelKey != null && this.options.LabelKey != "")
|
|
194
|
+
this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
|
|
195
|
+
this.MapAutoCompleteFormControl.setValidators(this.validationRules);
|
|
196
|
+
this.MapAutoCompleteFormControl.setAsyncValidators(this.validationRulesasync);
|
|
197
|
+
if (this.options.IsDisabled) {
|
|
198
|
+
this.MapAutoCompleteFormControl.disable();
|
|
199
|
+
}
|
|
200
|
+
if (this.options.Value != null) {
|
|
201
|
+
this.MapAutoCompleteFormControl.setValue(this.options.Value);
|
|
202
|
+
}
|
|
203
|
+
if (this.options.CustomValidation.length > 0) {
|
|
204
|
+
let Validations = this.options.CustomValidation;
|
|
205
|
+
for (let index = 0; index < Validations.length; index++) {
|
|
206
|
+
const Validation = Validations[index];
|
|
207
|
+
this.validationRules.push(Validation.functionBody);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
this.MapAutoCompleteControlHost.ngSubmit.subscribe((value) => {
|
|
211
|
+
this.group.markAllAsTouched();
|
|
212
|
+
this.markAllAsTouched = true;
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
ngAfterViewInit() {
|
|
216
|
+
if (this.options.AttributeList != null) {
|
|
217
|
+
var element = document.getElementById(this.options.Name);
|
|
218
|
+
for (let index = 0; index < this.options.AttributeList.length; index++) {
|
|
219
|
+
element.setAttribute(this.options.AttributeList[index].Key, this.options.AttributeList[index].value);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
showGlobalError() {
|
|
224
|
+
this.controlUtility.showGlobalError();
|
|
225
|
+
}
|
|
226
|
+
getErrorValidation(ErrorList) {
|
|
227
|
+
if (this.markAllAsTouched && this.group.invalid) {
|
|
228
|
+
this.showGlobalError();
|
|
229
|
+
this.markAllAsTouched = false;
|
|
230
|
+
}
|
|
231
|
+
return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
|
|
232
|
+
}
|
|
233
|
+
AutocompleteSelected(result) {
|
|
234
|
+
this.MapAutoCompleteModel == new MapAutocompleteDTO();
|
|
235
|
+
this.MapAutoCompleteModel.Text = result.formatted_address;
|
|
236
|
+
this.MapAutoCompleteModel.PlaceID = result.place_id;
|
|
237
|
+
this.MapAutoCompleteModel.GoogleMapsURL = result.url;
|
|
238
|
+
}
|
|
239
|
+
LocationSelected(location) {
|
|
240
|
+
this.MapAutoCompleteModel.Latitude = location.latitude;
|
|
241
|
+
this.MapAutoCompleteModel.Longitude = location.longitude;
|
|
242
|
+
this.MapAutoCompleteFormControl.setValue(null);
|
|
243
|
+
this.MapAutoCompleteFormControl.setValue(this.MapAutoCompleteModel);
|
|
244
|
+
}
|
|
245
|
+
GermanAddressMapped(result) {
|
|
246
|
+
this.MapAutoCompleteModel == new MapAutocompleteDTO();
|
|
247
|
+
this.MapAutoCompleteModel.Text = result.displayAddress;
|
|
248
|
+
this.MapAutoCompleteModel.PlaceID = result.placeID;
|
|
249
|
+
this.MapAutoCompleteModel.GoogleMapsURL = result.url;
|
|
250
|
+
this.MapAutoCompleteModel.Latitude = result.geoLocation.latitude;
|
|
251
|
+
this.MapAutoCompleteModel.Longitude = result.geoLocation.longitude;
|
|
252
|
+
this.MapAutoCompleteFormControl.setValue(this.MapAutoCompleteModel);
|
|
253
|
+
this.group.controls[this.options.Name].setValue(this.MapAutoCompleteModel);
|
|
254
|
+
this.OnChange.emit(this.MapAutoCompleteFormControl.value);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
MapAutoCompleteComponent.controlContainerstatic = null;
|
|
258
|
+
MapAutoCompleteComponent.decorators = [
|
|
259
|
+
{ type: Component, args: [{
|
|
260
|
+
selector: 'BBSF-MapAutoComplete',
|
|
261
|
+
template: "<div class=\"b-control b-map-auto-complete\">\r\n <div class=\"form-group row validate is-invalid\" [formGroup]=\"group\">\r\n <label class=\"b-label col-form-label col-sm-12 \" [ngClass]=\"(options.ViewType==1)?'col-md-12':'col-md-3'\" [hidden]=\"options.HideLabel\">\r\n {{options.LabelValue}}\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger Required-text\" aria-required=\"true\">*</span>\r\n </label>\r\n\r\n <div class=\"col-sm-12\" [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\">\r\n <input class=\"form-control bnsights-control {{options.ExtraClasses}} \"\r\n value=\"{{MapAutoCompleteModel}}\"\r\n aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n \r\n [class.is-invalid]=\"MapAutoCompleteFormControl.invalid && MapAutoCompleteFormControl.touched\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\"\r\n matGoogleMapsAutocomplete #search\r\n (onAutocompleteSelected)=\"AutocompleteSelected($event)\"\r\n (onLocationSelected)=\"LocationSelected($event)\"\r\n (onGermanAddressMapped)=\"GermanAddressMapped($event)\" />\r\n\r\n \r\n\r\n <div class=\"text-danger Required-text\"\r\n *ngIf=\"(MapAutoCompleteFormControl.invalid && MapAutoCompleteFormControl.touched)\">\r\n {{getErrorValidation(MapAutoCompleteFormControl.errors|keyvalue)}}\r\n </div>\r\n\r\n <div class=\"d-flex justify-content-between align-items-center\">\r\n <div class=\"control-desc text-dark\">{{options.LabelDescription}}</div>\r\n </div>\r\n\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n\r\n </div>\r\n </div>\r\n</div>\r\n",
|
|
262
|
+
styles: [".example-form{min-width:150px;max-width:500px;width:100%}.example-full-width{width:100%}.flip_V{transform:scaleY(-1)}\n"]
|
|
263
|
+
},] }
|
|
264
|
+
];
|
|
265
|
+
MapAutoCompleteComponent.ctorParameters = () => [
|
|
266
|
+
{ type: MapsAPILoader },
|
|
267
|
+
{ type: NgZone },
|
|
268
|
+
{ type: Title },
|
|
269
|
+
{ type: ErrorMassageValidation },
|
|
270
|
+
{ type: ControlUtility },
|
|
271
|
+
{ type: ControlContainer, decorators: [{ type: Optional }] },
|
|
272
|
+
{ type: FormGroupDirective },
|
|
273
|
+
{ type: UtilityService },
|
|
274
|
+
{ type: BBSFTranslateService },
|
|
275
|
+
{ type: ControlValidationService }
|
|
276
|
+
];
|
|
277
|
+
MapAutoCompleteComponent.propDecorators = {
|
|
278
|
+
group: [{ type: Input }],
|
|
279
|
+
options: [{ type: Input }],
|
|
280
|
+
OnChange: [{ type: Output }],
|
|
281
|
+
searchElementRef: [{ type: ViewChild, args: ["search", { static: false },] }]
|
|
282
|
+
};
|
|
283
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWFwQXV0b0NvbXBsZXRlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9NYXBBdXRvQ29tcGxldGUvTWFwQXV0b0NvbXBsZXRlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBVyxRQUFRLEVBQUUsTUFBTSxFQUFjLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pJLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUE4QixnQkFBZ0IsRUFBRSxrQkFBa0IsRUFBaUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxSixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzREFBc0QsQ0FBQztBQUM5RixPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRWxELE9BQU8sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDN0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHdCQUF3QixFQUFFLGNBQWMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBUTFHLE1BQU0sT0FBTyx3QkFBd0I7SUFJbkMsWUFBb0IsYUFBNEIsRUFDdEMsTUFBYyxFQUFVLFlBQW1CLEVBQVUsWUFBb0MsRUFBVSxjQUE4QixFQUFzQixnQkFBa0MsRUFBUywwQkFBOEMsRUFBUyxjQUE2QixFQUFTLFNBQStCLEVBQVMsd0JBQWlEO1FBRDlXLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQ3RDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFBVSxpQkFBWSxHQUFaLFlBQVks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cEUsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDMUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzNELENBQUM7O0FBelFNLCtDQUFzQixHQUFHLElBQUksQ0FBQzs7WUFUdEMsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLDgwREFBK0M7O2FBRWhEOzs7WUFQUSxhQUFhO1lBUmdDLE1BQU07WUFNbkQsS0FBSztZQUpMLHNCQUFzQjtZQUN0QixjQUFjO1lBRnVDLGdCQUFnQix1QkFxQmtFLFFBQVE7WUFyQnhFLGtCQUFrQjtZQVF6QyxjQUFjO1lBQTlELG9CQUFvQjtZQUFFLHdCQUF3Qjs7O29CQWtCcEQsS0FBSztzQkFDTCxLQUFLO3VCQUNMLE1BQU07K0JBUU4sU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFDLE1BQU0sRUFBQyxLQUFLLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJkZWNsYXJlIGNvbnN0IGdvb2dsZTogYW55XHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgRG9DaGVjaywgT3B0aW9uYWwsIE5nWm9uZSwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBFdmVudEVtaXR0ZXIsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIENvbnRyb2xDb250YWluZXIsIEZvcm1Hcm91cERpcmVjdGl2ZSwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IEVycm9yTWFzc2FnZVZhbGlkYXRpb24gfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvdmFsaWRhdGlvbkVycm9yTWFzc2FnZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29udHJvbFV0aWxpdHkgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBNYXBBdXRvQ29tcGxldGVPcHRpb25zIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9NYXBBdXRvQ29tcGxldGVPcHRpb25zJztcclxuaW1wb3J0IHsgTWFwQXV0b2NvbXBsZXRlRFRPIH0gZnJvbSAnLi4vLi4vU2hhcmVkL01vZGVscy9NYXBBdXRvY29tcGxldGVEVE8nO1xyXG5pbXBvcnQgeyBUaXRsZSB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xyXG5pbXBvcnQgeyBMb2NhdGlvbiwgQXBwZWFyYW5jZSwgR2VybWFuQWRkcmVzcywgTWF0R29vZ2xlTWFwc0F1dG9jb21wbGV0ZUNvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyLW1hdGVyaWFsLWV4dGVuc2lvbnMvZ29vZ2xlLW1hcHMtYXV0b2NvbXBsZXRlJztcclxuaW1wb3J0IHsgTWFwc0FQSUxvYWRlciwgTGF6eU1hcHNBUElMb2FkZXIgfSBmcm9tICdAYWdtL2NvcmUnO1xyXG5pbXBvcnQgeyBCQlNGVHJhbnNsYXRlU2VydmljZSwgQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ0JCU0YtTWFwQXV0b0NvbXBsZXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vTWFwQXV0b0NvbXBsZXRlLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9NYXBBdXRvQ29tcGxldGUuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIE1hcEF1dG9Db21wbGV0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcblxyXG5cclxuICBzdGF0aWMgY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IG51bGw7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtYXBzQVBJTG9hZGVyOiBNYXBzQVBJTG9hZGVyLFxyXG4gICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSwgcHJpdmF0ZSB0aXRsZVNlcnZpY2U6IFRpdGxlLCBwcml2YXRlIEVycm9ySGFuZGxlcjogRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiwgcHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHksIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lciwgcHVibGljIE1hcEF1dG9Db21wbGV0ZUNvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmUscHJpdmF0ZSBVdGlsaXR5U2VydmljZTpVdGlsaXR5U2VydmljZSxwcml2YXRlIHRyYW5zbGF0ZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UscHJpdmF0ZSBjb250cm9sVmFsaWRhdGlvblNlcnZpY2U6Q29udHJvbFZhbGlkYXRpb25TZXJ2aWNlKSB7XHJcbiAgICBNYXBBdXRvQ29tcGxldGVDb21wb25lbnQuY29udHJvbENvbnRhaW5lcnN0YXRpYyA9IHRoaXMuY29udHJvbENvbnRhaW5lcjtcclxuICAgIHRoaXMuQ3VycmVudExhbmd1YWdlID0gdHJhbnNsYXRlLmN1cnJlbnRMYW5nICE9IHVuZGVmaW5lZCA/IHRyYW5zbGF0ZS5jdXJyZW50TGFuZyA6IHRyYW5zbGF0ZS5kZWZhdWx0TGFuZ1xyXG5cclxuICB9XHJcbiAgQElucHV0KCkgZ3JvdXA6IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBvcHRpb25zOiBNYXBBdXRvQ29tcGxldGVPcHRpb25zO1xyXG4gIEBPdXRwdXQoKSBPbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcclxuICBNYXBBdXRvQ29tcGxldGVNb2RlbDogTWFwQXV0b2NvbXBsZXRlRFRPPW5ldyBNYXBBdXRvY29tcGxldGVEVE8oKTtcclxuICBDdXJyZW50TGFuZ3VhZ2U6IHN0cmluZyA9IFwiXCI7XHJcbiAgb25BdXRvY29tcGxldGVTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBvbkdlcm1hbkFkZHJlc3NNYXBwZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgb25Mb2NhdGlvblNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBWaWV3Q2hpbGQoXCJzZWFyY2hcIiwge3N0YXRpYzpmYWxzZX0pXHJcbiAgcHVibGljIHNlYXJjaEVsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XHJcbiAgTWF0R29vZ2xlTWFwc0F1dG9jb21wbGV0ZUNvbXBvbmVudDogTWF0R29vZ2xlTWFwc0F1dG9jb21wbGV0ZUNvbXBvbmVudFxyXG4gIExhenlNYXBzQVBJTG9hZGVyOiBMYXp5TWFwc0FQSUxvYWRlclxyXG4gIG1hcmtBbGxBc1RvdWNoZWQ6Ym9vbGVhbj1mYWxzZTtcclxuICB2YWxpZGF0aW9uUnVsZXMgPSBbXTtcclxuICB2YWxpZGF0aW9uUnVsZXNhc3luYyA9IFtdO1xyXG4gIG5nT25Jbml0KCkge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UuaXNDcmVhdGVkQmVmb3IgPSBmYWxzZVxyXG5cclxuICAgIHRoaXMuTWFwQXV0b0NvbXBsZXRlTW9kZWw9IG5ldyBNYXBBdXRvY29tcGxldGVEVE8oKTtcclxuICAgIHRoaXMudHJhbnNsYXRlLm9uTGFuZ0NoYW5nZS5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRoaXMuQ3VycmVudExhbmd1YWdlID0gZXZlbnQubGFuZztcclxuICAgICAgO1xyXG4gICAgICBpZiAodGhpcy5DdXJyZW50TGFuZ3VhZ2UgPT0gJ2FyJylcclxuICAgICAgICB0aGlzLm1hcHNBUElMb2FkZXJbXCJfY29uZmlnXCJdW1wibG9jYWxlSWRcIl0gPSBcImFyLUVHXCI7XHJcbiAgICAgIGlmICh0aGlzLkN1cnJlbnRMYW5ndWFnZSA9PSAnZW4nKVxyXG4gICAgICAgIHRoaXMubWFwc0FQSUxvYWRlcltcIl9jb25maWdcIl1bXCJsb2NhbGVJZFwiXSA9IFwiZW4tVVNcIjtcclxuICAgICAgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX3NjcmlwdExvYWRpbmdQcm9taXNlXCJdID0gbnVsbFxyXG4gICAgICB0aGlzLm1hcHNBUElMb2FkZXJbXCJfY29uZmlnXCJdW1wiYXBpS2V5XCJdID0gYEFJemFTeUE3NW9qaFpoRWhEYU8zdmZuM214VFkzMnNxNWZsQXdsWSZsYW5ndWFnZT0ke3RoaXMuQ3VycmVudExhbmd1YWdlfWA7XHJcbiAgICAgIHZhciBTY3JpcHRUYWcgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLm1hcHNBUElMb2FkZXJbXCJfU0NSSVBUX0lEXCJdKTtcclxuICAgICAgaWYgKFNjcmlwdFRhZylcclxuICAgICAgICBTY3JpcHRUYWcucmVtb3ZlKCk7XHJcbiAgICAgIHZhciBlbGVtZW50cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJwYWMtY29udGFpbmVyXCIpO1xyXG4gICAgICB3aGlsZSAoZWxlbWVudHMubGVuZ3RoID4gMClcclxuICAgICAgICBlbGVtZW50c1swXS5yZW1vdmUoKTtcclxuXHJcbiAgICAgIGxldCB3aW5kb3cgPSB0aGlzLm1hcHNBUElMb2FkZXJbXCJfd2luZG93UmVmXCJdLmdldE5hdGl2ZVdpbmRvdygpO1xyXG4gICAgICB3aW5kb3cuZ29vZ2xlID0gbnVsbFxyXG5cclxuXHJcblxyXG4gICAgICB0aGlzLkxhenlNYXBzQVBJTG9hZGVyID0gbmV3IExhenlNYXBzQVBJTG9hZGVyKHtcclxuICAgICAgICAvLyAmbGFuZ3VhZ2U9JHtVdGlsaXR5U2VydmljZS5DdXJyZW50TGFuZ3VhZ2V9XHJcbiAgICAgICAgYXBpS2V5OiBgQUl6YVN5QTc1b2poWmhFaERhTzN2Zm4zbXhUWTMyc3E1ZmxBd2xZJmxhbmd1YWdlPSR7dGhpcy5DdXJyZW50TGFuZ3VhZ2V9YCxcclxuICAgICAgICBsaWJyYXJpZXM6IFsncGxhY2VzJ10sXHJcbiAgICAgIH0sIHRoaXMubWFwc0FQSUxvYWRlcltcIl93aW5kb3dSZWZcIl0sIHRoaXMubWFwc0FQSUxvYWRlcltcIl9kb2N1bWVudFJlZlwiXSwgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX2NvbmZpZ1wiXVtcImxvY2FsZUlkXCJdKTtcclxuICAgICAgdGhpcy5MYXp5TWFwc0FQSUxvYWRlci5sb2FkKCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgbGV0IGF1dG9jb21wbGV0ZSA9IG5ldyBnb29nbGUubWFwcy5wbGFjZXMuQXV0b2NvbXBsZXRlKHRoaXMuc2VhcmNoRWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB7XHJcbiAgICAgICAgICB0eXBlczogW1wiYWRkcmVzc1wiXVxyXG5cclxuICAgICAgICB9KTtcclxuICAgICAgICBhdXRvY29tcGxldGUuYWRkTGlzdGVuZXIoJ3BsYWNlX2NoYW5nZWQnLCAoLyoqXHJcbiAgICAgICAgICAgICAgICAqIEByZXR1cm4gez99XHJcbiAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgKCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgvKipcclxuICAgICAgICAgICAgICAgICAgICAqIEByZXR1cm4gez99XHJcbiAgICAgICAgICAgICAgICAgICAgKi9cclxuICAgICAgICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyBnZXQgdGhlIHBsYWNlIHJlc3VsdFxyXG4gICAgICAgICAgICAgICAgLyoqIEB0eXBlIHs/fSAqL1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2UgPSBhdXRvY29tcGxldGUuZ2V0UGxhY2UoKTtcclxuICAgICAgICAgICAgICAgIC8qKiBAdHlwZSB7P30gKi9cclxuICAgICAgICAgICAgICAgIGNvbnN0IGdlcm1hbkFkZHJlc3MgPSB7XHJcbiAgICAgICAgICAgICAgICAgIGdtSUQ6IHBsYWNlLmlkLFxyXG4gICAgICAgICAgICAgICAgICBpY29uOiBwbGFjZS5pY29uLFxyXG4gICAgICAgICAgICAgICAgICB1cmw6IHBsYWNlLnVybCxcclxuICAgICAgICAgICAgICAgICAgcGxhY2VJRDogcGxhY2UucGxhY2VfaWQsXHJcbiAgICAgICAgICAgICAgICAgIGRpc3BsYXlBZGRyZXNzOiBwbGFjZS5mb3JtYXR0ZWRfYWRkcmVzcyxcclxuICAgICAgICAgICAgICAgICAgbmFtZTogcGxhY2UubmFtZSxcclxuICAgICAgICAgICAgICAgICAgdmljaW5pdHk6IHBsYWNlLnZpY2luaXR5LFxyXG4gICAgICAgICAgICAgICAgICBsb2NhbGl0eToge30sXHJcbiAgICAgICAgICAgICAgICAgIHN0YXRlOiB7fSxcclxuICAgICAgICAgICAgICAgICAgY291bnRyeToge30sXHJcbiAgICAgICAgICAgICAgICAgIGdlb0xvY2F0aW9uOiB7IGxhdGl0dWRlOiAtMSwgbG9uZ2l0dWRlOiAtMSB9LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAocGxhY2UuZ2VvbWV0cnkgJiYgcGxhY2UuZ2VvbWV0cnkubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgZ2VybWFuQWRkcmVzcy5nZW9Mb2NhdGlvbi5sYXRpdHVkZSA9IHBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uLmxhdCgpO1xyXG4gICAgICAgICAgICAgICAgICBnZXJtYW5BZGRyZXNzLmdlb0xvY2F0aW9uLmxvbmdpdHVkZSA9IHBsYWNlLmdlb21ldHJ5LmxvY2F0aW9uLmxuZygpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcGxhY2UuYWRkcmVzc19jb21wb25lbnRzLmZvckVhY2goKC8qKlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqIEBwYXJhbSB7P30gdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgKiBAcmV0dXJuIHs/fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAqL1xyXG4gICAgICAgICAgICAgICAgICB2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGVzLmluZGV4T2YoJ3N0cmVldF9udW1iZXInKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBnZXJtYW5BZGRyZXNzW1wic3RyZWV0TnVtYmVyXCJdID0gdmFsdWUuc2hvcnRfbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGVzLmluZGV4T2YoJ3JvdXRlJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZ2VybWFuQWRkcmVzc1tcInN0cmVldE5hbWVcIl0gPSB2YWx1ZS5sb25nX25hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlcy5pbmRleE9mKCdwb3N0YWxfY29kZScpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGdlcm1hbkFkZHJlc3NbXCJwb3N0YWxDb2RlXCJdID0gTnVtYmVyKHZhbHVlLnNob3J0X25hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZXMuaW5kZXhPZignc3VibG9jYWxpdHknKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBnZXJtYW5BZGRyZXNzW1wic3VibG9jYWxpdHlcIl0gPSB2YWx1ZS5sb25nX25hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS50eXBlcy5pbmRleE9mKCdsb2NhbGl0eScpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGdlcm1hbkFkZHJlc3MubG9jYWxpdHlbXCJsb25nXCJdID0gdmFsdWUubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZ2VybWFuQWRkcmVzcy5sb2NhbGl0eVtcInNob3J0XCJdID0gdmFsdWUuc2hvcnRfbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGVzLmluZGV4T2YoJ2FkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMScpID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGdlcm1hbkFkZHJlc3Muc3RhdGVbXCJsb25nXCJdID0gdmFsdWUubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZ2VybWFuQWRkcmVzcy5zdGF0ZVtcInNob3J0XCJdID0gdmFsdWUuc2hvcnRfbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLnR5cGVzLmluZGV4T2YoJ2NvdW50cnknKSA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBnZXJtYW5BZGRyZXNzLmNvdW50cnlbXCJsb25nXCJdID0gdmFsdWUubG9uZ19uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgZ2VybWFuQWRkcmVzcy5jb3VudHJ5W1wic2hvcnRcIl0gPSB2YWx1ZS5zaG9ydF9uYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUudHlwZXMuaW5kZXhPZignYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8zJykgPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgZ2VybWFuQWRkcmVzcy5sb2NhbGl0eVtcInNob3J0XCJdID0gdmFsdWUuc2hvcnRfbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkdlcm1hbkFkZHJlc3NNYXBwZWQuZW1pdChnZXJtYW5BZGRyZXNzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuR2VybWFuQWRkcmVzc01hcHBlZChnZXJtYW5BZGRyZXNzKVxyXG4gICAgICAgICAgICAgICAgaWYgKCFwbGFjZS5wbGFjZV9pZCB8fCBwbGFjZS5nZW9tZXRyeSA9PT0gdW5kZWZpbmVkIHx8IHBsYWNlLmdlb21ldHJ5ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHBsYWNlIHJlc3VsdCBpcyBub3QgdmFsaWRcclxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHNob3cgZGlhbG9nIHRvIHNlbGVjdCBhIGFkZHJlc3MgZnJvbSB0aGUgaW5wdXRcclxuICAgICAgICAgICAgICAgICAgLy8gZW1pdCBmYWlsZWQgZXZlbnRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8vICAgdGhpcy5hZGRyZXNzID0gcGxhY2UuZm9ybWF0dGVkX2FkZHJlc3M7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQXV0b2NvbXBsZXRlU2VsZWN0ZWQuZW1pdChwbGFjZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLkF1dG9jb21wbGV0ZVNlbGVjdGVkKHBsYWNlKVxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMub25Mb2NhdGlvblNlbGVjdGVkLmVtaXQoe1xyXG4gICAgICAgICAgICAgICAgICBsYXRpdHVkZTogcGxhY2UuZ2VvbWV0cnkubG9jYXRpb24ubGF0KCksXHJcbiAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogcGxhY2UuZ2VvbWV0cnkubG9jYXRpb24ubG5nKClcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgIH0pKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgfSk7XHJcblxyXG5cclxuICAgIDtcclxuICAgIGlmICh0aGlzLkN1cnJlbnRMYW5ndWFnZSA9PSAnYXInKVxyXG4gICAgICB0aGlzLm1hcHNBUElMb2FkZXJbXCJfY29uZmlnXCJdW1wibG9jYWxlSWRcIl0gPSBcImFyLUVHXCI7XHJcbiAgICBpZiAodGhpcy5DdXJyZW50TGFuZ3VhZ2UgPT0gJ2VuJylcclxuICAgICAgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX2NvbmZpZ1wiXVtcImxvY2FsZUlkXCJdID0gXCJlbi1VU1wiO1xyXG4gICAgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX3NjcmlwdExvYWRpbmdQcm9taXNlXCJdID0gbnVsbFxyXG4gICAgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX2NvbmZpZ1wiXVtcImFwaUtleVwiXSA9IGBBSXphU3lBNzVvamhaaEVoRGFPM3ZmbjNteFRZMzJzcTVmbEF3bFkmbGFuZ3VhZ2U9JHt0aGlzLkN1cnJlbnRMYW5ndWFnZX1gO1xyXG4gICAgdmFyIGxlZnRTZWN0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5tYXBzQVBJTG9hZGVyW1wiX1NDUklQVF9JRFwiXSk7XHJcbiAgICBpZiAobGVmdFNlY3Rpb24pXHJcbiAgICAgIGxlZnRTZWN0aW9uLnJlbW92ZSgpO1xyXG4gICAgdGhpcy5MYXp5TWFwc0FQSUxvYWRlciA9IG5ldyBMYXp5TWFwc0FQSUxvYWRlcih7XHJcbiAgICAgIGFwaUtleTogYEFJemFTeUE3NW9qaFpoRWhEYU8zdmZuM214VFkzMnNxNWZsQXdsWSZsYW5ndWFnZT0ke3RoaXMuQ3VycmVudExhbmd1YWdlfWAsXHJcbiAgICAgIGxpYnJhcmllczogWydwbGFjZXMnXSxcclxuICAgIH0sIHRoaXMubWFwc0FQSUxvYWRlcltcIl93aW5kb3dSZWZcIl0sIHRoaXMubWFwc0FQSUxvYWRlcltcIl9kb2N1bWVudFJlZlwiXSwgdGhpcy5tYXBzQVBJTG9hZGVyW1wiX2NvbmZpZ1wiXVtcImxvY2FsZUlkXCJdKTtcclxuICAgIHRoaXMuTGF6eU1hcHNBUElMb2FkZXIubG9hZCgpO1xyXG4gICAgXHJcbiAgICB0aGlzLm1hcHNBUElMb2FkZXIubG9hZCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBsZXQgYXV0b2NvbXBsZXRlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5BdXRvY29tcGxldGUodGhpcy5zZWFyY2hFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIHtcclxuICAgICAgICB0eXBlczogW1wiYWRkcmVzc1wiXVxyXG5cclxuICAgICAgfSk7XHJcblxyXG4gICAgfSlcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZUZvcm1Db250cm9sID0gdGhpcy5ncm91cC5jb250cm9sc1t0aGlzLm9wdGlvbnMuTmFtZV07IC8vICBuZXcgRm9ybUNvbnRyb2woJycsdmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIFxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLm9wdGlvbnMuTGFiZWxLZXkhPW51bGwmJnRoaXMub3B0aW9ucy5MYWJlbEtleSE9XCJcIilcclxuICAgIHRoaXMub3B0aW9ucy5MYWJlbFZhbHVlPSB0aGlzLlV0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUodGhpcy5vcHRpb25zLkxhYmVsS2V5KTtcclxuXHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZUZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXMpO1xyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbC5zZXRBc3luY1ZhbGlkYXRvcnModGhpcy52YWxpZGF0aW9uUnVsZXNhc3luYyk7XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLklzRGlzYWJsZWQpIHtcclxuICAgICAgdGhpcy5NYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLm9wdGlvbnMuVmFsdWUgIT0gbnVsbClcclxuICAgIHtcclxuICAgICAgdGhpcy5NYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLm9wdGlvbnMuVmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSBcclxuICAgIHtcclxuICAgICAgbGV0IFZhbGlkYXRpb25zPXRoaXMub3B0aW9ucy5DdXN0b21WYWxpZGF0aW9uXHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWYWxpZGF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICB9XHJcbiAgICBcclxuICAgIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZUNvbnRyb2xIb3N0Lm5nU3VibWl0LnN1YnNjcmliZSgodmFsdWUpPT57XHJcbiAgICAgIHRoaXMuZ3JvdXAubWFya0FsbEFzVG91Y2hlZCgpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZD10cnVlXHJcbiAgICB9KVxyXG5cclxuXHJcbiAgfVxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuQXR0cmlidXRlTGlzdCAhPSBudWxsKSB7XHJcbiAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5vcHRpb25zLk5hbWUpO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5vcHRpb25zLkF0dHJpYnV0ZUxpc3QubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUodGhpcy5vcHRpb25zLkF0dHJpYnV0ZUxpc3RbaW5kZXhdLktleSwgdGhpcy5vcHRpb25zLkF0dHJpYnV0ZUxpc3RbaW5kZXhdLnZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuIFxyXG4gIHJlc2V0RXJyb3IgPSAoKSA9PntcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLlJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBzaG93R2xvYmFsRXJyb3IoKXtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2hvd0dsb2JhbEVycm9yKClcclxuICB9XHJcblxyXG4gIGdldEVycm9yVmFsaWRhdGlvbihFcnJvckxpc3QpIHtcclxuICAgIGlmKHRoaXMubWFya0FsbEFzVG91Y2hlZCYmdGhpcy5ncm91cC5pbnZhbGlkKVxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuc2hvd0dsb2JhbEVycm9yKClcclxuICAgICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQ9ZmFsc2VcclxuICAgIH1cclxuICAgXHJcbiAgICByZXR1cm4gdGhpcy5jb250cm9sVXRpbGl0eS5nZXRFcnJvclZhbGlkYXRpb25NYXNzYWdlKEVycm9yTGlzdCwgdGhpcy5ncm91cCwgdGhpcy5vcHRpb25zKTtcclxufVxyXG5cclxuICBBdXRvY29tcGxldGVTZWxlY3RlZChyZXN1bHQpIHtcclxuXHJcblxyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbCA9PSBuZXcgTWFwQXV0b2NvbXBsZXRlRFRPKCk7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsLlRleHQgPSByZXN1bHQuZm9ybWF0dGVkX2FkZHJlc3M7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsLlBsYWNlSUQgPSByZXN1bHQucGxhY2VfaWQ7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsLkdvb2dsZU1hcHNVUkwgPSByZXN1bHQudXJsO1xyXG4gIH1cclxuICBMb2NhdGlvblNlbGVjdGVkKGxvY2F0aW9uKSB7XHJcblxyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbC5MYXRpdHVkZSA9IGxvY2F0aW9uLmxhdGl0dWRlO1xyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbC5Mb25naXR1ZGUgPSBsb2NhdGlvbi5sb25naXR1ZGU7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZUZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xyXG5cclxuICAgIHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbCk7XHJcbiAgfVxyXG5cclxuICBHZXJtYW5BZGRyZXNzTWFwcGVkKHJlc3VsdCkge1xyXG4gIFxyXG4gICBcclxuICAgIHRoaXMuTWFwQXV0b0NvbXBsZXRlTW9kZWwgPT0gbmV3IE1hcEF1dG9jb21wbGV0ZURUTygpO1xyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbC5UZXh0ID0gcmVzdWx0LmRpc3BsYXlBZGRyZXNzO1xyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbC5QbGFjZUlEID0gcmVzdWx0LnBsYWNlSUQ7XHJcbiAgICB0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsLkdvb2dsZU1hcHNVUkwgPSByZXN1bHQudXJsO1xyXG4gICAgdGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbC5MYXRpdHVkZSA9IHJlc3VsdC5nZW9Mb2NhdGlvbi5sYXRpdHVkZTtcclxuICAgIHRoaXMuTWFwQXV0b0NvbXBsZXRlTW9kZWwuTG9uZ2l0dWRlID0gcmVzdWx0Lmdlb0xvY2F0aW9uLmxvbmdpdHVkZTtcclxuICAgIHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5NYXBBdXRvQ29tcGxldGVNb2RlbCk7XHJcbiAgICB0aGlzLmdyb3VwLmNvbnRyb2xzW3RoaXMub3B0aW9ucy5OYW1lXS5zZXRWYWx1ZSh0aGlzLk1hcEF1dG9Db21wbGV0ZU1vZGVsKVxyXG4gICAgdGhpcy5PbkNoYW5nZS5lbWl0KHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wudmFsdWUpXHJcbiAgfVxyXG5cclxuICAgIC8vRXh0ZXJuYWwgTWV0aG9kXHJcblxyXG4gIFJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCB0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG4gICAgLy9FeHRlcm5hbCBNZXRob2RcclxuXHJcbiAgQWRkUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5NYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIHRoaXMub3B0aW9ucylcclxuICB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgUmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbiA9IChDdXN0b21WYWxpZGF0aW9uKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZUN1c3RvbVZhbGlkYXRpb24odGhpcy5NYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkQ3VzdG9tVmFsaWRhdGlvbiA9IChDdXN0b21WYWxpZGF0aW9uKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZEN1c3RvbVZhbGlkYXRpb24odGhpcy5NYXBBdXRvQ29tcGxldGVGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsQ3VzdG9tVmFsaWRhdGlvbilcclxuICB9XHJcblxyXG4gICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gICBJc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Jc1ZhbGlkKHRoaXMuTWFwQXV0b0NvbXBsZXRlRm9ybUNvbnRyb2wpXHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19
|