@bnsights/bbsf-controls 1.0.87 → 1.0.88
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 +2 -3
- package/bnsights-bbsf-controls-1.0.88.tgz +0 -0
- package/bnsights-bbsf-controls.d.ts +1 -1
- package/bnsights-bbsf-controls.metadata.json +1 -0
- package/bundles/bnsights-bbsf-controls.umd.js +9434 -0
- package/bundles/bnsights-bbsf-controls.umd.js.map +1 -0
- package/esm2015/bnsights-bbsf-controls.js +6 -0
- package/esm2015/lib/Shared/Directives/template-name.directive.js +18 -0
- package/{esm2020/lib/Shared/Models/datePickerOptions.mjs → esm2015/lib/Shared/Models/datePickerOptions.js} +1 -1
- package/esm2015/lib/Shared/Pipes/bbsf-date-time.pipe.js +20 -0
- package/esm2015/lib/Shared/Pipes/bbsf-date.pipe.js +20 -0
- package/esm2015/lib/Shared/components/app-base-component.js +202 -0
- package/esm2015/lib/Shared/components/ng-tag-input.js +323 -0
- package/esm2015/lib/Shared/default_intl.js +29 -0
- package/esm2015/lib/Shared/services/ControlUtility.js +164 -0
- package/esm2015/lib/Shared/services/GlobalSettings.service.js +28 -0
- package/esm2015/lib/Shared/services/OnPagingFiltersChange.service.js +22 -0
- package/esm2015/lib/Shared/services/render-component-service.service.js +30 -0
- package/esm2015/lib/Shared/services/validationErrorMassage.service.js +137 -0
- package/esm2015/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.js +248 -0
- package/esm2015/lib/controls/Calendar/Calendar.component.js +176 -0
- package/esm2015/lib/controls/CheckBox/CheckBox.component.js +114 -0
- package/esm2015/lib/controls/ConfirmationModal/ConfirmationModal.component.js +139 -0
- package/esm2015/lib/controls/DateTimePicker/DateTimePicker.component.js +215 -0
- package/esm2015/lib/controls/DropdownList/DropdownList.component.js +178 -0
- package/esm2015/lib/controls/FileUplaod/FileUplaod.component.js +451 -0
- package/esm2015/lib/controls/Form/Form.component.js +106 -0
- package/esm2015/lib/controls/HtmlEditor/HtmlEditor.component.js +222 -0
- package/esm2015/lib/controls/ImageUpload/ImageUpload.component.js +347 -0
- package/esm2015/lib/controls/MapAutoComplete/MapAutoComplete.component.js +325 -0
- package/esm2015/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.js +429 -0
- package/esm2015/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.js +430 -0
- package/esm2015/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.js +429 -0
- package/esm2015/lib/controls/Paging/JwPagination.component.js +129 -0
- package/esm2015/lib/controls/Paging/Paging.component.js +312 -0
- package/esm2015/lib/controls/Phone/Phone.component.js +119 -0
- package/esm2015/lib/controls/ProfileImageUploader/ProfileImageUploader.component.js +349 -0
- package/esm2015/lib/controls/RadioButton/RadioButton.component.js +108 -0
- package/esm2015/lib/controls/Recaptcha/Recaptcha.component.js +131 -0
- package/esm2015/lib/controls/Repeater/repeater/repeater.component.js +117 -0
- package/esm2015/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.js +748 -0
- package/esm2015/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.js +19 -0
- package/esm2015/lib/controls/Repeater/repeater-table/repeater-table.component.js +108 -0
- package/esm2015/lib/controls/TagsInput/TagsInput.component.js +268 -0
- package/esm2015/lib/controls/TextArea/TextArea.component.js +191 -0
- package/esm2015/lib/controls/TextBox/TextBox.component.js +262 -0
- package/esm2015/lib/controls/Toggleslide/toggleslide.component.js +83 -0
- package/esm2015/lib/controls/bbsf-controls.module.js +243 -0
- package/esm2015/lib/controls/page-header-component/page-header-component.component.js +32 -0
- package/fesm2015/{bnsights-bbsf-controls.mjs → bnsights-bbsf-controls.js} +1506 -1645
- package/fesm2015/bnsights-bbsf-controls.js.map +1 -0
- package/lib/Shared/Directives/template-name.directive.d.ts +0 -3
- package/lib/Shared/Models/datePickerOptions.d.ts +1 -1
- package/lib/Shared/Pipes/bbsf-date-time.pipe.d.ts +0 -3
- package/lib/Shared/Pipes/bbsf-date.pipe.d.ts +0 -3
- package/lib/Shared/components/app-base-component.d.ts +1 -3
- package/lib/Shared/components/ng-tag-input.d.ts +0 -3
- package/lib/Shared/default_intl.d.ts +0 -3
- package/lib/Shared/services/ControlUtility.d.ts +0 -3
- package/lib/Shared/services/GlobalSettings.service.d.ts +0 -3
- package/lib/Shared/services/OnPagingFiltersChange.service.d.ts +0 -3
- package/lib/Shared/services/render-component-service.service.d.ts +0 -3
- package/lib/Shared/services/validationErrorMassage.service.d.ts +0 -3
- package/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.d.ts +0 -4
- package/lib/controls/Calendar/Calendar.component.d.ts +0 -3
- package/lib/controls/CheckBox/CheckBox.component.d.ts +0 -4
- package/lib/controls/ConfirmationModal/ConfirmationModal.component.d.ts +0 -3
- package/lib/controls/DateTimePicker/DateTimePicker.component.d.ts +2 -8
- package/lib/controls/DropdownList/DropdownList.component.d.ts +0 -4
- package/lib/controls/FileUplaod/FileUplaod.component.d.ts +0 -3
- package/lib/controls/Form/Form.component.d.ts +0 -3
- package/lib/controls/HtmlEditor/HtmlEditor.component.d.ts +0 -4
- package/lib/controls/ImageUpload/ImageUpload.component.d.ts +0 -3
- package/lib/controls/MapAutoComplete/MapAutoComplete.component.d.ts +0 -3
- package/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.d.ts +0 -3
- package/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.d.ts +0 -3
- package/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.d.ts +0 -3
- package/lib/controls/Paging/JwPagination.component.d.ts +0 -3
- package/lib/controls/Paging/Paging.component.d.ts +0 -3
- package/lib/controls/Phone/Phone.component.d.ts +1 -7
- package/lib/controls/ProfileImageUploader/ProfileImageUploader.component.d.ts +0 -3
- package/lib/controls/RadioButton/RadioButton.component.d.ts +0 -3
- package/lib/controls/Recaptcha/Recaptcha.component.d.ts +0 -4
- package/lib/controls/Repeater/repeater/repeater.component.d.ts +0 -3
- package/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.d.ts +0 -3
- package/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.d.ts +0 -3
- package/lib/controls/Repeater/repeater-table/repeater-table.component.d.ts +0 -3
- package/lib/controls/TagsInput/TagsInput.component.d.ts +0 -4
- package/lib/controls/TextArea/TextArea.component.d.ts +0 -4
- package/lib/controls/TextBox/TextBox.component.d.ts +0 -4
- package/lib/controls/Toggleslide/toggleslide.component.d.ts +0 -4
- package/lib/controls/bbsf-controls.module.d.ts +0 -74
- package/lib/controls/page-header-component/page-header-component.component.d.ts +0 -3
- package/package.json +8 -20
- package/bnsights-bbsf-controls-1.0.87.tgz +0 -0
- package/esm2020/bnsights-bbsf-controls.mjs +0 -5
- package/esm2020/lib/Shared/Directives/template-name.directive.mjs +0 -18
- package/esm2020/lib/Shared/Pipes/bbsf-date-time.pipe.mjs +0 -21
- package/esm2020/lib/Shared/Pipes/bbsf-date.pipe.mjs +0 -21
- package/esm2020/lib/Shared/components/app-base-component.mjs +0 -198
- package/esm2020/lib/Shared/components/ng-tag-input.mjs +0 -336
- package/esm2020/lib/Shared/default_intl.mjs +0 -29
- package/esm2020/lib/Shared/services/ControlUtility.mjs +0 -162
- package/esm2020/lib/Shared/services/GlobalSettings.service.mjs +0 -30
- package/esm2020/lib/Shared/services/OnPagingFiltersChange.service.mjs +0 -24
- package/esm2020/lib/Shared/services/render-component-service.service.mjs +0 -30
- package/esm2020/lib/Shared/services/validationErrorMassage.service.mjs +0 -137
- package/esm2020/lib/controls/AutocompleteTextBox/AutocompleteTextBox.component.mjs +0 -245
- package/esm2020/lib/controls/Calendar/Calendar.component.mjs +0 -172
- package/esm2020/lib/controls/CheckBox/CheckBox.component.mjs +0 -114
- package/esm2020/lib/controls/ConfirmationModal/ConfirmationModal.component.mjs +0 -136
- package/esm2020/lib/controls/DateTimePicker/DateTimePicker.component.mjs +0 -217
- package/esm2020/lib/controls/DropdownList/DropdownList.component.mjs +0 -179
- package/esm2020/lib/controls/FileUplaod/FileUplaod.component.mjs +0 -453
- package/esm2020/lib/controls/Form/Form.component.mjs +0 -101
- package/esm2020/lib/controls/HtmlEditor/HtmlEditor.component.mjs +0 -223
- package/esm2020/lib/controls/ImageUpload/ImageUpload.component.mjs +0 -350
- package/esm2020/lib/controls/MapAutoComplete/MapAutoComplete.component.mjs +0 -325
- package/esm2020/lib/controls/MultiLingualHtmlEditor/MultiLingualHtmlEditor.component.mjs +0 -427
- package/esm2020/lib/controls/MultiLingualTextArea/MultiLingualTextArea.component.mjs +0 -427
- package/esm2020/lib/controls/MultiLingualTextBox/MultiLingualTextBox.component.mjs +0 -426
- package/esm2020/lib/controls/Paging/JwPagination.component.mjs +0 -156
- package/esm2020/lib/controls/Paging/Paging.component.mjs +0 -312
- package/esm2020/lib/controls/Phone/Phone.component.mjs +0 -124
- package/esm2020/lib/controls/ProfileImageUploader/ProfileImageUploader.component.mjs +0 -354
- package/esm2020/lib/controls/RadioButton/RadioButton.component.mjs +0 -106
- package/esm2020/lib/controls/Recaptcha/Recaptcha.component.mjs +0 -132
- package/esm2020/lib/controls/Repeater/repeater/repeater.component.mjs +0 -125
- package/esm2020/lib/controls/Repeater/repeater-field-builder/repeater-field-builder.component.mjs +0 -750
- package/esm2020/lib/controls/Repeater/repeater-item-field/repeater-item-field.component.mjs +0 -21
- package/esm2020/lib/controls/Repeater/repeater-table/repeater-table.component.mjs +0 -108
- package/esm2020/lib/controls/TagsInput/TagsInput.component.mjs +0 -268
- package/esm2020/lib/controls/TextArea/TextArea.component.mjs +0 -192
- package/esm2020/lib/controls/TextBox/TextBox.component.mjs +0 -266
- package/esm2020/lib/controls/Toggleslide/toggleslide.component.mjs +0 -84
- package/esm2020/lib/controls/bbsf-controls.module.mjs +0 -401
- package/esm2020/lib/controls/page-header-component/page-header-component.component.mjs +0 -37
- package/fesm2015/bnsights-bbsf-controls.mjs.map +0 -1
- package/fesm2020/bnsights-bbsf-controls.mjs +0 -8938
- package/fesm2020/bnsights-bbsf-controls.mjs.map +0 -1
- /package/{esm2020/lib/Shared/Enums/CalendarView.mjs → esm2015/lib/Shared/Enums/CalendarView.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/ControlLayout.mjs → esm2015/lib/Shared/Enums/ControlLayout.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Countries.mjs → esm2015/lib/Shared/Enums/Countries.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Enums.mjs → esm2015/lib/Shared/Enums/Enums.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/FileType.mjs → esm2015/lib/Shared/Enums/FileType.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/FilterType.mjs → esm2015/lib/Shared/Enums/FilterType.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/FontSize.mjs → esm2015/lib/Shared/Enums/FontSize.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/ForceDirection.mjs → esm2015/lib/Shared/Enums/ForceDirection.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/IconPosition.mjs → esm2015/lib/Shared/Enums/IconPosition.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/ImageType.mjs → esm2015/lib/Shared/Enums/ImageType.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/InputType.mjs → esm2015/lib/Shared/Enums/InputType.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Insert.mjs → esm2015/lib/Shared/Enums/Insert.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/LanguageMode.mjs → esm2015/lib/Shared/Enums/LanguageMode.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/LanguageValidation.mjs → esm2015/lib/Shared/Enums/LanguageValidation.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Misc.mjs → esm2015/lib/Shared/Enums/Misc.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/PagingActionMode.mjs → esm2015/lib/Shared/Enums/PagingActionMode.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Para.mjs → esm2015/lib/Shared/Enums/Para.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/PickerType.mjs → esm2015/lib/Shared/Enums/PickerType.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/SelectMode.mjs → esm2015/lib/Shared/Enums/SelectMode.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/StartView.mjs → esm2015/lib/Shared/Enums/StartView.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/Style.mjs → esm2015/lib/Shared/Enums/Style.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/StyleConfirmationMode.mjs → esm2015/lib/Shared/Enums/StyleConfirmationMode.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/TagInputView.mjs → esm2015/lib/Shared/Enums/TagInputView.js} +0 -0
- /package/{esm2020/lib/Shared/Enums/menu-list-enum.mjs → esm2015/lib/Shared/Enums/menu-list-enum.js} +0 -0
- /package/{esm2020/lib/Shared/Models/Attribute.mjs → esm2015/lib/Shared/Models/Attribute.js} +0 -0
- /package/{esm2020/lib/Shared/Models/AutocompleteDTO.mjs → esm2015/lib/Shared/Models/AutocompleteDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/AutocompleteOptions.mjs → esm2015/lib/Shared/Models/AutocompleteOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CalendarEventDTO.mjs → esm2015/lib/Shared/Models/CalendarEventDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CalendarOptions.mjs → esm2015/lib/Shared/Models/CalendarOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CancelDTO.mjs → esm2015/lib/Shared/Models/CancelDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CaptchaStyle.mjs → esm2015/lib/Shared/Models/CaptchaStyle.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CheckBoxOptions.mjs → esm2015/lib/Shared/Models/CheckBoxOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ConfirmationModalOptions.mjs → esm2015/lib/Shared/Models/ConfirmationModalOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ControlOptionsBase.mjs → esm2015/lib/Shared/Models/ControlOptionsBase.js} +0 -0
- /package/{esm2020/lib/Shared/Models/CustomValidation.mjs → esm2015/lib/Shared/Models/CustomValidation.js} +0 -0
- /package/{esm2020/lib/Shared/Models/DropdownListItem.mjs → esm2015/lib/Shared/Models/DropdownListItem.js} +0 -0
- /package/{esm2020/lib/Shared/Models/DropdownOptions.mjs → esm2015/lib/Shared/Models/DropdownOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/EditPersonalImage.mjs → esm2015/lib/Shared/Models/EditPersonalImage.js} +0 -0
- /package/{esm2020/lib/Shared/Models/EnglishArabicDTO.mjs → esm2015/lib/Shared/Models/EnglishArabicDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/FileDTO.mjs → esm2015/lib/Shared/Models/FileDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/FileUploadModel.mjs → esm2015/lib/Shared/Models/FileUploadModel.js} +0 -0
- /package/{esm2020/lib/Shared/Models/FileUploadOptions.mjs → esm2015/lib/Shared/Models/FileUploadOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/FilterItem.mjs → esm2015/lib/Shared/Models/FilterItem.js} +0 -0
- /package/{esm2020/lib/Shared/Models/FormOptions.mjs → esm2015/lib/Shared/Models/FormOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/HtmlEditorOptions.mjs → esm2015/lib/Shared/Models/HtmlEditorOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ImageUploadOptions.mjs → esm2015/lib/Shared/Models/ImageUploadOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MapAutoCompleteOptions.mjs → esm2015/lib/Shared/Models/MapAutoCompleteOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MapAutocompleteDTO.mjs → esm2015/lib/Shared/Models/MapAutocompleteDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MultiLingualHtmlEditorOptions.mjs → esm2015/lib/Shared/Models/MultiLingualHtmlEditorOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MultiLingualTextAreaOptions.mjs → esm2015/lib/Shared/Models/MultiLingualTextAreaOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MultilingualControlOptionsBase.mjs → esm2015/lib/Shared/Models/MultilingualControlOptionsBase.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MultilingualTextBoxOptions.mjs → esm2015/lib/Shared/Models/MultilingualTextBoxOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/MultipleFileUploadModel.mjs → esm2015/lib/Shared/Models/MultipleFileUploadModel.js} +0 -0
- /package/{esm2020/lib/Shared/Models/PagingDTO.mjs → esm2015/lib/Shared/Models/PagingDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/PagingOptions.mjs → esm2015/lib/Shared/Models/PagingOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/PagingPayload.mjs → esm2015/lib/Shared/Models/PagingPayload.js} +0 -0
- /package/{esm2020/lib/Shared/Models/PhoneOptions.mjs → esm2015/lib/Shared/Models/PhoneOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ProfileImageUploadOptions.mjs → esm2015/lib/Shared/Models/ProfileImageUploadOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ProfilePictureDTO.mjs → esm2015/lib/Shared/Models/ProfilePictureDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RadioButtonItem.mjs → esm2015/lib/Shared/Models/RadioButtonItem.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RadioButtonOptions.mjs → esm2015/lib/Shared/Models/RadioButtonOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RangeNumber.mjs → esm2015/lib/Shared/Models/RangeNumber.js} +0 -0
- /package/{esm2020/lib/Shared/Models/Recaptcha.mjs → esm2015/lib/Shared/Models/Recaptcha.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RecaptchaOptions.mjs → esm2015/lib/Shared/Models/RecaptchaOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RepeaterField.mjs → esm2015/lib/Shared/Models/RepeaterField.js} +0 -0
- /package/{esm2020/lib/Shared/Models/RepeaterOptions.mjs → esm2015/lib/Shared/Models/RepeaterOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/SaveDTO.mjs → esm2015/lib/Shared/Models/SaveDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/TagsInputDTO.mjs → esm2015/lib/Shared/Models/TagsInputDTO.js} +0 -0
- /package/{esm2020/lib/Shared/Models/TagsInputOptions.mjs → esm2015/lib/Shared/Models/TagsInputOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/TextAreaOptions.mjs → esm2015/lib/Shared/Models/TextAreaOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/TextBoxOptions.mjs → esm2015/lib/Shared/Models/TextBoxOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/ToggleslideOptions.mjs → esm2015/lib/Shared/Models/ToggleslideOptions.js} +0 -0
- /package/{esm2020/lib/Shared/Models/UploadPersonalImage.mjs → esm2015/lib/Shared/Models/UploadPersonalImage.js} +0 -0
- /package/{esm2020/lib/Shared/Models/bread-crumb.mjs → esm2015/lib/Shared/Models/bread-crumb.js} +0 -0
- /package/{esm2020/lib/Shared/Models/control-filter-Item.mjs → esm2015/lib/Shared/Models/control-filter-Item.js} +0 -0
- /package/{esm2020/lib/Shared/Models/filter-options.mjs → esm2015/lib/Shared/Models/filter-options.js} +0 -0
- /package/{esm2020/lib/Shared/Models/page-header-options.mjs → esm2015/lib/Shared/Models/page-header-options.js} +0 -0
- /package/{esm2020/lib/Shared/config/environment.mjs → esm2015/lib/Shared/config/environment.js} +0 -0
- /package/{esm2020/public-api.mjs → esm2015/public-api.js} +0 -0
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Optional, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { FormControl, Validators } from '@angular/forms';
|
|
3
|
-
import { PickerType } from '../../Shared/Enums/PickerType';
|
|
4
|
-
import { StartView } from '../../Shared/Enums/StartView';
|
|
5
|
-
import { SelectMode } from '../../Shared/Enums/SelectMode';
|
|
6
|
-
import { OwlDateTimeIntl } from 'ng-pick-datetime';
|
|
7
|
-
import { DefaultIntl } from '../../Shared/default_intl';
|
|
8
|
-
import * as i0 from "@angular/core";
|
|
9
|
-
import * as i1 from "@angular/common";
|
|
10
|
-
import * as i2 from "../../Shared/services/OnPagingFiltersChange.service";
|
|
11
|
-
import * as i3 from "../../Shared/services/validationErrorMassage.service";
|
|
12
|
-
import * as i4 from "../../Shared/services/ControlUtility";
|
|
13
|
-
import * as i5 from "@angular/forms";
|
|
14
|
-
import * as i6 from "@bnsights/bbsf-utilities";
|
|
15
|
-
import * as i7 from "ng-pick-datetime";
|
|
16
|
-
import * as i8 from "@angular/cdk/bidi";
|
|
17
|
-
import * as i9 from "ngx-intl-tel-input";
|
|
18
|
-
export class DateInputComponent {
|
|
19
|
-
// tslint:disable-next-line: max-line-length
|
|
20
|
-
constructor(datepipe, onChangeService, ErrorHandler, controlUtility, controlContainer, DateInputControlHost, UtilityService, translate, controlValidationService, dateTimeAdapter) {
|
|
21
|
-
this.datepipe = datepipe;
|
|
22
|
-
this.onChangeService = onChangeService;
|
|
23
|
-
this.ErrorHandler = ErrorHandler;
|
|
24
|
-
this.controlUtility = controlUtility;
|
|
25
|
-
this.controlContainer = controlContainer;
|
|
26
|
-
this.DateInputControlHost = DateInputControlHost;
|
|
27
|
-
this.UtilityService = UtilityService;
|
|
28
|
-
this.translate = translate;
|
|
29
|
-
this.controlValidationService = controlValidationService;
|
|
30
|
-
this.dateTimeAdapter = dateTimeAdapter;
|
|
31
|
-
this.OnChange = new EventEmitter();
|
|
32
|
-
this.markAllAsTouched = false;
|
|
33
|
-
this.validationRules = [];
|
|
34
|
-
this.validationRulesasync = [];
|
|
35
|
-
this.comparedControl = null;
|
|
36
|
-
this.dateError = false;
|
|
37
|
-
this.resetError = () => {
|
|
38
|
-
this.controlValidationService.RemoveGlobalError();
|
|
39
|
-
};
|
|
40
|
-
this.checkIfEndDateAfterStartDate = () => {
|
|
41
|
-
if (!this.comparedControl.value || !this.group.get(this.options.Name).value) {
|
|
42
|
-
return null;
|
|
43
|
-
}
|
|
44
|
-
if (new Date(this.comparedControl.value) < new Date(this.group.get(this.options.Name).value)) {
|
|
45
|
-
this.comparedControl.setErrors(null);
|
|
46
|
-
return null;
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
this.comparedControl.setErrors(null);
|
|
50
|
-
return { InvalidEndDate: true };
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
this.checkIfStartDateBeForEndDate = () => {
|
|
54
|
-
if (!this.comparedControl.value || !this.group.get(this.options.Name).value) {
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
if (new Date(this.comparedControl.value) < new Date(this.group.get(this.options.Name).value)) {
|
|
58
|
-
this.group.get(this.options.Name).setErrors(null);
|
|
59
|
-
return null;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
this.group.get(this.options.Name).setErrors(null);
|
|
63
|
-
return { InvalidStartDate: true };
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
//External Method
|
|
67
|
-
this.RemoveRequiredValidation = () => {
|
|
68
|
-
this.controlUtility.RemoveRequiredValidation(this.DatePickerFormControl, this.validationRules, this.options);
|
|
69
|
-
};
|
|
70
|
-
//External Method
|
|
71
|
-
this.AddRequiredValidation = () => {
|
|
72
|
-
this.controlUtility.AddRequiredValidation(this.DatePickerFormControl, this.validationRules, this.options);
|
|
73
|
-
};
|
|
74
|
-
//External Method
|
|
75
|
-
this.RemoveCustomValidation = (CustomValidation) => {
|
|
76
|
-
this.controlUtility.RemoveCustomValidation(this.DatePickerFormControl, this.validationRules, CustomValidation);
|
|
77
|
-
};
|
|
78
|
-
//External Method
|
|
79
|
-
this.AddCustomValidation = (CustomValidation) => {
|
|
80
|
-
this.controlUtility.AddCustomValidation(this.DatePickerFormControl, this.validationRules, CustomValidation);
|
|
81
|
-
};
|
|
82
|
-
//External Method
|
|
83
|
-
this.IsValid = () => {
|
|
84
|
-
this.controlUtility.IsValid(this.DatePickerFormControl);
|
|
85
|
-
};
|
|
86
|
-
DateInputComponent.controlContainerstatic = this.controlContainer;
|
|
87
|
-
}
|
|
88
|
-
ngOnInit() {
|
|
89
|
-
this.textDir = this.options.ForceDirection == 2 ? 'rtl' : 'ltr';
|
|
90
|
-
if (this.options.StartView == 3)
|
|
91
|
-
this.startView = 'multi-year';
|
|
92
|
-
else {
|
|
93
|
-
this.startView = StartView[this.options.StartView].toLowerCase();
|
|
94
|
-
}
|
|
95
|
-
// Update the DateTimeAdapter Language with the current thread langauge
|
|
96
|
-
this.dateTimeAdapter.setLocale(this.UtilityService.getCurrentLanguage() == "ar" ? "ar" : "en-UK");
|
|
97
|
-
this.controlValidationService.isCreatedBefor = false;
|
|
98
|
-
this.group.addControl(this.options.Name, new FormControl(''));
|
|
99
|
-
this.DatePickerFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
|
|
100
|
-
this.DatePickerFormControl.setValue(this.options.Value);
|
|
101
|
-
if (this.options.CustomValidation.length > 0) {
|
|
102
|
-
let Validations = this.options.CustomValidation;
|
|
103
|
-
for (let index = 0; index < Validations.length; index++) {
|
|
104
|
-
const Validation = Validations[index];
|
|
105
|
-
this.validationRules.push(Validation.functionBody);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
if (this.options.IsRequired) {
|
|
109
|
-
this.validationRules.push(Validators.required);
|
|
110
|
-
}
|
|
111
|
-
if (this.options.LabelKey != null && this.options.LabelKey != "")
|
|
112
|
-
this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
|
|
113
|
-
if (this.options.IsDisabled) {
|
|
114
|
-
this.DatePickerFormControl.disable();
|
|
115
|
-
}
|
|
116
|
-
if (this.options.StartControlToCompareWith) {
|
|
117
|
-
if (this.group.get(this.options.StartControlToCompareWith)) {
|
|
118
|
-
this.comparedControl = this.group.get(this.options.StartControlToCompareWith);
|
|
119
|
-
this.subscribeDateChanges();
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
this.DatePickerFormControl.setValidators(this.validationRules);
|
|
123
|
-
this.DatePickerFormControl.setAsyncValidators(this.validationRulesasync);
|
|
124
|
-
this.DateInputControlHost.ngSubmit.subscribe((value) => {
|
|
125
|
-
this.group.markAllAsTouched();
|
|
126
|
-
this.markAllAsTouched = true;
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
ngAfterViewInit() {
|
|
130
|
-
this.controlUtility.setAttributeForControl(this.options);
|
|
131
|
-
}
|
|
132
|
-
showGlobalError() {
|
|
133
|
-
this.controlUtility.showGlobalError();
|
|
134
|
-
}
|
|
135
|
-
getErrorValidation(ErrorList) {
|
|
136
|
-
if (this.markAllAsTouched && this.group.invalid) {
|
|
137
|
-
this.showGlobalError();
|
|
138
|
-
this.markAllAsTouched = false;
|
|
139
|
-
}
|
|
140
|
-
return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
|
|
141
|
-
}
|
|
142
|
-
copyInputMessage(inputElement) {
|
|
143
|
-
this.controlUtility.CopyInputMessage(inputElement);
|
|
144
|
-
}
|
|
145
|
-
getSelectMode(type) {
|
|
146
|
-
let Value = SelectMode[type];
|
|
147
|
-
return Value.toLowerCase();
|
|
148
|
-
}
|
|
149
|
-
getPickerType(type) {
|
|
150
|
-
let Value = PickerType[type];
|
|
151
|
-
return Value.toLowerCase();
|
|
152
|
-
}
|
|
153
|
-
getStartView(type) {
|
|
154
|
-
if (type == 3)
|
|
155
|
-
return 'multi-year';
|
|
156
|
-
else {
|
|
157
|
-
const Value = StartView[type].toLowerCase();
|
|
158
|
-
return Value;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
onDateSelect(item) {
|
|
162
|
-
if (!item)
|
|
163
|
-
return;
|
|
164
|
-
let DateValue;
|
|
165
|
-
var tzoffset = (new Date()).getTimezoneOffset() * 60000; //offset in milliseconds
|
|
166
|
-
if (this.options.SelectMode == 2) {
|
|
167
|
-
for (let index = 0; index < item.value.length; index++) {
|
|
168
|
-
item.value[index] = new Date(item.value[index] - tzoffset).toISOString().slice(0, -1);
|
|
169
|
-
}
|
|
170
|
-
DateValue = item.value;
|
|
171
|
-
}
|
|
172
|
-
else {
|
|
173
|
-
DateValue = new Date(item.value - tzoffset).toISOString().slice(0, -1);
|
|
174
|
-
}
|
|
175
|
-
this.DatePickerFormControl.setValue(DateValue);
|
|
176
|
-
this.onChangeService.ChangeValue(this.options.Name);
|
|
177
|
-
let originalValue = DateValue;
|
|
178
|
-
if (this.options.PatchFunction && this.options.PatchPath && this.group.get(this.options.Name).valid) {
|
|
179
|
-
this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
|
|
180
|
-
}
|
|
181
|
-
//Use this line to enable two way binding.
|
|
182
|
-
this.options.Value = originalValue;
|
|
183
|
-
this.OnChange.emit(originalValue);
|
|
184
|
-
}
|
|
185
|
-
subscribeDateChanges() {
|
|
186
|
-
const startDateChanges = this.comparedControl.valueChanges;
|
|
187
|
-
const endDateChanges = this.group.get(this.options.Name).valueChanges;
|
|
188
|
-
startDateChanges.subscribe(start => {
|
|
189
|
-
this.comparedControl.addValidators(this.checkIfStartDateBeForEndDate);
|
|
190
|
-
this.comparedControl.updateValueAndValidity();
|
|
191
|
-
});
|
|
192
|
-
endDateChanges.subscribe(end => {
|
|
193
|
-
this.DatePickerFormControl.addValidators(this.checkIfEndDateAfterStartDate);
|
|
194
|
-
this.DatePickerFormControl.updateValueAndValidity();
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
DateInputComponent.controlContainerstatic = null;
|
|
199
|
-
DateInputComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DateInputComponent, deps: [{ token: i1.DatePipe }, { token: i2.OnPagingFiltersChangeService }, { token: i3.ErrorMassageValidation }, { token: i4.ControlUtility }, { token: i5.ControlContainer, optional: true }, { token: i5.FormGroupDirective }, { token: i6.UtilityService }, { token: i6.BBSFTranslateService }, { token: i6.ControlValidationService }, { token: i7.DateTimeAdapter }], target: i0.ɵɵFactoryTarget.Component });
|
|
200
|
-
DateInputComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: DateInputComponent, selector: "BBSF-DateTimePicker", inputs: { group: "group", options: "options" }, outputs: { OnChange: "OnChange" }, providers: [
|
|
201
|
-
{ provide: OwlDateTimeIntl, useClass: DefaultIntl }
|
|
202
|
-
], ngImport: i0, template: "\r\n<div class=\"form-group bbsf-control bbsf-datetime-picker\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n </label>\r\n <!--Asterisk-->\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger\"\r\n aria-required=\"true\">*</span>\r\n <div class=\"bbsf-input-container\">\r\n <!--input-->\r\n <input autocomplete=\"off\" (dateTimeChange)=\"onDateSelect($event)\"\r\n [dir]=\"textDir\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}} \"\r\n [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{options.Name}}\" [owlDateTime]=\"dt1\" [owlDateTimeTrigger]=\"dt1\"\r\n [class.is-invalid]=\"DatePickerFormControl.invalid && DatePickerFormControl.touched\"\r\n [min]=\"options.StartDate\" [max]=\"options.EndDate\" [hour12Timer]=\"options.Hour12Timer\" [selectMode]=\"getSelectMode(options.SelectMode)\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" #Dateinput>\r\n\r\n <owl-date-time [pickerType]=\"getPickerType(options.PickerType)\"\r\n [startView]=\"startView\" [firstDayOfWeek]=\"options.FirstDayOfWeek\"\r\n [hour12Timer]=\"options.Hour12Timer\" #dt1></owl-date-time>\r\n <!--icon-->\r\n <span class=\"copy-clipboard\" [owlDateTimeTrigger]=\"dt1\">\r\n <span class=\"svg-icon\">\r\n <svg id=\"Group_356\" data-name=\"Group 356\" xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"15\" viewBox=\"0 0 48 48\">\r\n <path id=\"Path_6737\" data-name=\"Path 6737\" d=\"M11.583,1a1,1,0,0,0-2,0V5.7h2Z\" style=\"\"></path>\r\n <path id=\"Path_6738\" data-name=\"Path 6738\" d=\"M38.417,1a1,1,0,0,0-2,0V5.7h2Z\"></path>\r\n <path id=\"Path_6739\" data-name=\"Path 6739\" d=\"M0,43.146C0,45.822,1.826,48,4.07,48H43.928C46.174,48,48,45.822,48,43.146V17.121H0Z\" fill=\"#d5d5d5\"></path>\r\n <path id=\"Path_6740\" data-name=\"Path 6740\" d=\"M43.929,5.7H38.417v5.512a1,1,0,1,1-2,0V5.7H11.583v5.512a1,1,0,1,1-2,0V5.7H4.07C1.826,5.7,0,7.877,0,10.555v4.566H48V10.555C48,7.877,46.174,5.7,43.929,5.7Z\" fill=\"#595959\"></path>\r\n </svg>\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(DatePickerFormControl.invalid && DatePickerFormControl.touched)\">\r\n {{getErrorValidation(DatePickerFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n</div>\r\n", components: [{ type: i7.OwlDateTimeComponent, selector: "owl-date-time", inputs: ["startAt", "pickerType", "pickerMode", "disabled", "opened", "backdropClass", "panelClass", "scrollStrategy"], outputs: ["afterPickerClosed", "afterPickerOpen", "yearSelected", "monthSelected"], exportAs: ["owlDateTime"] }], directives: [{ type: i5.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i5.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i7.OwlDateTimeInputDirective, selector: "input[owlDateTime]", inputs: ["rangeSeparator", "owlDateTime", "owlDateTimeFilter", "min", "max", "selectMode", "value", "values", "_disabled"], outputs: ["dateTimeChange", "dateTimeInput"], exportAs: ["owlDateTimeInput"] }, { type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i9.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { type: i5.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i5.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i7.OwlDateTimeTriggerDirective, selector: "[owlDateTimeTrigger]", inputs: ["disabled", "owlDateTimeTrigger"] }], pipes: { "keyvalue": i1.KeyValuePipe } });
|
|
203
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DateInputComponent, decorators: [{
|
|
204
|
-
type: Component,
|
|
205
|
-
args: [{ selector: 'BBSF-DateTimePicker', providers: [
|
|
206
|
-
{ provide: OwlDateTimeIntl, useClass: DefaultIntl }
|
|
207
|
-
], template: "\r\n<div class=\"form-group bbsf-control bbsf-datetime-picker\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n </label>\r\n <!--Asterisk-->\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger\"\r\n aria-required=\"true\">*</span>\r\n <div class=\"bbsf-input-container\">\r\n <!--input-->\r\n <input autocomplete=\"off\" (dateTimeChange)=\"onDateSelect($event)\"\r\n [dir]=\"textDir\"\r\n class=\"form-control bnsights-control {{options.ExtraClasses}} \"\r\n [ngClass]=\"(options.ViewType==1)?'':'col-md-9'\" aria-describedby=\"email-error\" aria-invalid=\"true\"\r\n formControlName=\"{{options.Name}}\" [owlDateTime]=\"dt1\" [owlDateTimeTrigger]=\"dt1\"\r\n [class.is-invalid]=\"DatePickerFormControl.invalid && DatePickerFormControl.touched\"\r\n [min]=\"options.StartDate\" [max]=\"options.EndDate\" [hour12Timer]=\"options.Hour12Timer\" [selectMode]=\"getSelectMode(options.SelectMode)\"\r\n placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\" #Dateinput>\r\n\r\n <owl-date-time [pickerType]=\"getPickerType(options.PickerType)\"\r\n [startView]=\"startView\" [firstDayOfWeek]=\"options.FirstDayOfWeek\"\r\n [hour12Timer]=\"options.Hour12Timer\" #dt1></owl-date-time>\r\n <!--icon-->\r\n <span class=\"copy-clipboard\" [owlDateTimeTrigger]=\"dt1\">\r\n <span class=\"svg-icon\">\r\n <svg id=\"Group_356\" data-name=\"Group 356\" xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"15\" viewBox=\"0 0 48 48\">\r\n <path id=\"Path_6737\" data-name=\"Path 6737\" d=\"M11.583,1a1,1,0,0,0-2,0V5.7h2Z\" style=\"\"></path>\r\n <path id=\"Path_6738\" data-name=\"Path 6738\" d=\"M38.417,1a1,1,0,0,0-2,0V5.7h2Z\"></path>\r\n <path id=\"Path_6739\" data-name=\"Path 6739\" d=\"M0,43.146C0,45.822,1.826,48,4.07,48H43.928C46.174,48,48,45.822,48,43.146V17.121H0Z\" fill=\"#d5d5d5\"></path>\r\n <path id=\"Path_6740\" data-name=\"Path 6740\" d=\"M43.929,5.7H38.417v5.512a1,1,0,1,1-2,0V5.7H11.583v5.512a1,1,0,1,1-2,0V5.7H4.07C1.826,5.7,0,7.877,0,10.555v4.566H48V10.555C48,7.877,46.174,5.7,43.929,5.7Z\" fill=\"#595959\"></path>\r\n </svg>\r\n </span>\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"subtext-container\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(DatePickerFormControl.invalid && DatePickerFormControl.touched)\">\r\n {{getErrorValidation(DatePickerFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n</div>\r\n" }]
|
|
208
|
-
}], ctorParameters: function () { return [{ type: i1.DatePipe }, { type: i2.OnPagingFiltersChangeService }, { type: i3.ErrorMassageValidation }, { type: i4.ControlUtility }, { type: i5.ControlContainer, decorators: [{
|
|
209
|
-
type: Optional
|
|
210
|
-
}] }, { type: i5.FormGroupDirective }, { type: i6.UtilityService }, { type: i6.BBSFTranslateService }, { type: i6.ControlValidationService }, { type: i7.DateTimeAdapter }]; }, propDecorators: { group: [{
|
|
211
|
-
type: Input
|
|
212
|
-
}], options: [{
|
|
213
|
-
type: Input
|
|
214
|
-
}], OnChange: [{
|
|
215
|
-
type: Output
|
|
216
|
-
}] } });
|
|
217
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGF0ZVRpbWVQaWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmJzZi1jb250cm9scy9zcmMvbGliL2NvbnRyb2xzL0RhdGVUaW1lUGlja2VyL0RhdGVUaW1lUGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9EYXRlVGltZVBpY2tlci9EYXRlVGltZVBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBVyxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNsRyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBb0UsTUFBTSxnQkFBZ0IsQ0FBQztBQUkzSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQU0zRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDOzs7Ozs7Ozs7OztBQVN4RCxNQUFNLE9BQU8sa0JBQWtCO0lBRTdCLDRDQUE0QztJQUM1QyxZQUFtQixRQUFrQixFQUFVLGVBQTZDLEVBQVUsWUFBb0MsRUFBVSxjQUE4QixFQUFzQixnQkFBa0MsRUFBUyxvQkFBd0MsRUFBVSxjQUE4QixFQUFVLFNBQStCLEVBQVUsd0JBQWtELEVBQVUsZUFBcUM7UUFBcGMsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUFVLG9CQUFlLEdBQWYsZUFBZSxDQUE4QjtRQUFVLGlCQUFZLEdBQVosWUFBWSxD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QkgsMG1HQStDQTs0RkR2QmEsa0JBQWtCO2tCQVA5QixTQUFTOytCQUNFLHFCQUFxQixhQUVwQjt3QkFDVCxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRTtxQkFDcEQ7OzBCQUtvTCxRQUFRO2tOQUdwTCxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUVJLFFBQVE7c0JBQWpCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIERvQ2hlY2ssIE9wdGlvbmFsLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgQ29udHJvbENvbnRhaW5lciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRGF0ZVBpY2tlck9wdGlvbnMgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL2RhdGVQaWNrZXJPcHRpb25zJztcclxuaW1wb3J0IHsgRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy92YWxpZGF0aW9uRXJyb3JNYXNzYWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250cm9sVXRpbGl0eSB9IGZyb20gJy4uLy4uL1NoYXJlZC9zZXJ2aWNlcy9Db250cm9sVXRpbGl0eSc7XHJcbmltcG9ydCB7IFBpY2tlclR5cGUgfSBmcm9tICcuLi8uLi9TaGFyZWQvRW51bXMvUGlja2VyVHlwZSc7XHJcbmltcG9ydCB7IFN0YXJ0VmlldyB9IGZyb20gJy4uLy4uL1NoYXJlZC9FbnVtcy9TdGFydFZpZXcnO1xyXG5pbXBvcnQgeyBTZWxlY3RNb2RlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL0VudW1zL1NlbGVjdE1vZGUnO1xyXG5pbXBvcnQgeyBPblBhZ2luZ0ZpbHRlcnNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL09uUGFnaW5nRmlsdGVyc0NoYW5nZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZm9ybWF0RGF0ZSB9IGZyb20gJ0BmdWxsY2FsZW5kYXIvY29yZSc7XHJcbmltcG9ydCB7IEJCU0ZUcmFuc2xhdGVTZXJ2aWNlLCBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIFV0aWxpdHlTZXJ2aWNlIH0gZnJvbSAnQGJuc2lnaHRzL2Jic2YtdXRpbGl0aWVzJztcclxuaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBEYXRlVGltZUFkYXB0ZXIgfSBmcm9tICduZy1waWNrLWRhdGV0aW1lJztcclxuaW1wb3J0IHsgT3dsRGF0ZVRpbWVJbnRsIH0gZnJvbSAnbmctcGljay1kYXRldGltZSc7XHJcbmltcG9ydCAqIGFzIGRhdGVUaW1lQ2xhc3MgZnJvbSAnbmctcGljay1kYXRldGltZS9kYXRlLXRpbWUvZGF0ZS10aW1lLmNsYXNzJztcclxuaW1wb3J0IHsgRGVmYXVsdEludGwgfSBmcm9tICcuLi8uLi9TaGFyZWQvZGVmYXVsdF9pbnRsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnQkJTRi1EYXRlVGltZVBpY2tlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL0RhdGVUaW1lUGlja2VyLmNvbXBvbmVudC5odG1sJyxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHsgcHJvdmlkZTogT3dsRGF0ZVRpbWVJbnRsLCB1c2VDbGFzczogRGVmYXVsdEludGwgfVxyXG4gIF0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEYXRlSW5wdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHN0YXRpYyBjb250cm9sQ29udGFpbmVyc3RhdGljID0gbnVsbDtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBkYXRlcGlwZTogRGF0ZVBpcGUsIHByaXZhdGUgb25DaGFuZ2VTZXJ2aWNlOiBPblBhZ2luZ0ZpbHRlcnNDaGFuZ2VTZXJ2aWNlLCBwcml2YXRlIEVycm9ySGFuZGxlcjogRXJyb3JNYXNzYWdlVmFsaWRhdGlvbiwgcHJpdmF0ZSBjb250cm9sVXRpbGl0eTogQ29udHJvbFV0aWxpdHksIEBPcHRpb25hbCgpIHByaXZhdGUgY29udHJvbENvbnRhaW5lcjogQ29udHJvbENvbnRhaW5lciwgcHVibGljIERhdGVJbnB1dENvbnRyb2xIb3N0OiBGb3JtR3JvdXBEaXJlY3RpdmUsIHByaXZhdGUgVXRpbGl0eVNlcnZpY2U6IFV0aWxpdHlTZXJ2aWNlLCBwcml2YXRlIHRyYW5zbGF0ZTogQkJTRlRyYW5zbGF0ZVNlcnZpY2UsIHByaXZhdGUgY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlOiBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsIHByaXZhdGUgZGF0ZVRpbWVBZGFwdGVyOiBEYXRlVGltZUFkYXB0ZXI8YW55Pikge1xyXG4gICAgRGF0ZUlucHV0Q29tcG9uZW50LmNvbnRyb2xDb250YWluZXJzdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogRGF0ZVBpY2tlck9wdGlvbnM7XHJcbiAgRGF0ZVBpY2tlckZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgQE91dHB1dCgpIE9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIG1hcmtBbGxBc1RvdWNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB2YWxpZGF0aW9uUnVsZXMgPSBbXTtcclxuICB2YWxpZGF0aW9uUnVsZXNhc3luYyA9IFtdO1xyXG4gIGNvbXBhcmVkQ29udHJvbDogQWJzdHJhY3RDb250cm9sID0gbnVsbDtcclxuICBkYXRlRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZXh0RGlyO1xyXG4gIHN0YXJ0VmlldztcclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnRleHREaXI9dGhpcy5vcHRpb25zLkZvcmNlRGlyZWN0aW9uPT0yPydydGwnOidsdHInO1xyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5TdGFydFZpZXcgPT0gMylcclxuICAgICAgdGhpcy5zdGFydFZpZXc9ICdtdWx0aS15ZWFyJztcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnN0YXJ0VmlldyA9IChTdGFydFZpZXdbdGhpcy5vcHRpb25zLlN0YXJ0Vmlld10gYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpXHJcbiAgICB9XHJcbiAgICAvLyBVcGRhdGUgdGhlIERhdGVUaW1lQWRhcHRlciBMYW5ndWFnZSB3aXRoIHRoZSBjdXJyZW50IHRocmVhZCBsYW5nYXVnZVxyXG4gICAgdGhpcy5kYXRlVGltZUFkYXB0ZXIuc2V0TG9jYWxlKHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0Q3VycmVudExhbmd1YWdlKCkgPT0gXCJhclwiID8gXCJhclwiIDogXCJlbi1VS1wiKTtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLmlzQ3JlYXRlZEJlZm9yID0gZmFsc2VcclxuICAgIHRoaXMuZ3JvdXAuYWRkQ29udHJvbCh0aGlzLm9wdGlvbnMuTmFtZSwgbmV3IEZvcm1Db250cm9sKCcnKSk7XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJGb3JtQ29udHJvbCA9IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLk5hbWVdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcblxyXG4gICAgdGhpcy5EYXRlUGlja2VyRm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5vcHRpb25zLlZhbHVlKTtcclxuXHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkN1c3RvbVZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xyXG4gICAgICBsZXQgVmFsaWRhdGlvbnMgPSB0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvblxyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgVmFsaWRhdGlvbnMubGVuZ3RoOyBpbmRleCsrKSB7XHJcbiAgICAgICAgY29uc3QgVmFsaWRhdGlvbiA9IFZhbGlkYXRpb25zW2luZGV4XTtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25SdWxlcy5wdXNoKFZhbGlkYXRpb24uZnVuY3Rpb25Cb2R5KTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IG51bGwgJiYgdGhpcy5vcHRpb25zLkxhYmVsS2V5ICE9IFwiXCIpXHJcbiAgICAgIHRoaXMub3B0aW9ucy5MYWJlbFZhbHVlID0gdGhpcy5VdGlsaXR5U2VydmljZS5nZXRSZXNvdXJjZVZhbHVlKHRoaXMub3B0aW9ucy5MYWJlbEtleSk7XHJcblxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLkRhdGVQaWNrZXJGb3JtQ29udHJvbC5kaXNhYmxlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5vcHRpb25zLlN0YXJ0Q29udHJvbFRvQ29tcGFyZVdpdGgpIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5TdGFydENvbnRyb2xUb0NvbXBhcmVXaXRoKSkge1xyXG4gICAgICAgIHRoaXMuY29tcGFyZWRDb250cm9sID0gdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLlN0YXJ0Q29udHJvbFRvQ29tcGFyZVdpdGgpXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpYmVEYXRlQ2hhbmdlcygpXHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJGb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMudmFsaWRhdGlvblJ1bGVzKTtcclxuICAgIHRoaXMuRGF0ZVBpY2tlckZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc2FzeW5jKTtcclxuICAgIHRoaXMuRGF0ZUlucHV0Q29udHJvbEhvc3QubmdTdWJtaXQuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICB0aGlzLmdyb3VwLm1hcmtBbGxBc1RvdWNoZWQoKVxyXG4gICAgICB0aGlzLm1hcmtBbGxBc1RvdWNoZWQgPSB0cnVlXHJcbiAgICB9KVxyXG5cclxuXHJcblxyXG4gIH1cclxuXHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2V0QXR0cmlidXRlRm9yQ29udHJvbCh0aGlzLm9wdGlvbnMpXHJcbiAgfVxyXG5cclxuXHJcbiAgcmVzZXRFcnJvciA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLlJlbW92ZUdsb2JhbEVycm9yKCk7XHJcbiAgfVxyXG5cclxuICBzaG93R2xvYmFsRXJyb3IoKSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnNob3dHbG9iYWxFcnJvcigpXHJcbiAgfVxyXG5cclxuICBnZXRFcnJvclZhbGlkYXRpb24oRXJyb3JMaXN0KSB7XHJcbiAgICBpZiAodGhpcy5tYXJrQWxsQXNUb3VjaGVkICYmIHRoaXMuZ3JvdXAuaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnNob3dHbG9iYWxFcnJvcigpXHJcbiAgICAgIHRoaXMubWFya0FsbEFzVG91Y2hlZCA9IGZhbHNlXHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5jb250cm9sVXRpbGl0eS5nZXRFcnJvclZhbGlkYXRpb25NYXNzYWdlKEVycm9yTGlzdCwgdGhpcy5ncm91cCwgdGhpcy5vcHRpb25zKTtcclxuICB9XHJcblxyXG5cclxuXHJcblxyXG4gIGNvcHlJbnB1dE1lc3NhZ2UoaW5wdXRFbGVtZW50KSB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkNvcHlJbnB1dE1lc3NhZ2UoaW5wdXRFbGVtZW50KVxyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0TW9kZSh0eXBlOiBudW1iZXIpIHtcclxuICAgIGxldCBWYWx1ZSA9IChTZWxlY3RNb2RlW3R5cGVdIGFzIHN0cmluZylcclxuICAgIHJldHVybiBWYWx1ZS50b0xvd2VyQ2FzZSgpIGFzIGRhdGVUaW1lQ2xhc3MuU2VsZWN0TW9kZVxyXG4gIH1cclxuICBnZXRQaWNrZXJUeXBlKHR5cGU6IG51bWJlcikge1xyXG4gICAgbGV0IFZhbHVlID0gKFBpY2tlclR5cGVbdHlwZV0gYXMgc3RyaW5nKVxyXG4gICAgcmV0dXJuIFZhbHVlLnRvTG93ZXJDYXNlKCkgYXMgZGF0ZVRpbWVDbGFzcy5QaWNrZXJUeXBlXHJcbiAgfVxyXG4gIGdldFN0YXJ0Vmlldyh0eXBlOiBudW1iZXIpIHtcclxuICAgIGlmICh0eXBlID09IDMpXHJcbiAgICAgIHJldHVybiAnbXVsdGkteWVhcic7XHJcbiAgICBlbHNlIHtcclxuICAgICAgY29uc3QgVmFsdWUgPSAoU3RhcnRWaWV3W3R5cGVdIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKVxyXG4gICAgICByZXR1cm4gVmFsdWVcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBvbkRhdGVTZWxlY3QoaXRlbSkge1xyXG4gICAgaWYoIWl0ZW0pXHJcbiAgICAgIHJldHVybjtcclxuICAgIGxldCBEYXRlVmFsdWU7XHJcbiAgICB2YXIgdHpvZmZzZXQgPSAobmV3IERhdGUoKSkuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwOyAvL29mZnNldCBpbiBtaWxsaXNlY29uZHMgIFxyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuU2VsZWN0TW9kZSA9PSAyKSB7XHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBpdGVtLnZhbHVlLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgIGl0ZW0udmFsdWVbaW5kZXhdID0gbmV3IERhdGUoaXRlbS52YWx1ZVtpbmRleF0gLSB0em9mZnNldCkudG9JU09TdHJpbmcoKS5zbGljZSgwLCAtMSk7XHJcblxyXG4gICAgICB9XHJcbiAgICAgIERhdGVWYWx1ZSA9IGl0ZW0udmFsdWU7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgRGF0ZVZhbHVlID0gbmV3IERhdGUoaXRlbS52YWx1ZSAtIHR6b2Zmc2V0KS50b0lTT1N0cmluZygpLnNsaWNlKDAsIC0xKTtcclxuXHJcbiAgICB9XHJcbiAgICB0aGlzLkRhdGVQaWNrZXJGb3JtQ29udHJvbC5zZXRWYWx1ZShEYXRlVmFsdWUpXHJcbiAgICB0aGlzLm9uQ2hhbmdlU2VydmljZS5DaGFuZ2VWYWx1ZSh0aGlzLm9wdGlvbnMuTmFtZSk7XHJcbiAgICBsZXQgb3JpZ2luYWxWYWx1ZSA9IERhdGVWYWx1ZTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbiAmJiB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoICYmIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWxpZCkge1xyXG4gICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdGNoQ29udHJvbFZhbHVlKG9yaWdpbmFsVmFsdWUsdGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24gLHRoaXMub3B0aW9ucy5QYXRjaFBhdGgpXHJcbiAgICB9XHJcbiAgICAvL1VzZSB0aGlzIGxpbmUgdG8gZW5hYmxlIHR3byB3YXkgYmluZGluZy5cclxuICAgIHRoaXMub3B0aW9ucy5WYWx1ZT0gb3JpZ2luYWxWYWx1ZTtcclxuICAgIHRoaXMuT25DaGFuZ2UuZW1pdChvcmlnaW5hbFZhbHVlKTtcclxuICB9XHJcblxyXG4gIHN1YnNjcmliZURhdGVDaGFuZ2VzKCkge1xyXG4gICAgY29uc3Qgc3RhcnREYXRlQ2hhbmdlcyA9IHRoaXMuY29tcGFyZWRDb250cm9sLnZhbHVlQ2hhbmdlcztcclxuICAgIGNvbnN0IGVuZERhdGVDaGFuZ2VzID0gdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnZhbHVlQ2hhbmdlcztcclxuICAgIHN0YXJ0RGF0ZUNoYW5nZXMuc3Vic2NyaWJlKHN0YXJ0ID0+IHtcclxuICAgICAgICB0aGlzLmNvbXBhcmVkQ29udHJvbC5hZGRWYWxpZGF0b3JzKHRoaXMuY2hlY2tJZlN0YXJ0RGF0ZUJlRm9yRW5kRGF0ZSk7XHJcbiAgICAgICAgdGhpcy5jb21wYXJlZENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfSk7XHJcbiAgICBlbmREYXRlQ2hhbmdlcy5zdWJzY3JpYmUoZW5kID0+IHtcclxuICAgICAgICB0aGlzLkRhdGVQaWNrZXJGb3JtQ29udHJvbC5hZGRWYWxpZGF0b3JzKHRoaXMuY2hlY2tJZkVuZERhdGVBZnRlclN0YXJ0RGF0ZSk7XHJcbiAgICAgICAgdGhpcy5EYXRlUGlja2VyRm9ybUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbiAgY2hlY2tJZkVuZERhdGVBZnRlclN0YXJ0RGF0ZSA9ICgpID0+IHtcclxuICAgIGlmICghdGhpcy5jb21wYXJlZENvbnRyb2wudmFsdWUgfHwgIXRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKCBuZXcgRGF0ZSh0aGlzLmNvbXBhcmVkQ29udHJvbC52YWx1ZSk8IG5ldyBEYXRlKHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWx1ZSkpIHtcclxuICAgICAgICB0aGlzLmNvbXBhcmVkQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvbXBhcmVkQ29udHJvbC5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIHtJbnZhbGlkRW5kRGF0ZTp0cnVlfTtcclxuICAgIH1cclxufTtcclxuY2hlY2tJZlN0YXJ0RGF0ZUJlRm9yRW5kRGF0ZSA9ICgpID0+IHtcclxuICAgIGlmICghdGhpcy5jb21wYXJlZENvbnRyb2wudmFsdWUgfHwgIXRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgaWYgKCBuZXcgRGF0ZSh0aGlzLmNvbXBhcmVkQ29udHJvbC52YWx1ZSkgPCBuZXcgRGF0ZSh0aGlzLmdyb3VwLmdldCh0aGlzLm9wdGlvbnMuTmFtZSkudmFsdWUpKSB7XHJcbiAgICAgICAgdGhpcy5ncm91cC5nZXQodGhpcy5vcHRpb25zLk5hbWUpLnNldEVycm9ycyhudWxsKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS5zZXRFcnJvcnMobnVsbCk7XHJcbiAgICAgICAgcmV0dXJuIHtJbnZhbGlkU3RhcnREYXRlOnRydWV9O1xyXG4gICAgfVxyXG59O1xyXG5cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIFJlbW92ZVJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuRGF0ZVBpY2tlckZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gIH1cclxuICAvL0V4dGVybmFsIE1ldGhvZFxyXG4gIEFkZFJlcXVpcmVkVmFsaWRhdGlvbiA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuQWRkUmVxdWlyZWRWYWxpZGF0aW9uKHRoaXMuRGF0ZVBpY2tlckZvcm1Db250cm9sLCB0aGlzLnZhbGlkYXRpb25SdWxlcywgdGhpcy5vcHRpb25zKVxyXG4gIH1cclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBSZW1vdmVDdXN0b21WYWxpZGF0aW9uID0gKEN1c3RvbVZhbGlkYXRpb24pID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuUmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbih0aGlzLkRhdGVQaWNrZXJGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkQ3VzdG9tVmFsaWRhdGlvbiA9IChDdXN0b21WYWxpZGF0aW9uKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZEN1c3RvbVZhbGlkYXRpb24odGhpcy5EYXRlUGlja2VyRm9ybUNvbnRyb2wsIHRoaXMudmFsaWRhdGlvblJ1bGVzLCBDdXN0b21WYWxpZGF0aW9uKVxyXG4gIH1cclxuXHJcbiAgLy9FeHRlcm5hbCBNZXRob2RcclxuICBJc1ZhbGlkID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5Jc1ZhbGlkKHRoaXMuRGF0ZVBpY2tlckZvcm1Db250cm9sKVxyXG4gIH1cclxuXHJcbn1cclxuXHJcblxyXG5cclxuIiwiXHJcbjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGJic2YtY29udHJvbCBiYnNmLWRhdGV0aW1lLXBpY2tlclwiIFtmb3JtR3JvdXBdPVwiZ3JvdXBcIj5cclxuICA8ZGl2IFtuZ0NsYXNzXT1cIihvcHRpb25zLlZpZXdUeXBlPT0xKT8nYmJzZi12ZXJ0aWNhbCc6J2Jic2YtaG9yaXpvbnRhbCdcIj5cclxuICAgIDwhLS1sYWJlbC0tPlxyXG4gICAgPGxhYmVsICpuZ0lmPVwiIW9wdGlvbnMuSGlkZUxhYmVsXCIgY2xhc3M9XCJiYnNmLWxhYmVsIHt7b3B0aW9ucy5MYWJlbEV4dHJhQ2xhc3Nlc319XCI+XHJcbiAgICAgIHt7b3B0aW9ucy5MYWJlbFZhbHVlfX1cclxuICAgIDwvbGFiZWw+XHJcbiAgICA8IS0tQXN0ZXJpc2stLT5cclxuICAgIDxzcGFuICpuZ0lmPVwiKG9wdGlvbnMuU2hvd0FzdGVyaXNrJiZvcHRpb25zLklzUmVxdWlyZWQpfHwob3B0aW9ucy5Jc1JlcXVpcmVkKVwiIGNsYXNzPVwidGV4dC1kYW5nZXJcIlxyXG4gICAgICAgICAgYXJpYS1yZXF1aXJlZD1cInRydWVcIj4qPC9zcGFuPlxyXG4gICAgPGRpdiBjbGFzcz1cImJic2YtaW5wdXQtY29udGFpbmVyXCI+XHJcbiAgICAgIDwhLS1pbnB1dC0tPlxyXG4gICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGRhdGVUaW1lQ2hhbmdlKT1cIm9uRGF0ZVNlbGVjdCgkZXZlbnQpXCJcclxuICAgICAgW2Rpcl09XCJ0ZXh0RGlyXCJcclxuICAgICAgICAgICAgIGNsYXNzPVwiZm9ybS1jb250cm9sIGJuc2lnaHRzLWNvbnRyb2wgIHt7b3B0aW9ucy5FeHRyYUNsYXNzZXN9fSBcIlxyXG4gICAgICAgICAgICAgW25nQ2xhc3NdPVwiKG9wdGlvbnMuVmlld1R5cGU9PTEpPycnOidjb2wtbWQtOSdcIiBhcmlhLWRlc2NyaWJlZGJ5PVwiZW1haWwtZXJyb3JcIiBhcmlhLWludmFsaWQ9XCJ0cnVlXCJcclxuICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cInt7b3B0aW9ucy5OYW1lfX1cIiBbb3dsRGF0ZVRpbWVdPVwiZHQxXCIgW293bERhdGVUaW1lVHJpZ2dlcl09XCJkdDFcIlxyXG4gICAgICAgICAgICAgW2NsYXNzLmlzLWludmFsaWRdPVwiRGF0ZVBpY2tlckZvcm1Db250cm9sLmludmFsaWQgJiYgRGF0ZVBpY2tlckZvcm1Db250cm9sLnRvdWNoZWRcIlxyXG4gICAgICAgICAgICAgW21pbl09XCJvcHRpb25zLlN0YXJ0RGF0ZVwiIFttYXhdPVwib3B0aW9ucy5FbmREYXRlXCIgW2hvdXIxMlRpbWVyXT1cIm9wdGlvbnMuSG91cjEyVGltZXJcIiBbc2VsZWN0TW9kZV09XCJnZXRTZWxlY3RNb2RlKG9wdGlvbnMuU2VsZWN0TW9kZSlcIlxyXG4gICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJ7e29wdGlvbnMuUGxhY2Vob2xkZXJ9fVwiIGlkPVwie3tvcHRpb25zLk5hbWV9fVwiICNEYXRlaW5wdXQ+XHJcblxyXG4gICAgICA8b3dsLWRhdGUtdGltZSBbcGlja2VyVHlwZV09XCJnZXRQaWNrZXJUeXBlKG9wdGlvbnMuUGlja2VyVHlwZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICBbc3RhcnRWaWV3XT1cInN0YXJ0Vmlld1wiIFtmaXJzdERheU9mV2Vla109XCJvcHRpb25zLkZpcnN0RGF5T2ZXZWVrXCJcclxuICAgICAgICAgICAgICAgICAgICAgW2hvdXIxMlRpbWVyXT1cIm9wdGlvbnMuSG91cjEyVGltZXJcIiAjZHQxPjwvb3dsLWRhdGUtdGltZT5cclxuICAgICAgPCEtLWljb24tLT5cclxuICAgICAgPHNwYW4gY2xhc3M9XCJjb3B5LWNsaXBib2FyZFwiIFtvd2xEYXRlVGltZVRyaWdnZXJdPVwiZHQxXCI+XHJcbiAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvblwiPlxyXG4gICAgICAgICAgPHN2ZyBpZD1cIkdyb3VwXzM1NlwiIGRhdGEtbmFtZT1cIkdyb3VwIDM1NlwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE1XCIgaGVpZ2h0PVwiMTVcIiB2aWV3Qm94PVwiMCAwIDQ4IDQ4XCI+XHJcbiAgICAgICAgICAgIDxwYXRoIGlkPVwiUGF0aF82NzM3XCIgZGF0YS1uYW1lPVwiUGF0aCA2NzM3XCIgZD1cIk0xMS41ODMsMWExLDEsMCwwLDAtMiwwVjUuN2gyWlwiIHN0eWxlPVwiXCI+PC9wYXRoPlxyXG4gICAgICAgICAgICA8cGF0aCBpZD1cIlBhdGhfNjczOFwiIGRhdGEtbmFtZT1cIlBhdGggNjczOFwiIGQ9XCJNMzguNDE3LDFhMSwxLDAsMCwwLTIsMFY1LjdoMlpcIj48L3BhdGg+XHJcbiAgICAgICAgICAgIDxwYXRoIGlkPVwiUGF0aF82NzM5XCIgZGF0YS1uYW1lPVwiUGF0aCA2NzM5XCIgZD1cIk0wLDQzLjE0NkMwLDQ1LjgyMiwxLjgyNiw0OCw0LjA3LDQ4SDQzLjkyOEM0Ni4xNzQsNDgsNDgsNDUuODIyLDQ4LDQzLjE0NlYxNy4xMjFIMFpcIiBmaWxsPVwiI2Q1ZDVkNVwiPjwvcGF0aD5cclxuICAgICAgICAgICAgPHBhdGggaWQ9XCJQYXRoXzY3NDBcIiBkYXRhLW5hbWU9XCJQYXRoIDY3NDBcIiBkPVwiTTQzLjkyOSw1LjdIMzguNDE3djUuNTEyYTEsMSwwLDEsMS0yLDBWNS43SDExLjU4M3Y1LjUxMmExLDEsMCwxLDEtMiwwVjUuN0g0LjA3QzEuODI2LDUuNywwLDcuODc3LDAsMTAuNTU1djQuNTY2SDQ4VjEwLjU1NUM0OCw3Ljg3Nyw0Ni4xNzQsNS43LDQzLjkyOSw1LjdaXCIgZmlsbD1cIiM1OTU5NTlcIj48L3BhdGg+XHJcbiAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICA8L3NwYW4+XHJcbiAgICAgIDwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgY2xhc3M9XCJzdWJ0ZXh0LWNvbnRhaW5lclwiPlxyXG4gICAgPCEtLSBMYWJlbERlc2NyaXB0aW9uLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1jb250cm9sLWRlc2NcIiAqbmdJZj1cIm9wdGlvbnMuTGFiZWxEZXNjcmlwdGlvbiE9bnVsbFwiPnt7b3B0aW9ucy5MYWJlbERlc2NyaXB0aW9ufX08L2Rpdj5cclxuICAgIDwhLS0gcmVxdWlyZWRUZXh0LS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi12YWxpZGF0aW9uXCIgKm5nSWY9XCIoRGF0ZVBpY2tlckZvcm1Db250cm9sLmludmFsaWQgJiYgRGF0ZVBpY2tlckZvcm1Db250cm9sLnRvdWNoZWQpXCI+XHJcbiAgICAgIHt7Z2V0RXJyb3JWYWxpZGF0aW9uKERhdGVQaWNrZXJGb3JtQ29udHJvbC5lcnJvcnN8a2V5dmFsdWUpfX1cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDxkaXYgKm5nSWY9XCIoZ3JvdXAudmFsaWQmJmdyb3VwLmRpcnR5JiZncm91cC50b3VjaGVkICl8fChncm91cC51bnRvdWNoZWQmJmdyb3VwLmludmFsaWQmJmdyb3VwLmRpcnR5KSBcIj57e3Jlc2V0RXJyb3IoKX19PC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import { Component, Input, Optional, Output, EventEmitter } from '@angular/core';
|
|
2
|
-
import { FormControl, Validators } from '@angular/forms';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "../../Shared/services/OnPagingFiltersChange.service";
|
|
5
|
-
import * as i2 from "../../Shared/services/ControlUtility";
|
|
6
|
-
import * as i3 from "@angular/forms";
|
|
7
|
-
import * as i4 from "@bnsights/bbsf-utilities";
|
|
8
|
-
import * as i5 from "../../Shared/services/GlobalSettings.service";
|
|
9
|
-
import * as i6 from "@ng-select/ng-select";
|
|
10
|
-
import * as i7 from "@angular/common";
|
|
11
|
-
import * as i8 from "@angular/cdk/bidi";
|
|
12
|
-
import * as i9 from "ngx-intl-tel-input";
|
|
13
|
-
export class DropdownListComponent {
|
|
14
|
-
// tslint:disable-next-line: max-line-length
|
|
15
|
-
constructor(onChangeService, controlUtility, controlContainer, DropdownListControlHost, UtilityService, controlValidationService, globalSettings) {
|
|
16
|
-
this.onChangeService = onChangeService;
|
|
17
|
-
this.controlUtility = controlUtility;
|
|
18
|
-
this.controlContainer = controlContainer;
|
|
19
|
-
this.DropdownListControlHost = DropdownListControlHost;
|
|
20
|
-
this.UtilityService = UtilityService;
|
|
21
|
-
this.controlValidationService = controlValidationService;
|
|
22
|
-
this.globalSettings = globalSettings;
|
|
23
|
-
this.dropdownSettings = {};
|
|
24
|
-
this.SelectedList = [];
|
|
25
|
-
this.OnChange = new EventEmitter();
|
|
26
|
-
this.onClear = new EventEmitter();
|
|
27
|
-
this.markAllAsTouched = false;
|
|
28
|
-
this.controlChanged = false;
|
|
29
|
-
this.validationRules = [];
|
|
30
|
-
this.validationRulesasync = [];
|
|
31
|
-
this.resetError = () => {
|
|
32
|
-
this.controlValidationService.RemoveGlobalError();
|
|
33
|
-
};
|
|
34
|
-
//External Method
|
|
35
|
-
this.RemoveRequiredValidation = () => {
|
|
36
|
-
this.controlUtility.RemoveRequiredValidation(this.DropdownListFormControl, this.validationRules, this.options);
|
|
37
|
-
};
|
|
38
|
-
//External Method
|
|
39
|
-
this.AddRequiredValidation = () => {
|
|
40
|
-
this.controlUtility.AddRequiredValidation(this.DropdownListFormControl, this.validationRules, this.options);
|
|
41
|
-
};
|
|
42
|
-
//External Method
|
|
43
|
-
this.RemoveCustomValidation = (CustomValidation) => {
|
|
44
|
-
this.controlUtility.RemoveCustomValidation(this.DropdownListFormControl, this.validationRules, CustomValidation);
|
|
45
|
-
};
|
|
46
|
-
//External Method
|
|
47
|
-
this.AddCustomValidation = (CustomValidation) => {
|
|
48
|
-
this.controlUtility.AddCustomValidation(this.DropdownListFormControl, this.validationRules, CustomValidation);
|
|
49
|
-
};
|
|
50
|
-
//External Method
|
|
51
|
-
this.IsValid = () => {
|
|
52
|
-
this.controlUtility.IsValid(this.DropdownListFormControl);
|
|
53
|
-
};
|
|
54
|
-
//Update items (data source) of drop down
|
|
55
|
-
this.UpdateDataSource = (dataSource) => {
|
|
56
|
-
this.options.DataSource = dataSource;
|
|
57
|
-
};
|
|
58
|
-
DropdownListComponent.controlContainerstatic = this.controlContainer;
|
|
59
|
-
//console.log(environment["BBSF_AdminUrl"]);
|
|
60
|
-
}
|
|
61
|
-
ngOnInit() {
|
|
62
|
-
this.textDir = this.options.ForceDirection == 2 ? 'rtl' : 'ltr';
|
|
63
|
-
this.controlValidationService.isCreatedBefor = false;
|
|
64
|
-
this.SelectedList = this.options.SelectedItems;
|
|
65
|
-
this.dropdownSettings = {
|
|
66
|
-
singleSelection: this.options.SingleSelection,
|
|
67
|
-
text: "Select",
|
|
68
|
-
selectAllText: 'Select All',
|
|
69
|
-
unSelectAllText: 'UnSelect All',
|
|
70
|
-
enableSearchFilter: this.options.AllowSearchFilter,
|
|
71
|
-
classes: this.options.Classes,
|
|
72
|
-
disabled: this.options.IsDisabled,
|
|
73
|
-
showCheckbox: this.options.ShowCheckbox,
|
|
74
|
-
enableCheckAll: this.options.EnableCheckAll,
|
|
75
|
-
itemsShowLimit: this.options.ItemsShowLimit,
|
|
76
|
-
allowSearchFilter: this.options.AllowSearchFilter,
|
|
77
|
-
showSelectedItemsAtTop: true,
|
|
78
|
-
limitSelection: this.options.LimitSelection,
|
|
79
|
-
searchPlaceholderText: this.options.Placeholder,
|
|
80
|
-
labelKey: "value",
|
|
81
|
-
primaryKey: "key"
|
|
82
|
-
};
|
|
83
|
-
this.group.addControl(this.options.Name, new FormControl(''));
|
|
84
|
-
this.DropdownListFormControl = this.group.controls[this.options.Name]; // new FormControl('',validationRules);
|
|
85
|
-
if (!this.options.ViewType)
|
|
86
|
-
this.options.ViewType = this.globalSettings.ViewType;
|
|
87
|
-
if (this.options.CustomValidation.length > 0) {
|
|
88
|
-
let Validations = this.options.CustomValidation;
|
|
89
|
-
for (let index = 0; index < Validations.length; index++) {
|
|
90
|
-
const Validation = Validations[index];
|
|
91
|
-
this.validationRules.push(Validation.functionBody);
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
if (this.options.IsRequired) {
|
|
95
|
-
this.validationRules.push(Validators.required);
|
|
96
|
-
}
|
|
97
|
-
if (this.options.LabelKey != null && this.options.LabelKey != "")
|
|
98
|
-
this.options.LabelValue = this.UtilityService.getResourceValue(this.options.LabelKey);
|
|
99
|
-
this.DropdownListFormControl.setValidators(this.validationRules);
|
|
100
|
-
this.DropdownListFormControl.setAsyncValidators(this.validationRulesasync);
|
|
101
|
-
if (this.options.IsDisabled) {
|
|
102
|
-
this.DropdownListFormControl.disable();
|
|
103
|
-
}
|
|
104
|
-
this.DropdownListControlHost.ngSubmit.subscribe((value) => {
|
|
105
|
-
this.group.markAllAsTouched();
|
|
106
|
-
this.markAllAsTouched = true;
|
|
107
|
-
});
|
|
108
|
-
}
|
|
109
|
-
ngAfterViewInit() {
|
|
110
|
-
this.controlUtility.setAttributeForControl(this.options);
|
|
111
|
-
}
|
|
112
|
-
showGlobalError() {
|
|
113
|
-
this.controlUtility.showGlobalError();
|
|
114
|
-
}
|
|
115
|
-
getErrorValidation(ErrorList) {
|
|
116
|
-
if (this.markAllAsTouched && this.group.invalid) {
|
|
117
|
-
this.showGlobalError();
|
|
118
|
-
this.markAllAsTouched = false;
|
|
119
|
-
}
|
|
120
|
-
return this.controlUtility.getErrorValidationMassage(ErrorList, this.group, this.options);
|
|
121
|
-
}
|
|
122
|
-
onItemSelect() {
|
|
123
|
-
this.onChangeService.ChangeValue(this.options.Name);
|
|
124
|
-
let originalValue = this.options.SelectedItems;
|
|
125
|
-
if (this.options.PatchFunction && this.options.PatchPath && this.group.get(this.options.Name).valid) {
|
|
126
|
-
this.controlUtility.patchControlValue(originalValue, this.options.PatchFunction, this.options.PatchPath);
|
|
127
|
-
}
|
|
128
|
-
this.OnChange.emit(originalValue);
|
|
129
|
-
//console.log(this.DropdownListFormControl.value)
|
|
130
|
-
}
|
|
131
|
-
Clear() {
|
|
132
|
-
//console.log("Clear")
|
|
133
|
-
this.DropdownListFormControl.setValue(this.SelectedItems);
|
|
134
|
-
this.onChangeService.ChangeValue(this.options.Name);
|
|
135
|
-
this.OnChange.emit();
|
|
136
|
-
}
|
|
137
|
-
onSelectAll(items) {
|
|
138
|
-
this.SelectedItems = items;
|
|
139
|
-
this.DropdownListFormControl.setValue(this.SelectedItems);
|
|
140
|
-
}
|
|
141
|
-
onDeselect(items) {
|
|
142
|
-
this.DropdownListFormControl.setValue(this.SelectedItems);
|
|
143
|
-
if ((this.SelectedItems.length == 0) && this.options.IsRequired == true) {
|
|
144
|
-
this.DropdownListFormControl.markAsTouched();
|
|
145
|
-
this.DropdownListFormControl.invalid;
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
onDeselectAll(items) {
|
|
149
|
-
this.DropdownListFormControl.setValue(this.SelectedItems);
|
|
150
|
-
if ((this.SelectedItems.length == 0) && this.options.IsRequired == true) {
|
|
151
|
-
this.DropdownListFormControl.markAsTouched();
|
|
152
|
-
this.DropdownListFormControl.invalid;
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
onDropDownClose() {
|
|
156
|
-
if ((this.SelectedItems == undefined || this.SelectedItems.length == 0) && this.options.IsRequired == true) {
|
|
157
|
-
this.DropdownListFormControl.markAsTouched();
|
|
158
|
-
this.DropdownListFormControl.invalid;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
DropdownListComponent.controlContainerstatic = null;
|
|
163
|
-
DropdownListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DropdownListComponent, deps: [{ token: i1.OnPagingFiltersChangeService }, { token: i2.ControlUtility }, { token: i3.ControlContainer, optional: true }, { token: i3.FormGroupDirective }, { token: i4.UtilityService }, { token: i4.ControlValidationService }, { token: i5.GlobalSettings }], target: i0.ɵɵFactoryTarget.Component });
|
|
164
|
-
DropdownListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.12", type: DropdownListComponent, selector: "BBSF-DropdownList", inputs: { group: "group", options: "options" }, outputs: { OnChange: "OnChange", onClear: "onClear" }, ngImport: i0, template: "<div class=\"form-group bbsf-control bbsf-dropdown\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger\"\r\n aria-required=\"true\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\">\r\n <!--input enabled bootstrap select-->\r\n <ng-select class=\"form-control\" *ngIf=\"options.DisableBootstrapSelect==false\" [dir]=\"textDir\"\r\n [bindValue]=\"options.ItemTempletkey\" [bindLabel]=\"options.ItemTempletvalue\" [items]=\"options.DataSource\"\r\n [notFoundText]=\"options.NotFoundText\" [maxSelectedItems]=\"options.LimitSelection\"\r\n [searchable]=\"options.AllowSearchFilter\" [multiple]=\"!options.SingleSelection\" [readonly]=\"options.IsDisabled\"\r\n [clearable]=\"true\" placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\"\r\n [selectableGroup]=\"true\" [selectableGroupAsModel]=\"false\" formControlName=\"{{options.Name}}\"\r\n [(ngModel)]=\"options.SelectedItems\" (change)=\"onItemSelect()\" (clear)=\"Clear()\"\r\n [class.is-invalid]=\"DropdownListFormControl.invalid && DropdownListFormControl.touched\"\r\n [closeOnSelect]=\"options.SingleSelection ? true : false\">\r\n <!--No checkbox-->\r\n <ng-template *ngIf=\"!options.ShowCheckbox\" ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\r\n <label class=\"bbsf-label\" title=\"{{item.disabled ? options.DisabledItemsTooltipValue : ''}}\" id={{item.id}}>{{item.itemName}}</label>\r\n </ng-template>\r\n <!--checkbox-->\r\n <ng-template *ngIf=\"options.ShowCheckbox\" ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\r\n <div class=\" bbsf-checkbox\">\r\n <div class=\"bbsf-input-container align-items-center\">\r\n <input class=\"bbsf-checkbox-input\" id=\"item-{{index}}\" type=\"checkbox\" [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"item$.selected\" />\r\n <div class=\"label-subtext-container\">\r\n <label class=\"bbsf-label\" id={{item.id}}>{{item.itemName}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!--input disabled bootstrap select-->\r\n <select *ngIf=\"options.DisableBootstrapSelect\" class=\"form-control\"\r\n [dir]=\"textDir\" (change)=\"onItemSelect()\" [(ngModel)]=\"options.SelectedItems\" [disabled]=\"options.IsDisabled\" formControlName=\"{{options.Name}}\">\r\n <option value=\"\" disabled>--{{UtilityService.getResourceValue(\"select\")}}--</option>\r\n <option *ngFor=\"let item of options.DataSource\" value=\"{{item.id}}\" [ngValue]=\"item.id\">\r\n {{item.itemName}}\r\n </option>\r\n </select>\r\n <div class=\"subtext-container\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(DropdownListFormControl.invalid && DropdownListFormControl.touched)\">\r\n {{getErrorValidation(DropdownListFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n", components: [{ type: i6.NgSelectComponent, selector: "ng-select", inputs: ["markFirst", "dropdownPosition", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "bufferAmount", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "bindLabel", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "virtualScroll", "openOnEnter", "appendTo", "bindValue", "appearance", "maxSelectedItems", "groupBy", "groupValue", "tabIndex", "typeahead"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }], directives: [{ type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.Dir, selector: "[dir]", inputs: ["dir"], outputs: ["dirChange"], exportAs: ["dir"] }, { type: i9.NativeElementInjectorDirective, selector: "[ngModel], [formControl], [formControlName]" }, { type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i3.FormControlName, selector: "[formControlName]", inputs: ["disabled", "formControlName", "ngModel"], outputs: ["ngModelChange"] }, { type: i6.ɵf, selector: "[ng-option-tmp]" }, { type: i3.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { type: i3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i3.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { type: i3.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i3.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "keyvalue": i7.KeyValuePipe } });
|
|
165
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.12", ngImport: i0, type: DropdownListComponent, decorators: [{
|
|
166
|
-
type: Component,
|
|
167
|
-
args: [{ selector: 'BBSF-DropdownList', template: "<div class=\"form-group bbsf-control bbsf-dropdown\" [formGroup]=\"group\">\r\n <div [ngClass]=\"(options.ViewType==1)?'bbsf-vertical':'bbsf-horizontal'\">\r\n <!--label-->\r\n <label *ngIf=\"!options.HideLabel\" class=\"bbsf-label {{options.LabelExtraClasses}}\">\r\n {{options.LabelValue}}\r\n <!--Asterisk-->\r\n <span *ngIf=\"(options.ShowAsterisk&&options.IsRequired)||(options.IsRequired)\" class=\"text-danger\"\r\n aria-required=\"true\">*</span>\r\n </label>\r\n <div class=\"bbsf-input-container\">\r\n <!--input enabled bootstrap select-->\r\n <ng-select class=\"form-control\" *ngIf=\"options.DisableBootstrapSelect==false\" [dir]=\"textDir\"\r\n [bindValue]=\"options.ItemTempletkey\" [bindLabel]=\"options.ItemTempletvalue\" [items]=\"options.DataSource\"\r\n [notFoundText]=\"options.NotFoundText\" [maxSelectedItems]=\"options.LimitSelection\"\r\n [searchable]=\"options.AllowSearchFilter\" [multiple]=\"!options.SingleSelection\" [readonly]=\"options.IsDisabled\"\r\n [clearable]=\"true\" placeholder=\"{{options.Placeholder}}\" id=\"{{options.Name}}\"\r\n [selectableGroup]=\"true\" [selectableGroupAsModel]=\"false\" formControlName=\"{{options.Name}}\"\r\n [(ngModel)]=\"options.SelectedItems\" (change)=\"onItemSelect()\" (clear)=\"Clear()\"\r\n [class.is-invalid]=\"DropdownListFormControl.invalid && DropdownListFormControl.touched\"\r\n [closeOnSelect]=\"options.SingleSelection ? true : false\">\r\n <!--No checkbox-->\r\n <ng-template *ngIf=\"!options.ShowCheckbox\" ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\r\n <label class=\"bbsf-label\" title=\"{{item.disabled ? options.DisabledItemsTooltipValue : ''}}\" id={{item.id}}>{{item.itemName}}</label>\r\n </ng-template>\r\n <!--checkbox-->\r\n <ng-template *ngIf=\"options.ShowCheckbox\" ng-option-tmp let-item=\"item\" let-item$=\"item$\" let-index=\"index\">\r\n <div class=\" bbsf-checkbox\">\r\n <div class=\"bbsf-input-container align-items-center\">\r\n <input class=\"bbsf-checkbox-input\" id=\"item-{{index}}\" type=\"checkbox\" [ngModelOptions]=\"{standalone: true}\" [ngModel]=\"item$.selected\" />\r\n <div class=\"label-subtext-container\">\r\n <label class=\"bbsf-label\" id={{item.id}}>{{item.itemName}}</label>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n </ng-select>\r\n <!--input disabled bootstrap select-->\r\n <select *ngIf=\"options.DisableBootstrapSelect\" class=\"form-control\"\r\n [dir]=\"textDir\" (change)=\"onItemSelect()\" [(ngModel)]=\"options.SelectedItems\" [disabled]=\"options.IsDisabled\" formControlName=\"{{options.Name}}\">\r\n <option value=\"\" disabled>--{{UtilityService.getResourceValue(\"select\")}}--</option>\r\n <option *ngFor=\"let item of options.DataSource\" value=\"{{item.id}}\" [ngValue]=\"item.id\">\r\n {{item.itemName}}\r\n </option>\r\n </select>\r\n <div class=\"subtext-container\">\r\n <!-- LabelDescription-->\r\n <div class=\"bbsf-control-desc\" *ngIf=\"options.LabelDescription!=null\">{{options.LabelDescription}}</div>\r\n <!-- requiredText-->\r\n <div class=\"bbsf-validation\" *ngIf=\"(DropdownListFormControl.invalid && DropdownListFormControl.touched)\">\r\n {{getErrorValidation(DropdownListFormControl.errors|keyvalue)}}\r\n </div>\r\n </div>\r\n <div *ngIf=\"(group.valid&&group.dirty&&group.touched )||(group.untouched&&group.invalid&&group.dirty) \">{{resetError()}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n" }]
|
|
168
|
-
}], ctorParameters: function () { return [{ type: i1.OnPagingFiltersChangeService }, { type: i2.ControlUtility }, { type: i3.ControlContainer, decorators: [{
|
|
169
|
-
type: Optional
|
|
170
|
-
}] }, { type: i3.FormGroupDirective }, { type: i4.UtilityService }, { type: i4.ControlValidationService }, { type: i5.GlobalSettings }]; }, propDecorators: { group: [{
|
|
171
|
-
type: Input
|
|
172
|
-
}], options: [{
|
|
173
|
-
type: Input
|
|
174
|
-
}], OnChange: [{
|
|
175
|
-
type: Output
|
|
176
|
-
}], onClear: [{
|
|
177
|
-
type: Output
|
|
178
|
-
}] } });
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRHJvcGRvd25MaXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9Ecm9wZG93bkxpc3QvRHJvcGRvd25MaXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Jic2YtY29udHJvbHMvc3JjL2xpYi9jb250cm9scy9Ecm9wZG93bkxpc3QvRHJvcGRvd25MaXN0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFXLFFBQVEsRUFBZ0IsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBb0UsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7Ozs7Ozs7QUFjM0gsTUFBTSxPQUFPLHFCQUFxQjtJQUVoQyw0Q0FBNEM7SUFDNUMsWUFBb0IsZUFBNkMsRUFBVSxjQUE4QixFQUFzQixnQkFBa0MsRUFBUyx1QkFBMkMsRUFDNU0sY0FBOEIsRUFBVSx3QkFBa0QsRUFDekYsY0FBOEI7UUFGcEIsb0JBQWUsR0FBZixlQUFlLENBQThCO1FBQVUsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQXNCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFBUyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQW9CO1FBQzVNLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUFVLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDekYsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBT3hDLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUV0QixpQkFBWSxHQUFVLEVBQUUsQ0FBQTtRQUNkLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzlCLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBRXZDLHFCQUFnQixHQUFZLEtBQUssQ0FBQztRQUVsQyxtQkFBYyxHQUFZLEtBQUssQ0FBQztRQUNoQyxvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQix5QkFBb0IsR0FBRyxFQUFFLENBQUM7UUFxRTFCLGVBQVUsR0FBRyxHQUFHLEVBQUU7WUFDaEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDcEQsQ0FBQyxDQUFBO1FBNERELGlCQUFpQjtRQUNqQiw2QkFBd0IsR0FBRyxHQUFHLEVBQUU7WUFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDaEgsQ0FBQyxDQUFBO1FBRUQsaUJBQWlCO1FBQ2pCLDBCQUFxQixHQUFHLEdBQUcsRUFBRTtZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM3RyxDQUFDLENBQUE7UUFFRCxpQkFBaUI7UUFDakIsMkJBQXNCLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQzVDLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUNsSCxDQUFDLENBQUE7UUFDRCxpQkFBaUI7UUFDakIsd0JBQW1CLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFO1lBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtRQUMvRyxDQUFDLENBQUE7UUFDRCxpQkFBaUI7UUFDakIsWUFBTyxHQUFHLEdBQUcsRUFBRTtZQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1FBQzNELENBQUMsQ0FBQTtRQUVELHlDQUF5QztRQUN6QyxxQkFBZ0IsR0FBRyxDQUFDLFVBQThCLEVBQUUsRUFBRTtZQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDdkMsQ0FBQyxDQUFBO1FBN0tDLHFCQUFxQixDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNyRSw0Q0FBNEM7SUFDOUMsQ0FBQztJQWdCRCxRQUFRO1FBQ04sSUFBSSxDQUFDLE9BQU8sR0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsSUFBRSxDQUFDLENBQUEsQ0FBQyxDQUFBLEtBQUssQ0FBQSxDQUFDLENBQUEsS0FBSyxDQUFDO1FBQ3hELElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1FBQ3BELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUE7UUFDOUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHO1lBQ3RCLGVBQWUsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWU7WUFDN0MsSUFBSSxFQUFFLFFBQVE7WUFDZCxhQUFhLEVBQUUsWUFBWTtZQUMzQixlQUFlLEVBQUUsY0FBYztZQUMvQixrQkFBa0IsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQjtZQUNsRCxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1lBQzdCLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVU7WUFDakMsWUFBWSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWTtZQUN2QyxjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjO1lBQzNDLGNBQWMsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWM7WUFDM0MsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUI7WUFDakQsc0JBQXNCLEVBQUUsSUFBSTtZQUM1QixjQUFjLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjO1lBQzNDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztZQUMvQyxRQUFRLEVBQUUsT0FBTztZQUNqQixVQUFVLEVBQUUsS0FBSztTQUNsQixDQUFDO1FBRUYsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHdDQUF3QztRQUcvRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDO1FBRXZELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQzVDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUE7WUFDL0MsS0FBSyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQ3ZELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ3BEO1NBRUY7UUFJRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQzNCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUVoRDtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUU7WUFDOUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRXhGLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ2pFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUMzRSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQzNCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUN4QztRQUVELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFBO1lBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUE7UUFDOUIsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBSUQsZUFBZTtRQUNiLElBQUksQ0FBQyxjQUFjLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQzFELENBQUM7SUFPRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsQ0FBQTtJQUN2QyxDQUFDO0lBRUQsa0JBQWtCLENBQUMsU0FBUztRQUMxQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRTtZQUMvQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUE7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQTtTQUM5QjtRQUNELE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDNUYsQ0FBQztJQUdELFlBQVk7UUFDVixJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ25ELElBQUksYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBQy9DLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLEVBQUU7WUFDbkcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTtTQUN4RztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ2pDLGlEQUFpRDtJQUNuRCxDQUFDO0lBQ0QsS0FBSztRQUNILHNCQUFzQjtRQUN0QixJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDdEIsQ0FBQztJQUNELFdBQVcsQ0FBQyxLQUFLO1FBQ2YsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7UUFDM0IsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUNELFVBQVUsQ0FBQyxLQUFLO1FBQ2QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLElBQUksRUFBRTtZQUN2RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQztTQUV0QztJQUVILENBQUM7SUFDRCxhQUFhLENBQUMsS0FBSztRQUNqQixJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO1lBQ3ZFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDO1NBRXRDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFO1lBQzFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsT0FBTyxDQUFDO1NBRXRDO0lBQ0gsQ0FBQzs7QUF0Sk0sNENBQXNCLEdBQUcsSUFBSSxDQUFDO21IQUQxQixxQkFBcUI7dUdBQXJCLHFCQUFxQixnS0NmbEMsc3dIQXdEQTs0RkR6Q2EscUJBQXFCO2tCQUxqQyxTQUFTOytCQUVFLG1CQUFtQjs7MEJBTStFLFFBQVE7OEtBTTNHLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0ksUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBEb0NoZWNrLCBPcHRpb25hbCwgSG9zdExpc3RlbmVyLCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgVmFsaWRhdG9ycywgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgQ29udHJvbENvbnRhaW5lciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29udHJvbFV0aWxpdHkgfSBmcm9tICcuLi8uLi9TaGFyZWQvc2VydmljZXMvQ29udHJvbFV0aWxpdHknO1xyXG5pbXBvcnQgeyBEcm9wZG93bk9wdGlvbnMgfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL0Ryb3Bkb3duT3B0aW9ucyc7XHJcbmltcG9ydCB7IERyb3Bkb3duTGlzdEl0ZW0gfSBmcm9tICcuLi8uLi9TaGFyZWQvTW9kZWxzL0Ryb3Bkb3duTGlzdEl0ZW0nO1xyXG5pbXBvcnQgeyBPblBhZ2luZ0ZpbHRlcnNDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL09uUGFnaW5nRmlsdGVyc0NoYW5nZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbGlkYXRpb25TZXJ2aWNlLCBVdGlsaXR5U2VydmljZSB9IGZyb20gJ0BibnNpZ2h0cy9iYnNmLXV0aWxpdGllcyc7XHJcbmltcG9ydCB7IEdsb2JhbFNldHRpbmdzIH0gZnJvbSAnLi4vLi4vU2hhcmVkL3NlcnZpY2VzL0dsb2JhbFNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGNvbXBvbmVudC1zZWxlY3RvclxyXG4gIHNlbGVjdG9yOiAnQkJTRi1Ecm9wZG93bkxpc3QnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9Ecm9wZG93bkxpc3QuY29tcG9uZW50Lmh0bWwnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkxpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIHN0YXRpYyBjb250cm9sQ29udGFpbmVyc3RhdGljID0gbnVsbDtcclxuICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG1heC1saW5lLWxlbmd0aFxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb25DaGFuZ2VTZXJ2aWNlOiBPblBhZ2luZ0ZpbHRlcnNDaGFuZ2VTZXJ2aWNlLCBwcml2YXRlIGNvbnRyb2xVdGlsaXR5OiBDb250cm9sVXRpbGl0eSwgQE9wdGlvbmFsKCkgcHJpdmF0ZSBjb250cm9sQ29udGFpbmVyOiBDb250cm9sQ29udGFpbmVyLCBwdWJsaWMgRHJvcGRvd25MaXN0Q29udHJvbEhvc3Q6IEZvcm1Hcm91cERpcmVjdGl2ZSxcclxuICAgIHB1YmxpYyBVdGlsaXR5U2VydmljZTogVXRpbGl0eVNlcnZpY2UsIHByaXZhdGUgY29udHJvbFZhbGlkYXRpb25TZXJ2aWNlOiBDb250cm9sVmFsaWRhdGlvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGdsb2JhbFNldHRpbmdzOiBHbG9iYWxTZXR0aW5ncykge1xyXG4gICAgRHJvcGRvd25MaXN0Q29tcG9uZW50LmNvbnRyb2xDb250YWluZXJzdGF0aWMgPSB0aGlzLmNvbnRyb2xDb250YWluZXI7XHJcbiAgICAvL2NvbnNvbGUubG9nKGVudmlyb25tZW50W1wiQkJTRl9BZG1pblVybFwiXSk7XHJcbiAgfVxyXG4gIEBJbnB1dCgpIGdyb3VwOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgb3B0aW9uczogRHJvcGRvd25PcHRpb25zO1xyXG4gIERyb3Bkb3duTGlzdEZvcm1Db250cm9sOiBBYnN0cmFjdENvbnRyb2w7XHJcbiAgZHJvcGRvd25TZXR0aW5ncyA9IHt9O1xyXG4gIFNlbGVjdGVkSXRlbXM6IERyb3Bkb3duTGlzdEl0ZW1bXVxyXG4gIFNlbGVjdGVkTGlzdDogYW55W10gPSBbXVxyXG4gIEBPdXRwdXQoKSBPbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgb25DbGVhciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgbWFya0FsbEFzVG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb250cm9sQ2hhbmdlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZhbGlkYXRpb25SdWxlcyA9IFtdO1xyXG4gIHZhbGlkYXRpb25SdWxlc2FzeW5jID0gW107XHJcbiAgdGV4dERpcjtcclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMudGV4dERpcj10aGlzLm9wdGlvbnMuRm9yY2VEaXJlY3Rpb249PTI/J3J0bCc6J2x0cic7XHJcbiAgICB0aGlzLmNvbnRyb2xWYWxpZGF0aW9uU2VydmljZS5pc0NyZWF0ZWRCZWZvciA9IGZhbHNlXHJcbiAgICB0aGlzLlNlbGVjdGVkTGlzdCA9IHRoaXMub3B0aW9ucy5TZWxlY3RlZEl0ZW1zXHJcbiAgICB0aGlzLmRyb3Bkb3duU2V0dGluZ3MgPSB7XHJcbiAgICAgIHNpbmdsZVNlbGVjdGlvbjogdGhpcy5vcHRpb25zLlNpbmdsZVNlbGVjdGlvbixcclxuICAgICAgdGV4dDogXCJTZWxlY3RcIixcclxuICAgICAgc2VsZWN0QWxsVGV4dDogJ1NlbGVjdCBBbGwnLFxyXG4gICAgICB1blNlbGVjdEFsbFRleHQ6ICdVblNlbGVjdCBBbGwnLFxyXG4gICAgICBlbmFibGVTZWFyY2hGaWx0ZXI6IHRoaXMub3B0aW9ucy5BbGxvd1NlYXJjaEZpbHRlcixcclxuICAgICAgY2xhc3NlczogdGhpcy5vcHRpb25zLkNsYXNzZXMsXHJcbiAgICAgIGRpc2FibGVkOiB0aGlzLm9wdGlvbnMuSXNEaXNhYmxlZCxcclxuICAgICAgc2hvd0NoZWNrYm94OiB0aGlzLm9wdGlvbnMuU2hvd0NoZWNrYm94LFxyXG4gICAgICBlbmFibGVDaGVja0FsbDogdGhpcy5vcHRpb25zLkVuYWJsZUNoZWNrQWxsLFxyXG4gICAgICBpdGVtc1Nob3dMaW1pdDogdGhpcy5vcHRpb25zLkl0ZW1zU2hvd0xpbWl0LFxyXG4gICAgICBhbGxvd1NlYXJjaEZpbHRlcjogdGhpcy5vcHRpb25zLkFsbG93U2VhcmNoRmlsdGVyLFxyXG4gICAgICBzaG93U2VsZWN0ZWRJdGVtc0F0VG9wOiB0cnVlLFxyXG4gICAgICBsaW1pdFNlbGVjdGlvbjogdGhpcy5vcHRpb25zLkxpbWl0U2VsZWN0aW9uLFxyXG4gICAgICBzZWFyY2hQbGFjZWhvbGRlclRleHQ6IHRoaXMub3B0aW9ucy5QbGFjZWhvbGRlcixcclxuICAgICAgbGFiZWxLZXk6IFwidmFsdWVcIixcclxuICAgICAgcHJpbWFyeUtleTogXCJrZXlcIlxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmdyb3VwLmFkZENvbnRyb2wodGhpcy5vcHRpb25zLk5hbWUsIG5ldyBGb3JtQ29udHJvbCgnJykpO1xyXG4gICAgdGhpcy5Ecm9wZG93bkxpc3RGb3JtQ29udHJvbCA9IHRoaXMuZ3JvdXAuY29udHJvbHNbdGhpcy5vcHRpb25zLk5hbWVdOyAvLyAgbmV3IEZvcm1Db250cm9sKCcnLHZhbGlkYXRpb25SdWxlcyk7XHJcblxyXG5cclxuICAgIGlmICghdGhpcy5vcHRpb25zLlZpZXdUeXBlKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuVmlld1R5cGUgPSB0aGlzLmdsb2JhbFNldHRpbmdzLlZpZXdUeXBlO1xyXG5cclxuICAgIGlmICh0aGlzLm9wdGlvbnMuQ3VzdG9tVmFsaWRhdGlvbi5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBWYWxpZGF0aW9ucyA9IHRoaXMub3B0aW9ucy5DdXN0b21WYWxpZGF0aW9uXHJcbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBWYWxpZGF0aW9ucy5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICBjb25zdCBWYWxpZGF0aW9uID0gVmFsaWRhdGlvbnNbaW5kZXhdO1xyXG4gICAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdGlvbi5mdW5jdGlvbkJvZHkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG5cclxuXHJcblxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5Jc1JlcXVpcmVkKSB7XHJcbiAgICAgIHRoaXMudmFsaWRhdGlvblJ1bGVzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcblxyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBudWxsICYmIHRoaXMub3B0aW9ucy5MYWJlbEtleSAhPSBcIlwiKVxyXG4gICAgICB0aGlzLm9wdGlvbnMuTGFiZWxWYWx1ZSA9IHRoaXMuVXRpbGl0eVNlcnZpY2UuZ2V0UmVzb3VyY2VWYWx1ZSh0aGlzLm9wdGlvbnMuTGFiZWxLZXkpO1xyXG5cclxuICAgIHRoaXMuRHJvcGRvd25MaXN0Rm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlcyk7XHJcbiAgICB0aGlzLkRyb3Bkb3duTGlzdEZvcm1Db250cm9sLnNldEFzeW5jVmFsaWRhdG9ycyh0aGlzLnZhbGlkYXRpb25SdWxlc2FzeW5jKTtcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuSXNEaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLkRyb3Bkb3duTGlzdEZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLkRyb3Bkb3duTGlzdENvbnRyb2xIb3N0Lm5nU3VibWl0LnN1YnNjcmliZSgodmFsdWUpID0+IHtcclxuICAgICAgdGhpcy5ncm91cC5tYXJrQWxsQXNUb3VjaGVkKClcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gdHJ1ZVxyXG4gICAgfSlcclxuICB9XHJcblxyXG5cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5zZXRBdHRyaWJ1dGVGb3JDb250cm9sKHRoaXMub3B0aW9ucylcclxuICB9XHJcblxyXG5cclxuICByZXNldEVycm9yID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVmFsaWRhdGlvblNlcnZpY2UuUmVtb3ZlR2xvYmFsRXJyb3IoKTtcclxuICB9XHJcblxyXG4gIHNob3dHbG9iYWxFcnJvcigpIHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuc2hvd0dsb2JhbEVycm9yKClcclxuICB9XHJcblxyXG4gIGdldEVycm9yVmFsaWRhdGlvbihFcnJvckxpc3QpIHtcclxuICAgIGlmICh0aGlzLm1hcmtBbGxBc1RvdWNoZWQgJiYgdGhpcy5ncm91cC5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMuc2hvd0dsb2JhbEVycm9yKClcclxuICAgICAgdGhpcy5tYXJrQWxsQXNUb3VjaGVkID0gZmFsc2VcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLmNvbnRyb2xVdGlsaXR5LmdldEVycm9yVmFsaWRhdGlvbk1hc3NhZ2UoRXJyb3JMaXN0LCB0aGlzLmdyb3VwLCB0aGlzLm9wdGlvbnMpO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uSXRlbVNlbGVjdCgpIHtcclxuICAgIHRoaXMub25DaGFuZ2VTZXJ2aWNlLkNoYW5nZVZhbHVlKHRoaXMub3B0aW9ucy5OYW1lKVxyXG4gICAgbGV0IG9yaWdpbmFsVmFsdWUgPSB0aGlzLm9wdGlvbnMuU2VsZWN0ZWRJdGVtcztcclxuICAgIGlmICh0aGlzLm9wdGlvbnMuUGF0Y2hGdW5jdGlvbiAmJiB0aGlzLm9wdGlvbnMuUGF0Y2hQYXRoICYmIHRoaXMuZ3JvdXAuZ2V0KHRoaXMub3B0aW9ucy5OYW1lKS52YWxpZCkge1xyXG4gICAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LnBhdGNoQ29udHJvbFZhbHVlKG9yaWdpbmFsVmFsdWUsdGhpcy5vcHRpb25zLlBhdGNoRnVuY3Rpb24gLHRoaXMub3B0aW9ucy5QYXRjaFBhdGgpXHJcbiAgICB9XHJcbiAgICB0aGlzLk9uQ2hhbmdlLmVtaXQob3JpZ2luYWxWYWx1ZSlcclxuICAgIC8vY29uc29sZS5sb2codGhpcy5Ecm9wZG93bkxpc3RGb3JtQ29udHJvbC52YWx1ZSlcclxuICB9XHJcbiAgQ2xlYXIoKSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKFwiQ2xlYXJcIilcclxuICAgIHRoaXMuRHJvcGRvd25MaXN0Rm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5TZWxlY3RlZEl0ZW1zKTtcclxuICAgIHRoaXMub25DaGFuZ2VTZXJ2aWNlLkNoYW5nZVZhbHVlKHRoaXMub3B0aW9ucy5OYW1lKVxyXG4gICAgdGhpcy5PbkNoYW5nZS5lbWl0KClcclxuICB9XHJcbiAgb25TZWxlY3RBbGwoaXRlbXMpIHtcclxuICAgIHRoaXMuU2VsZWN0ZWRJdGVtcyA9IGl0ZW1zO1xyXG4gICAgdGhpcy5Ecm9wZG93bkxpc3RGb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLlNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuICBvbkRlc2VsZWN0KGl0ZW1zKSB7XHJcbiAgICB0aGlzLkRyb3Bkb3duTGlzdEZvcm1Db250cm9sLnNldFZhbHVlKHRoaXMuU2VsZWN0ZWRJdGVtcyk7XHJcbiAgICBpZiAoKHRoaXMuU2VsZWN0ZWRJdGVtcy5sZW5ndGggPT0gMCkgJiYgdGhpcy5vcHRpb25zLklzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLkRyb3Bkb3duTGlzdEZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgdGhpcy5Ecm9wZG93bkxpc3RGb3JtQ29udHJvbC5pbnZhbGlkO1xyXG5cclxuICAgIH1cclxuXHJcbiAgfVxyXG4gIG9uRGVzZWxlY3RBbGwoaXRlbXMpIHtcclxuICAgIHRoaXMuRHJvcGRvd25MaXN0Rm9ybUNvbnRyb2wuc2V0VmFsdWUodGhpcy5TZWxlY3RlZEl0ZW1zKTtcclxuICAgIGlmICgodGhpcy5TZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PSAwKSAmJiB0aGlzLm9wdGlvbnMuSXNSZXF1aXJlZCA9PSB0cnVlKSB7XHJcbiAgICAgIHRoaXMuRHJvcGRvd25MaXN0Rm9ybUNvbnRyb2wubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLkRyb3Bkb3duTGlzdEZvcm1Db250cm9sLmludmFsaWQ7XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Ecm9wRG93bkNsb3NlKCkge1xyXG4gICAgaWYgKCh0aGlzLlNlbGVjdGVkSXRlbXMgPT0gdW5kZWZpbmVkIHx8IHRoaXMuU2VsZWN0ZWRJdGVtcy5sZW5ndGggPT0gMCkgJiYgdGhpcy5vcHRpb25zLklzUmVxdWlyZWQgPT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLkRyb3Bkb3duTGlzdEZvcm1Db250cm9sLm1hcmtBc1RvdWNoZWQoKTtcclxuICAgICAgdGhpcy5Ecm9wZG93bkxpc3RGb3JtQ29udHJvbC5pbnZhbGlkO1xyXG5cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgUmVtb3ZlUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5SZW1vdmVSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5Ecm9wZG93bkxpc3RGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIHRoaXMub3B0aW9ucylcclxuICB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkUmVxdWlyZWRWYWxpZGF0aW9uID0gKCkgPT4ge1xyXG4gICAgdGhpcy5jb250cm9sVXRpbGl0eS5BZGRSZXF1aXJlZFZhbGlkYXRpb24odGhpcy5Ecm9wZG93bkxpc3RGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIHRoaXMub3B0aW9ucylcclxuICB9XHJcblxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgUmVtb3ZlQ3VzdG9tVmFsaWRhdGlvbiA9IChDdXN0b21WYWxpZGF0aW9uKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LlJlbW92ZUN1c3RvbVZhbGlkYXRpb24odGhpcy5Ecm9wZG93bkxpc3RGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgQWRkQ3VzdG9tVmFsaWRhdGlvbiA9IChDdXN0b21WYWxpZGF0aW9uKSA9PiB7XHJcbiAgICB0aGlzLmNvbnRyb2xVdGlsaXR5LkFkZEN1c3RvbVZhbGlkYXRpb24odGhpcy5Ecm9wZG93bkxpc3RGb3JtQ29udHJvbCwgdGhpcy52YWxpZGF0aW9uUnVsZXMsIEN1c3RvbVZhbGlkYXRpb24pXHJcbiAgfVxyXG4gIC8vRXh0ZXJuYWwgTWV0aG9kXHJcbiAgSXNWYWxpZCA9ICgpID0+IHtcclxuICAgIHRoaXMuY29udHJvbFV0aWxpdHkuSXNWYWxpZCh0aGlzLkRyb3Bkb3duTGlzdEZvcm1Db250cm9sKVxyXG4gIH1cclxuXHJcbiAgLy9VcGRhdGUgaXRlbXMgKGRhdGEgc291cmNlKSBvZiBkcm9wIGRvd25cclxuICBVcGRhdGVEYXRhU291cmNlID0gKGRhdGFTb3VyY2U6IERyb3Bkb3duTGlzdEl0ZW1bXSkgPT4ge1xyXG4gICAgdGhpcy5vcHRpb25zLkRhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gIH1cclxufVxyXG5cclxuXHJcblxyXG5cclxuXHJcbiIsIjxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIGJic2YtY29udHJvbCBiYnNmLWRyb3Bkb3duXCIgW2Zvcm1Hcm91cF09XCJncm91cFwiPlxyXG4gIDxkaXYgW25nQ2xhc3NdPVwiKG9wdGlvbnMuVmlld1R5cGU9PTEpPydiYnNmLXZlcnRpY2FsJzonYmJzZi1ob3Jpem9udGFsJ1wiPlxyXG4gICAgPCEtLWxhYmVsLS0+XHJcbiAgICA8bGFiZWwgKm5nSWY9XCIhb3B0aW9ucy5IaWRlTGFiZWxcIiBjbGFzcz1cImJic2YtbGFiZWwge3tvcHRpb25zLkxhYmVsRXh0cmFDbGFzc2VzfX1cIj5cclxuICAgICAge3tvcHRpb25zLkxhYmVsVmFsdWV9fVxyXG4gICAgICA8IS0tQXN0ZXJpc2stLT5cclxuICAgICAgPHNwYW4gKm5nSWY9XCIob3B0aW9ucy5TaG93QXN0ZXJpc2smJm9wdGlvbnMuSXNSZXF1aXJlZCl8fChvcHRpb25zLklzUmVxdWlyZWQpXCIgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiXHJcbiAgICAgICAgICAgIGFyaWEtcmVxdWlyZWQ9XCJ0cnVlXCI+Kjwvc3Bhbj5cclxuICAgIDwvbGFiZWw+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYmJzZi1pbnB1dC1jb250YWluZXJcIj5cclxuICAgICAgPCEtLWlucHV0IGVuYWJsZWQgYm9vdHN0cmFwIHNlbGVjdC0tPlxyXG4gICAgICA8bmctc2VsZWN0IGNsYXNzPVwiZm9ybS1jb250cm9sXCIgKm5nSWY9XCJvcHRpb25zLkRpc2FibGVCb290c3RyYXBTZWxlY3Q9PWZhbHNlXCIgW2Rpcl09XCJ0ZXh0RGlyXCJcclxuICAgICAgICAgICAgICAgICBbYmluZFZhbHVlXT1cIm9wdGlvbnMuSXRlbVRlbXBsZXRrZXlcIiBbYmluZExhYmVsXT1cIm9wdGlvbnMuSXRlbVRlbXBsZXR2YWx1ZVwiIFtpdGVtc109XCJvcHRpb25zLkRhdGFTb3VyY2VcIlxyXG4gICAgICAgICAgICAgICAgIFtub3RGb3VuZFRleHRdPVwib3B0aW9ucy5Ob3RGb3VuZFRleHRcIiBbbWF4U2VsZWN0ZWRJdGVtc109XCJvcHRpb25zLkxpbWl0U2VsZWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICBbc2VhcmNoYWJsZV09XCJvcHRpb25zLkFsbG93U2VhcmNoRmlsdGVyXCIgW211bHRpcGxlXT1cIiFvcHRpb25zLlNpbmdsZVNlbGVjdGlvblwiIFtyZWFkb25seV09XCJvcHRpb25zLklzRGlzYWJsZWRcIlxyXG4gICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwidHJ1ZVwiIHBsYWNlaG9sZGVyPVwie3tvcHRpb25zLlBsYWNlaG9sZGVyfX1cIiBpZD1cInt7b3B0aW9ucy5OYW1lfX1cIlxyXG4gICAgICAgICAgICAgICAgIFtzZWxlY3RhYmxlR3JvdXBdPVwidHJ1ZVwiIFtzZWxlY3RhYmxlR3JvdXBBc01vZGVsXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwie3tvcHRpb25zLk5hbWV9fVwiXHJcbiAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJvcHRpb25zLlNlbGVjdGVkSXRlbXNcIiAoY2hhbmdlKT1cIm9uSXRlbVNlbGVjdCgpXCIgKGNsZWFyKT1cIkNsZWFyKClcIlxyXG4gICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1pbnZhbGlkXT1cIkRyb3Bkb3duTGlzdEZvcm1Db250cm9sLmludmFsaWQgJiYgRHJvcGRvd25MaXN0Rm9ybUNvbnRyb2wudG91Y2hlZFwiXHJcbiAgICAgICAgICAgICAgICAgW2Nsb3NlT25TZWxlY3RdPVwib3B0aW9ucy5TaW5nbGVTZWxlY3Rpb24gID8gdHJ1ZSA6IGZhbHNlXCI+XHJcbiAgICAgICAgPCEtLU5vIGNoZWNrYm94LS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiIW9wdGlvbnMuU2hvd0NoZWNrYm94XCIgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaXRlbSQ9XCJpdGVtJFwiIGxldC1pbmRleD1cImluZGV4XCI+XHJcbiAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJiYnNmLWxhYmVsXCIgdGl0bGU9XCJ7e2l0ZW0uZGlzYWJsZWQgPyBvcHRpb25zLkRpc2FibGVkSXRlbXNUb29sdGlwVmFsdWUgOiAnJ319XCIgaWQ9e3tpdGVtLmlkfX0+e3tpdGVtLml0ZW1OYW1lfX08L2xhYmVsPlxyXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgPCEtLWNoZWNrYm94LS0+XHJcbiAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwib3B0aW9ucy5TaG93Q2hlY2tib3hcIiBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiIGxldC1pdGVtJD1cIml0ZW0kXCIgbGV0LWluZGV4PVwiaW5kZXhcIj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCIgYmJzZi1jaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmJzZi1pbnB1dC1jb250YWluZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiYmJzZi1jaGVja2JveC1pbnB1dFwiIGlkPVwiaXRlbS17e2luZGV4fX1cIiB0eXBlPVwiY2hlY2tib3hcIiBbbmdNb2RlbE9wdGlvbnNdPVwie3N0YW5kYWxvbmU6IHRydWV9XCIgW25nTW9kZWxdPVwiaXRlbSQuc2VsZWN0ZWRcIiAvPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJsYWJlbC1zdWJ0ZXh0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiYmJzZi1sYWJlbFwiIGlkPXt7aXRlbS5pZH19Pnt7aXRlbS5pdGVtTmFtZX19PC9sYWJlbD5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgPCEtLWlucHV0IGRpc2FibGVkIGJvb3RzdHJhcCBzZWxlY3QtLT5cclxuICAgICAgPHNlbGVjdCAqbmdJZj1cIm9wdGlvbnMuRGlzYWJsZUJvb3RzdHJhcFNlbGVjdFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCJcclxuICAgICAgW2Rpcl09XCJ0ZXh0RGlyXCIgKGNoYW5nZSk9XCJvbkl0ZW1TZWxlY3QoKVwiIFsobmdNb2RlbCldPVwib3B0aW9ucy5TZWxlY3RlZEl0ZW1zXCIgW2Rpc2FibGVkXT1cIm9wdGlvbnMuSXNEaXNhYmxlZFwiIGZvcm1Db250cm9sTmFtZT1cInt7b3B0aW9ucy5OYW1lfX1cIj5cclxuICAgICAgICA8b3B0aW9uIHZhbHVlPVwiXCIgZGlzYWJsZWQ+LS17e1V0aWxpdHlTZXJ2aWNlLmdldFJlc291cmNlVmFsdWUoXCJzZWxlY3RcIil9fS0tPC9vcHRpb24+XHJcbiAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBvcHRpb25zLkRhdGFTb3VyY2VcIiB2YWx1ZT1cInt7aXRlbS5pZH19XCIgW25nVmFsdWVdPVwiaXRlbS5pZFwiPlxyXG4gICAgICAgICAge3tpdGVtLml0ZW1OYW1lfX1cclxuICAgICAgICA8L29wdGlvbj5cclxuICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0ZXh0LWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDwhLS0gTGFiZWxEZXNjcmlwdGlvbi0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJiYnNmLWNvbnRyb2wtZGVzY1wiICpuZ0lmPVwib3B0aW9ucy5MYWJlbERlc2NyaXB0aW9uIT1udWxsXCI+e3tvcHRpb25zLkxhYmVsRGVzY3JpcHRpb259fTwvZGl2PlxyXG4gICAgICAgIDwhLS0gcmVxdWlyZWRUZXh0LS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImJic2YtdmFsaWRhdGlvblwiICpuZ0lmPVwiKERyb3Bkb3duTGlzdEZvcm1Db250cm9sLmludmFsaWQgJiYgRHJvcGRvd25MaXN0Rm9ybUNvbnRyb2wudG91Y2hlZClcIj5cclxuICAgICAgICAgIHt7Z2V0RXJyb3JWYWxpZGF0aW9uKERyb3Bkb3duTGlzdEZvcm1Db250cm9sLmVycm9yc3xrZXl2YWx1ZSl9fVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiAqbmdJZj1cIihncm91cC52YWxpZCYmZ3JvdXAuZGlydHkmJmdyb3VwLnRvdWNoZWQgKXx8KGdyb3VwLnVudG91Y2hlZCYmZ3JvdXAuaW52YWxpZCYmZ3JvdXAuZGlydHkpIFwiPnt7cmVzZXRFcnJvcigpfX08L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4iXX0=
|