fundamental-ngx
Version:
SAP Fiori Fundamentals, implemented in Angular
417 lines • 28.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
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 {?} */
var 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.
*/
var AlertComponent = /** @class */ (function (_super) {
tslib_1.__extends(AlertComponent, _super);
/** @hidden */
function AlertComponent(elRef, cdRef, componentFactoryResolver, alertRef) {
var _this = _super.call(this, elRef) || this;
_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;
return _this;
}
/** @hidden */
/**
* @hidden
* @return {?}
*/
AlertComponent.prototype.ngOnInit = /**
* @hidden
* @return {?}
*/
function () {
if (this.alertRef) {
this.open();
}
this._setProperties();
};
/** @hidden */
/**
* @hidden
* @return {?}
*/
AlertComponent.prototype.ngAfterViewInit = /**
* @hidden
* @return {?}
*/
function () {
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 manualDismiss Set to true to skip the dismiss animation.
* @param reason Data to pass back to the calling component. Only usable if alert is opened using the Service.
*
*/
/**
* 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 {?}
*/
AlertComponent.prototype.dismiss = /**
* 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 {?}
*/
function (reason, manualDismiss) {
if (manualDismiss === void 0) { 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.
*/
/**
* Opens the alert.
* @return {?}
*/
AlertComponent.prototype.open = /**
* Opens the alert.
* @return {?}
*/
function () {
var _this = this;
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 {?}
*/
function () {
if (_this.mousePersist) {
/** @type {?} */
var wait_1 = (/**
* @return {?}
*/
function () {
if (_this.mouseInAlert === true) {
setTimeout(wait_1, 500);
}
else {
_this.dismiss();
}
});
wait_1();
}
else {
_this.dismiss();
}
}), this.duration);
}
};
/** @hidden */
/**
* @hidden
* @param {?} event
* @return {?}
*/
AlertComponent.prototype.handleAlertMouseEvent = /**
* @hidden
* @param {?} event
* @return {?}
*/
function (event) {
if (event.type === 'mouseenter') {
this.mouseInAlert = true;
}
else if (event.type === 'mouseleave') {
this.mouseInAlert = false;
}
};
/** @hidden */
/**
* @hidden
* @return {?}
*/
AlertComponent.prototype._setProperties = /**
* @hidden
* @return {?}
*/
function () {
this._addClassToElement('fd-alert');
if (this.type) {
this._addClassToElement('fd-alert--' + this.type);
}
};
/**
* @private
* @param {?} template
* @return {?}
*/
AlertComponent.prototype.loadFromTemplate = /**
* @private
* @param {?} template
* @return {?}
*/
function (template) {
/** @type {?} */
var context = {
$implicit: this.alertRef
};
this.componentRef = this.containerRef.createEmbeddedView(template, context);
};
/**
* @private
* @param {?} componentType
* @return {?}
*/
AlertComponent.prototype.loadFromComponent = /**
* @private
* @param {?} componentType
* @return {?}
*/
function (componentType) {
/** @type {?} */
var componentFactory = this.componentFactoryResolver.resolveComponentFactory(componentType);
this.containerRef.clear();
this.componentRef = this.containerRef.createComponent(componentFactory);
};
/**
* @private
* @param {?} contentString
* @return {?}
*/
AlertComponent.prototype.loadFromString = /**
* @private
* @param {?} contentString
* @return {?}
*/
function (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 = function () { return [
{ 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'],] }]
};
return AlertComponent;
}(AbstractFdNgxClass));
export { AlertComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxlcnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZnVuZGFtZW50YWwtbmd4LyIsInNvdXJjZXMiOlsibGliL2FsZXJ0L2FsZXJ0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsS0FBSyxFQUVMLFVBQVUsRUFDVixpQkFBaUIsRUFDakIsU0FBUyxFQUNULHdCQUF3QixFQUV4QixJQUFJLEVBRUosZ0JBQWdCLEVBQ2hCLFdBQVcsRUFDWCxRQUFRLEVBRVIsTUFBTSxFQUNOLFlBQVksRUFBRSxpQkFBaUIsRUFBRSxZQUFZLEVBQ2hELE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDL0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7O0lBRWhFLGFBQWEsR0FBVyxDQUFDOzs7OztBQU03QjtJQWtCb0MsMENBQWtCO0lBK0RsRCxjQUFjO0lBQ2Qsd0JBQW9CLEtBQWlCLEVBQ2pCLEtBQXdCLEVBQ3hCLHdCQUFrRCxFQUN0QyxRQUFrQjtRQUhsRCxZQUlJLGtCQUFNLEtBQUssQ0FBQyxTQUNmO1FBTG1CLFdBQUssR0FBTCxLQUFLLENBQVk7UUFDakIsV0FBSyxHQUFMLEtBQUssQ0FBbUI7UUFDeEIsOEJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUN0QyxjQUFRLEdBQVIsUUFBUSxDQUFVOzs7O1FBM0RsRCxpQkFBVyxHQUFZLElBQUksQ0FBQzs7OztRQVE1QixRQUFFLEdBQVcsV0FBVyxHQUFHLGFBQWEsRUFBRSxDQUFDOzs7O1FBSTNDLGNBQVEsR0FBVyxLQUFLLENBQUM7Ozs7UUFJekIsa0JBQVksR0FBWSxLQUFLLENBQUM7Ozs7UUFJOUIsb0JBQWMsR0FBVyxJQUFJLENBQUM7Ozs7UUFJOUIsZUFBUyxHQUFX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OztJQUcvQixxQ0FDNEI7Ozs7O0lBRzVCLDhCQUNhOzs7OztJQUdiLDRCQUMyQzs7Ozs7SUFHM0Msa0NBQ3lCOzs7OztJQUd6QixzQ0FDOEI7Ozs7O0lBRzlCLHdDQUM4Qjs7Ozs7SUFHOUIsbUNBQ3lCOzs7OztJQUd6QixzQ0FDaUM7Ozs7O0lBR2pDLCtCQUNjOzs7OztJQUdkLGtDQUNpQjs7Ozs7SUFHakIsaUNBQ2dCOzs7OztJQUdoQixtQ0FDbUU7Ozs7O0lBR25FLHNDQUE4Qjs7Ozs7SUFHOUIsc0NBQXVEOzs7OztJQUd2RCw0Q0FBMEQ7Ozs7O0lBRzlDLCtCQUF5Qjs7Ozs7SUFDekIsK0JBQWdDOzs7OztJQUNoQyxrREFBMEQ7Ozs7O0lBQzFELGtDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIElucHV0LFxuICAgIE9uSW5pdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIFR5cGUsXG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIE9wdGlvbmFsLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBPdXRwdXQsXG4gICAgRXZlbnRFbWl0dGVyLCBWaWV3RW5jYXBzdWxhdGlvbiwgSG9zdExpc3RlbmVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWxlcnRSZWYgfSBmcm9tICcuL2FsZXJ0LXV0aWxzL2FsZXJ0LXJlZic7XG5pbXBvcnQgeyBhbGVydEZhZGVOZ0lmIH0gZnJvbSAnLi9hbGVydC11dGlscy9hbGVydC1hbmltYXRpb25zJztcbmltcG9ydCB7IEFic3RyYWN0RmROZ3hDbGFzcyB9IGZyb20gJy4uL3V0aWxzL2Fic3RyYWN0LWZkLW5neC1jbGFzcyc7XG5cbmxldCBhbGVydFVuaXF1ZUlkOiBudW1iZXIgPSAwO1xuXG4vKipcbiAqIFRoZSBjb21wb25lbnQgdGhhdCByZXByZXNlbnRzIGFuIGFsZXJ0LiBJdCBjYW4gYmUgb25seSBiZSB1c2VkIGlubGluZS5cbiAqIElmIHRoZSBBbGVydFNlcnZpY2UgaXMgdXNlZCwgdGhpcyBjb21wb25lbnQgaXMgYXV0by1nZW5lcmF0ZWQuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtYWxlcnQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9hbGVydC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vYWxlcnQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBob3N0OiB7XG4gICAgICAgICdbYXR0ci5hcmlhLWxhYmVsbGVkYnldJzogJ2FyaWFMYWJlbGxlZEJ5JyxcbiAgICAgICAgJ1thdHRyLmFyaWEtbGFiZWxdJzogJ2FyaWFMYWJlbCcsXG4gICAgICAgICdbc3R5bGUud2lkdGhdJzogJ3dpZHRoJyxcbiAgICAgICAgJ1tzdHlsZS5taW4td2lkdGhdJzogJ21pbldpZHRoJyxcbiAgICAgICAgJ3JvbGUnOiAnYWxlcnQnLFxuICAgICAgICAnW2F0dHIuaWRdJzogJ2lkJyxcbiAgICAgICAgJ1tAZmFkZUFsZXJ0TmdJZl0nOiAnJ1xuICAgIH0sXG4gICAgYW5pbWF0aW9uczogW1xuICAgICAgICBhbGVydEZhZGVOZ0lmXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEFsZXJ0Q29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGZE5neENsYXNzIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywge3JlYWQ6IFZpZXdDb250YWluZXJSZWZ9KVxuICAgIGNvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZjtcblxuICAgIC8qKiBXaGV0aGVyIHRoZSBhbGVydCBpcyBkaXNtaXNzaWJsZS4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc21pc3NpYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIC8qKiBUaGUgdHlwZSBvZiB0aGUgYWxlcnQuIENhbiBiZSBvbmUgb2YgKndhcm5pbmcqLCAqc3VjY2VzcyosICppbmZvcm1hdGlvbiosICplcnJvciogb3IgbnVsbC4gKi9cbiAgICBASW5wdXQoKVxuICAgIHR5cGU6IHN0cmluZztcblxuICAgIC8qKiBJZCBmb3IgdGhlIGFsZXJ0IGNvbXBvbmVudC4gSWYgb21pdHRlZCwgYSB1bmlxdWUgb25lIGlzIGdlbmVyYXRlZC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGlkOiBzdHJpbmcgPSAnZmQtYWxlcnQtJyArIGFsZXJ0VW5pcXVlSWQrKztcblxuICAgIC8qKiBEdXJhdGlvbiBvZiB0aW1lICppbiBtaWxsaXNlY29uZHMqIHRoYXQgdGhlIGFsZXJ0IHdpbGwgYmUgdmlzaWJsZS4gU2V0IHRvIC0xIGZvciBpbmRlZmluaXRlLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHVyYXRpb246IG51bWJlciA9IDEwMDAwO1xuXG4gICAgLyoqIFdoZXRoZXIgdGhlIGFsZXJ0IHNob3VsZCBzdGF5IG9wZW4gaWYgdGhlIG1vdXNlIGlzIGhvdmVyaW5nIG92ZXIgaXQuICovXG4gICAgQElucHV0KClcbiAgICBtb3VzZVBlcnNpc3Q6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBJZCBvZiB0aGUgZWxlbWVudCB0aGF0IGxhYmVscyB0aGUgYWxlcnQuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWxsZWRCeTogc3RyaW5nID0gbnVsbDtcblxuICAgIC8qKiBBcmlhIGxhYmVsIGZvciB0aGUgYWxlcnQgY29tcG9uZW50IGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGw7XG5cbiAgICAvKiogQXJpYSBsYWJlbCBmb3IgdGhlIGRpc21pc3MgYnV0dG9uLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzbWlzc0xhYmVsOiBzdHJpbmcgPSAnRGlzbWlzcyc7XG5cbiAgICAvKiogV2lkdGggb2YgdGhlIGFsZXJ0LiAqL1xuICAgIEBJbnB1dCgpXG4gICAgd2lkdGg6IHN0cmluZztcblxuICAgIC8qKiBNaW5pbXVtIHdpZHRoIG9mIHRoZSBhbGVydC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1pbldpZHRoOiBzdHJpbmc7XG5cbiAgICAvKiogQWx0ZXJuYXRpdmUgd2F5IG9mIHBhc3NpbmcgaW4gYSBtZXNzYWdlIHRvIHRoZSBhbGVydC4gKi9cbiAgICBASW5wdXQoKVxuICAgIG1lc3NhZ2U6IHN0cmluZztcblxuICAgIC8qKiBFdmVudCBmaXJlZCB3aGVuIHRoZSBhbGVydCBpcyBkaXNtaXNzZWQuICovXG4gICAgQE91dHB1dCgpXG4gICAgb25EaXNtaXNzOiBFdmVudEVtaXR0ZXI8dW5kZWZpbmVkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dW5kZWZpbmVkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBtb3VzZUluQWxlcnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29tcG9uZW50UmVmOiBDb21wb25lbnRSZWY8YW55PiB8IEVtYmVkZGVkVmlld1JlZjxhbnk+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjaGlsZENvbXBvbmVudFR5cGU6IFR5cGU8YW55PiB8IFRlbXBsYXRlUmVmPGFueT4gfCBzdHJpbmc7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgICAgICAgICAgcHJpdmF0ZSBjb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgICAgICAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGFsZXJ0UmVmOiBBbGVydFJlZikge1xuICAgICAgICBzdXBlcihlbFJlZik7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWxlcnRSZWYpIHtcbiAgICAgICAgICAgIHRoaXMub3BlbigpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3NldFByb3BlcnRpZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRDb21wb25lbnRUeXBlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZENvbXBvbmVudFR5cGUgaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRnJvbUNvbXBvbmVudCh0aGlzLmNoaWxkQ29tcG9uZW50VHlwZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hpbGRDb21wb25lbnRUeXBlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRGcm9tVGVtcGxhdGUodGhpcy5jaGlsZENvbXBvbmVudFR5cGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRGcm9tU3RyaW5nKHRoaXMuY2hpbGRDb21wb25lbnRUeXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGlzbWlzc2VzIHRoZSBhbGVydC4gSWYgdGhlIGFsZXJ0IHdhcyBnZW5lcmF0ZWQgdmlhIHRoZSBBbGVydFNlcnZpY2UsIGl0IGlzIHJlbW92ZWQgZnJvbSB0aGUgRE9NLlxuICAgICAqIE90aGVyd2lzZSwgaXQgc2V0cyB0aGUgZGlzcGxheSB2YWx1ZSB0byBub25lLiBGaXJlcyB0aGUgb25EaXNtaXNzIGV2ZW50LlxuICAgICAqXG4gICAgICogQHBhcmFtIG1hbnVhbERpc21pc3MgU2V0IHRvIHRydWUgdG8gc2tpcCB0aGUgZGlzbWlzcyBhbmltYXRpb24uXG4gICAgICogQHBhcmFtIHJlYXNvbiBEYXRhIHRvIHBhc3MgYmFjayB0byB0aGUgY2FsbGluZyBjb21wb25lbnQuIE9ubHkgdXNhYmxlIGlmIGFsZXJ0IGlzIG9wZW5lZCB1c2luZyB0aGUgU2VydmljZS5cbiAgICAgKlxuICAgICAqL1xuICAgIGRpc21pc3MocmVhc29uPzogYW55LCBtYW51YWxEaXNtaXNzOiBib29sZWFuID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKG1hbnVhbERpc21pc3MpIHtcbiAgICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdmZC1oYXMtZGlzcGxheS1ub25lJyk7XG4gICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnZmQtaGFzLWRpc3BsYXktYmxvY2snKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5hbGVydFJlZikge1xuICAgICAgICAgICAgdGhpcy5hbGVydFJlZi5kaXNtaXNzKHJlYXNvbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZmQtaGFzLWRpc3BsYXktbm9uZScpO1xuICAgICAgICAgICAgdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2ZkLWhhcy1kaXNwbGF5LWJsb2NrJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkRpc21pc3MuZW1pdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9wZW5zIHRoZSBhbGVydC5cbiAgICAgKi9cbiAgICBvcGVuKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuYWxlcnRSZWYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ2Jsb2NrJykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZWxSZWYubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdmZC1oYXMtZGlzcGxheS1ub25lJyk7XG4gICAgICAgICAgICB0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnZmQtaGFzLWRpc3BsYXktYmxvY2snKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmR1cmF0aW9uID49IDApIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1vdXNlUGVyc2lzdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB3YWl0ID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMubW91c2VJbkFsZXJ0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCh3YWl0LCA1MDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRpc21pc3MoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgd2FpdCgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlzbWlzcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIHRoaXMuZHVyYXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWVudGVyJywgWyckZXZlbnQnXSlcbiAgICBASG9zdExpc3RlbmVyKCdtb3VzZWxlYXZlJywgWyckZXZlbnQnXSlcbiAgICBoYW5kbGVBbGVydE1vdXNlRXZlbnQoZXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWVudGVyJykge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUluQWxlcnQgPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LnR5cGUgPT09ICdtb3VzZWxlYXZlJykge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUluQWxlcnQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2FkZENsYXNzVG9FbGVtZW50KCdmZC1hbGVydCcpO1xuICAgICAgICBpZiAodGhpcy50eXBlKSB7XG4gICAgICAgICAgICB0aGlzLl9hZGRDbGFzc1RvRWxlbWVudCgnZmQtYWxlcnQtLScgKyB0aGlzLnR5cGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRnJvbVRlbXBsYXRlKHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMuYWxlcnRSZWZcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGVtcGxhdGUsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZEZyb21Db21wb25lbnQoY29tcG9uZW50VHlwZTogVHlwZTxhbnk+KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPSB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShjb21wb25lbnRUeXBlKTtcbiAgICAgICAgdGhpcy5jb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lclJlZi5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkRnJvbVN0cmluZyhjb250ZW50U3RyaW5nOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250YWluZXJSZWYuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5tZXNzYWdlID0gY29udGVudFN0cmluZztcbiAgICB9XG5cbn1cbiJdfQ==