angular-admin-lte-teliqo
Version:
npm# angular-admin-lte
260 lines (259 loc) • 21.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, Input, NgZone, Output, Renderer2, ViewChild } from '@angular/core';
import { BoxContentDirective, BoxFooterDirective, BoxHeaderDirective, BoxToolsDirective } from './box.directive';
import { removeListeners } from '../helpers';
export class BoxComponent {
/**
* \@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.remove = false;
this.listeners = [];
this.boxColor = 'default';
this.buttonsStyleClass = 'btn btn-box-tool';
this.contentStyleClass = 'box-content-wrapper';
this.bodyStyleClass = 'box-body';
this.footerStyleClass = 'box-footer';
this.headerBorder = true;
this.headerStyleClass = 'box-header';
this.isCollapsable = true;
this.isCollapsed = false;
this.isRemovable = true;
this.isSolid = false;
this.loadingStyleClass = 'fa fa-refresh fa-spin';
this.styleClass = 'box';
this.onCollapseDone = new EventEmitter();
this.onCollapseStart = new EventEmitter();
}
/**
* \@method ngAfterViewInit
* @return {?}
*/
ngAfterViewInit() {
this.ngZone.runOutsideAngular(() => {
if (this.toggleButtonElement) {
this.listeners.push(this.renderer2.listen(this.toggleButtonElement.nativeElement, 'click', () => {
this.isCollapsed = !this.isCollapsed;
this.changeDetectorRef.detectChanges();
}));
}
if (this.removeButtonElement) {
this.listeners.push(this.renderer2.listen(this.removeButtonElement.nativeElement, 'click', () => {
this.remove = true;
this.changeDetectorRef.detectChanges();
}));
}
});
}
/**
* \@method ngOnDestroy
* @return {?}
*/
ngOnDestroy() {
removeListeners(this.listeners);
}
/**
* [removedDone description]
* \@method removedDone
* @param {?} event [description]
* @return {?}
*/
removedDone(event) {
if (event.toState === '1') {
this.removed = true;
}
}
/**
* [collapseStart description]
* \@method collapseStart
* @param {?} event [description]
* @return {?}
*/
collapseStart(event) {
if (event.fromState !== 'void') {
this.isCollaping = true;
this.onCollapseStart.emit(event);
}
}
/**
* [collapseDone description]
* \@method collapseDone
* @param {?} event [description]
* @return {?}
*/
collapseDone(event) {
if (event.fromState !== 'void') {
this.isCollaping = false;
this.onCollapseDone.emit(event);
}
}
}
BoxComponent.decorators = [
{ type: Component, args: [{
selector: 'mk-box',
template: `<div *ngIf="!removed" [mkColor]="boxColor" mkColorProperty="border-color" mkColorPrefix="box" [ngClass]="styleClass" [class.collapsed-box]="isCollapsed && !isCollaping" [class.box-solid]="isSolid" [collapseAnimation]="remove" (collapseAnimation.done)="removedDone($event)">
<div *ngIf="header || boxHeaderDirective" [ngClass]="headerStyleClass" [mkColor]="boxColor" [mkColorCondition]="isSolid" mkColorProperty="background-color" [class.with-border]="headerBorder">
<h3 class="box-title" [mkFontColor]="headerColor">
{{header}}
<ng-content select="mk-box-header"></ng-content>
</h3>
<div class="box-tools pull-right">
<ng-content select="mk-box-tools"></ng-content>
<button *ngIf="isCollapsable" type="button" [ngClass]="buttonsStyleClass" #toggleButtonElement>
<i class="fa" [ngClass]="{'fa-plus': isCollapsed, 'fa-minus': !isCollapsed}"></i>
</button>
<button *ngIf="isRemovable" type="button" [ngClass]="buttonsStyleClass" #removeButtonElement>
<i class="fa fa-times"></i>
</button>
</div>
</div>
<div [ngClass]="contentStyleClass" [mkFontColor]="contentColor" [collapseAnimation]="isCollapsed" (collapseAnimation.start)="collapseStart($event)" (collapseAnimation.done)="collapseDone($event)">
<div [ngClass]="bodyStyleClass">
<ng-container *ngIf="boxHeaderDirective || boxContentDirective || boxFooterDirective || boxToolsDirective; else noDirective">
<ng-content select="mk-box-content"></ng-content>
</ng-container>
<ng-template #noDirective>
<ng-content></ng-content>
</ng-template>
</div>
<div *ngIf="footer || boxFooterDirective" [ngClass]="footerStyleClass" [mkFontColor]="footerColor">
{{footer}}
<ng-content select="mk-box-footer"></ng-content>
</div>
</div>
<div *ngIf="isLoading" class="overlay">
<i [ngClass]="loadingStyleClass" [mkFontColor]="loadingColor"></i>
</div>
</div>
`,
styles: [`.box.collapsed-box .box-body,.box.collapsed-box .box-footer{display:inherit}.box-solid{border:1px solid}.box-body{background-color:#fff}.box.box-solid.bg-color>.box-header{color:#fff}`],
changeDetection: ChangeDetectionStrategy.OnPush
},] },
];
/** @nocollapse */
BoxComponent.ctorParameters = () => [
{ type: ChangeDetectorRef, },
{ type: NgZone, },
{ type: Renderer2, },
];
BoxComponent.propDecorators = {
"boxColor": [{ type: Input },],
"buttonsStyleClass": [{ type: Input },],
"contentStyleClass": [{ type: Input },],
"bodyStyleClass": [{ type: Input },],
"contentColor": [{ type: Input },],
"footer": [{ type: Input },],
"footerColor": [{ type: Input },],
"footerStyleClass": [{ type: Input },],
"header": [{ type: Input },],
"headerBorder": [{ type: Input },],
"headerColor": [{ type: Input },],
"headerStyleClass": [{ type: Input },],
"isCollapsable": [{ type: Input },],
"isCollapsed": [{ type: Input },],
"isLoading": [{ type: Input },],
"isRemovable": [{ type: Input },],
"isSolid": [{ type: Input },],
"loadingColor": [{ type: Input },],
"loadingStyleClass": [{ type: Input },],
"styleClass": [{ type: Input },],
"onCollapseDone": [{ type: Output },],
"onCollapseStart": [{ type: Output },],
"boxHeaderDirective": [{ type: ContentChild, args: [BoxHeaderDirective,] },],
"boxFooterDirective": [{ type: ContentChild, args: [BoxFooterDirective,] },],
"boxContentDirective": [{ type: ContentChild, args: [BoxContentDirective,] },],
"boxToolsDirective": [{ type: ContentChild, args: [BoxToolsDirective,] },],
"toggleButtonElement": [{ type: ViewChild, args: ['toggleButtonElement',] },],
"removeButtonElement": [{ type: ViewChild, args: ['removeButtonElement',] },],
};
function BoxComponent_tsickle_Closure_declarations() {
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
BoxComponent.decorators;
/**
* @nocollapse
* @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>}
*/
BoxComponent.ctorParameters;
/** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */
BoxComponent.propDecorators;
/** @type {?} */
BoxComponent.prototype.isCollaping;
/** @type {?} */
BoxComponent.prototype.remove;
/** @type {?} */
BoxComponent.prototype.removed;
/** @type {?} */
BoxComponent.prototype.listeners;
/** @type {?} */
BoxComponent.prototype.boxColor;
/** @type {?} */
BoxComponent.prototype.buttonsStyleClass;
/** @type {?} */
BoxComponent.prototype.contentStyleClass;
/** @type {?} */
BoxComponent.prototype.bodyStyleClass;
/** @type {?} */
BoxComponent.prototype.contentColor;
/** @type {?} */
BoxComponent.prototype.footer;
/** @type {?} */
BoxComponent.prototype.footerColor;
/** @type {?} */
BoxComponent.prototype.footerStyleClass;
/** @type {?} */
BoxComponent.prototype.header;
/** @type {?} */
BoxComponent.prototype.headerBorder;
/** @type {?} */
BoxComponent.prototype.headerColor;
/** @type {?} */
BoxComponent.prototype.headerStyleClass;
/** @type {?} */
BoxComponent.prototype.isCollapsable;
/** @type {?} */
BoxComponent.prototype.isCollapsed;
/** @type {?} */
BoxComponent.prototype.isLoading;
/** @type {?} */
BoxComponent.prototype.isRemovable;
/** @type {?} */
BoxComponent.prototype.isSolid;
/** @type {?} */
BoxComponent.prototype.loadingColor;
/** @type {?} */
BoxComponent.prototype.loadingStyleClass;
/** @type {?} */
BoxComponent.prototype.styleClass;
/** @type {?} */
BoxComponent.prototype.onCollapseDone;
/** @type {?} */
BoxComponent.prototype.onCollapseStart;
/** @type {?} */
BoxComponent.prototype.boxHeaderDirective;
/** @type {?} */
BoxComponent.prototype.boxFooterDirective;
/** @type {?} */
BoxComponent.prototype.boxContentDirective;
/** @type {?} */
BoxComponent.prototype.boxToolsDirective;
/** @type {?} */
BoxComponent.prototype.toggleButtonElement;
/** @type {?} */
BoxComponent.prototype.removeButtonElement;
/** @type {?} */
BoxComponent.prototype.changeDetectorRef;
/** @type {?} */
BoxComponent.prototype.ngZone;
/** @type {?} */
BoxComponent.prototype.renderer2;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm94LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FuZ3VsYXItYWRtaW4tbHRlLXRlbGlxby8iLCJzb3VyY2VzIjpbImxpYi9ib3gvYm94LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixNQUFNLEVBQ04sU0FBUyxFQUNULFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUMsbUJBQW1CLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUUvRyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sWUFBWSxDQUFDO0FBNkMzQyxNQUFNOzs7Ozs7O0lBNENKLFlBQ1UsbUJBQ0EsUUFDQTtRQUZBLHNCQUFpQixHQUFqQixpQkFBaUI7UUFDakIsV0FBTSxHQUFOLE1BQU07UUFDTixjQUFTLEdBQVQsU0FBUztzQkE3Q0gsS0FBSzt5QkFFRCxFQUFFO3dCQUVLLFNBQVM7aUNBQ0Esa0JBQWtCO2lDQUNsQixxQkFBcUI7OEJBQ3hCLFVBQVU7Z0NBSVIsWUFBWTs0QkFFaEIsSUFBSTtnQ0FFQSxZQUFZOzZCQUNmLElBQUk7MkJBQ04sS0FBSzsyQkFFTCxJQUFJO3VCQUNSLEtBQUs7aUNBRUssdUJBQXVCOzBCQUM5QixLQUFLOzhCQUVBLElBQUksWUFBWSxFQUFFOytCQUNqQixJQUFJLFlBQVksRUFBRTtLQW9CakQ7Ozs7O0lBS0osZUFBZTtRQUNiLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFO1lBQ2pDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDOUYsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7b0JBQ3JDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDeEMsQ0FBQyxDQUFDLENBQUM7YUFDTDtZQUNELEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDOUYsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUM7b0JBQ25CLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsQ0FBQztpQkFDeEMsQ0FBQyxDQUFDLENBQUM7YUFDTDtTQUNGLENBQUMsQ0FBQztLQUNKOzs7OztJQUtELFdBQVc7UUFDVCxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ2pDOzs7Ozs7O0lBT00sV0FBVyxDQUFDLEtBQUs7UUFDdEIsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1NBQ3JCOzs7Ozs7OztJQVFJLGFBQWEsQ0FBQyxLQUFxQjtRQUN4QyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7WUFDL0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7WUFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDbEM7Ozs7Ozs7O0lBUUksWUFBWSxDQUFDLEtBQXFCO1FBQ3ZDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQztZQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNqQzs7OztZQXJKSixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQWtDWDtnQkFDQyxNQUFNLEVBQUUsQ0FBQyx5TEFBeUwsQ0FBQztnQkFDbk0sZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07YUFDaEQ7Ozs7WUE1REMsaUJBQWlCO1lBS2pCLE1BQU07WUFHTixTQUFTOzs7eUJBMkRSLEtBQUs7a0NBQ0wsS0FBSztrQ0FDTCxLQUFLOytCQUNMLEtBQUs7NkJBQ0wsS0FBSzt1QkFDTCxLQUFLOzRCQUNMLEtBQUs7aUNBQ0wsS0FBSzt1QkFDTCxLQUFLOzZCQUNMLEtBQUs7NEJBQ0wsS0FBSztpQ0FDTCxLQUFLOzhCQUNMLEtBQUs7NEJBQ0wsS0FBSzswQkFDTCxLQUFLOzRCQUNMLEtBQUs7d0JBQ0wsS0FBSzs2QkFDTCxLQUFLO2tDQUNMLEtBQUs7MkJBQ0wsS0FBSzsrQkFFTCxNQUFNO2dDQUNOLE1BQU07bUNBRU4sWUFBWSxTQUFDLGtCQUFrQjttQ0FDL0IsWUFBWSxTQUFDLGtCQUFrQjtvQ0FDL0IsWUFBWSxTQUFDLG1CQUFtQjtrQ0FDaEMsWUFBWSxTQUFDLGlCQUFpQjtvQ0FFOUIsU0FBUyxTQUFDLHFCQUFxQjtvQ0FDL0IsU0FBUyxTQUFDLHFCQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE5nWm9uZSxcbiAgT25EZXN0cm95LFxuICBPdXRwdXQsXG4gIFJlbmRlcmVyMixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0FuaW1hdGlvbkV2ZW50fSBmcm9tICcuLi9hbmltYXRpb25zL2FuaW1hdGlvbnMuaW50ZXJmYWNlJztcblxuaW1wb3J0IHtCb3hDb250ZW50RGlyZWN0aXZlLCBCb3hGb290ZXJEaXJlY3RpdmUsIEJveEhlYWRlckRpcmVjdGl2ZSwgQm94VG9vbHNEaXJlY3RpdmV9IGZyb20gJy4vYm94LmRpcmVjdGl2ZSc7XG5cbmltcG9ydCB7cmVtb3ZlTGlzdGVuZXJzfSBmcm9tICcuLi9oZWxwZXJzJztcblxuLypcbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21rLWJveCcsXG4gIHRlbXBsYXRlOiBgPGRpdiAqbmdJZj1cIiFyZW1vdmVkXCIgW21rQ29sb3JdPVwiYm94Q29sb3JcIiBta0NvbG9yUHJvcGVydHk9XCJib3JkZXItY29sb3JcIiBta0NvbG9yUHJlZml4PVwiYm94XCIgW25nQ2xhc3NdPVwic3R5bGVDbGFzc1wiIFtjbGFzcy5jb2xsYXBzZWQtYm94XT1cImlzQ29sbGFwc2VkICYmICFpc0NvbGxhcGluZ1wiIFtjbGFzcy5ib3gtc29saWRdPVwiaXNTb2xpZFwiIFtjb2xsYXBzZUFuaW1hdGlvbl09XCJyZW1vdmVcIiAoY29sbGFwc2VBbmltYXRpb24uZG9uZSk9XCJyZW1vdmVkRG9uZSgkZXZlbnQpXCI+XG4gIDxkaXYgKm5nSWY9XCJoZWFkZXIgfHwgYm94SGVhZGVyRGlyZWN0aXZlXCIgW25nQ2xhc3NdPVwiaGVhZGVyU3R5bGVDbGFzc1wiIFtta0NvbG9yXT1cImJveENvbG9yXCIgW21rQ29sb3JDb25kaXRpb25dPVwiaXNTb2xpZFwiIG1rQ29sb3JQcm9wZXJ0eT1cImJhY2tncm91bmQtY29sb3JcIiBbY2xhc3Mud2l0aC1ib3JkZXJdPVwiaGVhZGVyQm9yZGVyXCI+XG4gICAgPGgzIGNsYXNzPVwiYm94LXRpdGxlXCIgW21rRm9udENvbG9yXT1cImhlYWRlckNvbG9yXCI+XG4gICAgICB7e2hlYWRlcn19XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtay1ib3gtaGVhZGVyXCI+PC9uZy1jb250ZW50PlxuICAgIDwvaDM+XG4gICAgPGRpdiBjbGFzcz1cImJveC10b29scyBwdWxsLXJpZ2h0XCI+XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtay1ib3gtdG9vbHNcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8YnV0dG9uICpuZ0lmPVwiaXNDb2xsYXBzYWJsZVwiIHR5cGU9XCJidXR0b25cIiBbbmdDbGFzc109XCJidXR0b25zU3R5bGVDbGFzc1wiICN0b2dnbGVCdXR0b25FbGVtZW50PlxuICAgICAgICA8aSBjbGFzcz1cImZhXCIgW25nQ2xhc3NdPVwieydmYS1wbHVzJzogaXNDb2xsYXBzZWQsICdmYS1taW51cyc6ICFpc0NvbGxhcHNlZH1cIj48L2k+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gKm5nSWY9XCJpc1JlbW92YWJsZVwiIHR5cGU9XCJidXR0b25cIiBbbmdDbGFzc109XCJidXR0b25zU3R5bGVDbGFzc1wiICNyZW1vdmVCdXR0b25FbGVtZW50PlxuICAgICAgICA8aSBjbGFzcz1cImZhIGZhLXRpbWVzXCI+PC9pPlxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IFtuZ0NsYXNzXT1cImNvbnRlbnRTdHlsZUNsYXNzXCIgW21rRm9udENvbG9yXT1cImNvbnRlbnRDb2xvclwiIFtjb2xsYXBzZUFuaW1hdGlvbl09XCJpc0NvbGxhcHNlZFwiIChjb2xsYXBzZUFuaW1hdGlvbi5zdGFydCk9XCJjb2xsYXBzZVN0YXJ0KCRldmVudClcIiAoY29sbGFwc2VBbmltYXRpb24uZG9uZSk9XCJjb2xsYXBzZURvbmUoJGV2ZW50KVwiPlxuICAgIDxkaXYgW25nQ2xhc3NdPVwiYm9keVN0eWxlQ2xhc3NcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJib3hIZWFkZXJEaXJlY3RpdmUgfHwgYm94Q29udGVudERpcmVjdGl2ZSB8fCBib3hGb290ZXJEaXJlY3RpdmUgfHwgYm94VG9vbHNEaXJlY3RpdmU7IGVsc2Ugbm9EaXJlY3RpdmVcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwibWstYm94LWNvbnRlbnRcIj48L25nLWNvbnRlbnQ+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDxuZy10ZW1wbGF0ZSAjbm9EaXJlY3RpdmU+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cImZvb3RlciB8fCBib3hGb290ZXJEaXJlY3RpdmVcIiBbbmdDbGFzc109XCJmb290ZXJTdHlsZUNsYXNzXCIgW21rRm9udENvbG9yXT1cImZvb3RlckNvbG9yXCI+XG4gICAgICB7e2Zvb3Rlcn19XG4gICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJtay1ib3gtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ1wiIGNsYXNzPVwib3ZlcmxheVwiPlxuICAgIDxpIFtuZ0NsYXNzXT1cImxvYWRpbmdTdHlsZUNsYXNzXCIgW21rRm9udENvbG9yXT1cImxvYWRpbmdDb2xvclwiPjwvaT5cbiAgPC9kaXY+XG48L2Rpdj5cbmAsXG4gIHN0eWxlczogW2AuYm94LmNvbGxhcHNlZC1ib3ggLmJveC1ib2R5LC5ib3guY29sbGFwc2VkLWJveCAuYm94LWZvb3RlcntkaXNwbGF5OmluaGVyaXR9LmJveC1zb2xpZHtib3JkZXI6MXB4IHNvbGlkfS5ib3gtYm9keXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LmJveC5ib3gtc29saWQuYmctY29sb3I+LmJveC1oZWFkZXJ7Y29sb3I6I2ZmZn1gXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQm94Q29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIGlzQ29sbGFwaW5nOiBib29sZWFuO1xuICBwdWJsaWMgcmVtb3ZlID0gZmFsc2U7XG4gIHB1YmxpYyByZW1vdmVkOiBib29sZWFuO1xuICBwcml2YXRlIGxpc3RlbmVycyA9IFtdO1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBib3hDb2xvciA9ICdkZWZhdWx0JztcbiAgQElucHV0KCkgcHVibGljIGJ1dHRvbnNTdHlsZUNsYXNzID0gJ2J0biBidG4tYm94LXRvb2wnO1xuICBASW5wdXQoKSBwdWJsaWMgY29udGVudFN0eWxlQ2xhc3MgPSAnYm94LWNvbnRlbnQtd3JhcHBlcic7XG4gIEBJbnB1dCgpIHB1YmxpYyBib2R5U3R5bGVDbGFzcyA9ICdib3gtYm9keSc7XG4gIEBJbnB1dCgpIHB1YmxpYyBjb250ZW50Q29sb3I6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGZvb3Rlcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgZm9vdGVyQ29sb3I6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGZvb3RlclN0eWxlQ2xhc3MgPSAnYm94LWZvb3Rlcic7XG4gIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcbiAgQElucHV0KCkgcHVibGljIGhlYWRlckJvcmRlciA9IHRydWU7XG4gIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXJDb2xvcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgaGVhZGVyU3R5bGVDbGFzcyA9ICdib3gtaGVhZGVyJztcbiAgQElucHV0KCkgcHVibGljIGlzQ29sbGFwc2FibGUgPSB0cnVlO1xuICBASW5wdXQoKSBwdWJsaWMgaXNDb2xsYXBzZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgQElucHV0KCkgcHVibGljIGlzUmVtb3ZhYmxlID0gdHJ1ZTtcbiAgQElucHV0KCkgcHVibGljIGlzU29saWQgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGxvYWRpbmdDb2xvcjogc3RyaW5nO1xuICBASW5wdXQoKSBwdWJsaWMgbG9hZGluZ1N0eWxlQ2xhc3MgPSAnZmEgZmEtcmVmcmVzaCBmYS1zcGluJztcbiAgQElucHV0KCkgcHVibGljIHN0eWxlQ2xhc3MgPSAnYm94JztcblxuICBAT3V0cHV0KCkgcHVibGljIG9uQ29sbGFwc2VEb25lID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9uQ29sbGFwc2VTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAQ29udGVudENoaWxkKEJveEhlYWRlckRpcmVjdGl2ZSkgcHVibGljIGJveEhlYWRlckRpcmVjdGl2ZTogQm94SGVhZGVyRGlyZWN0aXZlO1xuICBAQ29udGVudENoaWxkKEJveEZvb3RlckRpcmVjdGl2ZSkgcHVibGljIGJveEZvb3RlckRpcmVjdGl2ZTogQm94Rm9vdGVyRGlyZWN0aXZlO1xuICBAQ29udGVudENoaWxkKEJveENvbnRlbnREaXJlY3RpdmUpIHB1YmxpYyBib3hDb250ZW50RGlyZWN0aXZlOiBCb3hDb250ZW50RGlyZWN0aXZlO1xuICBAQ29udGVudENoaWxkKEJveFRvb2xzRGlyZWN0aXZlKSBwdWJsaWMgYm94VG9vbHNEaXJlY3RpdmU6IEJveFRvb2xzRGlyZWN0aXZlO1xuXG4gIEBWaWV3Q2hpbGQoJ3RvZ2dsZUJ1dHRvbkVsZW1lbnQnKSBwcml2YXRlIHRvZ2dsZUJ1dHRvbkVsZW1lbnQ7XG4gIEBWaWV3Q2hpbGQoJ3JlbW92ZUJ1dHRvbkVsZW1lbnQnKSBwcml2YXRlIHJlbW92ZUJ1dHRvbkVsZW1lbnQ7XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgY29uc3RydWN0b3JcbiAgICogQHBhcmFtIGNoYW5nZURldGVjdG9yUmVmIFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIG5nWm9uZSAgICAgICAgICAgIFtkZXNjcmlwdGlvbl1cbiAgICogQHBhcmFtIHJlbmRlcmVyMiAgICAgICAgIFtkZXNjcmlwdGlvbl1cbiAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjI6IFJlbmRlcmVyMlxuICApIHt9XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgbmdBZnRlclZpZXdJbml0XG4gICAqL1xuICBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMudG9nZ2xlQnV0dG9uRWxlbWVudCkge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0aGlzLnRvZ2dsZUJ1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuaXNDb2xsYXBzZWQgPSAhdGhpcy5pc0NvbGxhcHNlZDtcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMucmVtb3ZlQnV0dG9uRWxlbWVudCkge1xuICAgICAgICB0aGlzLmxpc3RlbmVycy5wdXNoKHRoaXMucmVuZGVyZXIyLmxpc3Rlbih0aGlzLnJlbW92ZUJ1dHRvbkVsZW1lbnQubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgICAgIHRoaXMucmVtb3ZlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBtZXRob2QgbmdPbkRlc3Ryb3lcbiAgICovXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHJlbW92ZUxpc3RlbmVycyh0aGlzLmxpc3RlbmVycyk7XG4gIH1cblxuICAvKipcbiAgICogW3JlbW92ZWREb25lIGRlc2NyaXB0aW9uXVxuICAgKiBAbWV0aG9kIHJlbW92ZWREb25lXG4gICAqIEBwYXJhbSBldmVudCBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlZERvbmUoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJzEnKSB7XG4gICAgICB0aGlzLnJlbW92ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBbY29sbGFwc2VTdGFydCBkZXNjcmlwdGlvbl1cbiAgICogQG1ldGhvZCBjb2xsYXBzZVN0YXJ0XG4gICAqIEBwYXJhbSBldmVudCBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwdWJsaWMgY29sbGFwc2VTdGFydChldmVudDogQW5pbWF0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQuZnJvbVN0YXRlICE9PSAndm9pZCcpIHtcbiAgICAgIHRoaXMuaXNDb2xsYXBpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5vbkNvbGxhcHNlU3RhcnQuZW1pdChldmVudCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFtjb2xsYXBzZURvbmUgZGVzY3JpcHRpb25dXG4gICAqIEBtZXRob2QgY29sbGFwc2VEb25lXG4gICAqIEBwYXJhbSBldmVudCBbZGVzY3JpcHRpb25dXG4gICAqL1xuICBwdWJsaWMgY29sbGFwc2VEb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGlmIChldmVudC5mcm9tU3RhdGUgIT09ICd2b2lkJykge1xuICAgICAgdGhpcy5pc0NvbGxhcGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5vbkNvbGxhcHNlRG9uZS5lbWl0KGV2ZW50KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==