fundamental-ngx
Version:
SAP Fiori Fundamentals, implemented in Angular
226 lines • 17.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ElementRef, Type, TemplateRef, ViewContainerRef, ViewChild, ComponentFactoryResolver, ChangeDetectorRef, HostListener, Optional } from '@angular/core';
import { ModalRef } from './modal-utils/modal-ref';
import { modalFadeNgIf } from './modal-utils/modal-animations';
import { AbstractFdNgxClass } from '../utils/abstract-fd-ngx-class';
import focusTrap from 'focus-trap';
var ModalComponent = /** @class */ (function (_super) {
tslib_1.__extends(ModalComponent, _super);
function ModalComponent(elRef, componentFactoryResolver, cdRef, modalRef) {
var _this = _super.call(this, elRef) || this;
_this.elRef = elRef;
_this.componentFactoryResolver = componentFactoryResolver;
_this.cdRef = cdRef;
_this.modalRef = modalRef;
_this.escKeyCloseable = true;
_this.focusTrapped = true;
_this.ariaLabelledBy = null;
_this.ariaLabel = null;
_this.ariaDescribedBy = null;
_this.backdropClickCloseable = true;
_this.hasBackdrop = true;
_this.modalPanelClass = '';
return _this;
}
/**
* @return {?}
*/
ModalComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this._setProperties();
};
/**
* @return {?}
*/
ModalComponent.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.focusTrap) {
this.focusTrap.deactivate();
}
};
/**
* @return {?}
*/
ModalComponent.prototype.ngAfterViewInit = /**
* @return {?}
*/
function () {
if (this.childComponentType) {
if (this.childComponentType instanceof Type) {
this.loadFromComponent(this.childComponentType);
}
else if (this.childComponentType instanceof TemplateRef) {
this.loadFromTemplate(this.childComponentType);
}
}
if (this.focusTrapped) {
try {
this.focusTrap = focusTrap(this.elRef.nativeElement, {
clickOutsideDeactivates: this.backdropClickCloseable && this.hasBackdrop,
escapeDeactivates: false,
initialFocus: this.elRef.nativeElement
});
this.focusTrap.activate();
}
catch (e) {
console.warn('Attempted to focus trap the modal, but no tabbable elements were found.');
}
}
this.cdRef.detectChanges();
};
/**
* @param {?} event
* @return {?}
*/
ModalComponent.prototype.closeModalEsc = /**
* @param {?} event
* @return {?}
*/
function (event) {
if (this.escKeyCloseable && event.key === 'Escape') {
this.modalRef.dismiss('escape');
}
};
/**
* @private
* @param {?} content
* @return {?}
*/
ModalComponent.prototype.loadFromComponent = /**
* @private
* @param {?} content
* @return {?}
*/
function (content) {
this.containerRef.clear();
/** @type {?} */
var componentFactory = this.componentFactoryResolver.resolveComponentFactory(content);
this.componentRef = this.containerRef.createComponent(componentFactory);
};
/**
* @private
* @param {?} content
* @return {?}
*/
ModalComponent.prototype.loadFromTemplate = /**
* @private
* @param {?} content
* @return {?}
*/
function (content) {
this.containerRef.clear();
/** @type {?} */
var context = {
$implicit: this.modalRef
};
this.componentRef = this.containerRef.createEmbeddedView(content, context);
};
/**
* @return {?}
*/
ModalComponent.prototype._setProperties = /**
* @return {?}
*/
function () {
if (this.modalPanelClass) {
this._addClassToElement(this.modalPanelClass);
}
};
ModalComponent.decorators = [
{ type: Component, args: [{
selector: 'fd-modal',
template: "<div class=\"fd-modal__content\" role=\"document\">\n <ng-content select=\"fd-modal-header\"></ng-content>\n <ng-content select=\"fd-modal-body\"></ng-content>\n <ng-content select=\"fd-modal-footer\"></ng-content>\n <ng-container #vc></ng-container>\n <ng-content></ng-content>\n</div>\n",
host: {
'role': 'dialog',
'[class.fd-modal]': 'true',
'[attr.aria-labelledby]': 'ariaLabelledBy',
'[attr.aria-label]': 'ariaLabel',
'[attr.aria-describedby]': 'ariaDescribedBy',
'[attr.aria-modal]': 'true',
'[attr.id]': 'id',
'tabindex': '-1',
'[@modal-fade]': ''
},
animations: [
modalFadeNgIf
],
styles: [":host{max-width:none;z-index:1000}:host:focus{outline:0}:host .fd-modal__content{height:100%;width:100%;min-height:inherit;min-width:inherit;max-height:inherit;max-width:inherit;display:flex;flex-direction:column}"]
}] }
];
/** @nocollapse */
ModalComponent.ctorParameters = function () { return [
{ type: ElementRef },
{ type: ComponentFactoryResolver },
{ type: ChangeDetectorRef },
{ type: ModalRef, decorators: [{ type: Optional }] }
]; };
ModalComponent.propDecorators = {
containerRef: [{ type: ViewChild, args: ['vc', { read: ViewContainerRef },] }],
closeModalEsc: [{ type: HostListener, args: ['keyup', ['$event'],] }]
};
return ModalComponent;
}(AbstractFdNgxClass));
export { ModalComponent };
if (false) {
/** @type {?} */
ModalComponent.prototype.containerRef;
/** @type {?} */
ModalComponent.prototype.id;
/** @type {?} */
ModalComponent.prototype.escKeyCloseable;
/** @type {?} */
ModalComponent.prototype.focusTrapped;
/** @type {?} */
ModalComponent.prototype.ariaLabelledBy;
/** @type {?} */
ModalComponent.prototype.ariaLabel;
/** @type {?} */
ModalComponent.prototype.ariaDescribedBy;
/** @type {?} */
ModalComponent.prototype.childComponentType;
/** @type {?} */
ModalComponent.prototype.backdropClickCloseable;
/** @type {?} */
ModalComponent.prototype.hasBackdrop;
/** @type {?} */
ModalComponent.prototype.modalPanelClass;
/**
* @type {?}
* @private
*/
ModalComponent.prototype.componentRef;
/**
* @type {?}
* @private
*/
ModalComponent.prototype.focusTrap;
/**
* @type {?}
* @private
*/
ModalComponent.prototype.elRef;
/**
* @type {?}
* @private
*/
ModalComponent.prototype.componentFactoryResolver;
/**
* @type {?}
* @private
*/
ModalComponent.prototype.cdRef;
/**
* @type {?}
* @private
*/
ModalComponent.prototype.modalRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vZnVuZGFtZW50YWwtbmd4LyIsInNvdXJjZXMiOlsibGliL21vZGFsL21vZGFsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsVUFBVSxFQUdWLElBQUksRUFDSixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCx3QkFBd0IsRUFHeEIsaUJBQWlCLEVBQUUsWUFBWSxFQUFhLFFBQVEsRUFDdkQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUMvRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNwRSxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUM7QUFFbkM7SUFtQm9DLDBDQUFrQjtJQTZCbEQsd0JBQW9CLEtBQWlCLEVBQ2pCLHdCQUFrRCxFQUNsRCxLQUF3QixFQUNaLFFBQWtCO1FBSGxELFlBSUksa0JBQU0sS0FBSyxDQUFDLFNBQ2Y7UUFMbUIsV0FBSyxHQUFMLEtBQUssQ0FBWTtRQUNqQiw4QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ2xELFdBQUssR0FBTCxLQUFLLENBQW1CO1FBQ1osY0FBUSxHQUFSLFFBQVEsQ0FBVTtRQXpCbEQscUJBQWUsR0FBWSxJQUFJLENBQUM7UUFFaEMsa0JBQVksR0FBWSxJQUFJLENBQUM7UUFFN0Isb0JBQWMsR0FBVyxJQUFJLENBQUM7UUFFOUIsZUFBUyxHQUFXLElBQUksQ0FBQztRQUV6QixxQkFBZSxHQUFXLElBQUksQ0FBQztRQUkvQiw0QkFBc0IsR0FBWSxJQUFJLENBQUM7UUFFdkMsaUJBQVcsR0FBYSxJQUFJLENBQUM7UUFFN0IscUJBQWUsR0FBVyxFQUFFLENBQUM7O0lBVzdCLENBQUM7Ozs7SUFFRCxpQ0FBUTs7O0lBQVI7UUFDSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQzs7OztJQUVELG9DQUFXOzs7SUFBWDtRQUNJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxDQUFDO1NBQy9CO0lBQ0wsQ0FBQzs7OztJQUVELHdDQUFlOzs7SUFBZjtRQUNJLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFO1lBQ3pCLElBQUksSUFBSSxDQUFDLGtCQUFrQixZQUFZLElBQUksRUFBRTtnQkFDekMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQ25EO2lCQUFNLElBQUksSUFBSSxDQUFDLGtCQUFrQixZQUFZLFdBQVcsRUFBRTtnQkFDdkQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQ2xEO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSTtnQkFDQSxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsRUFBRTtvQkFDakQsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLHNCQUFzQixJQUFJLElBQUksQ0FBQyxXQUFXO29CQUN4RSxpQkFBaUIsRUFBRSxLQUFLO29CQUN4QixZQUFZLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhO2lCQUN6QyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQzthQUM3QjtZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE9BQU8sQ0FBQyxJQUFJLENBQUMseUVBQXlFLENBQUMsQ0FBQzthQUMzRjtTQUNKO1FBQ0QsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQixDQUFDOzs7OztJQUdELHNDQUFhOzs7O0lBRGIsVUFDYyxLQUFvQjtRQUM5QixJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksS0FBSyxDQUFDLEdBQUcsS0FBSyxRQUFRLEVBQUU7WUFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDOzs7Ozs7SUFFTywwQ0FBaUI7Ozs7O0lBQXpCLFVBQTBCLE9BQWtCO1FBQ3hDLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUM7O1lBQ3BCLGdCQUFnQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyx1QkFBdUIsQ0FBQyxPQUFPLENBQUM7UUFDdkYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzVFLENBQUM7Ozs7OztJQUVPLHlDQUFnQjs7Ozs7SUFBeEIsVUFBeUIsT0FBeUI7UUFDOUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQzs7WUFDcEIsT0FBTyxHQUFHO1lBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxRQUFRO1NBQzNCO1FBQ0QsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMvRSxDQUFDOzs7O0lBRUQsdUNBQWM7OztJQUFkO1FBQ0ksSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDakQ7SUFDTCxDQUFDOztnQkFqSEosU0FBUyxTQUFDO29CQUNQLFFBQVEsRUFBRSxVQUFVO29CQUVwQiwyVEFBcUM7b0JBQ3JDLElBQUksRUFBRTt3QkFDRixNQUFNLEVBQUUsUUFBUTt3QkFDaEIsa0JBQWtCLEVBQUUsTUFBTTt3QkFDMUIsd0JBQXdCLEVBQUUsZ0JBQWdCO3dCQUMxQyxtQkFBbUIsRUFBRSxXQUFXO3dCQUNoQyx5QkFBeUIsRUFBRSxpQkFBaUI7d0JBQzVDLG1CQUFtQixFQUFFLE1BQU07d0JBQzNCLFdBQVcsRUFBRSxJQUFJO3dCQUNqQixVQUFVLEVBQUUsSUFBSTt3QkFDaEIsZUFBZSxFQUFFLEVBQUU7cUJBQ3RCO29CQUNELFVBQVUsRUFBRTt3QkFDUixhQUFhO3FCQUNoQjs7aUJBQ0o7Ozs7Z0JBbkNHLFVBQVU7Z0JBT1Ysd0JBQXdCO2dCQUd4QixpQkFBaUI7Z0JBRVosUUFBUSx1QkF3REEsUUFBUTs7OytCQTlCcEIsU0FBUyxTQUFDLElBQUksRUFBRSxFQUFDLElBQUksRUFBRSxnQkFBZ0IsRUFBQztnQ0FtRXhDLFlBQVksU0FBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUM7O0lBMEJyQyxxQkFBQztDQUFBLEFBbEhELENBbUJvQyxrQkFBa0IsR0ErRnJEO1NBL0ZZLGNBQWM7OztJQUV2QixzQ0FDK0I7O0lBRS9CLDRCQUFXOztJQUVYLHlDQUFnQzs7SUFFaEMsc0NBQTZCOztJQUU3Qix3Q0FBOEI7O0lBRTlCLG1DQUF5Qjs7SUFFekIseUNBQStCOztJQUUvQiw0Q0FBaUQ7O0lBRWpELGdEQUF1Qzs7SUFFdkMscUNBQTZCOztJQUU3Qix5Q0FBNkI7Ozs7O0lBRTdCLHNDQUErRDs7Ozs7SUFFL0QsbUNBQXVCOzs7OztJQUVYLCtCQUF5Qjs7Ozs7SUFDekIsa0RBQTBEOzs7OztJQUMxRCwrQkFBZ0M7Ozs7O0lBQ2hDLGtDQUFzQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIEVsZW1lbnRSZWYsXG4gICAgT25Jbml0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgVHlwZSxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIEVtYmVkZGVkVmlld1JlZixcbiAgICBDaGFuZ2VEZXRlY3RvclJlZiwgSG9zdExpc3RlbmVyLCBPbkRlc3Ryb3ksIE9wdGlvbmFsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTW9kYWxSZWYgfSBmcm9tICcuL21vZGFsLXV0aWxzL21vZGFsLXJlZic7XG5pbXBvcnQgeyBtb2RhbEZhZGVOZ0lmIH0gZnJvbSAnLi9tb2RhbC11dGlscy9tb2RhbC1hbmltYXRpb25zJztcbmltcG9ydCB7IEFic3RyYWN0RmROZ3hDbGFzcyB9IGZyb20gJy4uL3V0aWxzL2Fic3RyYWN0LWZkLW5neC1jbGFzcyc7XG5pbXBvcnQgZm9jdXNUcmFwIGZyb20gJ2ZvY3VzLXRyYXAnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLW1vZGFsJyxcbiAgICBzdHlsZVVybHM6IFsnbW9kYWwuY29tcG9uZW50LnNjc3MnXSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ3JvbGUnOiAnZGlhbG9nJyxcbiAgICAgICAgJ1tjbGFzcy5mZC1tb2RhbF0nOiAndHJ1ZScsXG4gICAgICAgICdbYXR0ci5hcmlhLWxhYmVsbGVkYnldJzogJ2FyaWFMYWJlbGxlZEJ5JyxcbiAgICAgICAgJ1thdHRyLmFyaWEtbGFiZWxdJzogJ2FyaWFMYWJlbCcsXG4gICAgICAgICdbYXR0ci5hcmlhLWRlc2NyaWJlZGJ5XSc6ICdhcmlhRGVzY3JpYmVkQnknLFxuICAgICAgICAnW2F0dHIuYXJpYS1tb2RhbF0nOiAndHJ1ZScsXG4gICAgICAgICdbYXR0ci5pZF0nOiAnaWQnLFxuICAgICAgICAndGFiaW5kZXgnOiAnLTEnLFxuICAgICAgICAnW0Btb2RhbC1mYWRlXSc6ICcnXG4gICAgfSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIG1vZGFsRmFkZU5nSWZcbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsQ29tcG9uZW50IGV4dGVuZHMgQWJzdHJhY3RGZE5neENsYXNzIGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gICAgQFZpZXdDaGlsZCgndmMnLCB7cmVhZDogVmlld0NvbnRhaW5lclJlZn0pXG4gICAgY29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gICAgaWQ6IHN0cmluZztcblxuICAgIGVzY0tleUNsb3NlYWJsZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBmb2N1c1RyYXBwZWQ6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgYXJpYUxhYmVsbGVkQnk6IHN0cmluZyA9IG51bGw7XG5cbiAgICBhcmlhTGFiZWw6IHN0cmluZyA9IG51bGw7XG5cbiAgICBhcmlhRGVzY3JpYmVkQnk6IHN0cmluZyA9IG51bGw7XG5cbiAgICBjaGlsZENvbXBvbmVudFR5cGU6IFRlbXBsYXRlUmVmPGFueT4gfCBUeXBlPGFueT47XG5cbiAgICBiYWNrZHJvcENsaWNrQ2xvc2VhYmxlOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIGhhc0JhY2tkcm9wOiBib29sZWFuICA9IHRydWU7XG5cbiAgICBtb2RhbFBhbmVsQ2xhc3M6IHN0cmluZyA9ICcnO1xuXG4gICAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgRW1iZWRkZWRWaWV3UmVmPGFueT47XG5cbiAgICBwcml2YXRlIGZvY3VzVHJhcDogYW55O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBlbFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgICAgICAgICBwcml2YXRlIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLFxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICAgICAgICAgICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgbW9kYWxSZWY6IE1vZGFsUmVmKSB7XG4gICAgICAgIHN1cGVyKGVsUmVmKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fc2V0UHJvcGVydGllcygpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5mb2N1c1RyYXApIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNUcmFwLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRDb21wb25lbnRUeXBlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGlsZENvbXBvbmVudFR5cGUgaW5zdGFuY2VvZiBUeXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRnJvbUNvbXBvbmVudCh0aGlzLmNoaWxkQ29tcG9uZW50VHlwZSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuY2hpbGRDb21wb25lbnRUeXBlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRGcm9tVGVtcGxhdGUodGhpcy5jaGlsZENvbXBvbmVudFR5cGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZvY3VzVHJhcHBlZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB0aGlzLmZvY3VzVHJhcCA9IGZvY3VzVHJhcCh0aGlzLmVsUmVmLm5hdGl2ZUVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgY2xpY2tPdXRzaWRlRGVhY3RpdmF0ZXM6IHRoaXMuYmFja2Ryb3BDbGlja0Nsb3NlYWJsZSAmJiB0aGlzLmhhc0JhY2tkcm9wLFxuICAgICAgICAgICAgICAgICAgICBlc2NhcGVEZWFjdGl2YXRlczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxGb2N1czogdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2N1c1RyYXAuYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ0F0dGVtcHRlZCB0byBmb2N1cyB0cmFwIHRoZSBtb2RhbCwgYnV0IG5vIHRhYmJhYmxlIGVsZW1lbnRzIHdlcmUgZm91bmQuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZFJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5dXAnLCBbJyRldmVudCddKVxuICAgIGNsb3NlTW9kYWxFc2MoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZXNjS2V5Q2xvc2VhYmxlICYmIGV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgIHRoaXMubW9kYWxSZWYuZGlzbWlzcygnZXNjYXBlJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGxvYWRGcm9tQ29tcG9uZW50KGNvbnRlbnQ6IFR5cGU8YW55Pik6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRhaW5lclJlZi5jbGVhcigpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRGYWN0b3J5ID0gdGhpcy5jb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIucmVzb2x2ZUNvbXBvbmVudEZhY3RvcnkoY29udGVudCk7XG4gICAgICAgIHRoaXMuY29tcG9uZW50UmVmID0gdGhpcy5jb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEZhY3RvcnkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZEZyb21UZW1wbGF0ZShjb250ZW50OiBUZW1wbGF0ZVJlZjxhbnk+KTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyUmVmLmNsZWFyKCk7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB7XG4gICAgICAgICAgICAkaW1wbGljaXQ6IHRoaXMubW9kYWxSZWZcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLmNvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcoY29udGVudCwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgX3NldFByb3BlcnRpZXMoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLm1vZGFsUGFuZWxDbGFzcykge1xuICAgICAgICAgICAgdGhpcy5fYWRkQ2xhc3NUb0VsZW1lbnQodGhpcy5tb2RhbFBhbmVsQ2xhc3MpO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19