UNPKG

angular-admin-lte-teliqo

Version:
279 lines (276 loc) 23.3 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Input, NgZone, Output, Renderer2, TemplateRef, ViewChild } from '@angular/core'; import { removeListeners } from '../helpers'; export class DropdownToggleComponent { } DropdownToggleComponent.decorators = [ { type: Component, args: [{ selector: 'mk-dropdown-toggle', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ DropdownToggleComponent.propDecorators = { "templateRef": [{ type: ViewChild, args: ['templateRef',] },], "toggleElement": [{ type: ContentChild, args: ['toggleElement',] },], }; function DropdownToggleComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ DropdownToggleComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ DropdownToggleComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ DropdownToggleComponent.propDecorators; /** @type {?} */ DropdownToggleComponent.prototype.templateRef; /** @type {?} */ DropdownToggleComponent.prototype.toggleElement; } export class DropdownMenuComponent { } DropdownMenuComponent.decorators = [ { type: Component, args: [{ selector: 'mk-dropdown-menu', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ DropdownMenuComponent.propDecorators = { "templateRef": [{ type: ViewChild, args: ['templateRef',] },], }; function DropdownMenuComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ DropdownMenuComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ DropdownMenuComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ DropdownMenuComponent.propDecorators; /** @type {?} */ DropdownMenuComponent.prototype.templateRef; } export class DropdownComponent { /** * \@method constructor * @param {?} changeDetectorRef [description] * @param {?} elementRef [description] * @param {?} ngZone [description] * @param {?} renderer2 [description] */ constructor(changeDetectorRef, elementRef, ngZone, renderer2) { this.changeDetectorRef = changeDetectorRef; this.elementRef = elementRef; this.ngZone = ngZone; this.renderer2 = renderer2; this.listeners = []; this.buttonStyleClass = 'btn dropdown-toggle'; this.buttonBackgroudColor = 'default'; this.contentStyleClass = 'dropdown-menu'; this.isCollapsed = true; this.isWrapper = true; this.styleClass = 'dropdown'; this.onCollapseStart = new EventEmitter(); this.onCollapseDone = new EventEmitter(); } /** * \@method ngAfterViewInit * @return {?} */ ngAfterViewInit() { const /** @type {?} */ toggleNativeElement = this.dropdownToggleComponent && this.dropdownToggleComponent.toggleElement ? this.dropdownToggleComponent.toggleElement.nativeElement : this.toggleElement ? this.toggleElement : this.defaultToggleElement ? this.defaultToggleElement.nativeElement : null; if (toggleNativeElement) { this.ngZone.runOutsideAngular(() => { this.listeners.push(this.renderer2.listen(toggleNativeElement, 'click', (event) => { this.toggleDropdown(event); this.changeDetectorRef.detectChanges(); })); }); } } /** * \@method ngOnDestroy * @return {?} */ ngOnDestroy() { this.unBindDocumentClickListener(); removeListeners(this.listeners); } /** * [toggle description] * \@method toggle * @param {?} event [description] * @return {?} */ toggleDropdown(event) { event.preventDefault(); this.isCollapsed = !this.isCollapsed; if (!this.isCollapsed) { this.ngZone.runOutsideAngular(() => { setTimeout(() => { this.bindDocumentClickListener(); }); }); } else { this.unBindDocumentClickListener(); } } /** * [collapseStart description] * \@method collapseStart * @param {?} event [description] * @return {?} */ collapseStart(event) { this.onCollapseStart.emit(event); } /** * [collapseDone description] * \@method collapseDone * @param {?} event [description] * @return {?} */ collapseDone(event) { this.onCollapseStart.emit(event); } /** * [bindDocumentClickListener description] * \@method bindDocumentClickListener * @return {?} */ bindDocumentClickListener() { this.ngZone.runOutsideAngular(() => { this.documentClickListener = this.renderer2.listen('document', 'click', () => { if (!this.isCollapsed) { this.isCollapsed = true; this.unBindDocumentClickListener(); this.changeDetectorRef.detectChanges(); } }); }); } /** * [unBindDocumentClickListener description] * \@method unBindDocumentClickListener * @return {?} */ unBindDocumentClickListener() { if (this.documentClickListener) { this.documentClickListener(); } } } DropdownComponent.decorators = [ { type: Component, args: [{ selector: 'mk-dropdown, [mk-dropdown]', template: `<ng-template #innerTemplate> <ng-container *ngIf="this.dropdownToggleComponent && this.dropdownToggleComponent.toggleElement; else noToggleElement" [ngTemplateOutlet]="dropdownToggleComponent.templateRef"></ng-container> <ng-template #noToggleElement> <button *ngIf="toggleText || dropdownToggleComponent" [mkColor]="buttonBackgroudColor" mkColorProperty="background-color" mkColorPrefix="btn" [ngClass]="buttonStyleClass" #toggleElement> {{toggleText}} <ng-container [ngTemplateOutlet]="dropdownToggleComponent?.templateRef"></ng-container> </button> </ng-template> <ul [ngClass]="contentStyleClass" [collapseAnimation]="isCollapsed" (collapseAnimation.start)="collapseStart($event)" (collapseAnimation.done)="collapseDone($event)"> <ng-container *ngIf="dropdownMenuComponent; else noDropdownMenuComponent" [ngTemplateOutlet]="dropdownMenuComponent.templateRef"></ng-container> <ng-template #noDropdownMenuComponent> <ng-content></ng-content> </ng-template> </ul> </ng-template> <div *ngIf="isWrapper; else noWrapper" [ngClass]="styleClass"> <ng-container *ngTemplateOutlet="innerTemplate"></ng-container> </div> <ng-template #noWrapper> <ng-container *ngTemplateOutlet="innerTemplate"></ng-container> </ng-template> `, styles: [`.dropdown-menu{display:block}.dropdown-menu.collapsing:not(.un-collapse){transition-property:height,padding-top,padding-bottom;padding-top:0;padding-bottom:0}`], changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ DropdownComponent.ctorParameters = () => [ { type: ChangeDetectorRef, }, { type: ElementRef, }, { type: NgZone, }, { type: Renderer2, }, ]; DropdownComponent.propDecorators = { "buttonStyleClass": [{ type: Input },], "buttonBackgroudColor": [{ type: Input },], "contentStyleClass": [{ type: Input },], "isCollapsed": [{ type: Input },], "isWrapper": [{ type: Input },], "styleClass": [{ type: Input },], "toggleElement": [{ type: Input },], "toggleText": [{ type: Input },], "onCollapseStart": [{ type: Output },], "onCollapseDone": [{ type: Output },], "dropdownToggleComponent": [{ type: ContentChild, args: [DropdownToggleComponent,] },], "dropdownMenuComponent": [{ type: ContentChild, args: [DropdownMenuComponent,] },], "defaultToggleElement": [{ type: ViewChild, args: ['toggleElement',] },], }; function DropdownComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ DropdownComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ DropdownComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ DropdownComponent.propDecorators; /** @type {?} */ DropdownComponent.prototype.documentClickListener; /** @type {?} */ DropdownComponent.prototype.listeners; /** @type {?} */ DropdownComponent.prototype.buttonStyleClass; /** @type {?} */ DropdownComponent.prototype.buttonBackgroudColor; /** @type {?} */ DropdownComponent.prototype.contentStyleClass; /** @type {?} */ DropdownComponent.prototype.isCollapsed; /** @type {?} */ DropdownComponent.prototype.isWrapper; /** @type {?} */ DropdownComponent.prototype.styleClass; /** @type {?} */ DropdownComponent.prototype.toggleElement; /** @type {?} */ DropdownComponent.prototype.toggleText; /** @type {?} */ DropdownComponent.prototype.onCollapseStart; /** @type {?} */ DropdownComponent.prototype.onCollapseDone; /** @type {?} */ DropdownComponent.prototype.dropdownToggleComponent; /** @type {?} */ DropdownComponent.prototype.dropdownMenuComponent; /** @type {?} */ DropdownComponent.prototype.defaultToggleElement; /** @type {?} */ DropdownComponent.prototype.changeDetectorRef; /** @type {?} */ DropdownComponent.prototype.elementRef; /** @type {?} */ DropdownComponent.prototype.ngZone; /** @type {?} */ DropdownComponent.prototype.renderer2; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vYW5ndWxhci1hZG1pbi1sdGUtdGVsaXFvLyIsInNvdXJjZXMiOlsibGliL2Ryb3Bkb3duL2Ryb3Bkb3duLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sTUFBTSxFQUNOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNWLE1BQU0sZUFBZSxDQUFDO0FBSXZCLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFVM0MsTUFBTTs7O1lBTEwsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxvQkFBb0I7Z0JBQzlCLFFBQVEsRUFBRSxtRUFBbUU7Z0JBQzdFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOzs7OzRCQUVFLFNBQVMsU0FBQyxhQUFhOzhCQUN2QixZQUFZLFNBQUMsZUFBZTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZL0IsTUFBTTs7O1lBTEwsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLFFBQVEsRUFBRSxtRUFBbUU7Z0JBQzdFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOzs7OzRCQUVFLFNBQVMsU0FBQyxhQUFhOzs7Ozs7Ozs7Ozs7Ozs7QUFvQzFCLE1BQU07Ozs7Ozs7O0lBNEJKLFlBQ1UsbUJBQ0EsWUFDQSxRQUNBO1FBSEEsc0JBQWlCLEdBQWpCLGlCQUFpQjtRQUNqQixlQUFVLEdBQVYsVUFBVTtRQUNWLFdBQU0sR0FBTixNQUFNO1FBQ04sY0FBUyxHQUFULFNBQVM7eUJBOUJDLEVBQUU7Z0NBRWEscUJBQXFCO29DQUNqQixTQUFTO2lDQUNaLGVBQWU7MkJBQ3JCLElBQUk7eUJBQ04sSUFBSTswQkFD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QztnQkFDVCxRQUFRLEVBQUUsNEJBQTRCO2dCQUN0QyxRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBdUJYO2dCQUNDLE1BQU0sRUFBRSxDQUFDLGdLQUFnSyxDQUFDO2dCQUMxSyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTthQUNoRDs7OztZQTVFQyxpQkFBaUI7WUFHakIsVUFBVTtZQUdWLE1BQU07WUFHTixTQUFTOzs7aUNBd0VSLEtBQUs7cUNBQ0wsS0FBSztrQ0FDTCxLQUFLOzRCQUNMLEtBQUs7MEJBQ0wsS0FBSzsyQkFDTCxLQUFLOzhCQUNMLEtBQUs7MkJBQ0wsS0FBSztnQ0FFTCxNQUFNOytCQUNOLE1BQU07d0NBRU4sWUFBWSxTQUFDLHVCQUF1QjtzQ0FDcEMsWUFBWSxTQUFDLHFCQUFxQjtxQ0FFbEMsU0FBUyxTQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7QW5pbWF0aW9uRXZlbnR9IGZyb20gJy4uL2FuaW1hdGlvbnMvYW5pbWF0aW9ucy5pbnRlcmZhY2UnO1xuXG5pbXBvcnQge3JlbW92ZUxpc3RlbmVyc30gZnJvbSAnLi4vaGVscGVycyc7XG5cbi8qXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtay1kcm9wZG93bi10b2dnbGUnLFxuICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Ub2dnbGVDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicpIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgQENvbnRlbnRDaGlsZCgndG9nZ2xlRWxlbWVudCcpIHB1YmxpYyB0b2dnbGVFbGVtZW50OiBFbGVtZW50UmVmO1xufVxuXG5cbi8qXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtay1kcm9wZG93bi1tZW51JyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIERyb3Bkb3duTWVudUNvbXBvbmVudCB7XG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJykgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xufVxuXG5cbi8qXG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtay1kcm9wZG93biwgW21rLWRyb3Bkb3duXScsXG4gIHRlbXBsYXRlOiBgPG5nLXRlbXBsYXRlICNpbm5lclRlbXBsYXRlPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwidGhpcy5kcm9wZG93blRvZ2dsZUNvbXBvbmVudCAmJiB0aGlzLmRyb3Bkb3duVG9nZ2xlQ29tcG9uZW50LnRvZ2dsZUVsZW1lbnQ7IGVsc2Ugbm9Ub2dnbGVFbGVtZW50XCIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHJvcGRvd25Ub2dnbGVDb21wb25lbnQudGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgPG5nLXRlbXBsYXRlICNub1RvZ2dsZUVsZW1lbnQ+XG4gICAgPGJ1dHRvbiAqbmdJZj1cInRvZ2dsZVRleHQgfHwgZHJvcGRvd25Ub2dnbGVDb21wb25lbnRcIiBbbWtDb2xvcl09XCJidXR0b25CYWNrZ3JvdWRDb2xvclwiIG1rQ29sb3JQcm9wZXJ0eT1cImJhY2tncm91bmQtY29sb3JcIiBta0NvbG9yUHJlZml4PVwiYnRuXCIgW25nQ2xhc3NdPVwiYnV0dG9uU3R5bGVDbGFzc1wiICN0b2dnbGVFbGVtZW50PlxuICAgICAge3t0b2dnbGVUZXh0fX1cbiAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiZHJvcGRvd25Ub2dnbGVDb21wb25lbnQ/LnRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9idXR0b24+XG4gIDwvbmctdGVtcGxhdGU+XG4gIDx1bCBbbmdDbGFzc109XCJjb250ZW50U3R5bGVDbGFzc1wiIFtjb2xsYXBzZUFuaW1hdGlvbl09XCJpc0NvbGxhcHNlZFwiIChjb2xsYXBzZUFuaW1hdGlvbi5zdGFydCk9XCJjb2xsYXBzZVN0YXJ0KCRldmVudClcIiAoY29sbGFwc2VBbmltYXRpb24uZG9uZSk9XCJjb2xsYXBzZURvbmUoJGV2ZW50KVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJkcm9wZG93bk1lbnVDb21wb25lbnQ7IGVsc2Ugbm9Ecm9wZG93bk1lbnVDb21wb25lbnRcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJkcm9wZG93bk1lbnVDb21wb25lbnQudGVtcGxhdGVSZWZcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8bmctdGVtcGxhdGUgI25vRHJvcGRvd25NZW51Q29tcG9uZW50PlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvdWw+XG48L25nLXRlbXBsYXRlPlxuXG48ZGl2ICpuZ0lmPVwiaXNXcmFwcGVyOyBlbHNlIG5vV3JhcHBlclwiIFtuZ0NsYXNzXT1cInN0eWxlQ2xhc3NcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubmVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuXG48bmctdGVtcGxhdGUgI25vV3JhcHBlcj5cbiAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImlubmVyVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG5gLFxuICBzdHlsZXM6IFtgLmRyb3Bkb3duLW1lbnV7ZGlzcGxheTpibG9ja30uZHJvcGRvd24tbWVudS5jb2xsYXBzaW5nOm5vdCgudW4tY29sbGFwc2Upe3RyYW5zaXRpb24tcHJvcGVydHk6aGVpZ2h0LHBhZGRpbmctdG9wLHBhZGRpbmctYm90dG9tO3BhZGRpbmctdG9wOjA7cGFkZGluZy1ib3R0b206MH1gXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgRHJvcGRvd25Db21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIGRvY3VtZW50Q2xpY2tMaXN0ZW5lcjogRnVuY3Rpb247XG4gIHByaXZhdGUgbGlzdGVuZXJzID0gW107XG5cbiAgQElucHV0KCkgcHVibGljIGJ1dHRvblN0eWxlQ2xhc3MgPSAnYnRuIGRyb3Bkb3duLXRvZ2dsZSc7XG4gIEBJbnB1dCgpIHB1YmxpYyBidXR0b25CYWNrZ3JvdWRDb2xvciA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgcHVibGljIGNvbnRlbnRTdHlsZUNsYXNzID0gJ2Ryb3Bkb3duLW1lbnUnO1xuICBASW5wdXQoKSBwdWJsaWMgaXNDb2xsYXBzZWQgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgaXNXcmFwcGVyID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIHN0eWxlQ2xhc3MgPSAnZHJvcGRvd24nO1xuICBASW5wdXQoKSBwdWJsaWMgdG9nZ2xlRWxlbWVudDogRWxlbWVudDtcbiAgQElucHV0KCkgcHVibGljIHRvZ2dsZVRleHQ6IHN0cmluZztcblxuICBAT3V0cHV0KCkgcHVibGljIG9uQ29sbGFwc2VTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvbkNvbGxhcHNlRG9uZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAQ29udGVudENoaWxkKERyb3Bkb3duVG9nZ2xlQ29tcG9uZW50KSBwdWJsaWMgZHJvcGRvd25Ub2dnbGVDb21wb25lbnQ6IERyb3Bkb3duVG9nZ2xlQ29tcG9uZW50O1xuICBAQ29udGVudENoaWxkKERyb3Bkb3duTWVudUNvbXBvbmVudCkgcHVibGljIGRyb3Bkb3duTWVudUNvbXBvbmVudDogRHJvcGRvd25NZW51Q29tcG9uZW50O1xuXG4gIEBWaWV3Q2hpbGQoJ3RvZ2dsZUVsZW1lbnQnKSBwcml2YXRlIGRlZmF1bHRUb2dnbGVFbGVtZW50OiBFbGVtZW50UmVmO1xuXG4gIC8qKlxuICAgKiBAbWV0aG9kIGNvbnN0cnVjdG9yXG4gICAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSBlbGVtZW50UmVmIFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIG5nWm9uZSBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSByZW5kZXJlcjIgW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjI6IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgbmdBZnRlclZpZXdJbml0XG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgY29uc3QgdG9nZ2xlTmF0aXZlRWxlbWVudCA9IHRoaXMuZHJvcGRvd25Ub2dnbGVDb21wb25lbnQgJiYgdGhpcy5kcm9wZG93blRvZ2dsZUNvbXBvbmVudC50b2dnbGVFbGVtZW50ID9cbiAgICAgIHRoaXMuZHJvcGRvd25Ub2dnbGVDb21wb25lbnQudG9nZ2xlRWxlbWVudC5uYXRpdmVFbGVtZW50IDogdGhpcy50b2dnbGVFbGVtZW50ID9cbiAgICAgICAgdGhpcy50b2dnbGVFbGVtZW50IDogdGhpcy5kZWZhdWx0VG9nZ2xlRWxlbWVudCA/XG4gICAgICAgICAgdGhpcy5kZWZhdWx0VG9nZ2xlRWxlbWVudC5uYXRpdmVFbGVtZW50IDogbnVsbDtcbiAgICBpZiAodG9nZ2xlTmF0aXZlRWxlbWVudCkge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0b2dnbGVOYXRpdmVFbGVtZW50LCAnY2xpY2snLCAoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy50b2dnbGVEcm9wZG93bihldmVudCk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAbWV0aG9kIG5nT25EZXN0cm95XG4gICAqL1xuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnVuQmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpO1xuICAgIHJlbW92ZUxpc3RlbmVycyh0aGlzLmxpc3RlbmVycyk7XG4gIH1cblxuICAvKipcbiAgICogW3RvZ2dsZSBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCB0b2dnbGVcbiAgICogQHBhcmFtIGV2ZW50IFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIHB1YmxpYyB0b2dnbGVEcm9wZG93bihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIHRoaXMuaXNDb2xsYXBzZWQgPSAhdGhpcy5pc0NvbGxhcHNlZDtcbiAgICBpZiAoIXRoaXMuaXNDb2xsYXBzZWQpIHtcbiAgICAgIHRoaXMubmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgc2V0VGltZW91dCAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVuQmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBbY29sbGFwc2VTdGFydCBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBjb2xsYXBzZVN0YXJ0XG4gICAqIEBwYXJhbSBldmVudCBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwdWJsaWMgY29sbGFwc2VTdGFydChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ29sbGFwc2VTdGFydC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbY29sbGFwc2VEb25lIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIGNvbGxhcHNlRG9uZVxuICAgKiBAcGFyYW0gZXZlbnQgW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgcHVibGljIGNvbGxhcHNlRG9uZShldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICB0aGlzLm9uQ29sbGFwc2VTdGFydC5lbWl0KGV2ZW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbYmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lciBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBiaW5kRG9jdW1lbnRDbGlja0xpc3RlbmVyXG4gICAqL1xuICBwcml2YXRlIGJpbmREb2N1bWVudENsaWNrTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyMi5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuaXNDb2xsYXBzZWQpIHtcbiAgICAgICAgICB0aGlzLmlzQ29sbGFwc2VkID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnVuQmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBbdW5CaW5kRG9jdW1lbnRDbGlja0xpc3RlbmVyIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIHVuQmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lclxuICAgKi9cbiAgcHJpdmF0ZSB1bkJpbmREb2N1bWVudENsaWNrTGlzdGVuZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyKSB7XG4gICAgICB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcigpO1xuICAgIH1cbiAgfVxufVxuIl19