UNPKG

fundamental-ngx

Version:

SAP Fundamentals, implemented in Angular

359 lines 26.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, Input, ElementRef, ChangeDetectorRef, ViewChild, ComponentFactoryResolver, Type, ViewContainerRef, TemplateRef, Optional, Output, EventEmitter, ViewEncapsulation, HostListener } from '@angular/core'; import { AlertRef } from './alert-utils/alert-ref'; import { alertFadeNgIf } from './alert-utils/alert-animations'; import { AbstractFdNgxClass } from '../utils/abstract-fd-ngx-class'; /** @type {?} */ let alertUniqueId = 0; /** * The component that represents an alert. It can be only be used inline. * If the AlertService is used, this component is auto-generated. */ export class AlertComponent extends AbstractFdNgxClass { /** * @hidden * @param {?} elRef * @param {?} cdRef * @param {?} componentFactoryResolver * @param {?} alertRef */ constructor(elRef, cdRef, componentFactoryResolver, alertRef) { super(elRef); this.elRef = elRef; this.cdRef = cdRef; this.componentFactoryResolver = componentFactoryResolver; this.alertRef = alertRef; /** * Whether the alert is dismissible. */ this.dismissible = true; /** * Id for the alert component. If omitted, a unique one is generated. */ this.id = 'fd-alert-' + alertUniqueId++; /** * Duration of time *in milliseconds* that the alert will be visible. Set to -1 for indefinite. */ this.duration = 10000; /** * Whether the alert should stay open if the mouse is hovering over it. */ this.mousePersist = false; /** * Id of the element that labels the alert. */ this.ariaLabelledBy = null; /** * Aria label for the alert component element. */ this.ariaLabel = null; /** * Aria label for the dismiss button. */ this.dismissLabel = 'Dismiss'; /** * Event fired when the alert is dismissed. */ this.onDismiss = new EventEmitter(); /** * @hidden */ this.mouseInAlert = false; } /** * @hidden * @return {?} */ ngOnInit() { if (this.alertRef) { this.open(); } this._setProperties(); } /** * @hidden * @return {?} */ ngAfterViewInit() { if (this.childComponentType) { if (this.childComponentType instanceof Type) { this.loadFromComponent(this.childComponentType); } else if (this.childComponentType instanceof TemplateRef) { this.loadFromTemplate(this.childComponentType); } else { this.loadFromString(this.childComponentType); } this.cdRef.detectChanges(); } } /** * Dismisses the alert. If the alert was generated via the AlertService, it is removed from the DOM. * Otherwise, it sets the display value to none. Fires the onDismiss event. * * @param {?=} reason Data to pass back to the calling component. Only usable if alert is opened using the Service. * * @param {?=} manualDismiss Set to true to skip the dismiss animation. * @return {?} */ dismiss(reason, manualDismiss = false) { if (manualDismiss) { this.elRef.nativeElement.classList.add('fd-has-display-none'); this.elRef.nativeElement.classList.remove('fd-has-display-block'); } if (this.alertRef) { this.alertRef.dismiss(reason); } else { this.elRef.nativeElement.classList.add('fd-has-display-none'); this.elRef.nativeElement.classList.remove('fd-has-display-block'); } this.onDismiss.emit(); } /** * Opens the alert. * @return {?} */ open() { if (!this.alertRef) { if (this.elRef.nativeElement.style.display === 'block') { return; } this.elRef.nativeElement.classList.remove('fd-has-display-none'); this.elRef.nativeElement.classList.add('fd-has-display-block'); } if (this.duration >= 0) { setTimeout((/** * @return {?} */ () => { if (this.mousePersist) { /** @type {?} */ const wait = (/** * @return {?} */ () => { if (this.mouseInAlert === true) { setTimeout(wait, 500); } else { this.dismiss(); } }); wait(); } else { this.dismiss(); } }), this.duration); } } /** * @hidden * @param {?} event * @return {?} */ handleAlertMouseEvent(event) { if (event.type === 'mouseenter') { this.mouseInAlert = true; } else if (event.type === 'mouseleave') { this.mouseInAlert = false; } } /** * @hidden * @return {?} */ _setProperties() { this._addClassToElement('fd-alert'); if (this.type) { this._addClassToElement('fd-alert--' + this.type); } if (this.dismissible) { this._addClassToElement('fd-alert--dismissible'); } } /** * @private * @param {?} template * @return {?} */ loadFromTemplate(template) { /** @type {?} */ const context = { $implicit: this.alertRef }; this.componentRef = this.containerRef.createEmbeddedView(template, context); } /** * @private * @param {?} componentType * @return {?} */ loadFromComponent(componentType) { /** @type {?} */ const componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType); this.containerRef.clear(); this.componentRef = this.containerRef.createComponent(componentFactory); } /** * @private * @param {?} contentString * @return {?} */ loadFromString(contentString) { this.containerRef.clear(); this.message = contentString; } } AlertComponent.decorators = [ { type: Component, args: [{ selector: 'fd-alert', template: "<button class=\"fd-alert__close\"\n *ngIf=\"dismissible\"\n (click)=\"dismiss(undefined, true)\"\n [attr.aria-controls]=\"id\"\n [attr.aria-label]=\"dismissLabel\">\n</button>\n<ng-container #container>{{message}}</ng-container>\n<ng-content></ng-content>\n", host: { '[attr.aria-labelledby]': 'ariaLabelledBy', '[attr.aria-label]': 'ariaLabel', '[style.width]': 'width', '[style.min-width]': 'minWidth', 'role': 'alert', '[attr.id]': 'id', '[@fadeAlertNgIf]': '' }, animations: [ alertFadeNgIf ], encapsulation: ViewEncapsulation.None, styles: [".fd-alert{display:block}"] }] } ]; /** @nocollapse */ AlertComponent.ctorParameters = () => [ { type: ElementRef }, { type: ChangeDetectorRef }, { type: ComponentFactoryResolver }, { type: AlertRef, decorators: [{ type: Optional }] } ]; AlertComponent.propDecorators = { containerRef: [{ type: ViewChild, args: ['container', { read: ViewContainerRef },] }], dismissible: [{ type: Input }], type: [{ type: Input }], id: [{ type: Input }], duration: [{ type: Input }], mousePersist: [{ type: Input }], ariaLabelledBy: [{ type: Input }], ariaLabel: [{ type: Input }], dismissLabel: [{ type: Input }], width: [{ type: Input }], minWidth: [{ type: Input }], message: [{ type: Input }], onDismiss: [{ type: Output }], handleAlertMouseEvent: [{ type: HostListener, args: ['mouseenter', ['$event'],] }, { type: HostListener, args: ['mouseleave', ['$event'],] }] }; if (false) { /** * @hidden * @type {?} */ AlertComponent.prototype.containerRef; /** * Whether the alert is dismissible. * @type {?} */ AlertComponent.prototype.dismissible; /** * The type of the alert. Can be one of *warning*, *success*, *information*, *error* or null. * @type {?} */ AlertComponent.prototype.type; /** * Id for the alert component. If omitted, a unique one is generated. * @type {?} */ AlertComponent.prototype.id; /** * Duration of time *in milliseconds* that the alert will be visible. Set to -1 for indefinite. * @type {?} */ AlertComponent.prototype.duration; /** * Whether the alert should stay open if the mouse is hovering over it. * @type {?} */ AlertComponent.prototype.mousePersist; /** * Id of the element that labels the alert. * @type {?} */ AlertComponent.prototype.ariaLabelledBy; /** * Aria label for the alert component element. * @type {?} */ AlertComponent.prototype.ariaLabel; /** * Aria label for the dismiss button. * @type {?} */ AlertComponent.prototype.dismissLabel; /** * Width of the alert. * @type {?} */ AlertComponent.prototype.width; /** * Minimum width of the alert. * @type {?} */ AlertComponent.prototype.minWidth; /** * Alternative way of passing in a message to the alert. * @type {?} */ AlertComponent.prototype.message; /** * Event fired when the alert is dismissed. * @type {?} */ AlertComponent.prototype.onDismiss; /** * @hidden * @type {?} */ AlertComponent.prototype.mouseInAlert; /** * @hidden * @type {?} */ AlertComponent.prototype.componentRef; /** * @hidden * @type {?} */ AlertComponent.prototype.childComponentType; /** * @type {?} * @private */ AlertComponent.prototype.elRef; /** * @type {?} * @private */ AlertComponent.prototype.cdRef; /** * @type {?} * @private */ AlertComponent.prototype.componentFactoryResolver; /** * @type {?} * @private */ AlertComponent.prototype.alertRef; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZnVuZGFtZW50YWwtbmd4LyIsInNvdXJjZXMiOlsibGliL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBRUwsVUFBVSxFQUNWLGlCQUFpQixFQUNqQixTQUFTLEVBQ1Qsd0JBQXdCLEVBRXhCLElBQUksRUFFSixnQkFBZ0IsRUFDaEIsV0FBVyxFQUNYLFFBQVEsRUFFUixNQUFNLEVBQ04sWUFBWSxFQUFFLGlCQUFpQixFQUFFLFlBQVksRUFDaEQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7SUFFaEUsYUFBYSxHQUFXLENBQUM7Ozs7O0FBd0I3QixNQUFNLE9BQU8sY0FBZSxTQUFRLGtCQUFrQjs7Ozs7Ozs7SUFnRWxELFlBQW9CLEtBQWlCLEVBQ2pCLEtBQXdCLEVBQ3hCLHdCQUFrRCxFQUN0QyxRQUFrQjtRQUM5QyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7UUFKRyxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQ2pCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBQ3hCLDZCQUF3QixHQUF4Qix3QkFBd0IsQ0FBMEI7UUFDdEMsYUFBUSxHQUFSLFFBQVEsQ0FBVTs7OztRQTNEbEQsZ0JBQVcsR0FBWSxJQUFJLENBQUM7Ozs7UUFRNUIsT0FBRSxHQUFXLFdBQVcsR0FBRyxhQUFhLEVBQUUsQ0FBQzs7OztRQUkzQyxhQUFRLEdBQVcsS0FBSyxDQUFDOzs7O1FBSXpCLGlCQUFZLEdBQVksS0FBSyxDQUFDOzs7O1FBSTlCLG1CQUFjLEdBQVcsSUFBSSxDQUFDOzs7O1FBSTlCLGNB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Yzs7Ozs7SUFHZCxrQ0FDaUI7Ozs7O0lBR2pCLGlDQUNnQjs7Ozs7SUFHaEIsbUNBQ21FOzs7OztJQUduRSxzQ0FBOEI7Ozs7O0lBRzlCLHNDQUF1RDs7Ozs7SUFHdkQsNENBQTBEOzs7OztJQUc5QywrQkFBeUI7Ozs7O0lBQ3pCLCtCQUFnQzs7Ozs7SUFDaEMsa0RBQTBEOzs7OztJQUMxRCxrQ0FBc0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgRWxlbWVudFJlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgIENvbXBvbmVudFJlZixcbiAgICBUeXBlLFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBPcHRpb25hbCxcbiAgICBFbWJlZGRlZFZpZXdSZWYsXG4gICAgT3V0cHV0LFxuICAgIEV2ZW50RW1pdHRlciwgVmlld0VuY2Fwc3VsYXRpb24sIEhvc3RMaXN0ZW5lclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsZXJ0UmVmIH0gZnJvbSAnLi9hbGVydC11dGlscy9hbGVydC1yZWYnO1xuaW1wb3J0IHsgYWxlcnRGYWRlTmdJZiB9IGZyb20gJy4vYWxlcnQtdXRpbHMvYWxlcnQtYW5pbWF0aW9ucyc7XG5pbXBvcnQgeyBBYnN0cmFjdEZkTmd4Q2xhc3MgfSBmcm9tICcuLi91dGlscy9hYnN0cmFjdC1mZC1uZ3gtY2xhc3MnO1xuXG5sZXQgYWxlcnRVbmlxdWVJZDogbnVtYmVyID0gMDtcblxuLyoqXG4gKiBUaGUgY29tcG9uZW50IHRoYXQgcmVwcmVzZW50cyBhbiBhbGVydC4gSXQgY2FuIGJlIG9ubHkgYmUgdXNlZCBpbmxpbmUuXG4gKiBJZiB0aGUgQWxlcnRTZXJ2aWNlIGlzIHVzZWQsIHRoaXMgY29tcG9uZW50IGlzIGF1dG8tZ2VuZXJhdGVkLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWFsZXJ0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYWxlcnQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2FsZXJ0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XSc6ICdhcmlhTGFiZWxsZWRCeScsXG4gICAgICAgICdbYXR0ci5hcmlhLWxhYmVsXSc6ICdhcmlhTGFiZWwnLFxuICAgICAgICAnW3N0eWxlLndpZHRoXSc6ICd3aWR0aCcsXG4gICAgICAgICdbc3R5bGUubWluLXdpZHRoXSc6ICdtaW5XaWR0aCcsXG4gICAgICAgICdyb2xlJzogJ2FsZXJ0JyxcbiAgICAgICAgJ1thdHRyLmlkXSc6ICdpZCcsXG4gICAgICAgICdbQGZhZGVBbGVydE5nSWZdJzogJydcbiAgICB9LFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgYWxlcnRGYWRlTmdJZlxuICAgIF0sXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBBbGVydENvbXBvbmVudCBleHRlbmRzIEFic3RyYWN0RmROZ3hDbGFzcyBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHtyZWFkOiBWaWV3Q29udGFpbmVyUmVmfSlcbiAgICBjb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgICAvKiogV2hldGhlciB0aGUgYWxlcnQgaXMgZGlzbWlzc2libGUuICovXG4gICAgQElucHV0KClcbiAgICBkaXNtaXNzaWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvKiogVGhlIHR5cGUgb2YgdGhlIGFsZXJ0LiBDYW4gYmUgb25lIG9mICp3YXJuaW5nKiwgKnN1Y2Nlc3MqLCAqaW5mb3JtYXRpb24qLCAqZXJyb3IqIG9yIG51bGwuICovXG4gICAgQElucHV0KClcbiAgICB0eXBlOiBzdHJpbmc7XG5cbiAgICAvKiogSWQgZm9yIHRoZSBhbGVydCBjb21wb25lbnQuIElmIG9taXR0ZWQsIGEgdW5pcXVlIG9uZSBpcyBnZW5lcmF0ZWQuICovXG4gICAgQElucHV0KClcbiAgICBpZDogc3RyaW5nID0gJ2ZkLWFsZXJ0LScgKyBhbGVydFVuaXF1ZUlkKys7XG5cbiAgICAvKiogRHVyYXRpb24gb2YgdGltZSAqaW4gbWlsbGlzZWNvbmRzKiB0aGF0IHRoZSBhbGVydCB3aWxsIGJlIHZpc2libGUuIFNldCB0byAtMSBmb3IgaW5kZWZpbml0ZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGR1cmF0aW9uOiBudW1iZXIgPSAxMDAwMDtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBhbGVydCBzaG91bGQgc3RheSBvcGVuIGlmIHRoZSBtb3VzZSBpcyBob3ZlcmluZyBvdmVyIGl0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbW91c2VQZXJzaXN0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogSWQgb2YgdGhlIGVsZW1lbnQgdGhhdCBsYWJlbHMgdGhlIGFsZXJ0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IG51bGw7XG5cbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIGFsZXJ0IGNvbXBvbmVudCBlbGVtZW50LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgYXJpYUxhYmVsOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgLyoqIEFyaWEgbGFiZWwgZm9yIHRoZSBkaXNtaXNzIGJ1dHRvbi4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc21pc3NMYWJlbDogc3RyaW5nID0gJ0Rpc21pc3MnO1xuXG4gICAgLyoqIFdpZHRoIG9mIHRoZSBhbGVydC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHdpZHRoOiBzdHJpbmc7XG5cbiAgICAvKiogTWluaW11bSB3aWR0aCBvZiB0aGUgYWxlcnQuICovXG4gICAgQElucHV0KClcbiAgICBtaW5XaWR0aDogc3RyaW5nO1xuXG4gICAgLyoqIEFsdGVybmF0aXZlIHdheSBvZiBwYXNzaW5nIGluIGEgbWVzc2FnZSB0byB0aGUgYWxlcnQuICovXG4gICAgQElucHV0KClcbiAgICBtZXNzYWdlOiBzdHJpbmc7XG5cbiAgICAvKiogRXZlbnQgZmlyZWQgd2hlbiB0aGUgYWxlcnQgaXMgZGlzbWlzc2VkLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG9uRGlzbWlzczogRXZlbnRFbWl0dGVyPHVuZGVmaW5lZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHVuZGVmaW5lZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbW91c2VJbkFsZXJ0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbXBvbmVudFJlZjogQ29tcG9uZW50UmVmPGFueT4gfCBFbWJlZGRlZFZpZXdSZWY8YW55PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY2hpbGRDb21wb25lbnRUeXBlOiBUeXBlPGFueT4gfCBUZW1wbGF0ZVJlZjxhbnk+IHwgc3RyaW5nO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsUmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgICAgICAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBhbGVydFJlZjogQWxlcnRSZWYpIHtcbiAgICAgICAgc3VwZXIoZWxSZWYpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFsZXJ0UmVmKSB7XG4gICAgICAgICAgICB0aGlzLm9wZW4oKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9zZXRQcm9wZXJ0aWVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNoaWxkQ29tcG9uZW50VHlwZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuY2hpbGRDb21wb25lbnRUeXBlIGluc3RhbmNlb2YgVHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubG9hZEZyb21Db21wb25lbnQodGhpcy5jaGlsZENvbXBvbmVudFR5cGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmNoaWxkQ29tcG9uZW50VHlwZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRnJvbVRlbXBsYXRlKHRoaXMuY2hpbGRDb21wb25lbnRUeXBlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRnJvbVN0cmluZyh0aGlzLmNoaWxkQ29tcG9uZW50VHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERpc21pc3NlcyB0aGUgYWxlcnQuIElmIHRoZSBhbGVydCB3YXMgZ2VuZXJhdGVkIHZpYSB0aGUgQWxlcnRTZXJ2aWNlLCBpdCBpcyByZW1vdmVkIGZyb20gdGhlIERPTS5cbiAgICAgKiBPdGhlcndpc2UsIGl0IHNldHMgdGhlIGRpc3BsYXkgdmFsdWUgdG8gbm9uZS4gRmlyZXMgdGhlIG9uRGlzbWlzcyBldmVudC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBtYW51YWxEaXNtaXNzIFNldCB0byB0cnVlIHRvIHNraXAgdGhlIGRpc21pc3MgYW5pbWF0aW9uLlxuICAgICAqIEBwYXJhbSByZWFzb24gRGF0YSB0byBwYXNzIGJhY2sgdG8gdGhlIGNhbGxpbmcgY29tcG9uZW50LiBPbmx5IHVzYWJsZSBpZiBhbGVydCBpcyBvcGVuZWQgdXNpbmcgdGhlIFNlcnZpY2UuXG4gICAgICpcbiAgICAgKi9cbiAgICBkaXNtaXNzKHJlYXNvbj86IGFueSwgbWFudWFsRGlzbWlzczogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmIChtYW51YWxEaXNtaXNzKSB7XG4gICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZmQtaGFzLWRpc3BsYXktbm9uZScpO1xuICAgICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2ZkLWhhcy1kaXNwbGF5LWJsb2NrJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYWxlcnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRSZWYuZGlzbWlzcyhyZWFzb24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZkLWhhcy1kaXNwbGF5LW5vbmUnKTtcbiAgICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdmZC1oYXMtZGlzcGxheS1ibG9jaycpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25EaXNtaXNzLmVtaXQoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcGVucyB0aGUgYWxlcnQuXG4gICAgICovXG4gICAgb3BlbigpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmFsZXJ0UmVmKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPT09ICdibG9jaycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZmQtaGFzLWRpc3BsYXktbm9uZScpO1xuICAgICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2ZkLWhhcy1kaXNwbGF5LWJsb2NrJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5kdXJhdGlvbiA+PSAwKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tb3VzZVBlcnNpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2FpdCA9ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vdXNlSW5BbGVydCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQod2FpdCwgNTAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNtaXNzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHdhaXQoKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc21pc3MoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCB0aGlzLmR1cmF0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VlbnRlcicsIFsnJGV2ZW50J10pXG4gICAgQEhvc3RMaXN0ZW5lcignbW91c2VsZWF2ZScsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlQWxlcnRNb3VzZUV2ZW50KGV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC50eXBlID09PSAnbW91c2VlbnRlcicpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VJbkFsZXJ0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChldmVudC50eXBlID09PSAnbW91c2VsZWF2ZScpIHtcbiAgICAgICAgICAgIHRoaXMubW91c2VJbkFsZXJ0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRQcm9wZXJ0aWVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9hZGRDbGFzc1RvRWxlbWVudCgnZmQtYWxlcnQnKTtcbiAgICAgICAgaWYgKHRoaXMudHlwZSkge1xuICAgICAgICAgICAgdGhpcy5fYWRkQ2xhc3NUb0VsZW1lbnQoJ2ZkLWFsZXJ0LS0nICsgdGhpcy50eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kaXNtaXNzaWJsZSkge1xuICAgICAgICAgICAgdGhpcy5fYWRkQ2xhc3NUb0VsZW1lbnQoJ2ZkLWFsZXJ0LS1kaXNtaXNzaWJsZScpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRnJvbVRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMuYWxlcnRSZWZcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZEZyb21Db21wb25lbnQoY29tcG9uZW50VHlwZTogVHlwZTxhbnk+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnRUeXBlKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRnJvbVN0cmluZyhjb250ZW50U3RyaW5nOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gY29udGVudFN0cmluZztcbiAgICB9XG5cbn1cbiJdfQ==