fundamental-ngx
Version:
SAP Fundamentals, implemented in Angular
359 lines • 26.8 kB
JavaScript
/**
* @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==