UNPKG

angular-admin-lte-teliqo

Version:
384 lines (383 loc) 30.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, EventEmitter, Input, NgZone, Output, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren } from '@angular/core'; import { TabToggleDirective } from './tabs.directive'; import { removeListeners, removeSubscriptions } from '../helpers'; export class TabHeaderComponent { } TabHeaderComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tab-header', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ TabHeaderComponent.propDecorators = { "templateRef": [{ type: ViewChild, args: ['templateRef',] },], }; function TabHeaderComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TabHeaderComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TabHeaderComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TabHeaderComponent.propDecorators; /** @type {?} */ TabHeaderComponent.prototype.templateRef; } export class TabContentComponent { } TabContentComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tab-content', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ TabContentComponent.propDecorators = { "templateRef": [{ type: ViewChild, args: ['templateRef',] },], }; function TabContentComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TabContentComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TabContentComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TabContentComponent.propDecorators; /** @type {?} */ TabContentComponent.prototype.templateRef; } export class TabComponent { constructor() { this.isActive = false; } /** * \@method ngOnInit * @return {?} */ ngOnInit() { if (this.tabContentComponent) { this.contentTemplateRef = this.tabContentComponent.templateRef; } else { this.contentTemplateRef = this.templateRef; } } } TabComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tab', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ TabComponent.propDecorators = { "header": [{ type: Input },], "isDisabled": [{ type: Input },], "tabColor": [{ type: Input },], "templateRef": [{ type: ViewChild, args: ['templateRef',] },], "tabHeaderComponent": [{ type: ContentChild, args: [TabHeaderComponent,] },], "tabContentComponent": [{ type: ContentChild, args: [TabContentComponent,] },], }; function TabComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TabComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TabComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TabComponent.propDecorators; /** @type {?} */ TabComponent.prototype.index; /** @type {?} */ TabComponent.prototype.isActive; /** @type {?} */ TabComponent.prototype.contentTemplateRef; /** @type {?} */ TabComponent.prototype.header; /** @type {?} */ TabComponent.prototype.isDisabled; /** @type {?} */ TabComponent.prototype.tabColor; /** @type {?} */ TabComponent.prototype.templateRef; /** @type {?} */ TabComponent.prototype.tabHeaderComponent; /** @type {?} */ TabComponent.prototype.tabContentComponent; } export class TabsHeaderComponent { } TabsHeaderComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tabs-header', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>', changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ TabsHeaderComponent.propDecorators = { "templateRef": [{ type: ViewChild, args: ['templateRef',] },], }; function TabsHeaderComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TabsHeaderComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TabsHeaderComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TabsHeaderComponent.propDecorators; /** @type {?} */ TabsHeaderComponent.prototype.templateRef; } export class TabsComponent { /** * \@method constructor * @param {?} changeDetectorRef [description] * @param {?} ngZone [description] * @param {?} renderer2 [description] */ constructor(changeDetectorRef, ngZone, renderer2) { this.changeDetectorRef = changeDetectorRef; this.ngZone = ngZone; this.renderer2 = renderer2; this.listeners = []; this.subscriptions = []; this.headerStyleClass = 'header pull-left'; this.navStyleClass = 'nav nav-tabs'; this.contentStyleClass = 'tab-content'; this.styleClass = 'nav-tabs-custom'; this.onClose = new EventEmitter(); this.onOpen = new EventEmitter(); } /** * @param {?} index * @return {?} */ set activeTabIndex(index) { this.activatedTabIndex = index; this.changeDetectorRef.detectChanges(); } /** * \@method ngAfterViewInit * @return {?} */ ngAfterContentInit() { // Set tab index on load. this.setTabIndex(); // Update tab index if tabs is updated. this.subscriptions.push(this.tabs.changes.subscribe(() => { this.setTabIndex(); })); // Open tab on load. this.openTabIndex(); } /** * \@method ngAfterViewInit * @return {?} */ ngAfterViewInit() { // Set tab toggles on load. this.setTabsToggle(); // Update tab toggles if tabs is updated. this.subscriptions.push(this.tabToggleDirectives.changes.subscribe(() => { this.setTabsToggle(); })); } /** * \@method ngOnChanges * @param {?} changes [description] * @return {?} */ ngOnChanges(changes) { if (changes["activeTabIndex"]) { this.openTabIndex(); } } /** * \@method ngOnDestroy * @return {?} */ ngOnDestroy() { removeListeners(this.listeners); removeSubscriptions(this.subscriptions); } /** * [toggleTab description] * \@method toggleTab * @return {?} */ openTabIndex() { if (this.tabs) { this.tabs.forEach((tab) => { if (this.activatedTabIndex === tab.index || (this.activatedTabIndex === undefined && tab.index === 0)) { tab.isActive = true; this.onOpen.emit({ index: tab.index }); this.changeDetectorRef.detectChanges(); } else if (tab.isActive) { tab.isActive = false; this.onClose.emit({ index: tab.index }); this.changeDetectorRef.detectChanges(); } }); } } /** * [openTab description] * \@method openTab * @param {?} event [description] * @param {?} tabToOpen [description] * @return {?} */ openTab(event, tabToOpen) { event.preventDefault(); tabToOpen.isActive = true; this.onOpen.emit({ event, index: tabToOpen.index }); this.tabs.forEach((tab) => { if (tab.isActive && tabToOpen !== tab) { tab.isActive = false; this.onClose.emit({ event, index: tab.index }); } }); } /** * [setTabIndex description] * \@method setTabIndex * @return {?} */ setTabIndex() { this.tabs.forEach((tab, index) => { tab.index = index; }); this.changeDetectorRef.detectChanges(); } /** * [setTabsToggle description] * \@method setTabsToggle * @return {?} */ setTabsToggle() { this.listeners = removeListeners(this.listeners); this.ngZone.runOutsideAngular(() => { this.tabToggleDirectives.forEach((tabToggle) => { this.listeners.push(this.renderer2.listen(tabToggle.elementRef.nativeElement, 'click', (event) => { this.openTab(event, tabToggle.tabComponent); this.changeDetectorRef.detectChanges(); })); }); }); } } TabsComponent.decorators = [ { type: Component, args: [{ selector: 'mk-tabs', template: `<div [ngClass]="styleClass"> <ul [ngClass]="navStyleClass" [class.pull-right]="header || tabsHeaderComponent"> <li *ngFor="let tab of tabs" [class.active]="tab.isActive" [mkColor]="tab.tabColor || tabsColor" mkColorProperty="border-top-color"> <a *ngIf="!tab.isDisabled" [mkTabToggle]="tab" href="#"> {{tab.header}} <ng-template *ngIf="!tab.header" [ngTemplateOutlet]="tab.tabHeaderComponent?.templateRef"></ng-template> </a> <ng-template [ngIf]="tab.isDisabled"> {{tab.header}} <ng-template *ngIf="!tab.header" [ngTemplateOutlet]="tab.tabHeaderComponent.templateRef"></ng-template> </ng-template> </li> <li *ngIf="tabsHeaderComponent || header" [ngClass]="headerStyleClass"> {{header}} <ng-template *ngIf="!header" [ngTemplateOutlet]="tabsHeaderComponent.templateRef"></ng-template> </li> </ul> <div [ngClass]="contentStyleClass"> <div *ngFor="let tab of tabs" class="tab-pane" [class.active]="tab.isActive"> <ng-template [ngTemplateOutlet]="tab.contentTemplateRef"></ng-template> </div> </div> </div> `, styles: [`.nav-tabs-custom>.nav-tabs>li{border-top-width:0}.nav-tabs-custom>.nav-tabs>li.active{border-top-width:3px}`], changeDetection: ChangeDetectionStrategy.OnPush },] }, ]; /** @nocollapse */ TabsComponent.ctorParameters = () => [ { type: ChangeDetectorRef, }, { type: NgZone, }, { type: Renderer2, }, ]; TabsComponent.propDecorators = { "activeTabIndex": [{ type: Input },], "header": [{ type: Input },], "headerStyleClass": [{ type: Input },], "navStyleClass": [{ type: Input },], "contentStyleClass": [{ type: Input },], "styleClass": [{ type: Input },], "tabsColor": [{ type: Input },], "onClose": [{ type: Output },], "onOpen": [{ type: Output },], "tabsHeaderComponent": [{ type: ContentChild, args: [TabsHeaderComponent,] },], "tabs": [{ type: ContentChildren, args: [TabComponent,] },], "tabToggleDirectives": [{ type: ViewChildren, args: [TabToggleDirective,] },], }; function TabsComponent_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ TabsComponent.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ TabsComponent.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ TabsComponent.propDecorators; /** @type {?} */ TabsComponent.prototype.activatedTabIndex; /** @type {?} */ TabsComponent.prototype.listeners; /** @type {?} */ TabsComponent.prototype.subscriptions; /** @type {?} */ TabsComponent.prototype.header; /** @type {?} */ TabsComponent.prototype.headerStyleClass; /** @type {?} */ TabsComponent.prototype.navStyleClass; /** @type {?} */ TabsComponent.prototype.contentStyleClass; /** @type {?} */ TabsComponent.prototype.styleClass; /** @type {?} */ TabsComponent.prototype.tabsColor; /** @type {?} */ TabsComponent.prototype.onClose; /** @type {?} */ TabsComponent.prototype.onOpen; /** @type {?} */ TabsComponent.prototype.tabsHeaderComponent; /** @type {?} */ TabsComponent.prototype.tabs; /** @type {?} */ TabsComponent.prototype.tabToggleDirectives; /** @type {?} */ TabsComponent.prototype.changeDetectorRef; /** @type {?} */ TabsComponent.prototype.ngZone; /** @type {?} */ TabsComponent.prototype.renderer2; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hbmd1bGFyLWFkbWluLWx0ZS10ZWxpcW8vIiwic291cmNlcyI6WyJsaWIvdGFicy90YWJzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUdMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBSU4sTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBRVQsV0FBVyxFQUNYLFNBQVMsRUFDVCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQVlsRSxNQUFNOzs7WUFMTCxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLFFBQVEsRUFBRSxtRUFBbUU7Z0JBQzdFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOzs7OzRCQUVFLFNBQVMsU0FBQyxhQUFhOzs7Ozs7Ozs7Ozs7Ozs7QUFZMUIsTUFBTTs7O1lBTEwsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRSxtRUFBbUU7Z0JBQzdFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2hEOzs7OzRCQUVFLFNBQVMsU0FBQyxhQUFhOzs7Ozs7Ozs7Ozs7Ozs7QUFXMUIsTUFBTTs7d0JBRWMsS0FBSzs7Ozs7O0lBZ0J2QixRQUFRO1FBQ04sRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQztTQUNoRTtRQUFDLElBQUks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Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBOZ1pvbmUsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZSxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBUYWJUb2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuL3RhYnMuZGlyZWN0aXZlJztcblxuaW1wb3J0IHsgcmVtb3ZlTGlzdGVuZXJzLCByZW1vdmVTdWJzY3JpcHRpb25zIH0gZnJvbSAnLi4vaGVscGVycyc7XG5cbi8vIEBUT0RPIFZlcnRpY2FsIHRhYnNcblxuLypcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21rLXRhYi1oZWFkZXInLFxuICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+JyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFiSGVhZGVyQ29tcG9uZW50IHtcbiAgQFZpZXdDaGlsZCgndGVtcGxhdGVSZWYnKSBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG59XG5cblxuLypcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21rLXRhYi1jb250ZW50JyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFRhYkNvbnRlbnRDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicpIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pjtcbn1cblxuLypcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21rLXRhYicsXG4gIHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVJlZj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9uZy10ZW1wbGF0ZT4nLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBUYWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcbiAgcHVibGljIGlzQWN0aXZlID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBjb250ZW50VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQElucHV0KCkgcHVibGljIGhlYWRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgaXNEaXNhYmxlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIHRhYkNvbG9yOiBzdHJpbmc7XG5cbiAgQFZpZXdDaGlsZCgndGVtcGxhdGVSZWYnKSBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChUYWJIZWFkZXJDb21wb25lbnQpIHB1YmxpYyB0YWJIZWFkZXJDb21wb25lbnQ6IFRhYkhlYWRlckNvbXBvbmVudDtcbiAgQENvbnRlbnRDaGlsZChUYWJDb250ZW50Q29tcG9uZW50KSBwdWJsaWMgdGFiQ29udGVudENvbXBvbmVudDogVGFiQ29udGVudENvbXBvbmVudDtcblxuICAvKipcbiAgICogQG1ldGhvZCBuZ09uSW5pdFxuICAgKi9cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKHRoaXMudGFiQ29udGVudENvbXBvbmVudCkge1xuICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLnRhYkNvbnRlbnRDb21wb25lbnQudGVtcGxhdGVSZWY7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY29udGVudFRlbXBsYXRlUmVmID0gdGhpcy50ZW1wbGF0ZVJlZjtcbiAgICB9XG4gIH1cbn1cblxuLypcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21rLXRhYnMtaGVhZGVyJyxcbiAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPicsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFRhYnNIZWFkZXJDb21wb25lbnQge1xuICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicpIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55Pjtcbn1cblxuLypcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21rLXRhYnMnLFxuICB0ZW1wbGF0ZTogYDxkaXYgW25nQ2xhc3NdPVwic3R5bGVDbGFzc1wiPlxuICA8dWwgW25nQ2xhc3NdPVwibmF2U3R5bGVDbGFzc1wiIFtjbGFzcy5wdWxsLXJpZ2h0XT1cImhlYWRlciB8fCB0YWJzSGVhZGVyQ29tcG9uZW50XCI+XG4gICAgPGxpICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFic1wiIFtjbGFzcy5hY3RpdmVdPVwidGFiLmlzQWN0aXZlXCIgW21rQ29sb3JdPVwidGFiLnRhYkNvbG9yIHx8IHRhYnNDb2xvclwiIG1rQ29sb3JQcm9wZXJ0eT1cImJvcmRlci10b3AtY29sb3JcIj5cbiAgICAgIDxhICpuZ0lmPVwiIXRhYi5pc0Rpc2FibGVkXCIgW21rVGFiVG9nZ2xlXT1cInRhYlwiIGhyZWY9XCIjXCI+XG4gICAgICAgIHt7dGFiLmhlYWRlcn19XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIiF0YWIuaGVhZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFiLnRhYkhlYWRlckNvbXBvbmVudD8udGVtcGxhdGVSZWZcIj48L25nLXRlbXBsYXRlPlxuICAgICAgPC9hPlxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cInRhYi5pc0Rpc2FibGVkXCI+XG4gICAgICAgIHt7dGFiLmhlYWRlcn19XG4gICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIiF0YWIuaGVhZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFiLnRhYkhlYWRlckNvbXBvbmVudC50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvbGk+XG4gICAgPGxpICpuZ0lmPVwidGFic0hlYWRlckNvbXBvbmVudCB8fCBoZWFkZXJcIiBbbmdDbGFzc109XCJoZWFkZXJTdHlsZUNsYXNzXCI+XG4gICAgICB7e2hlYWRlcn19XG4gICAgICA8bmctdGVtcGxhdGUgKm5nSWY9XCIhaGVhZGVyXCIgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFic0hlYWRlckNvbXBvbmVudC50ZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9saT5cbiAgPC91bD5cbiAgPGRpdiBbbmdDbGFzc109XCJjb250ZW50U3R5bGVDbGFzc1wiPlxuICAgIDxkaXYgKm5nRm9yPVwibGV0IHRhYiBvZiB0YWJzXCIgY2xhc3M9XCJ0YWItcGFuZVwiIFtjbGFzcy5hY3RpdmVdPVwidGFiLmlzQWN0aXZlXCI+XG4gICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwidGFiLmNvbnRlbnRUZW1wbGF0ZVJlZlwiPjwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5gLFxuICBzdHlsZXM6IFtgLm5hdi10YWJzLWN1c3RvbT4ubmF2LXRhYnM+bGl7Ym9yZGVyLXRvcC13aWR0aDowfS5uYXYtdGFicy1jdXN0b20+Lm5hdi10YWJzPmxpLmFjdGl2ZXtib3JkZXItdG9wLXdpZHRoOjNweH1gXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFic0NvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSBhY3RpdmF0ZWRUYWJJbmRleDogbnVtYmVyO1xuICBwcml2YXRlIGxpc3RlbmVycyA9IFtdO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbnMgPSBbXTtcblxuICBASW5wdXQoKSBwdWJsaWMgc2V0IGFjdGl2ZVRhYkluZGV4KGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmFjdGl2YXRlZFRhYkluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cbiAgQElucHV0KCkgcHVibGljIGhlYWRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyU3R5bGVDbGFzcyA9ICdoZWFkZXIgcHVsbC1sZWZ0JztcbiAgQElucHV0KCkgcHVibGljIG5hdlN0eWxlQ2xhc3MgPSAnbmF2IG5hdi10YWJzJztcbiAgQElucHV0KCkgcHVibGljIGNvbnRlbnRTdHlsZUNsYXNzID0gJ3RhYi1jb250ZW50JztcbiAgQElucHV0KCkgcHVibGljIHN0eWxlQ2xhc3MgPSAnbmF2LXRhYnMtY3VzdG9tJztcbiAgQElucHV0KCkgcHVibGljIHRhYnNDb2xvcjogc3RyaW5nO1xuXG4gIEBPdXRwdXQoKSBwdWJsaWMgb25DbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgpIHB1YmxpYyBvbk9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQENvbnRlbnRDaGlsZChUYWJzSGVhZGVyQ29tcG9uZW50KSBwdWJsaWMgdGFic0hlYWRlckNvbXBvbmVudDogVGFic0hlYWRlckNvbXBvbmVudDtcblxuICBAQ29udGVudENoaWxkcmVuKFRhYkNvbXBvbmVudCkgcHVibGljIHRhYnM6IFF1ZXJ5TGlzdDxUYWJDb21wb25lbnQ+O1xuXG4gIEBWaWV3Q2hpbGRyZW4oVGFiVG9nZ2xlRGlyZWN0aXZlKSBwdWJsaWMgdGFiVG9nZ2xlRGlyZWN0aXZlczogUXVlcnlMaXN0PFRhYlRvZ2dsZURpcmVjdGl2ZT47XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgY29uc3RydWN0b3JcbiAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIG5nWm9uZSAgICAgICAgICAgIFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHJlbmRlcmVyMiAgICAgICAgIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjI6IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgbmdBZnRlclZpZXdJbml0XG4gICAqL1xuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgLy8gU2V0IHRhYiBpbmRleCBvbiBsb2FkLlxuICAgIHRoaXMuc2V0VGFiSW5kZXgoKTtcblxuICAgIC8vIFVwZGF0ZSB0YWIgaW5kZXggaWYgdGFicyBpcyB1cGRhdGVkLlxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudGFicy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNldFRhYkluZGV4KCk7XG4gICAgfSkpO1xuXG4gICAgLy8gT3BlbiB0YWIgb24gbG9hZC5cbiAgICB0aGlzLm9wZW5UYWJJbmRleCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgbmdBZnRlclZpZXdJbml0XG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgLy8gU2V0IHRhYiB0b2dnbGVzIG9uIGxvYWQuXG4gICAgdGhpcy5zZXRUYWJzVG9nZ2xlKCk7XG5cbiAgICAvLyBVcGRhdGUgdGFiIHRvZ2dsZXMgaWYgdGFicyBpcyB1cGRhdGVkLlxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudGFiVG9nZ2xlRGlyZWN0aXZlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnNldFRhYnNUb2dnbGUoKTtcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogQG1ldGhvZCBuZ09uQ2hhbmdlc1xuICAgKiBAcGFyYW0gY2hhbmdlcyBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7W3Byb3BLZXk6IHN0cmluZ106IFNpbXBsZUNoYW5nZX0pIHtcbiAgICBpZiAoY2hhbmdlcy5hY3RpdmVUYWJJbmRleCkge1xuICAgICAgdGhpcy5vcGVuVGFiSW5kZXgoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQG1ldGhvZCBuZ09uRGVzdHJveVxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgcmVtb3ZlTGlzdGVuZXJzKHRoaXMubGlzdGVuZXJzKTtcbiAgICByZW1vdmVTdWJzY3JpcHRpb25zKHRoaXMuc3Vic2NyaXB0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogW3RvZ2dsZVRhYiBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCB0b2dnbGVUYWJcbiAgICovXG4gIHB1YmxpYyBvcGVuVGFiSW5kZXgoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudGFicykge1xuICAgICAgdGhpcy50YWJzLmZvckVhY2goKHRhYjogVGFiQ29tcG9uZW50KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2YXRlZFRhYkluZGV4ID09PSB0YWIuaW5kZXggfHwgKHRoaXMuYWN0aXZhdGVkVGFiSW5kZXggPT09IHVuZGVmaW5lZCAmJiB0YWIuaW5kZXggPT09IDApKSB7XG4gICAgICAgICAgdGFiLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLm9uT3Blbi5lbWl0KHtpbmRleDogdGFiLmluZGV4fSk7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFiLmlzQWN0aXZlKSB7XG4gICAgICAgICAgdGFiLmlzQWN0aXZlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoe2luZGV4OiB0YWIuaW5kZXh9KTtcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFtvcGVuVGFiIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIG9wZW5UYWJcbiAgICogQHBhcmFtIGV2ZW50ICAgICBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSB0YWJUb09wZW4gW2Rlc2NyaXB0aW9uXVxuICAgKi9cbiAgcHVibGljIG9wZW5UYWIoZXZlbnQ6IEV2ZW50LCB0YWJUb09wZW46IFRhYkNvbXBvbmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdGFiVG9PcGVuLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICB0aGlzLm9uT3Blbi5lbWl0KHtldmVudCwgaW5kZXg6IHRhYlRvT3Blbi5pbmRleH0pO1xuICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWI6IFRhYkNvbXBvbmVudCkgPT4ge1xuICAgICAgaWYgKHRhYi5pc0FjdGl2ZSAmJiB0YWJUb09wZW4gIT09IHRhYikge1xuICAgICAgICB0YWIuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vbkNsb3NlLmVtaXQoe2V2ZW50LCBpbmRleDogdGFiLmluZGV4fSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogW3NldFRhYkluZGV4IGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIHNldFRhYkluZGV4XG4gICAqL1xuICBwcml2YXRlIHNldFRhYkluZGV4KCk6IHZvaWQge1xuICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWI6IFRhYkNvbXBvbmVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgdGFiLmluZGV4ID0gaW5kZXg7XG4gICAgfSk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogW3NldFRhYnNUb2dnbGUgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2Qgc2V0VGFic1RvZ2dsZVxuICAgKi9cbiAgcHJpdmF0ZSBzZXRUYWJzVG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMubGlzdGVuZXJzID0gcmVtb3ZlTGlzdGVuZXJzKHRoaXMubGlzdGVuZXJzKTtcbiAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgICB0aGlzLnRhYlRvZ2dsZURpcmVjdGl2ZXMuZm9yRWFjaCgodGFiVG9nZ2xlOiBUYWJUb2dnbGVEaXJlY3RpdmUpID0+IHtcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyMi5saXN0ZW4odGFiVG9nZ2xlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5vcGVuVGFiKGV2ZW50LCB0YWJUb2dnbGUudGFiQ29tcG9uZW50KTtcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==