UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

499 lines (498 loc) 35.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Component, ElementRef, Input, Output, Type, EventEmitter, ViewChild } from '@angular/core'; import { ComponentWrapper } from '../../ComponentWrapper.component'; import { NeedFocusService } from '../../../service/NeedFocusService.service'; import { AbstractSimpleDropdown } from './AbstractSimpleDropdown'; import { Option } from '../../../decorator/Option.decorator'; import { I18N } from '../../../decorator/I18N.decorator'; import { PhloxAppInfoService } from '../../../service/PhloxAppInfoService.service'; const /** @type {?} */ TYPE_NAME = "phx-component-dropdown"; export class ComponentDropdownList extends AbstractSimpleDropdown { /** * @param {?} needFocusService * @param {?} elementRef * @param {?} phloxAppInfoService */ constructor(needFocusService, elementRef, phloxAppInfoService) { super(needFocusService, elementRef, phloxAppInfoService); } /** * @return {?} */ ngOnInit() { super.ngOnInit(); if (this.changeEvent !== null && this.changeEvent !== undefined) { this.changeEvent.subscribe(($event) => { let /** @type {?} */ sItem = $event.detail.data.newValue; if (this.dropdownLabel !== null && typeof this.dropdownLabel !== 'undefined') { let /** @type {?} */ sItems = []; sItems.push(sItem); this.dropdownLabel.setData(sItems); } }); } if (this.defaultIdx !== null && this.defaultIdx !== undefined) { this.setSelectedIndex(this.defaultIdx); } } /** * @param {?} inputValue * @param {?} results * @return {?} */ onValidationEnd(inputValue, results) { } /** * @param {?} data * @param {?} inputVal * @return {?} */ onDataChange(data, inputVal) { } /** * @param {?} oldValue * @param {?} inputVal * @param {?=} data * @return {?} */ onDataChangePrevented(oldValue, inputVal, data) { this._setData(oldValue, true, null, false); } /** * @param {?} $event * @return {?} */ doFocus($event) { if ($(this.elementRef.nativeElement).find(".dropdown > button:focus").length <= 0) { $(this.elementRef.nativeElement).find(".dropdown > button").focus(); } } /** * @param {?} $event * @return {?} */ doBlur($event) { if ($(this.elementRef.nativeElement).find(".dropdown > button:focus").length > 0) { $(this.elementRef.nativeElement).find(".dropdown > button").blur(); } } /** * @return {?} */ getDropdownPopupSelector() { return '.menu'; } /** * @param {?} data * @return {?} */ selfSaveData(data) { } /** * @return {?} */ selfResetData() { } /** * @return {?} */ getComponentType() { return this.componentType; } /** * @param {?} type * @return {?} */ setComponentType(type) { this.componentType = type; } /** * @return {?} */ getComponentModel() { return this.componentModel; } /** * @param {?} model * @return {?} */ setComponentModel(model) { this.componentModel = model; } /** * @return {?} */ getComponentHandler() { return this.componentHandler; } /** * @param {?} handler * @return {?} */ setComponentHandler(handler) { this.componentHandler = handler; } } ComponentDropdownList.TYPE_NAME = TYPE_NAME; ComponentDropdownList.decorators = [ { type: Component, args: [{ moduleId: module.id, selector: TYPE_NAME, template: `<div class="phx-component-dropdown" [style.width]="getWidth()" [style.height]="getHeight()"> <div class="dropdown"> <button type="button" [disabled]="isDisabled()" (click)="click($event)" (focusin)="onFocusing($event)" (blur)="onLostFocusing($event)"> <div class="label-side"> <phx-component-wrapper #dropdownLabel [type]="getComponentType()" [model]="getComponentModel()" [data]="getSelectedItem()"></phx-component-wrapper> </div> <div class="arrow-side"> <div class="flex-center"> <div class="down-triangle"></div> </div> </div> </button> </div> <ul class="menu" [class.show]="isShow()" [style.width]="getDropdownWidth()" [style.max-height]="getDropdownHeight()"> <li *ngFor="let item of getItems(); let i = index;" (click)="onSelectItemClicked($event, i)"> <phx-component-wrapper [type]="getComponentType()" [model]="getComponentModel()" [handler]="getComponentHandler()" [data]="item"></phx-component-wrapper> </li> </ul> </div> ` },] }, ]; /** @nocollapse */ ComponentDropdownList.ctorParameters = () => [ { type: NeedFocusService, }, { type: ElementRef, }, { type: PhloxAppInfoService, }, ]; ComponentDropdownList.propDecorators = { "dataParent": [{ type: Input },], "ignoreParentData": [{ type: Input },], "data": [{ type: Input },], "ignoreParentDisabled": [{ type: Input },], "delegateHistory": [{ type: Input },], "onDisabled": [{ type: Input },], "onEnabled": [{ type: Input },], "loadingEnabled": [{ type: Input },], "i18nKey": [{ type: Input },], "bypass": [{ type: Input, args: ['i18nBypass',] },], "options": [{ type: Input },], "disabled": [{ type: Input },], "field": [{ type: Input },], "name": [{ type: Input },], "typeOfData": [{ type: Input },], "readOnly": [{ type: Input },], "help": [{ type: Input },], "dataComparator": [{ type: Input },], "items": [{ type: Input },], "width": [{ type: Input },], "height": [{ type: Input },], "dropdownWidth": [{ type: Input },], "dropdownHeight": [{ type: Input },], "defaultIdx": [{ type: Input },], "componentType": [{ type: Input, args: ['type',] },], "componentModel": [{ type: Input, args: ['model',] },], "componentHandler": [{ type: Input, args: ['handler',] },], "loadEvent": [{ type: Output, args: ['phxLoad',] },], "startValidateEvent": [{ type: Output, args: ['phxStartValidate',] },], "endValidateEvent": [{ type: Output, args: ['phxEndValidate',] },], "beforeFocusEvent": [{ type: Output, args: ['phxBeforeFocus',] },], "focusEvent": [{ type: Output, args: ['phxFocus',] },], "beforeLostFocusEvent": [{ type: Output, args: ['phxBeforeLostFocus',] },], "lostFocusEvent": [{ type: Output, args: ['phxLostFocus',] },], "beforeChangeEvent": [{ type: Output, args: ['phxBeforeChange',] },], "changeEvent": [{ type: Output, args: ['phxChange',] },], "beforeSelectEvent": [{ type: Output, args: ['phxBeforeSelect',] },], "selectEvent": [{ type: Output, args: ['phxSelect',] },], "beforeClickEvent": [{ type: Output, args: ['phxBeforeClick',] },], "clickEvent": [{ type: Output, args: ['phxClick',] },], "beforeShowEvent": [{ type: Output, args: ['phxBeforeShow',] },], "showEvent": [{ type: Output, args: ['phxShow',] },], "beforeHideEvent": [{ type: Output, args: ['phxBeforeHide',] },], "hideEvent": [{ type: Output, args: ['phxHide',] },], "dropdownLabel": [{ type: ViewChild, args: ['dropdownLabel',] },], }; tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentDropdownList.prototype, "dataParent", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentDropdownList.prototype, "ignoreParentData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Object) ], ComponentDropdownList.prototype, "data", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentDropdownList.prototype, "ignoreParentDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentDropdownList.prototype, "delegateHistory", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentDropdownList.prototype, "onDisabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Function) ], ComponentDropdownList.prototype, "onEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentDropdownList.prototype, "loadingEnabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentDropdownList.prototype, "i18nKey", void 0); tslib_1.__decorate([ Option('i18nBypass'), tslib_1.__metadata("design:type", Boolean) ], ComponentDropdownList.prototype, "bypass", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentDropdownList.prototype, "disabled", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentDropdownList.prototype, "field", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentDropdownList.prototype, "name", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentDropdownList.prototype, "typeOfData", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Boolean) ], ComponentDropdownList.prototype, "readOnly", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Object) ], ComponentDropdownList.prototype, "help", void 0); tslib_1.__decorate([ Option('comparator'), tslib_1.__metadata("design:type", Object) ], ComponentDropdownList.prototype, "dataComparator", void 0); tslib_1.__decorate([ I18N(), Option(), tslib_1.__metadata("design:type", Array) ], ComponentDropdownList.prototype, "items", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentDropdownList.prototype, "width", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentDropdownList.prototype, "height", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentDropdownList.prototype, "dropdownWidth", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", String) ], ComponentDropdownList.prototype, "dropdownHeight", void 0); tslib_1.__decorate([ Option(), tslib_1.__metadata("design:type", Number) ], ComponentDropdownList.prototype, "defaultIdx", void 0); tslib_1.__decorate([ Option('type'), tslib_1.__metadata("design:type", Type) ], ComponentDropdownList.prototype, "componentType", void 0); tslib_1.__decorate([ I18N('model'), Option('model'), tslib_1.__metadata("design:type", Object) ], ComponentDropdownList.prototype, "componentModel", void 0); tslib_1.__decorate([ Option('handler'), tslib_1.__metadata("design:type", Function) ], ComponentDropdownList.prototype, "componentHandler", void 0); tslib_1.__decorate([ Option('load'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "loadEvent", void 0); tslib_1.__decorate([ Option('startValidate'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "startValidateEvent", void 0); tslib_1.__decorate([ Option('endValidate'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "endValidateEvent", void 0); tslib_1.__decorate([ Option('beforeFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "beforeFocusEvent", void 0); tslib_1.__decorate([ Option('focus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "focusEvent", void 0); tslib_1.__decorate([ Option('beforeLostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "beforeLostFocusEvent", void 0); tslib_1.__decorate([ Option('lostFocus'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "lostFocusEvent", void 0); tslib_1.__decorate([ Option('beforeChange'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "beforeChangeEvent", void 0); tslib_1.__decorate([ Option('change'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "changeEvent", void 0); tslib_1.__decorate([ Option('beforeSelect'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "beforeSelectEvent", void 0); tslib_1.__decorate([ Option('select'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "selectEvent", void 0); tslib_1.__decorate([ Option('beforeClick'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "beforeClickEvent", void 0); tslib_1.__decorate([ Option('click'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "clickEvent", void 0); tslib_1.__decorate([ Option('beforeShow'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "beforeShowEvent", void 0); tslib_1.__decorate([ Option('show'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "showEvent", void 0); tslib_1.__decorate([ Option('beforeHide'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "beforeHideEvent", void 0); tslib_1.__decorate([ Option('hide'), tslib_1.__metadata("design:type", EventEmitter) ], ComponentDropdownList.prototype, "hideEvent", void 0); function ComponentDropdownList_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ ComponentDropdownList.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ ComponentDropdownList.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ ComponentDropdownList.propDecorators; /** @type {?} */ ComponentDropdownList.TYPE_NAME; /** @type {?} */ ComponentDropdownList.prototype.dataParent; /** @type {?} */ ComponentDropdownList.prototype.ignoreParentData; /** @type {?} */ ComponentDropdownList.prototype.data; /** @type {?} */ ComponentDropdownList.prototype.ignoreParentDisabled; /** @type {?} */ ComponentDropdownList.prototype.delegateHistory; /** @type {?} */ ComponentDropdownList.prototype.onDisabled; /** @type {?} */ ComponentDropdownList.prototype.onEnabled; /** @type {?} */ ComponentDropdownList.prototype.loadingEnabled; /** @type {?} */ ComponentDropdownList.prototype.i18nKey; /** @type {?} */ ComponentDropdownList.prototype.bypass; /** @type {?} */ ComponentDropdownList.prototype.options; /** @type {?} */ ComponentDropdownList.prototype.disabled; /** @type {?} */ ComponentDropdownList.prototype.field; /** @type {?} */ ComponentDropdownList.prototype.name; /** @type {?} */ ComponentDropdownList.prototype.typeOfData; /** @type {?} */ ComponentDropdownList.prototype.readOnly; /** @type {?} */ ComponentDropdownList.prototype.help; /** @type {?} */ ComponentDropdownList.prototype.dataComparator; /** @type {?} */ ComponentDropdownList.prototype.items; /** @type {?} */ ComponentDropdownList.prototype.width; /** @type {?} */ ComponentDropdownList.prototype.height; /** @type {?} */ ComponentDropdownList.prototype.dropdownWidth; /** @type {?} */ ComponentDropdownList.prototype.dropdownHeight; /** @type {?} */ ComponentDropdownList.prototype.defaultIdx; /** @type {?} */ ComponentDropdownList.prototype.componentType; /** @type {?} */ ComponentDropdownList.prototype.componentModel; /** @type {?} */ ComponentDropdownList.prototype.componentHandler; /** @type {?} */ ComponentDropdownList.prototype.loadEvent; /** @type {?} */ ComponentDropdownList.prototype.startValidateEvent; /** @type {?} */ ComponentDropdownList.prototype.endValidateEvent; /** @type {?} */ ComponentDropdownList.prototype.beforeFocusEvent; /** @type {?} */ ComponentDropdownList.prototype.focusEvent; /** @type {?} */ ComponentDropdownList.prototype.beforeLostFocusEvent; /** @type {?} */ ComponentDropdownList.prototype.lostFocusEvent; /** @type {?} */ ComponentDropdownList.prototype.beforeChangeEvent; /** @type {?} */ ComponentDropdownList.prototype.changeEvent; /** @type {?} */ ComponentDropdownList.prototype.beforeSelectEvent; /** @type {?} */ ComponentDropdownList.prototype.selectEvent; /** @type {?} */ ComponentDropdownList.prototype.beforeClickEvent; /** @type {?} */ ComponentDropdownList.prototype.clickEvent; /** @type {?} */ ComponentDropdownList.prototype.beforeShowEvent; /** @type {?} */ ComponentDropdownList.prototype.showEvent; /** @type {?} */ ComponentDropdownList.prototype.beforeHideEvent; /** @type {?} */ ComponentDropdownList.prototype.hideEvent; /** @type {?} */ ComponentDropdownList.prototype.dropdownLabel; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29tcG9uZW50RHJvcGRvd25MaXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9kYXRhdmlldy9pbnB1dC9Db21wb25lbnREcm9wZG93bkxpc3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUdwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUU3RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUdsRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDN0QsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3pELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDhDQUE4QyxDQUFDO0FBSW5GLHVCQUFNLFNBQVMsR0FBVyx3QkFBd0IsQ0FBQztBQTBCbkQsTUFBTSw0QkFBNkIsU0FBUSxzQkFBc0I7Ozs7OztJQThKL0QsWUFBWSxnQkFBa0MsRUFBRSxVQUFzQixFQUFFLG1CQUF3QztRQUM5RyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLENBQUM7S0FDMUQ7Ozs7SUFFTSxRQUFRO1FBQ2IsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRWpCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQztZQUNoRSxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMs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O3NDQUNNLFlBQVk7OztJQUlsQyxNQUFNLENBQUMsYUFBYSxDQUFDO3NDQUNNLFlBQVk7OztJQUV2QyxNQUFNLENBQUMsT0FBTyxDQUFDO3NDQUNNLFlBQVk7OztJQUVqQyxNQUFNLENBQUMsWUFBWSxDQUFDO3NDQUNNLFlBQVk7OztJQUV0QyxNQUFNLENBQUMsTUFBTSxDQUFDO3NDQUNNLFlBQVk7OztJQUVoQyxNQUFNLENBQUMsWUFBWSxDQUFDO3NDQUNNLFlBQVk7OztJQUV0QyxNQUFNLENBQUMsTUFBTSxDQUFDO3NDQUNNLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgRWxlbWVudFJlZiwgSW5wdXQsIE91dHB1dCwgVHlwZSwgRXZlbnRFbWl0dGVyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbXBvbmVudFdyYXBwZXIgfSBmcm9tICcuLi8uLi9Db21wb25lbnRXcmFwcGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJTmVlZEZvY3VzIH0gZnJvbSAnLi4vLi4vSU5lZWRGb2N1cyc7XG5pbXBvcnQgeyBJRGF0YUNvbXBhcmF0b3IgfSBmcm9tICcuLi8uLi9JRGF0YUNvbXBhcmF0b3InO1xuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2UvTmVlZEZvY3VzU2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IElTZWxlY3RJdGVtTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbC9JU2VsZWN0SXRlbU1vZGVsJztcbmltcG9ydCB7IEFic3RyYWN0U2ltcGxlRHJvcGRvd24gfSBmcm9tICcuL0Fic3RyYWN0U2ltcGxlRHJvcGRvd24nO1xuaW1wb3J0IHsgSUhhc0RhdGEgfSBmcm9tICcuLi8uLi9JSGFzRGF0YSc7XG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWwvVmFsaWRhdGlvblJlc3VsdCc7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tICcuLi8uLi8uLi9kZWNvcmF0b3IvT3B0aW9uLmRlY29yYXRvcic7XG5pbXBvcnQgeyBJMThOIH0gZnJvbSAnLi4vLi4vLi4vZGVjb3JhdG9yL0kxOE4uZGVjb3JhdG9yJztcbmltcG9ydCB7IFBobG94QXBwSW5mb1NlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlL1BobG94QXBwSW5mb1NlcnZpY2Uuc2VydmljZSc7XG5cbmRlY2xhcmUgdmFyICQ6IGFueTtcblxuY29uc3QgVFlQRV9OQU1FOiBzdHJpbmcgPSBcInBoeC1jb21wb25lbnQtZHJvcGRvd25cIjtcblxuQENvbXBvbmVudCh7XG4gIG1vZHVsZUlkOiBtb2R1bGUuaWQsXG4gIHNlbGVjdG9yOiBUWVBFX05BTUUsXG4gIHRlbXBsYXRlOiBgPGRpdiBjbGFzcz1cInBoeC1jb21wb25lbnQtZHJvcGRvd25cIiBbc3R5bGUud2lkdGhdPVwiZ2V0V2lkdGgoKVwiIFtzdHlsZS5oZWlnaHRdPVwiZ2V0SGVpZ2h0KClcIj5cblx0PGRpdiBjbGFzcz1cImRyb3Bkb3duXCI+XG5cdFx0PGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgW2Rpc2FibGVkXT1cImlzRGlzYWJsZWQoKVwiIChjbGljayk9XCJjbGljaygkZXZlbnQpXCIgKGZvY3VzaW4pPVwib25Gb2N1c2luZygkZXZlbnQpXCIgKGJsdXIpPVwib25Mb3N0Rm9jdXNpbmcoJGV2ZW50KVwiPlxuXHRcdFx0PGRpdiBjbGFzcz1cImxhYmVsLXNpZGVcIj5cblx0XHRcdFx0PHBoeC1jb21wb25lbnQtd3JhcHBlciAjZHJvcGRvd25MYWJlbCBbdHlwZV09XCJnZXRDb21wb25lbnRUeXBlKClcIiBbbW9kZWxdPVwiZ2V0Q29tcG9uZW50TW9kZWwoKVwiIFtkYXRhXT1cImdldFNlbGVjdGVkSXRlbSgpXCI+PC9waHgtY29tcG9uZW50LXdyYXBwZXI+XG5cdFx0XHQ8L2Rpdj5cblx0XHRcdDxkaXYgY2xhc3M9XCJhcnJvdy1zaWRlXCI+XG5cdFx0XHRcdDxkaXYgY2xhc3M9XCJmbGV4LWNlbnRlclwiPlxuXHRcdFx0XHRcdDxkaXYgY2xhc3M9XCJkb3duLXRyaWFuZ2xlXCI+PC9kaXY+XG5cdFx0XHRcdDwvZGl2PlxuXHRcdFx0PC9kaXY+XG5cdFx0PC9idXR0b24+XG5cdDwvZGl2PlxuXHQ8dWwgY2xhc3M9XCJtZW51XCIgW2NsYXNzLnNob3ddPVwiaXNTaG93KClcIiBbc3R5bGUud2lkdGhdPVwiZ2V0RHJvcGRvd25XaWR0aCgpXCIgW3N0eWxlLm1heC1oZWlnaHRdPVwiZ2V0RHJvcGRvd25IZWlnaHQoKVwiPlxuXHRcdDxsaSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRJdGVtcygpOyBsZXQgaSA9IGluZGV4O1wiIChjbGljayk9XCJvblNlbGVjdEl0ZW1DbGlja2VkKCRldmVudCwgaSlcIj5cblx0XHRcdDxwaHgtY29tcG9uZW50LXdyYXBwZXIgW3R5cGVdPVwiZ2V0Q29tcG9uZW50VHlwZSgpXCIgW21vZGVsXT1cImdldENvbXBvbmVudE1vZGVsKClcIiBbaGFuZGxlcl09XCJnZXRDb21wb25lbnRIYW5kbGVyKClcIiBbZGF0YV09XCJpdGVtXCI+PC9waHgtY29tcG9uZW50LXdyYXBwZXI+XG5cdFx0PC9saT5cblx0PC91bD5cbjwvZGl2PlxuYFxufSlcbmV4cG9ydCBjbGFzcyBDb21wb25lbnREcm9wZG93bkxpc3QgZXh0ZW5kcyBBYnN0cmFjdFNpbXBsZURyb3Bkb3duIGltcGxlbWVudHMgT25Jbml0LCBJTmVlZEZvY3VzIHtcblxuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRZUEVfTkFNRTogc3RyaW5nID0gVFlQRV9OQU1FO1xuXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBASW5wdXQuXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0SGFzRGF0YVxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRhdGFQYXJlbnQ6IElIYXNEYXRhO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERhdGE6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGF0YTogYW55O1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGlnbm9yZVBhcmVudERpc2FibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRlbGVnYXRlSGlzdG9yeTogYm9vbGVhbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkRpc2FibGVkOiBGdW5jdGlvbjtcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBvbkVuYWJsZWQ6IEZ1bmN0aW9uO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGxvYWRpbmdFbmFibGVkOiBib29sZWFuO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGkxOG5LZXk6IHN0cmluZztcbiAgQElucHV0KCdpMThuQnlwYXNzJylcbiAgQE9wdGlvbignaTE4bkJ5cGFzcycpXG4gIHByb3RlY3RlZCBieXBhc3M6IGJvb2xlYW47XG4gIEBJbnB1dCgpXG4gIHByb3RlY3RlZCBvcHRpb25zOiBhbnk7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgZGlzYWJsZWQ6IGJvb2xlYW47XG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0RGF0YVZpZXdcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBmaWVsZDogc3RyaW5nO1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBuYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgdHlwZU9mRGF0YTogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIHJlYWRPbmx5OiBib29sZWFuO1xuICBASW5wdXQoKVxuICBASTE4TigpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaGVscDogYW55O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdFNlbGVjdEl0ZW1zXG4gIEBJbnB1dCgpXG4gIEBPcHRpb24oJ2NvbXBhcmF0b3InKVxuICBwcm90ZWN0ZWQgZGF0YUNvbXBhcmF0b3I6IElEYXRhQ29tcGFyYXRvcjxhbnk+O1xuICBASW5wdXQoKVxuICBASTE4TigpXG4gIEBPcHRpb24oKVxuICBwcm90ZWN0ZWQgaXRlbXM6IElTZWxlY3RJdGVtTW9kZWxbXTtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RTZWxlY3RPbmVJdGVtXG4gIC8vIC0tLSBmcm9tIEFic3RyYWN0U2ltcGxlRHJvcGRvd25cbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCB3aWR0aDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGhlaWdodDogc3RyaW5nO1xuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRyb3Bkb3duV2lkdGg6IHN0cmluZztcbiAgQElucHV0KClcbiAgQE9wdGlvbigpXG4gIHByb3RlY3RlZCBkcm9wZG93bkhlaWdodDogc3RyaW5nO1xuICAvLyAtLS0gc2VsZlxuICBASW5wdXQoKVxuICBAT3B0aW9uKClcbiAgcHJvdGVjdGVkIGRlZmF1bHRJZHg6IG51bWJlcjtcbiAgQElucHV0KCd0eXBlJylcbiAgQE9wdGlvbigndHlwZScpXG4gIHByb3RlY3RlZCBjb21wb25lbnRUeXBlOiBUeXBlPGFueT47XG4gIEBJbnB1dCgnbW9kZWwnKVxuICBASTE4TignbW9kZWwnKVxuICBAT3B0aW9uKCdtb2RlbCcpXG4gIHByb3RlY3RlZCBjb21wb25lbnRNb2RlbDogYW55O1xuICBASW5wdXQoJ2hhbmRsZXInKVxuICBAT3B0aW9uKCdoYW5kbGVyJylcbiAgcHJvdGVjdGVkIGNvbXBvbmVudEhhbmRsZXI6IEZ1bmN0aW9uO1xuXG4gIC8vIFJlLWRlY2xhcmUgZmllbGQgdG8gZGVjbGFyZSBuZyBAT3V0cHV0LlxuICAvLyAtLS0gZnJvbSBBYnN0cmFjdEhhc0RhdGFcbiAgQE91dHB1dCgncGh4TG9hZCcpXG4gIEBPcHRpb24oJ2xvYWQnKVxuICBwcm90ZWN0ZWQgbG9hZEV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3REYXRhVmlld1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdElucHV0RGF0YVZpZXdcbiAgQE91dHB1dCgncGh4U3RhcnRWYWxpZGF0ZScpXG4gIEBPcHRpb24oJ3N0YXJ0VmFsaWRhdGUnKVxuICBwcm90ZWN0ZWQgc3RhcnRWYWxpZGF0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4RW5kVmFsaWRhdGUnKVxuICBAT3B0aW9uKCdlbmRWYWxpZGF0ZScpXG4gIHByb3RlY3RlZCBlbmRWYWxpZGF0ZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4QmVmb3JlRm9jdXMnKVxuICBAT3B0aW9uKCdiZWZvcmVGb2N1cycpXG4gIHByb3RlY3RlZCBiZWZvcmVGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4Rm9jdXMnKVxuICBAT3B0aW9uKCdmb2N1cycpXG4gIHByb3RlY3RlZCBmb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4QmVmb3JlTG9zdEZvY3VzJylcbiAgQE9wdGlvbignYmVmb3JlTG9zdEZvY3VzJylcbiAgcHJvdGVjdGVkIGJlZm9yZUxvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4TG9zdEZvY3VzJylcbiAgQE9wdGlvbignbG9zdEZvY3VzJylcbiAgcHJvdGVjdGVkIGxvc3RGb2N1c0V2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4QmVmb3JlQ2hhbmdlJylcbiAgQE9wdGlvbignYmVmb3JlQ2hhbmdlJylcbiAgcHJvdGVjdGVkIGJlZm9yZUNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgQE91dHB1dCgncGh4Q2hhbmdlJylcbiAgQE9wdGlvbignY2hhbmdlJylcbiAgcHJvdGVjdGVkIGNoYW5nZUV2ZW50OiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RTZWxlY3RJdGVtc1xuICBAT3V0cHV0KCdwaHhCZWZvcmVTZWxlY3QnKVxuICBAT3B0aW9uKCdiZWZvcmVTZWxlY3QnKVxuICBwcm90ZWN0ZWQgYmVmb3JlU2VsZWN0RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhTZWxlY3QnKVxuICBAT3B0aW9uKCdzZWxlY3QnKVxuICBwcm90ZWN0ZWQgc2VsZWN0RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAvLyAtLS0gZnJvbSBBYnN0cmFjdFNlbGVjdE9uZUl0ZW1cbiAgLy8gLS0tIGZyb20gQWJzdHJhY3RTaW1wbGVEcm9wZG93blxuICBAT3V0cHV0KCdwaHhCZWZvcmVDbGljaycpXG4gIEBPcHRpb24oJ2JlZm9yZUNsaWNrJylcbiAgcHJvdGVjdGVkIGJlZm9yZUNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhDbGljaycpXG4gIEBPcHRpb24oJ2NsaWNrJylcbiAgcHJvdGVjdGVkIGNsaWNrRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVTaG93JylcbiAgQE9wdGlvbignYmVmb3JlU2hvdycpXG4gIHByb3RlY3RlZCBiZWZvcmVTaG93RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhTaG93JylcbiAgQE9wdGlvbignc2hvdycpXG4gIHByb3RlY3RlZCBzaG93RXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhCZWZvcmVIaWRlJylcbiAgQE9wdGlvbignYmVmb3JlSGlkZScpXG4gIHByb3RlY3RlZCBiZWZvcmVIaWRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICBAT3V0cHV0KCdwaHhIaWRlJylcbiAgQE9wdGlvbignaGlkZScpXG4gIHByb3RlY3RlZCBoaWRlRXZlbnQ6IEV2ZW50RW1pdHRlcjxhbnk+O1xuXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duTGFiZWwnKVxuICBwcml2YXRlIGRyb3Bkb3duTGFiZWw6IENvbXBvbmVudFdyYXBwZXI7XG5cbiAgY29uc3RydWN0b3IobmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSwgZWxlbWVudFJlZjogRWxlbWVudFJlZiwgcGhsb3hBcHBJbmZvU2VydmljZTogUGhsb3hBcHBJbmZvU2VydmljZSkge1xuICAgIHN1cGVyKG5lZWRGb2N1c1NlcnZpY2UsIGVsZW1lbnRSZWYsIHBobG94QXBwSW5mb1NlcnZpY2UpO1xuICB9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICBpZiAodGhpcy5jaGFuZ2VFdmVudCAhPT0gbnVsbCAmJiB0aGlzLmNoYW5nZUV2ZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuY2hhbmdlRXZlbnQuc3Vic2NyaWJlKCgkZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICBsZXQgc0l0ZW0gPSAkZXZlbnQuZGV0YWlsLmRhdGEubmV3VmFsdWU7XG5cbiAgICAgICAgaWYgKHRoaXMuZHJvcGRvd25MYWJlbCAhPT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5kcm9wZG93bkxhYmVsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIGxldCBzSXRlbXMgPSBbXTtcbiAgICAgICAgICBzSXRlbXMucHVzaChzSXRlbSk7XG4gICAgICAgICAgdGhpcy5kcm9wZG93bkxhYmVsLnNldERhdGEoc0l0ZW1zKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZGVmYXVsdElkeCAhPT0gbnVsbCAmJiB0aGlzLmRlZmF1bHRJZHggIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5zZXRTZWxlY3RlZEluZGV4KHRoaXMuZGVmYXVsdElkeCk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIG9uVmFsaWRhdGlvbkVuZChpbnB1dFZhbHVlOiBhbnksIHJlc3VsdHM6IFZhbGlkYXRpb25SZXN1bHRbXSk6IHZvaWQge1xuICB9XG5cbiAgcHJvdGVjdGVkIG9uRGF0YUNoYW5nZShkYXRhOiBhbnksIGlucHV0VmFsOiBhbnkpOiB2b2lkIHtcbiAgfVxuXG4gIHByb3RlY3RlZCBvbkRhdGFDaGFuZ2VQcmV2ZW50ZWQob2xkVmFsdWU6IGFueSwgaW5wdXRWYWw6IGFueSwgZGF0YT86IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX3NldERhdGEob2xkVmFsdWUsIHRydWUsIG51bGwsIGZhbHNlKTtcbiAgfVxuXG4gIC8vIE92ZXJyaWRlXG4gIHByb3RlY3RlZCBkb0ZvY3VzKCRldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChcIi5kcm9wZG93biA+IGJ1dHRvbjpmb2N1c1wiKS5sZW5ndGggPD0gMCkge1xuICAgICAgJCh0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCkuZmluZChcIi5kcm9wZG93biA+IGJ1dHRvblwiKS5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE92ZXJyaWRlXG4gIHByb3RlY3RlZCBkb0JsdXIoJGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICgkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KS5maW5kKFwiLmRyb3Bkb3duID4gYnV0dG9uOmZvY3VzXCIpLmxlbmd0aCA+IDApIHtcbiAgICAgICQodGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQpLmZpbmQoXCIuZHJvcGRvd24gPiBidXR0b25cIikuYmx1cigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIE92ZXJyaWRlXG4gIHByb3RlY3RlZCBnZXREcm9wZG93blBvcHVwU2VsZWN0b3IoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJy5tZW51JztcbiAgfVxuXG4gIHB1YmxpYyBzZWxmU2F2ZURhdGEoZGF0YTogYW55KTogdm9pZCB7XG5cbiAgfVxuXG4gIHB1YmxpYyBzZWxmUmVzZXREYXRhKCk6IHZvaWQge1xuXG4gIH1cblxuICBwdWJsaWMgZ2V0Q29tcG9uZW50VHlwZSgpOiBUeXBlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudFR5cGU7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29tcG9uZW50VHlwZSh0eXBlOiBUeXBlPGFueT4pOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvbmVudFR5cGUgPSB0eXBlO1xuICB9XG5cbiAgcHVibGljIGdldENvbXBvbmVudE1vZGVsKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50TW9kZWw7XG4gIH1cblxuICBwdWJsaWMgc2V0Q29tcG9uZW50TW9kZWwobW9kZWw6IGFueSk6IHZvaWQge1xuICAgIHRoaXMuY29tcG9uZW50TW9kZWwgPSBtb2RlbDtcbiAgfVxuXG4gIHB1YmxpYyBnZXRDb21wb25lbnRIYW5kbGVyKCk6IEZ1bmN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRIYW5kbGVyO1xuICB9XG5cbiAgcHVibGljIHNldENvbXBvbmVudEhhbmRsZXIoaGFuZGxlcjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICB0aGlzLmNvbXBvbmVudEhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbn1cbiJdfQ==