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
484 lines • 34.1 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
/*
*
*/
var TabHeaderComponent = /** @class */ (function () {
function 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 },] }]
};
return TabHeaderComponent;
}());
export { TabHeaderComponent };
if (false) {
/** @type {?} */
TabHeaderComponent.prototype.templateRef;
}
/*
*
*/
var TabContentComponent = /** @class */ (function () {
function 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 },] }]
};
return TabContentComponent;
}());
export { TabContentComponent };
if (false) {
/** @type {?} */
TabContentComponent.prototype.templateRef;
}
/*
*
*/
var TabComponent = /** @class */ (function () {
function TabComponent() {
this.isActive = false;
}
/**
* @method ngOnInit
*/
/**
* \@method ngOnInit
* @return {?}
*/
TabComponent.prototype.ngOnInit = /**
* \@method ngOnInit
* @return {?}
*/
function () {
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 },] }]
};
return TabComponent;
}());
export { TabComponent };
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;
}
/*
*
*/
var TabsHeaderComponent = /** @class */ (function () {
function 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 },] }]
};
return TabsHeaderComponent;
}());
export { TabsHeaderComponent };
if (false) {
/** @type {?} */
TabsHeaderComponent.prototype.templateRef;
}
/*
*
*/
var TabsComponent = /** @class */ (function () {
/**
* @method constructor
* @param changeDetectorRef [description]
* @param ngZone [description]
* @param renderer2 [description]
*/
function TabsComponent(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();
}
Object.defineProperty(TabsComponent.prototype, "activeTabIndex", {
set: /**
* @param {?} index
* @return {?}
*/
function (index) {
this.activatedTabIndex = index;
this.changeDetectorRef.detectChanges();
},
enumerable: true,
configurable: true
});
/**
* @method ngAfterViewInit
*/
/**
* \@method ngAfterViewInit
* @return {?}
*/
TabsComponent.prototype.ngAfterContentInit = /**
* \@method ngAfterViewInit
* @return {?}
*/
function () {
var _this = this;
// Set tab index on load.
this.setTabIndex();
// Update tab index if tabs is updated.
this.subscriptions.push(this.tabs.changes.subscribe((/**
* @return {?}
*/
function () {
_this.setTabIndex();
})));
// Open tab on load.
this.openTabIndex();
};
/**
* @method ngAfterViewInit
*/
/**
* \@method ngAfterViewInit
* @return {?}
*/
TabsComponent.prototype.ngAfterViewInit = /**
* \@method ngAfterViewInit
* @return {?}
*/
function () {
var _this = this;
// Set tab toggles on load.
this.setTabsToggle();
// Update tab toggles if tabs is updated.
this.subscriptions.push(this.tabToggleDirectives.changes.subscribe((/**
* @return {?}
*/
function () {
_this.setTabsToggle();
})));
};
/**
* @method ngOnChanges
* @param changes [description]
*/
/**
* \@method ngOnChanges
* @param {?} changes [description]
* @return {?}
*/
TabsComponent.prototype.ngOnChanges = /**
* \@method ngOnChanges
* @param {?} changes [description]
* @return {?}
*/
function (changes) {
if (changes.activeTabIndex) {
this.openTabIndex();
}
};
/**
* @method ngOnDestroy
*/
/**
* \@method ngOnDestroy
* @return {?}
*/
TabsComponent.prototype.ngOnDestroy = /**
* \@method ngOnDestroy
* @return {?}
*/
function () {
removeListeners(this.listeners);
removeSubscriptions(this.subscriptions);
};
/**
* [toggleTab description]
* @method toggleTab
*/
/**
* [toggleTab description]
* \@method toggleTab
* @return {?}
*/
TabsComponent.prototype.openTabIndex = /**
* [toggleTab description]
* \@method toggleTab
* @return {?}
*/
function () {
var _this = this;
if (this.tabs) {
this.tabs.forEach((/**
* @param {?} tab
* @return {?}
*/
function (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]
*/
/**
* [openTab description]
* \@method openTab
* @param {?} event [description]
* @param {?} tabToOpen [description]
* @return {?}
*/
TabsComponent.prototype.openTab = /**
* [openTab description]
* \@method openTab
* @param {?} event [description]
* @param {?} tabToOpen [description]
* @return {?}
*/
function (event, tabToOpen) {
var _this = this;
event.preventDefault();
tabToOpen.isActive = true;
this.onOpen.emit({ event: event, index: tabToOpen.index });
this.tabs.forEach((/**
* @param {?} tab
* @return {?}
*/
function (tab) {
if (tab.isActive && tabToOpen !== tab) {
tab.isActive = false;
_this.onClose.emit({ event: event, index: tab.index });
}
}));
};
/**
* [setTabIndex description]
* @method setTabIndex
*/
/**
* [setTabIndex description]
* \@method setTabIndex
* @private
* @return {?}
*/
TabsComponent.prototype.setTabIndex = /**
* [setTabIndex description]
* \@method setTabIndex
* @private
* @return {?}
*/
function () {
this.tabs.forEach((/**
* @param {?} tab
* @param {?} index
* @return {?}
*/
function (tab, index) {
tab.index = index;
}));
this.changeDetectorRef.detectChanges();
};
/**
* [setTabsToggle description]
* @method setTabsToggle
*/
/**
* [setTabsToggle description]
* \@method setTabsToggle
* @private
* @return {?}
*/
TabsComponent.prototype.setTabsToggle = /**
* [setTabsToggle description]
* \@method setTabsToggle
* @private
* @return {?}
*/
function () {
var _this = this;
this.listeners = removeListeners(this.listeners);
this.ngZone.runOutsideAngular((/**
* @return {?}
*/
function () {
_this.tabToggleDirectives.forEach((/**
* @param {?} tabToggle
* @return {?}
*/
function (tabToggle) {
_this.listeners.push(_this.renderer2.listen(tabToggle.elementRef.nativeElement, 'click', (/**
* @param {?} event
* @return {?}
*/
function (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 = function () { return [
{ 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,] }]
};
return TabsComponent;
}());
export { TabsComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFicy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9hZC1jdXN0b20tbGliLyIsInNvdXJjZXMiOlsibGliL3RhYnMvdGFicy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDOEIsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUN0RixZQUFZLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUMxRCxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBZ0IsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQ25GLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7O0FBT3REO0lBQUE7SUFPQSxDQUFDOztnQkFQQSxTQUFTLFNBQUM7b0JBQ1AsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLFFBQVEsRUFBRSxtRUFBbUU7b0JBQzdFLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNsRDs7OzhCQUVJLFNBQVMsU0FBQyxhQUFhLEVBQUUsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFDOztJQUM1Qyx5QkFBQztDQUFBLEFBUEQsSUFPQztTQUZZLGtCQUFrQjs7O0lBQzNCLHlDQUErRTs7Ozs7QUFPbkY7SUFBQTtJQU9BLENBQUM7O2dCQVBBLFNBQVMsU0FBQztvQkFDUCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixRQUFRLEVBQUUsbUVBQW1FO29CQUM3RSxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7Ozs4QkFFSSxTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUMsTUFBTSxFQUFFLElBQUksRUFBQzs7SUFDNUMsMEJBQUM7Q0FBQSxBQVBELElBT0M7U0FGWSxtQkFBbUI7OztJQUM1QiwwQ0FBK0U7Ozs7O0FB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QUFDLGtCQUFrQjs7SUE2SHBDLG9CQUFDO0NBQUEsQUExSkQsSUEwSkM7U0FwSlksYUFBYTs7Ozs7O0lBQ3RCLDBDQUFrQzs7Ozs7SUFDbEMsa0NBQXVCOzs7OztJQUN2QixzQ0FBMkI7O0lBTTNCLCtCQUErQjs7SUFDL0IseUNBQXNEOztJQUN0RCxzQ0FBK0M7O0lBQy9DLDBDQUFrRDs7SUFDbEQsbUNBQStDOztJQUMvQyxrQ0FBa0M7O0lBRWxDLGdDQUE4Qzs7SUFDOUMsK0JBQTZDOztJQUU3Qyw0Q0FBbUc7O0lBRW5HLDZCQUFvRTs7SUFFcEUsNENBQTRGOzs7OztJQVN4RiwwQ0FBNEM7Ozs7O0lBQzVDLCtCQUFzQjs7Ozs7SUFDdEIsa0NBQTRCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LFxyXG4gICAgQ29udGVudENoaWxkLCBDb250ZW50Q2hpbGRyZW4sIEV2ZW50RW1pdHRlciwgSW5wdXQsIE5nWm9uZSwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCxcclxuICAgIE91dHB1dCwgUXVlcnlMaXN0LCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZSwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyByZW1vdmVMaXN0ZW5lcnMsIHJlbW92ZVN1YnNjcmlwdGlvbnMgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgVGFiVG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi90YWJzLmRpcmVjdGl2ZSc7XHJcblxyXG4vLyBAVE9ETyBWZXJ0aWNhbCB0YWJzXHJcblxyXG4vKlxyXG4gKlxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ21rLXRhYi1oZWFkZXInLFxyXG4gICAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPicsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFiSGVhZGVyQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJywge3N0YXRpYzogdHJ1ZX0pIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcclxufVxyXG5cclxuXHJcbi8qXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbWstdGFiLWNvbnRlbnQnLFxyXG4gICAgdGVtcGxhdGU6ICc8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPjxuZy1jb250ZW50PjwvbmctY29udGVudD48L25nLXRlbXBsYXRlPicsXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVGFiQ29udGVudENvbXBvbmVudCB7XHJcbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicsIHtzdGF0aWM6IHRydWV9KSBwdWJsaWMgdGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XHJcbn1cclxuXHJcbi8qXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbWstdGFiJyxcclxuICAgIHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVJlZj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9uZy10ZW1wbGF0ZT4nLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlcjtcclxuICAgIHB1YmxpYyBpc0FjdGl2ZSA9IGZhbHNlO1xyXG5cclxuICAgIHByaXZhdGUgY29udGVudFRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc0Rpc2FibGVkOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIHRhYkNvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgQFZpZXdDaGlsZCgndGVtcGxhdGVSZWYnLCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoVGFiSGVhZGVyQ29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRhYkhlYWRlckNvbXBvbmVudDogVGFiSGVhZGVyQ29tcG9uZW50O1xyXG4gICAgQENvbnRlbnRDaGlsZChUYWJDb250ZW50Q29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRhYkNvbnRlbnRDb21wb25lbnQ6IFRhYkNvbnRlbnRDb21wb25lbnQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWV0aG9kIG5nT25Jbml0XHJcbiAgICAgKi9cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRhYkNvbnRlbnRDb21wb25lbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLnRhYkNvbnRlbnRDb21wb25lbnQudGVtcGxhdGVSZWY7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZW50VGVtcGxhdGVSZWYgPSB0aGlzLnRlbXBsYXRlUmVmO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuLypcclxuICpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdtay10YWJzLWhlYWRlcicsXHJcbiAgICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+JyxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUYWJzSGVhZGVyQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJywge3N0YXRpYzogdHJ1ZX0pIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcclxufVxyXG5cclxuLypcclxuICpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdtay10YWJzJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJzLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL3RhYnMuY29tcG9uZW50LmNzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFRhYnNDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XHJcbiAgICBwcml2YXRlIGFjdGl2YXRlZFRhYkluZGV4OiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGxpc3RlbmVycyA9IFtdO1xyXG4gICAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zID0gW107XHJcblxyXG4gICAgQElucHV0KCkgcHVibGljIHNldCBhY3RpdmVUYWJJbmRleChpbmRleDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy5hY3RpdmF0ZWRUYWJJbmRleCA9IGluZGV4O1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgQElucHV0KCkgcHVibGljIGhlYWRlcjogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGhlYWRlclN0eWxlQ2xhc3MgPSAnaGVhZGVyIHB1bGwtbGVmdCc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgbmF2U3R5bGVDbGFzcyA9ICduYXYgbmF2LXRhYnMnO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNvbnRlbnRTdHlsZUNsYXNzID0gJ3RhYi1jb250ZW50JztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBzdHlsZUNsYXNzID0gJ25hdi10YWJzLWN1c3RvbSc7XHJcbiAgICBASW5wdXQoKSBwdWJsaWMgdGFic0NvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbkNsb3NlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgQE91dHB1dCgpIHB1YmxpYyBvbk9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZChUYWJzSGVhZGVyQ29tcG9uZW50LCB7c3RhdGljOiB0cnVlfSkgcHVibGljIHRhYnNIZWFkZXJDb21wb25lbnQ6IFRhYnNIZWFkZXJDb21wb25lbnQ7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZHJlbihUYWJDb21wb25lbnQpIHB1YmxpYyB0YWJzOiBRdWVyeUxpc3Q8VGFiQ29tcG9uZW50PjtcclxuXHJcbiAgICBAVmlld0NoaWxkcmVuKFRhYlRvZ2dsZURpcmVjdGl2ZSkgcHVibGljIHRhYlRvZ2dsZURpcmVjdGl2ZXM6IFF1ZXJ5TGlzdDxUYWJUb2dnbGVEaXJlY3RpdmU+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1ldGhvZCBjb25zdHJ1Y3RvclxyXG4gICAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSBuZ1pvbmUgICAgICAgICAgICBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0gcmVuZGVyZXIyICAgICAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXIyOiBSZW5kZXJlcjJcclxuICAgICkgeyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWV0aG9kIG5nQWZ0ZXJWaWV3SW5pdFxyXG4gICAgICovXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAgICAgLy8gU2V0IHRhYiBpbmRleCBvbiBsb2FkLlxyXG4gICAgICAgIHRoaXMuc2V0VGFiSW5kZXgoKTtcclxuXHJcbiAgICAgICAgLy8gVXBkYXRlIHRhYiBpbmRleCBpZiB0YWJzIGlzIHVwZGF0ZWQuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy50YWJzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRUYWJJbmRleCgpO1xyXG4gICAgICAgIH0pKTtcclxuXHJcbiAgICAgICAgLy8gT3BlbiB0YWIgb24gbG9hZC5cclxuICAgICAgICB0aGlzLm9wZW5UYWJJbmRleCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1ldGhvZCBuZ0FmdGVyVmlld0luaXRcclxuICAgICAqL1xyXG4gICAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIC8vIFNldCB0YWIgdG9nZ2xlcyBvbiBsb2FkLlxyXG4gICAgICAgIHRoaXMuc2V0VGFic1RvZ2dsZSgpO1xyXG5cclxuICAgICAgICAvLyBVcGRhdGUgdGFiIHRvZ2dsZXMgaWYgdGFicyBpcyB1cGRhdGVkLlxyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudGFiVG9nZ2xlRGlyZWN0aXZlcy5jaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0VGFic1RvZ2dsZSgpO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZXRob2QgbmdPbkNoYW5nZXNcclxuICAgICAqIEBwYXJhbSBjaGFuZ2VzIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogeyBbcHJvcEtleTogc3RyaW5nXTogU2ltcGxlQ2hhbmdlIH0pIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5hY3RpdmVUYWJJbmRleCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW5UYWJJbmRleCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZXRob2QgbmdPbkRlc3Ryb3lcclxuICAgICAqL1xyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKHRoaXMubGlzdGVuZXJzKTtcclxuICAgICAgICByZW1vdmVTdWJzY3JpcHRpb25zKHRoaXMuc3Vic2NyaXB0aW9ucyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbdG9nZ2xlVGFiIGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCB0b2dnbGVUYWJcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9wZW5UYWJJbmRleCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy50YWJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGFicy5mb3JFYWNoKCh0YWI6IFRhYkNvbXBvbmVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYWN0aXZhdGVkVGFiSW5kZXggPT09IHRhYi5pbmRleCB8fCAodGhpcy5hY3RpdmF0ZWRUYWJJbmRleCA9PT0gdW5kZWZpbmVkICYmIHRhYi5pbmRleCA9PT0gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWIuaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub25PcGVuLmVtaXQoeyBpbmRleDogdGFiLmluZGV4IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0YWIuaXNBY3RpdmUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWIuaXNBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdCh7IGluZGV4OiB0YWIuaW5kZXggfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtvcGVuVGFiIGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCBvcGVuVGFiXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgICAgIFtkZXNjcmlwdGlvbl1cclxuICAgICAqIEBwYXJhbSB0YWJUb09wZW4gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgb3BlblRhYihldmVudDogRXZlbnQsIHRhYlRvT3BlbjogVGFiQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICB0YWJUb09wZW4uaXNBY3RpdmUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25PcGVuLmVtaXQoeyBldmVudCwgaW5kZXg6IHRhYlRvT3Blbi5pbmRleCB9KTtcclxuICAgICAgICB0aGlzLnRhYnMuZm9yRWFjaCgodGFiOiBUYWJDb21wb25lbnQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRhYi5pc0FjdGl2ZSAmJiB0YWJUb09wZW4gIT09IHRhYikge1xyXG4gICAgICAgICAgICAgICAgdGFiLmlzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ2xvc2UuZW1pdCh7IGV2ZW50LCBpbmRleDogdGFiLmluZGV4IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbc2V0VGFiSW5kZXggZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIHNldFRhYkluZGV4XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0VGFiSW5kZXgoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50YWJzLmZvckVhY2goKHRhYjogVGFiQ29tcG9uZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRhYi5pbmRleCA9IGluZGV4O1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW3NldFRhYnNUb2dnbGUgZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIHNldFRhYnNUb2dnbGVcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRUYWJzVG9nZ2xlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGlzdGVuZXJzID0gcmVtb3ZlTGlzdGVuZXJzKHRoaXMubGlzdGVuZXJzKTtcclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudGFiVG9nZ2xlRGlyZWN0aXZlcy5mb3JFYWNoKCh0YWJUb2dnbGU6IFRhYlRvZ2dsZURpcmVjdGl2ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyMi5saXN0ZW4odGFiVG9nZ2xlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcGVuVGFiKGV2ZW50LCB0YWJUb2dnbGUudGFiQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn1cclxuIl19