ad-custom-lib
Version:
This is an UI custom library based on Adminlte library with purpose for personal use, if you need a full template of Primeng please visit https://github.com/mledour/angular-admin-lte
380 lines • 30.5 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, ContentChildren, EventEmitter, Input, NgZone, Output, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren } from '@angular/core';
import { removeListeners, removeSubscriptions } from '../helpers';
import { TabToggleDirective } from './tabs.directive';
// @TODO Vertical tabs
/*
*
*/
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
}] }
];
TabHeaderComponent.propDecorators = {
templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }]
};
if (false) {
/** @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
}] }
];
TabContentComponent.propDecorators = {
templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }]
};
if (false) {
/** @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
}] }
];
TabComponent.propDecorators = {
header: [{ type: Input }],
isDisabled: [{ type: Input }],
tabColor: [{ type: Input }],
templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }],
tabHeaderComponent: [{ type: ContentChild, args: [TabHeaderComponent, { static: true },] }],
tabContentComponent: [{ type: ContentChild, args: [TabContentComponent, { static: true },] }]
};
if (false) {
/** @type {?} */
TabComponent.prototype.index;
/** @type {?} */
TabComponent.prototype.isActive;
/**
* @type {?}
* @private
*/
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
}] }
];
TabsHeaderComponent.propDecorators = {
templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }]
};
if (false) {
/** @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((/**
* @return {?}
*/
() => {
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((/**
* @return {?}
*/
() => {
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((/**
* @param {?} tab
* @return {?}
*/
(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((/**
* @param {?} tab
* @return {?}
*/
(tab) => {
if (tab.isActive && tabToOpen !== tab) {
tab.isActive = false;
this.onClose.emit({ event, index: tab.index });
}
}));
}
/**
* [setTabIndex description]
* \@method setTabIndex
* @private
* @return {?}
*/
setTabIndex() {
this.tabs.forEach((/**
* @param {?} tab
* @param {?} index
* @return {?}
*/
(tab, index) => {
tab.index = index;
}));
this.changeDetectorRef.detectChanges();
}
/**
* [setTabsToggle description]
* \@method setTabsToggle
* @private
* @return {?}
*/
setTabsToggle() {
this.listeners = removeListeners(this.listeners);
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
() => {
this.tabToggleDirectives.forEach((/**
* @param {?} tabToggle
* @return {?}
*/
(tabToggle) => {
this.listeners.push(this.renderer2.listen(tabToggle.elementRef.nativeElement, 'click', (/**
* @param {?} event
* @return {?}
*/
(event) => {
this.openTab(event, tabToggle.tabComponent);
this.changeDetectorRef.detectChanges();
})));
}));
}));
}
}
TabsComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-tabs',
template: "<div [ngClass]=\"styleClass\">\r\n <ul [ngClass]=\"navStyleClass\" [class.pull-right]=\"header || tabsHeaderComponent\">\r\n <li *ngFor=\"let tab of tabs\" [class.active]=\"tab.isActive\" [mkColor]=\"tab.tabColor || tabsColor\"\r\n mkColorProperty=\"border-top-color\">\r\n <a *ngIf=\"!tab.isDisabled\" [mkTabToggle]=\"tab\" href=\"#\">\r\n {{tab.header}}\r\n <ng-template *ngIf=\"!tab.header\" [ngTemplateOutlet]=\"tab.tabHeaderComponent?.templateRef\"></ng-template>\r\n </a>\r\n <ng-template [ngIf]=\"tab.isDisabled\">\r\n {{tab.header}}\r\n <ng-template *ngIf=\"!tab.header\" [ngTemplateOutlet]=\"tab.tabHeaderComponent.templateRef\"></ng-template>\r\n </ng-template>\r\n </li>\r\n <li *ngIf=\"tabsHeaderComponent || header\" [ngClass]=\"headerStyleClass\">\r\n {{header}}\r\n <ng-template *ngIf=\"!header\" [ngTemplateOutlet]=\"tabsHeaderComponent.templateRef\"></ng-template>\r\n </li>\r\n </ul>\r\n <div [ngClass]=\"contentStyleClass\">\r\n <div *ngFor=\"let tab of tabs\" class=\"tab-pane\" [class.active]=\"tab.isActive\">\r\n <ng-template [ngTemplateOutlet]=\"tab.contentTemplateRef\"></ng-template>\r\n </div>\r\n </div>\r\n</div>",
changeDetection: ChangeDetectionStrategy.OnPush,
styles: [".nav-tabs-custom>.nav-tabs>li{border-top-width:0}.nav-tabs-custom>.nav-tabs>li.active{border-top-width:3px}"]
}] }
];
/** @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, { static: true },] }],
tabs: [{ type: ContentChildren, args: [TabComponent,] }],
tabToggleDirectives: [{ type: ViewChildren, args: [TabToggleDirective,] }]
};
if (false) {
/**
* @type {?}
* @private
*/
TabsComponent.prototype.activatedTabIndex;
/**
* @type {?}
* @private
*/
TabsComponent.prototype.listeners;
/**
* @type {?}
* @private
*/
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 {?}
* @private
*/
TabsComponent.prototype.changeDetectorRef;
/**
* @type {?}
* @private
*/
TabsComponent.prototype.ngZone;
/**
* @type {?}
* @private
*/
TabsComponent.prototype.renderer2;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hZC1jdXN0b20tbGliLyIsInNvdXJjZXMiOlsibGliL3RhYnMvdGFicy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDOEIsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUN0RixZQUFZLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUMxRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBZ0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQ25GLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBWXRELE1BQU0sT0FBTyxrQkFBa0I7OztZQUw5QixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGVBQWU7Z0JBQ3pCLFFBQVEsRUFBRSxtRUFBbUU7Z0JBQzdFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2xEOzs7MEJBRUksU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Ozs7SUFBeEMseUNBQStFOzs7OztBQVluRixNQUFNLE9BQU8sbUJBQW1COzs7WUFML0IsU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxnQkFBZ0I7Z0JBQzFCLFFBQVEsRUFBRSxtRUFBbUU7Z0JBQzdFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2FBQ2xEOzs7MEJBRUksU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUM7Ozs7SUFBeEMsMENBQStFOzs7OztBQVduRixNQUFNLE9BQU8sWUFBWTtJQUx6QjtRQU9XLGFBQVEsR0FBRyxLQUFLLENBQUM7SUF1QjVCLENBQUM7Ozs7O0lBUEcsUUFB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d0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LFxyXG4gICAgQ29udGVudENoaWxkLCBDb250ZW50Q2hpbGRyZW4sIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCxcclxuICAgIE91dHB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZSwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyByZW1vdmVMaXN0ZW5lcnMsIHJlbW92ZVN1YnNjcmlwdGlvbnMgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVGFiVG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi90YWJzLmRpcmVjdGl2ZSc7XHJcblxyXG4vLyBAVE9ETyBWZXJ0aWNhbCB0YWJzXHJcblxyXG4vKlxyXG4gKlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ21rLXRhYi1oZWFkZXInLFxyXG4gICAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPicsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFiSGVhZGVyQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJywge3N0YXRpYzogdHJ1ZX0pIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcclxufVxyXG5cclxuXHJcbi8qXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbWstdGFiLWNvbnRlbnQnLFxyXG4gICAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPicsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFiQ29udGVudENvbXBvbmVudCB7XHJcbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicsIHtzdGF0aWM6IHRydWV9KSBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XHJcbn1cclxuXHJcbi8qXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbWstdGFiJyxcclxuICAgIHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVJlZj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9uZy10ZW1wbGF0ZT4nLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBpc0FjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgY29udGVudFRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIHRhYkNvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGVSZWYnLCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoVGFiSGVhZGVyQ29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRhYkhlYWRlckNvbXBvbmVudDogVGFiSGVhZGVyQ29tcG9uZW50O1xyXG4gICAgQENvbnRlbnRDaGlsZChUYWJDb250ZW50Q29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRhYkNvbnRlbnRDb21wb25lbnQ6IFRhYkNvbnRlbnRDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWV0aG9kIG5nT25Jbml0XHJcbiAgICAgKi9cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRhYkNvbnRlbnRDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLnRhYkNvbnRlbnRDb21wb25lbnQudGVtcGxhdGVSZWY7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLnRlbXBsYXRlUmVmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLypcclxuICpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdtay10YWJzLWhlYWRlcicsXHJcbiAgICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+JyxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJzSGVhZGVyQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJywge3N0YXRpYzogdHJ1ZX0pIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcclxufVxyXG5cclxuLypcclxuICpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdtay10YWJzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LmNzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFRhYkluZGV4OiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGxpc3RlbmVycyA9IFtdO1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gW107XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIHNldCBhY3RpdmVUYWJJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRUYWJJbmRleCA9IGluZGV4O1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgQElucHV0KCkgcHVibGljIGhlYWRlcjogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGhlYWRlclN0eWxlQ2xhc3MgPSAnaGVhZGVyIHB1bGwtbGVmdCc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbmF2U3R5bGVDbGFzcyA9ICduYXYgbmF2LXRhYnMnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNvbnRlbnRTdHlsZUNsYXNzID0gJ3RhYi1jb250ZW50JztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzdHlsZUNsYXNzID0gJ25hdi10YWJzLWN1c3RvbSc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgdGFic0NvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbk9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZChUYWJzSGVhZGVyQ29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRhYnNIZWFkZXJDb21wb25lbnQ6IFRhYnNIZWFkZXJDb21wb25lbnQ7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJDb21wb25lbnQpIHB1YmxpYyB0YWJzOiBRdWVyeUxpc3Q8VGFiQ29tcG9uZW50PjtcclxuXHJcbiAgICBAVmlld0NoaWxkcmVuKFRhYlRvZ2dsZURpcmVjdGl2ZSkgcHVibGljIHRhYlRvZ2dsZURpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxUYWJUb2dnbGVEaXJlY3RpdmU+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1ldGhvZCBjb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSBuZ1pvbmUgICAgICAgICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0gcmVuZGVyZXIyICAgICAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjJcclxuICAgICkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWV0aG9kIG5nQWZ0ZXJWaWV3SW5pdFxyXG4gICAgICovXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAgICAgLy8gU2V0IHRhYiBpbmRleCBvbiBsb2FkLlxyXG4gICAgICAgIHRoaXMuc2V0VGFiSW5kZXgoKTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRhYiBpbmRleCBpZiB0YWJzIGlzIHVwZGF0ZWQuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50YWJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJJbmRleCgpO1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgLy8gT3BlbiB0YWIgb24gbG9hZC5cclxuICAgICAgICB0aGlzLm9wZW5UYWJJbmRleCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1ldGhvZCBuZ0FmdGVyVmlld0luaXRcclxuICAgICAqL1xyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIC8vIFNldCB0YWIgdG9nZ2xlcyBvbiBsb2FkLlxyXG4gICAgICAgIHRoaXMuc2V0VGFic1RvZ2dsZSgpO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGFiIHRvZ2dsZXMgaWYgdGFicyBpcyB1cGRhdGVkLlxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudGFiVG9nZ2xlRGlyZWN0aXZlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGFic1RvZ2dsZSgpO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZXRob2QgbmdPbkNoYW5nZXNcclxuICAgICAqIEBwYXJhbSBjaGFuZ2VzIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbcHJvcEtleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5hY3RpdmVUYWJJbmRleCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5UYWJJbmRleCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZXRob2QgbmdPbkRlc3Ryb3lcclxuICAgICAqL1xyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKHRoaXMubGlzdGVuZXJzKTtcclxuICAgICAgICByZW1vdmVTdWJzY3JpcHRpb25zKHRoaXMuc3Vic2NyaXB0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbdG9nZ2xlVGFiIGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCB0b2dnbGVUYWJcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5UYWJJbmRleCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy50YWJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWI6IFRhYkNvbXBvbmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZhdGVkVGFiSW5kZXggPT09IHRhYi5pbmRleCB8fCAodGhpcy5hY3RpdmF0ZWRUYWJJbmRleCA9PT0gdW5kZWZpbmVkICYmIHRhYi5pbmRleCA9PT0gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWIuaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25PcGVuLmVtaXQoeyBpbmRleDogdGFiLmluZGV4IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWIuaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWIuaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdCh7IGluZGV4OiB0YWIuaW5kZXggfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtvcGVuVGFiIGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCBvcGVuVGFiXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgICAgIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB0YWJUb09wZW4gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlblRhYihldmVudDogRXZlbnQsIHRhYlRvT3BlbjogVGFiQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0YWJUb09wZW4uaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25PcGVuLmVtaXQoeyBldmVudCwgaW5kZXg6IHRhYlRvT3Blbi5pbmRleCB9KTtcclxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaCgodGFiOiBUYWJDb21wb25lbnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRhYi5pc0FjdGl2ZSAmJiB0YWJUb09wZW4gIT09IHRhYikge1xyXG4gICAgICAgICAgICAgICAgdGFiLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdCh7IGV2ZW50LCBpbmRleDogdGFiLmluZGV4IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbc2V0VGFiSW5kZXggZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIHNldFRhYkluZGV4XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0VGFiSW5kZXgoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50YWJzLmZvckVhY2goKHRhYjogVGFiQ29tcG9uZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRhYi5pbmRleCA9IGluZGV4O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW3NldFRhYnNUb2dnbGUgZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIHNldFRhYnNUb2dnbGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRUYWJzVG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzID0gcmVtb3ZlTGlzdGVuZXJzKHRoaXMubGlzdGVuZXJzKTtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudGFiVG9nZ2xlRGlyZWN0aXZlcy5mb3JFYWNoKCh0YWJUb2dnbGU6IFRhYlRvZ2dsZURpcmVjdGl2ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyMi5saXN0ZW4odGFiVG9nZ2xlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuVGFiKGV2ZW50LCB0YWJUb2dnbGUudGFiQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19