UNPKG

@catull/igniteui-angular

Version:

Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps

276 lines 23.8 kB
import { __decorate, __metadata } from "tslib"; import { Component, NgModule, EventEmitter, Output, Input, ViewChild, ElementRef, ContentChild, HostBinding } from '@angular/core'; import { IgxExpansionPanelModule } from '../expansion-panel/expansion-panel.module'; import { IgxExpansionPanelComponent } from '../expansion-panel'; import { IgxIconModule, IgxIconComponent } from '../icon/index'; import { IgxButtonModule } from '../directives/button/button.directive'; import { IgxRippleModule } from '../directives/ripple/ripple.directive'; import { IgxBannerActionsDirective } from './banner.directives'; import { CommonModule } from '@angular/common'; /** * **Ignite UI for Angular Banner** - * [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/banner.html) * * The Ignite UI Banner provides a highly templateable and easy to use banner that can be shown in your application. * * Usage: * * ```html * <igx-banner #banner> * Our privacy settings have changed. * <igx-banner-actions> * <button igxButton="raised">Read More</button> * <button igxButton="raised">Accept and Continue</button> * </igx-banner-actions> * </igx-banner> * ``` */ let IgxBannerComponent = class IgxBannerComponent { constructor(elementRef) { this.elementRef = elementRef; /** * Fires after the banner shows up * ```typescript * public handleOpened(event) { * ... * } * ``` * ```html * <igx-banner (onOpened)="handleOpened($event)"></igx-banner> * ``` */ this.onOpened = new EventEmitter(); /** * Fires before the banner shows up * ```typescript * public handleOpening(event) { * ... * } * ``` * ```html * <igx-banner (onOpening)="handleOpening($event)"></igx-banner> * ``` */ this.onOpening = new EventEmitter(); /** * Fires after the banner hides * ```typescript * public handleClosed(event) { * ... * } * ``` * ```html * <igx-banner (onClosed)="handleClosed($event)"></igx-banner> * ``` */ this.onClosed = new EventEmitter(); /** * Fires before the banner hides * ```typescript * public handleClosing(event) { * ... * } * ``` * ```html * <igx-banner (onClosing)="handleClosing($event)"></igx-banner> * ``` */ this.onClosing = new EventEmitter(); } /** @hidden */ get useDefaultTemplate() { return !this._bannerActionTemplate; } /** * Get the animation settings used by the banner open/close methods * ```typescript * let currentAnimations: AnimationSettings = banner.animationSettings * ``` */ get animationSettings() { return this._animationSettings ? this._animationSettings : this._expansionPanel.animationSettings; } /** * Set the animation settings used by the banner open/close methods * ```typescript * import { slideInLeft, slideOutRight } from 'igniteui-angular'; * ... * banner.animationSettings: AnimationSettings = { openAnimation: slideInLeft, closeAnimation: slideOutRight }; * ``` */ set animationSettings(settings) { this._animationSettings = settings; } /** * Gets whether banner is collapsed * * ```typescript * const isCollapsed: boolean = banner.collapsed; * ``` */ get collapsed() { return this._expansionPanel.collapsed; } /** * Returns the native element of the banner component * ```typescript * const myBannerElement: HTMLElement = banner.element; * ``` */ get element() { return this.elementRef.nativeElement; } /** * @hidden */ get displayStyle() { return this.collapsed ? '' : 'block'; } /** * Opens the banner * * ```typescript * myBanner.open(); * ``` * * ```html * <igx-banner #banner> * ... * </igx-banner> * <button (click)="banner.open()">Open Banner</button> * ``` */ open(event) { this._bannerEvent = { banner: this, event }; const openingArgs = { banner: this, event, cancel: false }; this.onOpening.emit(openingArgs); if (openingArgs.cancel) { return; } this._expansionPanel.open(event); } /** * Closes the banner * * ```typescript * myBanner.close(); * ``` * * ```html * <igx-banner #banner> * ... * </igx-banner> * <button (click)="banner.close()">Close Banner</button> * ``` */ close(event) { this._bannerEvent = { banner: this, event }; const closingArgs = { banner: this, event, cancel: false }; this.onClosing.emit(closingArgs); if (closingArgs.cancel) { return; } this._expansionPanel.close(event); } /** * Toggles the banner * * ```typescript * myBanner.toggle(); * ``` * * ```html * <igx-banner #banner> * ... * </igx-banner> * <button (click)="banner.toggle()">Toggle Banner</button> * ``` */ toggle(event) { if (this.collapsed) { this.open(event); } else { this.close(event); } } /** @hidden */ onExpansionPanelOpen() { this.onOpened.emit(this._bannerEvent); } /** @hidden */ onExpansionPanelClose() { this.onClosed.emit(this._bannerEvent); } }; IgxBannerComponent.ctorParameters = () => [ { type: ElementRef } ]; __decorate([ ViewChild('expansionPanel', { static: true }), __metadata("design:type", IgxExpansionPanelComponent) ], IgxBannerComponent.prototype, "_expansionPanel", void 0); __decorate([ ContentChild(IgxBannerActionsDirective), __metadata("design:type", IgxBannerActionsDirective) ], IgxBannerComponent.prototype, "_bannerActionTemplate", void 0); __decorate([ ContentChild(IgxIconComponent), __metadata("design:type", IgxIconComponent) ], IgxBannerComponent.prototype, "bannerIcon", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxBannerComponent.prototype, "onOpened", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxBannerComponent.prototype, "onOpening", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxBannerComponent.prototype, "onClosed", void 0); __decorate([ Output(), __metadata("design:type", Object) ], IgxBannerComponent.prototype, "onClosing", void 0); __decorate([ Input(), __metadata("design:type", Object), __metadata("design:paramtypes", [Object]) ], IgxBannerComponent.prototype, "animationSettings", null); __decorate([ HostBinding('style.display'), __metadata("design:type", String), __metadata("design:paramtypes", []) ], IgxBannerComponent.prototype, "displayStyle", null); IgxBannerComponent = __decorate([ Component({ selector: 'igx-banner', template: "<igx-expansion-panel #expansionPanel [animationSettings]=\"animationSettings\" (onCollapsed)=\"onExpansionPanelClose()\" (onExpanded)=\"onExpansionPanelOpen()\"\n [collapsed]=\"collapsed\" aria-live=\"polite\" [attr.aria-hidden]=\"collapsed\">\n <igx-expansion-panel-body>\n <div class=\"igx-banner\">\n <div class=\"igx-banner__message\">\n <div *ngIf=\"bannerIcon\" class=\"igx-banner__illustration\">\n <ng-content select=\"igx-icon\"></ng-content>\n </div>\n <span class=\"igx-banner__text\">\n <ng-content></ng-content>\n </span>\n </div>\n <div class=\"igx-banner__actions\">\n <div class=\"igx-banner__row\">\n <ng-container *ngIf=\"useDefaultTemplate\">\n <button igxButton=\"flat\" igxRipple (click)=\"close()\">\n Dismiss\n </button>\n </ng-container>\n <ng-container *ngIf=\"!useDefaultTemplate\">\n <ng-content select=\"igx-banner-actions\"></ng-content>\n </ng-container>\n </div>\n </div>\n </div>\n </igx-expansion-panel-body>\n</igx-expansion-panel>" }), __metadata("design:paramtypes", [ElementRef]) ], IgxBannerComponent); export { IgxBannerComponent }; /** * @hidden */ let IgxBannerModule = class IgxBannerModule { }; IgxBannerModule = __decorate([ NgModule({ declarations: [IgxBannerComponent, IgxBannerActionsDirective], exports: [IgxBannerComponent, IgxBannerActionsDirective], imports: [CommonModule, IgxExpansionPanelModule, IgxIconModule, IgxButtonModule, IgxRippleModule] }) ], IgxBannerModule); export { IgxBannerModule }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFubmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2lnbml0ZXVpLWFuZ3VsYXIvIiwic291cmNlcyI6WyJsaWIvYmFubmVyL2Jhbm5lci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQzVFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFFcEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDaEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQVUvQzs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFLSCxJQUFhLGtCQUFrQixHQUEvQixNQUFhLGtCQUFrQjtJQWdJM0IsWUFBbUIsVUFBc0I7UUFBdEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQWhIekM7Ozs7Ozs7Ozs7V0FVRztRQUVJLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBbUIsQ0FBQztRQUV0RDs7Ozs7Ozs7OztXQVVHO1FBRUksY0FBUyxHQUFHLElBQUksWUFBWSxFQUF5QixDQUFDO1FBRTdEOzs7Ozs7Ozs7O1dBVUc7UUFFSSxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFdEQ7Ozs7Ozs7Ozs7V0FVRztRQUVJLGNBQVMsR0FBRyxJ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cEQ7SUFEQyxZQUFZLENBQUMseUJBQXlCLENBQUM7OEJBQ1QseUJBQXlCO2lFQUFDO0FBTXpEO0lBREMsWUFBWSxDQUFDLGdCQUFnQixDQUFDOzhCQUNaLGdCQUFnQjtzREFBQztBQWNwQztJQURDLE1BQU0sRUFBRTs7b0RBQzZDO0FBY3REO0lBREMsTUFBTSxFQUFFOztxREFDb0Q7QUFjN0Q7SUFEQyxNQUFNLEVBQUU7O29EQUM2QztBQWN0RDtJQURDLE1BQU0sRUFBRTs7cURBQ29EO0FBYzdEO0lBREMsS0FBSyxFQUFFOzs7MkRBR1A7QUFzQ0Q7SUFEQyxXQUFXLENBQUMsZUFBZSxDQUFDOzs7c0RBRzVCO0FBOUhRLGtCQUFrQjtJQUo5QixTQUFTLENBQUM7UUFDUCxRQUFRLEVBQUUsWUFBWTtRQUN0QixnMENBQW9DO0tBQ3ZDLENBQUM7cUNBaUlpQyxVQUFVO0dBaEloQyxrQkFBa0IsQ0F5TjlCO1NBek5ZLGtCQUFrQjtBQTJOL0I7O0dBRUc7QUFNSCxJQUFhLGVBQWUsR0FBNUIsTUFBYSxlQUFlO0NBQUksQ0FBQTtBQUFuQixlQUFlO0lBTDNCLFFBQVEsQ0FBQztRQUNOLFlBQVksRUFBRSxDQUFDLGtCQUFrQixFQUFFLHlCQUF5QixDQUFDO1FBQzdELE9BQU8sRUFBRSxDQUFDLGtCQUFrQixFQUFFLHlCQUF5QixDQUFDO1FBQ3hELE9BQU8sRUFBRSxDQUFDLFlBQVksRUFBRSx1QkFBdUIsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsQ0FBQztLQUNwRyxDQUFDO0dBQ1csZUFBZSxDQUFJO1NBQW5CLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE5nTW9kdWxlLCBFdmVudEVtaXR0ZXIsIE91dHB1dCwgSW5wdXQsIFZpZXdDaGlsZCwgRWxlbWVudFJlZixcbiAgICBDb250ZW50Q2hpbGQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJZ3hFeHBhbnNpb25QYW5lbE1vZHVsZSB9IGZyb20gJy4uL2V4cGFuc2lvbi1wYW5lbC9leHBhbnNpb24tcGFuZWwubW9kdWxlJztcbmltcG9ydCB7IEFuaW1hdGlvblNldHRpbmdzIH0gZnJvbSAnLi4vZXhwYW5zaW9uLXBhbmVsL2V4cGFuc2lvbi1wYW5lbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSWd4RXhwYW5zaW9uUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9leHBhbnNpb24tcGFuZWwnO1xuaW1wb3J0IHsgSWd4SWNvbk1vZHVsZSwgSWd4SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uL2ljb24vaW5kZXgnO1xuaW1wb3J0IHsgSVRvZ2dsZVZpZXcgfSBmcm9tICcuLi9jb3JlL25hdmlnYXRpb24nO1xuaW1wb3J0IHsgSWd4QnV0dG9uTW9kdWxlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9idXR0b24vYnV0dG9uLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJZ3hSaXBwbGVNb2R1bGUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3JpcHBsZS9yaXBwbGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IElneEJhbm5lckFjdGlvbnNEaXJlY3RpdmUgfSBmcm9tICcuL2Jhbm5lci5kaXJlY3RpdmVzJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDYW5jZWxhYmxlRXZlbnRBcmdzLCBJQmFzZUV2ZW50QXJncyB9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEJhbm5lckV2ZW50QXJncyBleHRlbmRzIElCYXNlRXZlbnRBcmdzIHtcbiAgICBiYW5uZXI6IElneEJhbm5lckNvbXBvbmVudDtcbiAgICBldmVudD86IEV2ZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJhbm5lckNhbmNlbEV2ZW50QXJncyBleHRlbmRzIEJhbm5lckV2ZW50QXJncywgQ2FuY2VsYWJsZUV2ZW50QXJncyB7XG59XG4vKipcbiAqICoqSWduaXRlIFVJIGZvciBBbmd1bGFyIEJhbm5lcioqIC1cbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9iYW5uZXIuaHRtbClcbiAqXG4gKiBUaGUgSWduaXRlIFVJIEJhbm5lciBwcm92aWRlcyBhIGhpZ2hseSB0ZW1wbGF0ZWFibGUgYW5kIGVhc3kgdG8gdXNlIGJhbm5lciB0aGF0IGNhbiBiZSBzaG93biBpbiB5b3VyIGFwcGxpY2F0aW9uLlxuICpcbiAqIFVzYWdlOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxpZ3gtYmFubmVyICNiYW5uZXI+XG4gKiAgIE91ciBwcml2YWN5IHNldHRpbmdzIGhhdmUgY2hhbmdlZC5cbiAqICA8aWd4LWJhbm5lci1hY3Rpb25zPlxuICogICAgICA8YnV0dG9uIGlneEJ1dHRvbj1cInJhaXNlZFwiPlJlYWQgTW9yZTwvYnV0dG9uPlxuICogICAgICA8YnV0dG9uIGlneEJ1dHRvbj1cInJhaXNlZFwiPkFjY2VwdCBhbmQgQ29udGludWU8L2J1dHRvbj5cbiAqICA8L2lneC1iYW5uZXItYWN0aW9ucz5cbiAqIDwvaWd4LWJhbm5lcj5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2lneC1iYW5uZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnYmFubmVyLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBJZ3hCYW5uZXJDb21wb25lbnQgaW1wbGVtZW50cyBJVG9nZ2xlVmlldyB7XG4gICAgcHJpdmF0ZSBfYmFubmVyRXZlbnQ6IEJhbm5lckV2ZW50QXJncztcbiAgICBwcml2YXRlIF9hbmltYXRpb25TZXR0aW5nczogQW5pbWF0aW9uU2V0dGluZ3M7XG5cbiAgICBAVmlld0NoaWxkKCdleHBhbnNpb25QYW5lbCcsIHsgc3RhdGljOiB0cnVlIH0pXG4gICAgcHJpdmF0ZSBfZXhwYW5zaW9uUGFuZWw6IElneEV4cGFuc2lvblBhbmVsQ29tcG9uZW50O1xuXG4gICAgQENvbnRlbnRDaGlsZChJZ3hCYW5uZXJBY3Rpb25zRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgX2Jhbm5lckFjdGlvblRlbXBsYXRlOiBJZ3hCYW5uZXJBY3Rpb25zRGlyZWN0aXZlO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBDb250ZW50Q2hpbGQoSWd4SWNvbkNvbXBvbmVudClcbiAgICBwdWJsaWMgYmFubmVySWNvbjogSWd4SWNvbkNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqIEZpcmVzIGFmdGVyIHRoZSBiYW5uZXIgc2hvd3MgdXBcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGhhbmRsZU9wZW5lZChldmVudCkge1xuICAgICAqICAuLi5cbiAgICAgKiB9XG4gICAgICogYGBgXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYmFubmVyIChvbk9wZW5lZCk9XCJoYW5kbGVPcGVuZWQoJGV2ZW50KVwiPjwvaWd4LWJhbm5lcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25PcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEJhbm5lckV2ZW50QXJncz4oKTtcblxuICAgIC8qKlxuICAgICAqIEZpcmVzIGJlZm9yZSB0aGUgYmFubmVyIHNob3dzIHVwXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqIHB1YmxpYyBoYW5kbGVPcGVuaW5nKGV2ZW50KSB7XG4gICAgICogIC4uLlxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1iYW5uZXIgKG9uT3BlbmluZyk9XCJoYW5kbGVPcGVuaW5nKCRldmVudClcIj48L2lneC1iYW5uZXI+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uT3BlbmluZyA9IG5ldyBFdmVudEVtaXR0ZXI8QmFubmVyQ2FuY2VsRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRmlyZXMgYWZ0ZXIgdGhlIGJhbm5lciBoaWRlc1xuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBwdWJsaWMgaGFuZGxlQ2xvc2VkKGV2ZW50KSB7XG4gICAgICogIC4uLlxuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1iYW5uZXIgKG9uQ2xvc2VkKT1cImhhbmRsZUNsb3NlZCgkZXZlbnQpXCI+PC9pZ3gtYmFubmVyPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBvbkNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8QmFubmVyRXZlbnRBcmdzPigpO1xuXG4gICAgLyoqXG4gICAgICogRmlyZXMgYmVmb3JlIHRoZSBiYW5uZXIgaGlkZXNcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogcHVibGljIGhhbmRsZUNsb3NpbmcoZXZlbnQpIHtcbiAgICAgKiAgLi4uXG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWJhbm5lciAob25DbG9zaW5nKT1cImhhbmRsZUNsb3NpbmcoJGV2ZW50KVwiPjwvaWd4LWJhbm5lcj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgb25DbG9zaW5nID0gbmV3IEV2ZW50RW1pdHRlcjxCYW5uZXJDYW5jZWxFdmVudEFyZ3M+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBnZXQgdXNlRGVmYXVsdFRlbXBsYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIXRoaXMuX2Jhbm5lckFjdGlvblRlbXBsYXRlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCB0aGUgYW5pbWF0aW9uIHNldHRpbmdzIHVzZWQgYnkgdGhlIGJhbm5lciBvcGVuL2Nsb3NlIG1ldGhvZHNcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogbGV0IGN1cnJlbnRBbmltYXRpb25zOiBBbmltYXRpb25TZXR0aW5ncyA9IGJhbm5lci5hbmltYXRpb25TZXR0aW5nc1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGdldCBhbmltYXRpb25TZXR0aW5ncygpOiBBbmltYXRpb25TZXR0aW5ncyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hbmltYXRpb25TZXR0aW5ncyA/IHRoaXMuX2FuaW1hdGlvblNldHRpbmdzIDogdGhpcy5fZXhwYW5zaW9uUGFuZWwuYW5pbWF0aW9uU2V0dGluZ3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBhbmltYXRpb24gc2V0dGluZ3MgdXNlZCBieSB0aGUgYmFubmVyIG9wZW4vY2xvc2UgbWV0aG9kc1xuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiBpbXBvcnQgeyBzbGlkZUluTGVmdCwgc2xpZGVPdXRSaWdodCB9IGZyb20gJ2lnbml0ZXVpLWFuZ3VsYXInO1xuICAgICAqIC4uLlxuICAgICAqIGJhbm5lci5hbmltYXRpb25TZXR0aW5nczogQW5pbWF0aW9uU2V0dGluZ3MgPSB7IG9wZW5BbmltYXRpb246IHNsaWRlSW5MZWZ0LCBjbG9zZUFuaW1hdGlvbjogc2xpZGVPdXRSaWdodCB9O1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXQgYW5pbWF0aW9uU2V0dGluZ3Moc2V0dGluZ3M6IEFuaW1hdGlvblNldHRpbmdzKSB7XG4gICAgICAgIHRoaXMuX2FuaW1hdGlvblNldHRpbmdzID0gc2V0dGluZ3M7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEdldHMgd2hldGhlciBiYW5uZXIgaXMgY29sbGFwc2VkXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogY29uc3QgaXNDb2xsYXBzZWQ6IGJvb2xlYW4gPSBiYW5uZXIuY29sbGFwc2VkO1xuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgY29sbGFwc2VkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZXhwYW5zaW9uUGFuZWwuY29sbGFwc2VkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG5hdGl2ZSBlbGVtZW50IG9mIHRoZSBiYW5uZXIgY29tcG9uZW50XG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBjb25zdCBteUJhbm5lckVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gYmFubmVyLmVsZW1lbnQ7XG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIEBIb3N0QmluZGluZygnc3R5bGUuZGlzcGxheScpXG4gICAgcHVibGljIGdldCBkaXNwbGF5U3R5bGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2VkID8gJycgOiAnYmxvY2snO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7IH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBiYW5uZXJcbiAgICAgKlxuICAgICAqIGBgYHR5cGVzY3JpcHRcbiAgICAgKiAgbXlCYW5uZXIub3BlbigpO1xuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogYGBgaHRtbFxuICAgICAqIDxpZ3gtYmFubmVyICNiYW5uZXI+XG4gICAgICogLi4uXG4gICAgICogPC9pZ3gtYmFubmVyPlxuICAgICAqIDxidXR0b24gKGNsaWNrKT1cImJhbm5lci5vcGVuKClcIj5PcGVuIEJhbm5lcjwvYnV0dG9uPlxuICAgICAqIGBgYFxuICAgICAqL1xuICAgIHB1YmxpYyBvcGVuKGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgdGhpcy5fYmFubmVyRXZlbnQgPSB7IGJhbm5lcjogdGhpcywgZXZlbnR9O1xuICAgICAgICBjb25zdCBvcGVuaW5nQXJncyA9IHtcbiAgICAgICAgICAgIGJhbm5lcjogdGhpcyxcbiAgICAgICAgICAgIGV2ZW50LFxuICAgICAgICAgICAgY2FuY2VsOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm9uT3BlbmluZy5lbWl0KG9wZW5pbmdBcmdzKTtcbiAgICAgICAgaWYgKG9wZW5pbmdBcmdzLmNhbmNlbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2V4cGFuc2lvblBhbmVsLm9wZW4oZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsb3NlcyB0aGUgYmFubmVyXG4gICAgICpcbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogIG15QmFubmVyLmNsb3NlKCk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBodG1sXG4gICAgICogPGlneC1iYW5uZXIgI2Jhbm5lcj5cbiAgICAgKiAuLi5cbiAgICAgKiA8L2lneC1iYW5uZXI+XG4gICAgICogPGJ1dHRvbiAoY2xpY2spPVwiYmFubmVyLmNsb3NlKClcIj5DbG9zZSBCYW5uZXI8L2J1dHRvbj5cbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICBwdWJsaWMgY2xvc2UoZXZlbnQ/OiBFdmVudCkge1xuICAgICAgICB0aGlzLl9iYW5uZXJFdmVudCA9IHsgYmFubmVyOiB0aGlzLCBldmVudH07XG4gICAgICAgIGNvbnN0IGNsb3NpbmdBcmdzID0ge1xuICAgICAgICAgICAgYmFubmVyOiB0aGlzLFxuICAgICAgICAgICAgZXZlbnQsXG4gICAgICAgICAgICBjYW5jZWw6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25DbG9zaW5nLmVtaXQoY2xvc2luZ0FyZ3MpO1xuICAgICAgICBpZiAoY2xvc2luZ0FyZ3MuY2FuY2VsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZXhwYW5zaW9uUGFuZWwuY2xvc2UoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRvZ2dsZXMgdGhlIGJhbm5lclxuICAgICAqXG4gICAgICogYGBgdHlwZXNjcmlwdFxuICAgICAqICBteUJhbm5lci50b2dnbGUoKTtcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIGBgYGh0bWxcbiAgICAgKiA8aWd4LWJhbm5lciAjYmFubmVyPlxuICAgICAqIC4uLlxuICAgICAqIDwvaWd4LWJhbm5lcj5cbiAgICAgKiA8YnV0dG9uIChjbGljayk9XCJiYW5uZXIudG9nZ2xlKClcIj5Ub2dnbGUgQmFubmVyPC9idXR0b24+XG4gICAgICogYGBgXG4gICAgICovXG4gICAgdG9nZ2xlKGV2ZW50PzogRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuY29sbGFwc2VkKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oZXZlbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jbG9zZShldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBvbkV4cGFuc2lvblBhbmVsT3BlbigpIHtcbiAgICAgICAgdGhpcy5vbk9wZW5lZC5lbWl0KHRoaXMuX2Jhbm5lckV2ZW50KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHB1YmxpYyBvbkV4cGFuc2lvblBhbmVsQ2xvc2UoKSB7XG4gICAgICAgIHRoaXMub25DbG9zZWQuZW1pdCh0aGlzLl9iYW5uZXJFdmVudCk7XG4gICAgfVxufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBkZWNsYXJhdGlvbnM6IFtJZ3hCYW5uZXJDb21wb25lbnQsIElneEJhbm5lckFjdGlvbnNEaXJlY3RpdmVdLFxuICAgIGV4cG9ydHM6IFtJZ3hCYW5uZXJDb21wb25lbnQsIElneEJhbm5lckFjdGlvbnNEaXJlY3RpdmVdLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIElneEV4cGFuc2lvblBhbmVsTW9kdWxlLCBJZ3hJY29uTW9kdWxlLCBJZ3hCdXR0b25Nb2R1bGUsIElneFJpcHBsZU1vZHVsZV1cbn0pXG5leHBvcnQgY2xhc3MgSWd4QmFubmVyTW9kdWxlIHsgfVxuIl19