UNPKG

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

409 lines 35.4 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { ChangeDetectorRef, Component, ContentChild, ContentChildren, EventEmitter, Input, NgZone, Output, QueryList, Renderer2, TemplateRef, ViewChild, ViewChildren } from '@angular/core'; import { removeListeners, removeSubscriptions } from '../helpers'; import { AccordionToggleDirective } from './accordion.directive'; /* * */ export class AccordionHeaderComponent { } AccordionHeaderComponent.decorators = [ { type: Component, args: [{ selector: 'mk-accordion-header', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>' }] } ]; AccordionHeaderComponent.propDecorators = { templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }] }; if (false) { /** @type {?} */ AccordionHeaderComponent.prototype.templateRef; } /* * */ export class AccordionContentComponent { } AccordionContentComponent.decorators = [ { type: Component, args: [{ selector: 'mk-accordion-content', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>' }] } ]; AccordionContentComponent.propDecorators = { templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }] }; if (false) { /** @type {?} */ AccordionContentComponent.prototype.templateRef; } /* * */ export class AccordionComponent { constructor() { this.contentStyleClass = 'box-body'; this.headerStyleClass = 'box-header with-border'; } /** * \@method ngOnInit * @return {?} */ ngOnInit() { this.headerStyleColor = this.headerColor; if (!this.header && !this.accordionHeaderComponent) { throw new Error('Attribute "header" OR Component "mk-+accordion-header" is required for component "mk-+accordion"'); } if (this.accordionContentComponent) { this.contentTemplateRef = this.accordionContentComponent.templateRef; } else { this.contentTemplateRef = this.templateRef; } } } AccordionComponent.decorators = [ { type: Component, args: [{ selector: 'mk-accordion', template: '<ng-template #templateRef><ng-content></ng-content></ng-template>' }] } ]; AccordionComponent.propDecorators = { borderColor: [{ type: Input }], contentColor: [{ type: Input }], contentStyleClass: [{ type: Input }], header: [{ type: Input }], headerColor: [{ type: Input }], headerColorHover: [{ type: Input }], headerStyleClass: [{ type: Input }], accordionHeaderComponent: [{ type: ContentChild, args: [AccordionHeaderComponent, { static: true },] }], accordionContentComponent: [{ type: ContentChild, args: [AccordionContentComponent, { static: true },] }], templateRef: [{ type: ViewChild, args: ['templateRef', { static: true },] }] }; if (false) { /** @type {?} */ AccordionComponent.prototype.contentTemplateRef; /** @type {?} */ AccordionComponent.prototype.headerStyleColor; /** @type {?} */ AccordionComponent.prototype.isCollapsing; /** @type {?} */ AccordionComponent.prototype.isCollapsed; /** @type {?} */ AccordionComponent.prototype.index; /** @type {?} */ AccordionComponent.prototype.borderColor; /** @type {?} */ AccordionComponent.prototype.contentColor; /** @type {?} */ AccordionComponent.prototype.contentStyleClass; /** @type {?} */ AccordionComponent.prototype.header; /** @type {?} */ AccordionComponent.prototype.headerColor; /** @type {?} */ AccordionComponent.prototype.headerColorHover; /** @type {?} */ AccordionComponent.prototype.headerStyleClass; /** @type {?} */ AccordionComponent.prototype.accordionHeaderComponent; /** @type {?} */ AccordionComponent.prototype.accordionContentComponent; /** @type {?} */ AccordionComponent.prototype.templateRef; } /* * */ export class AccordionGroupComponent { /** * \@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.activeIndex = [0]; // @TODO change types for listeners to all files this.listeners = []; // @TODO change types for subscriptions to all files this.subscriptions = []; this.styleClass = 'box-group'; this.onCollapseStart = new EventEmitter(); this.onCollapseDone = new EventEmitter(); } /** * @param {?} value * @return {?} */ set _activeIndex(value) { this.activeIndex = value instanceof Array ? value : [value]; } /** * [headerMouseLeave description] * \@method headerMouseLeave * @param {?} accordion [description] * @return {?} */ static headerMouseLeave(accordion) { accordion.headerStyleColor = accordion.headerColor; } /** * [headerMouseEnter description] * \@method headerMouseEnter * @param {?} accordion [description] * @return {?} */ static headerMouseEnter(accordion) { if (accordion.headerColorHover) { accordion.headerStyleColor = accordion.headerColorHover; } } /** * \@method ngAfterViewInit * @return {?} */ ngAfterContentInit() { this.setAccordionsIndex(); this.updateAccordionIsCollapsed(); this.subscriptions.push(this.accordionComponents.changes.subscribe((/** * @return {?} */ () => { this.setAccordionsIndex(); }))); } /** * \@method ngAfterViewInit * @return {?} */ ngAfterViewInit() { this.setAccordionsToggle(); this.subscriptions.push(this.accordionToggleDirectives.changes.subscribe((/** * @return {?} */ () => { this.setAccordionsToggle(); }))); } /** * [ngOnChanges description] * \@method ngOnChanges * @param {?} changes [description] * @return {?} [description] */ ngOnChanges(changes) { if (changes._activeIndex.firstChange === false) { this.updateAccordionIsCollapsed(); } } /** * \@method ngOnDestroy * @return {?} */ ngOnDestroy() { removeListeners(this.listeners); removeSubscriptions(this.subscriptions); } /** * [toggleAccordion description] * \@method toggleAccordion * @param {?} event [description] * @param {?} toggleIndex [description] * @return {?} */ toggleAccordion(event, toggleIndex) { event.preventDefault(); /** @type {?} */ const indexOf = this.activeIndex['indexOf'](toggleIndex); if (indexOf === -1) { if (this.isMultiple) { this.activeIndex.push(toggleIndex); } else { this.activeIndex = [toggleIndex]; } } else { if (this.isMultiple) { this.activeIndex.splice(indexOf, 1); } else { this.activeIndex = []; } } this.updateAccordionIsCollapsed(); } /** * [collapseStart description] * \@method collapseStart * @param {?} event [description] * @param {?} accordion [description] * @return {?} */ collapseStart(event, accordion) { accordion.isCollapsing = true; this.onCollapseStart.emit({ animationEvent: event, index: accordion.index }); } /** * [collapseDone description] * \@method collapseDone * @param {?} event [description] * @param {?} accordion [description] * @return {?} */ collapseDone(event, accordion) { accordion.isCollapsing = false; this.onCollapseDone.emit({ animationEvent: event, index: accordion.index }); } /** * [setAccordionsIndex description] * \@method setAccordionsIndex * @private * @return {?} */ setAccordionsIndex() { this.accordionComponents.forEach((/** * @param {?} accordion * @param {?} index * @return {?} */ (accordion, index) => { accordion.index = index; })); } /** * [setAccordionsToggle description] * \@method setAccordionsToggle * @private * @return {?} */ setAccordionsToggle() { this.listeners = removeListeners(this.listeners); this.ngZone.runOutsideAngular((/** * @return {?} */ () => { this.accordionToggleDirectives.forEach((/** * @param {?} accordionToggle * @return {?} */ (accordionToggle) => { this.listeners.push(this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'click', (/** * @param {?} event * @return {?} */ (event) => { this.toggleAccordion(event, accordionToggle.accordionComponent.index); this.changeDetectorRef.detectChanges(); }))); this.listeners.push(this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'mouseenter', (/** * @return {?} */ () => { AccordionGroupComponent.headerMouseEnter(accordionToggle.accordionComponent); this.changeDetectorRef.detectChanges(); }))); this.listeners.push(this.renderer2.listen(accordionToggle.elementRef.nativeElement, 'mouseleave', (/** * @return {?} */ () => { AccordionGroupComponent.headerMouseLeave(accordionToggle.accordionComponent); this.changeDetectorRef.detectChanges(); }))); })); })); } /** * [updateAccordionIsCollapsed description] * \@method updateAccordionIsCollapsed * @private * @return {?} */ updateAccordionIsCollapsed() { this.accordionComponents.forEach((/** * @param {?} accordion * @param {?} index * @return {?} */ (accordion, index) => { accordion.isCollapsed = this.activeIndex.indexOf(index) === -1; })); } } AccordionGroupComponent.decorators = [ { type: Component, args: [{ selector: 'mk-accordion-group', template: "<div [ngClass]=\"styleClass\">\r\n <div *ngFor=\"let accordion of accordionComponents\" class=\"panel box\" [mkColor]=\"accordion.borderColor\"\r\n mkColorProperty=\"border-top-color\" mkColorPrefix=\"box\">\r\n <div [ngClass]=\"accordion.headerStyleClass\"\r\n [class.no-border]=\"accordion.isCollapsed && !accordion.isCollapsing\">\r\n <h4 class=\"box-title\">\r\n <a [mkAccordionToggle]=\"accordion\" href=\"#\" [mkFontColor]=\"accordion.headerStyleColor\"\r\n [class.collapsed]=\"accordion.isCollapsed\">\r\n {{accordion.header}}\r\n <ng-template *ngIf=\"!accordion.header\"\r\n [ngTemplateOutlet]=\"accordion.accordionHeaderComponent?.templateRef\"></ng-template>\r\n </a>\r\n </h4>\r\n </div>\r\n <div class=\"panel-collapse\" [mkCollapseAnimation]=\"accordion.isCollapsed\"\r\n (mkCollapseAnimation.start)=\"collapseStart($event, accordion)\"\r\n (mkCollapseAnimation.done)=\"collapseDone($event, accordion)\">\r\n <div [ngClass]=\"accordion.contentStyleClass\" [mkFontColor]=\"accordion.contentColor\">\r\n <ng-template [ngTemplateOutlet]=\"accordion.contentTemplateRef\"></ng-template>\r\n </div>\r\n </div>\r\n </div>\r\n</div>" }] } ]; /** @nocollapse */ AccordionGroupComponent.ctorParameters = () => [ { type: ChangeDetectorRef }, { type: NgZone }, { type: Renderer2 } ]; AccordionGroupComponent.propDecorators = { _activeIndex: [{ type: Input, args: ['activeIndex',] }], isMultiple: [{ type: Input }], styleClass: [{ type: Input }], onCollapseStart: [{ type: Output }], onCollapseDone: [{ type: Output }], accordionComponents: [{ type: ContentChildren, args: [AccordionComponent,] }], accordionToggleDirectives: [{ type: ViewChildren, args: [AccordionToggleDirective,] }] }; if (false) { /** * @type {?} * @private */ AccordionGroupComponent.prototype.activeIndex; /** * @type {?} * @private */ AccordionGroupComponent.prototype.listeners; /** * @type {?} * @private */ AccordionGroupComponent.prototype.subscriptions; /** @type {?} */ AccordionGroupComponent.prototype.isMultiple; /** @type {?} */ AccordionGroupComponent.prototype.styleClass; /** @type {?} */ AccordionGroupComponent.prototype.onCollapseStart; /** @type {?} */ AccordionGroupComponent.prototype.onCollapseDone; /** @type {?} */ AccordionGroupComponent.prototype.accordionComponents; /** * @type {?} * @private */ AccordionGroupComponent.prototype.accordionToggleDirectives; /** * @type {?} * @private */ AccordionGroupComponent.prototype.changeDetectorRef; /** * @type {?} * @private */ AccordionGroupComponent.prototype.ngZone; /** * @type {?} * @private */ AccordionGroupComponent.prototype.renderer2; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2FkLWN1c3RvbS1saWIvIiwic291cmNlcyI6WyJsaWIvYWNjb3JkaW9uL2FjY29yZGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUVBLE9BQU8sRUFDOEIsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxlQUFlLEVBQzVGLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFnQyxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFDeEUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQ3RELE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEUsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7Ozs7QUFTakUsTUFBTSxPQUFPLHdCQUF3Qjs7O1lBSnBDLFNBQVMsU0FBQztnQkFDUCxRQUFRLEVBQUUscUJBQXFCO2dCQUMvQixRQUFRLEVBQUUsbUVBQW1FO2FBQ2hGOzs7MEJBRUksU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Ozs7SUFBMUMsK0NBQWlGOzs7OztBQVdyRixNQUFNLE9BQU8seUJBQXlCOzs7WUFKckMsU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxzQkFBc0I7Z0JBQ2hDLFFBQVEsRUFBRSxtRUFBbUU7YUFDaEY7OzswQkFFSSxTQUFTLFNBQUMsYUFBYSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs7OztJQUExQyxnREFBaUY7Ozs7O0FBV3JGLE1BQU0sT0FBTyxrQkFBa0I7SUFKL0I7UUFhb0Isc0JBQWlCLEdBQUcsVUFBVSxDQUFDO1FBSS9CLHFCQUFnQixHQUFHLHdCQUF3QixDQUFDO0lBdUJoRSxDQUFDOzs7OztJQWJHLFFBQVE7UUFDSixJQUFJLENBQUMsZ0JBQWdCLEdBQUcs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QUNQLENBQUM7OztZQS9MSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG9CQUFvQjtnQkFDOUIsZzNDQUF5QzthQUM1Qzs7OztZQXJGb0MsaUJBQWlCO1lBQzdCLE1BQU07WUFBbUQsU0FBUzs7OzJCQTZGdEYsS0FBSyxTQUFDLGFBQWE7eUJBR25CLEtBQUs7eUJBQ0wsS0FBSzs4QkFFTCxNQUFNOzZCQUNOLE1BQU07a0NBRU4sZUFBZSxTQUFDLGtCQUFrQjt3Q0FFbEMsWUFBWSxTQUFDLHdCQUF3Qjs7Ozs7OztJQWxCdEMsOENBQStCOzs7OztJQUUvQiw0Q0FBd0M7Ozs7O0lBRXhDLGdEQUFnRDs7SUFNaEQsNkNBQW9DOztJQUNwQyw2Q0FBeUM7O0lBRXpDLGtEQUFzRDs7SUFDdEQsaURBQXFEOztJQUVyRCxzREFBK0Y7Ozs7O0lBRS9GLDREQUErRzs7Ozs7SUFTM0csb0RBQTRDOzs7OztJQUM1Qyx5Q0FBc0I7Ozs7O0lBQ3RCLDRDQUE0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIEFmdGVyQ29udGVudEluaXQsIEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgQ29udGVudENoaWxkcmVuLFxyXG4gICAgRXZlbnRFbWl0dGVyLCBJbnB1dCwgTmdab25lLCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCwgUmVuZGVyZXIyLFxyXG4gICAgU2ltcGxlQ2hhbmdlcywgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0NoaWxkcmVuXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBBbmltYXRpb25FdmVudCB9IGZyb20gJy4uL2FuaW1hdGlvbnMvYW5pbWF0aW9ucy5pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyByZW1vdmVMaXN0ZW5lcnMsIHJlbW92ZVN1YnNjcmlwdGlvbnMgfSBmcm9tICcuLi9oZWxwZXJzJztcclxuaW1wb3J0IHsgQWNjb3JkaW9uVG9nZ2xlRGlyZWN0aXZlIH0gZnJvbSAnLi9hY2NvcmRpb24uZGlyZWN0aXZlJztcclxuXHJcbi8qXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbWstYWNjb3JkaW9uLWhlYWRlcicsXHJcbiAgICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG59XHJcblxyXG5cclxuLypcclxuICpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdtay1hY2NvcmRpb24tY29udGVudCcsXHJcbiAgICB0ZW1wbGF0ZTogJzxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVSZWY+PG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PjwvbmctdGVtcGxhdGU+J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQWNjb3JkaW9uQ29udGVudENvbXBvbmVudCB7XHJcbiAgICBAVmlld0NoaWxkKCd0ZW1wbGF0ZVJlZicsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcclxufVxyXG5cclxuXHJcbi8qXHJcbiAqXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnbWstYWNjb3JkaW9uJyxcclxuICAgIHRlbXBsYXRlOiAnPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVJlZj48bmctY29udGVudD48L25nLWNvbnRlbnQ+PC9uZy10ZW1wbGF0ZT4nXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBY2NvcmRpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gICAgcHVibGljIGNvbnRlbnRUZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8QWNjb3JkaW9uQ29udGVudENvbXBvbmVudD47XHJcbiAgICBwdWJsaWMgaGVhZGVyU3R5bGVDb2xvcjogc3RyaW5nO1xyXG4gICAgcHVibGljIGlzQ29sbGFwc2luZzogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpc0NvbGxhcHNlZDogYm9vbGVhbjtcclxuICAgIHB1YmxpYyBpbmRleDogbnVtYmVyO1xyXG5cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBib3JkZXJDb2xvcjogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNvbnRlbnRDb2xvcjogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGNvbnRlbnRTdHlsZUNsYXNzID0gJ2JveC1ib2R5JztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXI6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXJDb2xvcjogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgcHVibGljIGhlYWRlckNvbG9ySG92ZXI6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWFkZXJTdHlsZUNsYXNzID0gJ2JveC1oZWFkZXIgd2l0aC1ib3JkZXInO1xyXG5cclxuICAgIEBDb250ZW50Q2hpbGQoQWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgYWNjb3JkaW9uSGVhZGVyQ29tcG9uZW50OiBBY2NvcmRpb25IZWFkZXJDb21wb25lbnQ7XHJcbiAgICBAQ29udGVudENoaWxkKEFjY29yZGlvbkNvbnRlbnRDb21wb25lbnQsIHsgc3RhdGljOiB0cnVlIH0pIHB1YmxpYyBhY2NvcmRpb25Db250ZW50Q29tcG9uZW50OiBBY2NvcmRpb25Db250ZW50Q29tcG9uZW50O1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJywgeyBzdGF0aWM6IHRydWUgfSkgcHVibGljIHRlbXBsYXRlUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1ldGhvZCBuZ09uSW5pdFxyXG4gICAgICovXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLmhlYWRlclN0eWxlQ29sb3IgPSB0aGlzLmhlYWRlckNvbG9yO1xyXG5cclxuICAgICAgICBpZiAoIXRoaXMuaGVhZGVyICYmICF0aGlzLmFjY29yZGlvbkhlYWRlckNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0F0dHJpYnV0ZSBcImhlYWRlclwiIE9SIENvbXBvbmVudCBcIm1rLSthY2NvcmRpb24taGVhZGVyXCIgaXMgcmVxdWlyZWQgZm9yIGNvbXBvbmVudCBcIm1rLSthY2NvcmRpb25cIicpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuYWNjb3JkaW9uQ29udGVudENvbXBvbmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZVJlZiA9IHRoaXMuYWNjb3JkaW9uQ29udGVudENvbXBvbmVudC50ZW1wbGF0ZVJlZjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRUZW1wbGF0ZVJlZiA9IHRoaXMudGVtcGxhdGVSZWY7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5cclxuLypcclxuICpcclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdtay1hY2NvcmRpb24tZ3JvdXAnLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2FjY29yZGlvbi5jb21wb25lbnQuaHRtbCdcclxufSlcclxuZXhwb3J0IGNsYXNzIEFjY29yZGlvbkdyb3VwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xyXG4gICAgcHJpdmF0ZSBhY3RpdmVJbmRleDogYW55ID0gWzBdO1xyXG4gICAgLy8gQFRPRE8gY2hhbmdlIHR5cGVzIGZvciBsaXN0ZW5lcnMgdG8gYWxsIGZpbGVzXHJcbiAgICBwcml2YXRlIGxpc3RlbmVyczogQXJyYXk8RnVuY3Rpb24+ID0gW107XHJcbiAgICAvLyBAVE9ETyBjaGFuZ2UgdHlwZXMgZm9yIHN1YnNjcmlwdGlvbnMgdG8gYWxsIGZpbGVzXHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbnM6IEFycmF5PFN1YnNjcmlwdGlvbj4gPSBbXTtcclxuXHJcblxyXG4gICAgQElucHV0KCdhY3RpdmVJbmRleCcpIHNldCBfYWN0aXZlSW5kZXgodmFsdWUpIHtcclxuICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gdmFsdWUgaW5zdGFuY2VvZiBBcnJheSA/IHZhbHVlIDogW3ZhbHVlXTtcclxuICAgIH1cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpc011bHRpcGxlOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgcHVibGljIHN0eWxlQ2xhc3MgPSAnYm94LWdyb3VwJztcclxuXHJcbiAgICBAT3V0cHV0KCkgcHVibGljIG9uQ29sbGFwc2VTdGFydCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBwdWJsaWMgb25Db2xsYXBzZURvbmUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcblxyXG4gICAgQENvbnRlbnRDaGlsZHJlbihBY2NvcmRpb25Db21wb25lbnQpIHB1YmxpYyBhY2NvcmRpb25Db21wb25lbnRzOiBRdWVyeUxpc3Q8QWNjb3JkaW9uQ29tcG9uZW50PjtcclxuXHJcbiAgICBAVmlld0NoaWxkcmVuKEFjY29yZGlvblRvZ2dsZURpcmVjdGl2ZSkgcHJpdmF0ZSBhY2NvcmRpb25Ub2dnbGVEaXJlY3RpdmVzOiBRdWVyeUxpc3Q8QWNjb3JkaW9uVG9nZ2xlRGlyZWN0aXZlPjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZXRob2QgY29uc3RydWN0b3JcclxuICAgICAqIEBwYXJhbSBjaGFuZ2VEZXRlY3RvclJlZiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0gbmdab25lICAgICAgICAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHJlbmRlcmVyMiAgICAgICAgIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJpdmF0ZSBuZ1pvbmU6IE5nWm9uZSxcclxuICAgICAgICBwcml2YXRlIHJlbmRlcmVyMjogUmVuZGVyZXIyXHJcbiAgICApIHsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2hlYWRlck1vdXNlTGVhdmUgZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIGhlYWRlck1vdXNlTGVhdmVcclxuICAgICAqIEBwYXJhbSBhY2NvcmRpb24gW2Rlc2NyaXB0aW9uXVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc3RhdGljIGhlYWRlck1vdXNlTGVhdmUoYWNjb3JkaW9uOiBBY2NvcmRpb25Db21wb25lbnQpOiB2b2lkIHtcclxuICAgICAgICBhY2NvcmRpb24uaGVhZGVyU3R5bGVDb2xvciA9IGFjY29yZGlvbi5oZWFkZXJDb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtoZWFkZXJNb3VzZUVudGVyIGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCBoZWFkZXJNb3VzZUVudGVyXHJcbiAgICAgKiBAcGFyYW0gYWNjb3JkaW9uIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHN0YXRpYyBoZWFkZXJNb3VzZUVudGVyKGFjY29yZGlvbjogQWNjb3JkaW9uQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgaWYgKGFjY29yZGlvbi5oZWFkZXJDb2xvckhvdmVyKSB7XHJcbiAgICAgICAgICAgIGFjY29yZGlvbi5oZWFkZXJTdHlsZUNvbG9yID0gYWNjb3JkaW9uLmhlYWRlckNvbG9ySG92ZXI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQG1ldGhvZCBuZ0FmdGVyVmlld0luaXRcclxuICAgICAqL1xyXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgICAgIHRoaXMuc2V0QWNjb3JkaW9uc0luZGV4KCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVBY2NvcmRpb25Jc0NvbGxhcHNlZCgpO1xyXG5cclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmFjY29yZGlvbkNvbXBvbmVudHMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNldEFjY29yZGlvbnNJbmRleCgpO1xyXG4gICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBtZXRob2QgbmdBZnRlclZpZXdJbml0XHJcbiAgICAgKi9cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgICAgICB0aGlzLnNldEFjY29yZGlvbnNUb2dnbGUoKTtcclxuXHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5hY2NvcmRpb25Ub2dnbGVEaXJlY3RpdmVzLmNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zZXRBY2NvcmRpb25zVG9nZ2xlKCk7XHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW25nT25DaGFuZ2VzIGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCBuZ09uQ2hhbmdlc1xyXG4gICAgICogQHBhcmFtIGNoYW5nZXMgW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHJldHVybiBbZGVzY3JpcHRpb25dXHJcbiAgICAgKi9cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgICAgICBpZiAoY2hhbmdlcy5fYWN0aXZlSW5kZXguZmlyc3RDaGFuZ2UgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQWNjb3JkaW9uSXNDb2xsYXBzZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAbWV0aG9kIG5nT25EZXN0cm95XHJcbiAgICAgKi9cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG4gICAgICAgIHJlbW92ZUxpc3RlbmVycyh0aGlzLmxpc3RlbmVycyk7XHJcbiAgICAgICAgcmVtb3ZlU3Vic2NyaXB0aW9ucyh0aGlzLnN1YnNjcmlwdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW3RvZ2dsZUFjY29yZGlvbiBkZXNjcmlwdGlvbl1cclxuICAgICAqIEBtZXRob2QgdG9nZ2xlQWNjb3JkaW9uXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgICAgICAgW2Rlc2NyaXB0aW9uXVxyXG4gICAgICogQHBhcmFtIHRvZ2dsZUluZGV4IFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgcHVibGljIHRvZ2dsZUFjY29yZGlvbihldmVudDogRXZlbnQsIHRvZ2dsZUluZGV4OiBudW1iZXIpOiB2b2lkIHtcclxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICBjb25zdCBpbmRleE9mID0gdGhpcy5hY3RpdmVJbmRleFsnaW5kZXhPZiddKHRvZ2dsZUluZGV4KTtcclxuICAgICAgICBpZiAoaW5kZXhPZiA9PT0gLTEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleC5wdXNoKHRvZ2dsZUluZGV4KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlSW5kZXggPSBbdG9nZ2xlSW5kZXhdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuaXNNdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVJbmRleC5zcGxpY2UoaW5kZXhPZiwgMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZUluZGV4ID0gW107XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51cGRhdGVBY2NvcmRpb25Jc0NvbGxhcHNlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW2NvbGxhcHNlU3RhcnQgZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIGNvbGxhcHNlU3RhcnRcclxuICAgICAqIEBwYXJhbSBldmVudCBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0gYWNjb3JkaW9uIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbGxhcHNlU3RhcnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50LCBhY2NvcmRpb246IEFjY29yZGlvbkNvbXBvbmVudCk6IHZvaWQge1xyXG4gICAgICAgIGFjY29yZGlvbi5pc0NvbGxhcHNpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMub25Db2xsYXBzZVN0YXJ0LmVtaXQoeyBhbmltYXRpb25FdmVudDogZXZlbnQsIGluZGV4OiBhY2NvcmRpb24uaW5kZXggfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbY29sbGFwc2VEb25lIGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCBjb2xsYXBzZURvbmVcclxuICAgICAqIEBwYXJhbSBldmVudCBbZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAcGFyYW0gYWNjb3JkaW9uIFtkZXNjcmlwdGlvbl1cclxuICAgICAqL1xyXG4gICAgcHVibGljIGNvbGxhcHNlRG9uZShldmVudDogQW5pbWF0aW9uRXZlbnQsIGFjY29yZGlvbjogQWNjb3JkaW9uQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICAgICAgYWNjb3JkaW9uLmlzQ29sbGFwc2luZyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMub25Db2xsYXBzZURvbmUuZW1pdCh7IGFuaW1hdGlvbkV2ZW50OiBldmVudCwgaW5kZXg6IGFjY29yZGlvbi5pbmRleCB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFtzZXRBY2NvcmRpb25zSW5kZXggZGVzY3JpcHRpb25dXHJcbiAgICAgKiBAbWV0aG9kIHNldEFjY29yZGlvbnNJbmRleFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldEFjY29yZGlvbnNJbmRleCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmFjY29yZGlvbkNvbXBvbmVudHMuZm9yRWFjaCgoYWNjb3JkaW9uOiBBY2NvcmRpb25Db21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgYWNjb3JkaW9uLmluZGV4ID0gaW5kZXg7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBbc2V0QWNjb3JkaW9uc1RvZ2dsZSBkZXNjcmlwdGlvbl1cclxuICAgICAqIEBtZXRob2Qgc2V0QWNjb3JkaW9uc1RvZ2dsZVxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldEFjY29yZGlvbnNUb2dnbGUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5saXN0ZW5lcnMgPSByZW1vdmVMaXN0ZW5lcnModGhpcy5saXN0ZW5lcnMpO1xyXG5cclxuICAgICAgICB0aGlzLm5nWm9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWNjb3JkaW9uVG9nZ2xlRGlyZWN0aXZlcy5mb3JFYWNoKChhY2NvcmRpb25Ub2dnbGU6IEFjY29yZGlvblRvZ2dsZURpcmVjdGl2ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyMi5saXN0ZW4oYWNjb3JkaW9uVG9nZ2xlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ2NsaWNrJywgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVBY2NvcmRpb24oZXZlbnQsIGFjY29yZGlvblRvZ2dsZS5hY2NvcmRpb25Db21wb25lbnQuaW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMucHVzaCh0aGlzLnJlbmRlcmVyMi5saXN0ZW4oYWNjb3JkaW9uVG9nZ2xlLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgJ21vdXNlZW50ZXInLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgQWNjb3JkaW9uR3JvdXBDb21wb25lbnQuaGVhZGVyTW91c2VFbnRlcihhY2NvcmRpb25Ub2dnbGUuYWNjb3JkaW9uQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzLnB1c2godGhpcy5yZW5kZXJlcjIubGlzdGVuKGFjY29yZGlvblRvZ2dsZS5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIEFjY29yZGlvbkdyb3VwQ29tcG9uZW50LmhlYWRlck1vdXNlTGVhdmUoYWNjb3JkaW9uVG9nZ2xlLmFjY29yZGlvbkNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogW3VwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkIGRlc2NyaXB0aW9uXVxyXG4gICAgICogQG1ldGhvZCB1cGRhdGVBY2NvcmRpb25Jc0NvbGxhcHNlZFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHVwZGF0ZUFjY29yZGlvbklzQ29sbGFwc2VkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuYWNjb3JkaW9uQ29tcG9uZW50cy5mb3JFYWNoKChhY2NvcmRpb246IEFjY29yZGlvbkNvbXBvbmVudCwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBhY2NvcmRpb24uaXNDb2xsYXBzZWQgPSB0aGlzLmFjdGl2ZUluZGV4LmluZGV4T2YoaW5kZXgpID09PSAtMTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG4iXX0=