@kushki/ng-suka
Version:
<p align="center"> <h1 align="center">Suka Components Angular</h1> <p align="center"> An Angular implementation of the Suka Design System </p> </p>
191 lines • 14.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Inject, TemplateRef, HostListener, EventEmitter, HostBinding } from '@angular/core';
import { ModalRef } from './modal-ref';
import { MODAL_CONTENT_DATA } from './modal.tokens';
import { trigger, state, style, transition, animate } from '@angular/animations';
/** @type {?} */
const ESCAPE_KEY = 27;
/** @type {?} */
const MODAL_ANIMATION_TIMINGS = '200ms cubic-bezier(0.64, 0, 0.35, 1)';
export class ModalContainer {
/**
* @param {?} dialogRef
* @param {?} content
*/
constructor(dialogRef, content) {
this.dialogRef = dialogRef;
this.content = content;
this.animationState = 'enter';
this.animationStateChanged = new EventEmitter();
this.showFooter = false;
this.baseClass = true;
}
/**
* @return {?}
*/
ngOnInit() {
if (this.content.actions && this.content.actions.length > 0) {
this.showFooter = true;
this.primaryActions = this.content.actions.filter((/**
* @param {?} action
* @return {?}
*/
(action) => action.type === 'primary'));
this.secondaryActions = this.content.actions.filter((/**
* @param {?} action
* @return {?}
*/
(action) => action.type === 'secondary'));
}
}
/**
* @param {?} value
* @return {?}
*/
isTemplate(value) {
return value instanceof TemplateRef;
}
/**
* @param {?=} event
* @return {?}
*/
onClose(event) {
this.dialogRef.close('cancel');
}
/**
* @param {?} tag
* @return {?}
*/
onAction(tag) {
this.dialogRef.close(tag);
}
/**
* @param {?} event
* @return {?}
*/
handleKeydown(event) {
// tslint:disable-next-line: deprecation
if (event.keyCode === ESCAPE_KEY) {
this.dialogRef.close('cancel');
}
}
/**
* @param {?} event
* @return {?}
*/
onAnimationStart(event) {
this.animationStateChanged.emit(event);
}
/**
* @param {?} event
* @return {?}
*/
onAnimationDone(event) {
this.animationStateChanged.emit(event);
}
/**
* @return {?}
*/
startExitAnimation() {
this.animationState = 'leave';
}
/**
* @param {?} $event
* @return {?}
*/
closeModal($event) {
this.dialogRef.close($event);
}
}
ModalContainer.decorators = [
{ type: Component, args: [{
selector: 'suka-modal',
template: `
<div class="modal"
[]="animationState"
(.start)="onAnimationStart($event)"
(.done)="onAnimationDone($event)"
cdkTrapFocus
>
<div class="modal__header">
<h5>
<ng-container *ngIf="!isTemplate(content.title)">{{content.title}}</ng-container>
<ng-template *ngIf="isTemplate(content.title)" [ngTemplateOutlet]="content.title"></ng-template>
</h5>
<button
*ngIf="content.closeButton"
sukaButton="plain"
(click)="onClose($event)"
>
<suka-icon icon="x"></suka-icon>
</button>
</div>
<div class="modal__content">
<ng-container *ngIf="!isTemplate(content.body)">{{content.body}}</ng-container>
<ng-container *ngIf="isTemplate(content.body)">
<ng-container
*ngTemplateOutlet="content.body; context: {closeModal: closeModal.bind(this)}"
></ng-container>
</ng-container>
</div>
<div class="modal__footer" *ngIf="showFooter">
<suka-button-group>
<button
*ngFor="let secondaryAction of secondaryActions"
sukaButton="plain"
(click)="onAction(secondaryAction.tag)"
>
{{secondaryAction.label}}
</button>
<button
*ngFor="let primaryAction of primaryActions"
sukaButton="primary"
(click)="onAction(primaryAction.tag)"
>
{{primaryAction.label}}
</button>
</suka-button-group>
</div>
</div>
`,
animations: [
trigger('slideContent', [
state('void', style({ transform: 'translate3d(0, 20rem, 0)', opacity: 0 })),
state('enter', style({ transform: 'none', opacity: 1 })),
state('leave', style({ transform: 'translate3d(0, 20rem, 0)', opacity: 0 })),
transition('* => *', animate(MODAL_ANIMATION_TIMINGS)),
])
]
}] }
];
/** @nocollapse */
ModalContainer.ctorParameters = () => [
{ type: ModalRef },
{ type: undefined, decorators: [{ type: Inject, args: [MODAL_CONTENT_DATA,] }] }
];
ModalContainer.propDecorators = {
baseClass: [{ type: HostBinding, args: ['class.modal--default',] }],
handleKeydown: [{ type: HostListener, args: ['document:keydown', ['$event'],] }]
};
if (false) {
/** @type {?} */
ModalContainer.prototype.animationState;
/** @type {?} */
ModalContainer.prototype.animationStateChanged;
/** @type {?} */
ModalContainer.prototype.showFooter;
/** @type {?} */
ModalContainer.prototype.primaryActions;
/** @type {?} */
ModalContainer.prototype.secondaryActions;
/** @type {?} */
ModalContainer.prototype.baseClass;
/** @type {?} */
ModalContainer.prototype.dialogRef;
/** @type {?} */
ModalContainer.prototype.content;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwtY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BrdXNoa2kvbmctc3VrYS8iLCJzb3VyY2VzIjpbImxpYi9tb2RhbC9tb2RhbC1jb250YWluZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBVSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEgsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNwRCxPQUFPLEVBQWtCLE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7TUFFM0YsVUFBVSxHQUFHLEVBQUU7O01BQ2YsdUJBQXVCLEdBQUcsc0NBQXNDO0FBNkR0RSxNQUFNLE9BQU8sY0FBYzs7Ozs7SUFTekIsWUFDUyxTQUFtQixFQUNTLE9BQVk7UUFEeEMsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQUNTLFlBQU8sR0FBUCxPQUFPLENBQUs7UUFWMUMsbUJBQWMsR0FBK0IsT0FBTyxDQUFDO1FBQ3JELDBCQUFxQixHQUFHLElBQUksWUFBWSxFQUFrQixDQUFDO1FBQ2xFLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFJa0IsY0FBUyxHQUFHLElBQUksQ0FBQztJQUtsRCxDQUFDOzs7O0lBRUUsUUFBUTtRQUNiLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztZQUN2QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU07Ozs7WUFBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUMsQ0FBQztZQUN6RixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTTs7OztZQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBQyxDQUFDO1NBQzlGO0lBQ0gsQ0FBQzs7Ozs7SUFFTSxVQUFVLENBQUMsS0FBSztRQUNyQixPQUFPLEtBQUssWUFBWSxXQUFXLENBQUM7SUFDdEMsQ0FBQzs7Ozs7SUFFTSxPQUFPLENBQUMsS0FBVztRQUN4QixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNqQyxDQUFDOzs7OztJQUVNLFFBQVEsQ0FBQyxHQUFXO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7Ozs7O0lBRW9ELGFBQWEsQ0FBQyxLQUFvQjtRQUNyRix3Q0FBd0M7UUFDeEMsSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLFVBQVUsRUFBRTtZQUNoQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoQztJQUNILENBQUM7Ozs7O0lBRUQsZ0JBQWdCLENBQUMsS0FBcUI7UUFDcEMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDOzs7OztJQUVELGVBQWUsQ0FBQyxLQUFxQjtRQUNuQyxJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3pDLENBQUM7Ozs7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7SUFDaEMsQ0FBQzs7Ozs7SUFFRCxVQUFVLENBQUMsTUFBVztRQUNwQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvQixDQUFDOzs7WUFsSEYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0QixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0NUO2dCQUNELFVBQVUsRUFBRTtvQkFDVixPQUFPLENBQUMsY0FBYyxFQUFFO3dCQUN0QixLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDM0UsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN4RCxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxFQUFFLFNBQVMsRUFBRSwwQkFBMEIsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDNUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsdUJBQXVCLENBQUMsQ0FBQztxQkFDdkQsQ0FBQztpQkFDSDthQUNGOzs7O1lBakVRLFFBQVE7NENBNkVaLE1BQU0sU0FBQyxrQkFBa0I7Ozt3QkFKM0IsV0FBVyxTQUFDLHNCQUFzQjs0QkEyQmxDLFlBQVksU0FBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7OztJQWpDNUMsd0NBQTREOztJQUM1RCwrQ0FBa0U7O0lBQ2xFLG9DQUFtQjs7SUFDbkIsd0NBQW1COztJQUNuQiwwQ0FBcUI7O0lBRXJCLG1DQUFzRDs7SUFHcEQsbUNBQTBCOztJQUMxQixpQ0FBK0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgVGVtcGxhdGVSZWYsIEhvc3RMaXN0ZW5lciwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIEhvc3RCaW5kaW5nIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1vZGFsUmVmIH0gZnJvbSAnLi9tb2RhbC1yZWYnO1xuaW1wb3J0IHsgTU9EQUxfQ09OVEVOVF9EQVRBIH0gZnJvbSAnLi9tb2RhbC50b2tlbnMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uRXZlbnQsIHRyaWdnZXIsIHN0YXRlLCBzdHlsZSwgdHJhbnNpdGlvbiwgYW5pbWF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG5jb25zdCBFU0NBUEVfS0VZID0gMjc7XG5jb25zdCBNT0RBTF9BTklNQVRJT05fVElNSU5HUyA9ICcyMDBtcyBjdWJpYy1iZXppZXIoMC42NCwgMCwgMC4zNSwgMSknO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzdWthLW1vZGFsJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIlxuICAgICAgW0BzbGlkZUNvbnRlbnRdPVwiYW5pbWF0aW9uU3RhdGVcIlxuICAgICAgKEBzbGlkZUNvbnRlbnQuc3RhcnQpPVwib25BbmltYXRpb25TdGFydCgkZXZlbnQpXCJcbiAgICAgIChAc2xpZGVDb250ZW50LmRvbmUpPVwib25BbmltYXRpb25Eb25lKCRldmVudClcIlxuICAgICAgY2RrVHJhcEZvY3VzXG4gICAgPlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsX19oZWFkZXJcIj5cbiAgICAgICAgPGg1PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShjb250ZW50LnRpdGxlKVwiPnt7Y29udGVudC50aXRsZX19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlICpuZ0lmPVwiaXNUZW1wbGF0ZShjb250ZW50LnRpdGxlKVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbnRlbnQudGl0bGVcIj48L25nLXRlbXBsYXRlPlxuICAgICAgICA8L2g1PlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nSWY9XCJjb250ZW50LmNsb3NlQnV0dG9uXCJcbiAgICAgICAgICBzdWthQnV0dG9uPVwicGxhaW5cIlxuICAgICAgICAgIChjbGljayk9XCJvbkNsb3NlKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgPHN1a2EtaWNvbiBpY29uPVwieFwiPjwvc3VrYS1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsX19jb250ZW50XCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNUZW1wbGF0ZShjb250ZW50LmJvZHkpXCI+e3tjb250ZW50LmJvZHl9fTwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNUZW1wbGF0ZShjb250ZW50LmJvZHkpXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb250ZW50LmJvZHk7IGNvbnRleHQ6IHtjbG9zZU1vZGFsOiBjbG9zZU1vZGFsLmJpbmQodGhpcyl9XCJcbiAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxfX2Zvb3RlclwiICpuZ0lmPVwic2hvd0Zvb3RlclwiPlxuICAgICAgICA8c3VrYS1idXR0b24tZ3JvdXA+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IHNlY29uZGFyeUFjdGlvbiBvZiBzZWNvbmRhcnlBY3Rpb25zXCJcbiAgICAgICAgICAgIHN1a2FCdXR0b249XCJwbGFpblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb24oc2Vjb25kYXJ5QWN0aW9uLnRhZylcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIHt7c2Vjb25kYXJ5QWN0aW9uLmxhYmVsfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgcHJpbWFyeUFjdGlvbiBvZiBwcmltYXJ5QWN0aW9uc1wiXG4gICAgICAgICAgICBzdWthQnV0dG9uPVwicHJpbWFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25BY3Rpb24ocHJpbWFyeUFjdGlvbi50YWcpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICB7e3ByaW1hcnlBY3Rpb24ubGFiZWx9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L3N1a2EtYnV0dG9uLWdyb3VwPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGAsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzbGlkZUNvbnRlbnQnLCBbXG4gICAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgMjByZW0sIDApJywgb3BhY2l0eTogMCB9KSksXG4gICAgICBzdGF0ZSgnZW50ZXInLCBzdHlsZSh7IHRyYW5zZm9ybTogJ25vbmUnLCBvcGFjaXR5OiAxIH0pKSxcbiAgICAgIHN0YXRlKCdsZWF2ZScsIHN0eWxlKHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlM2QoMCwgMjByZW0sIDApJywgb3BhY2l0eTogMCB9KSksXG4gICAgICB0cmFuc2l0aW9uKCcqID0+IConLCBhbmltYXRlKE1PREFMX0FOSU1BVElPTl9USU1JTkdTKSksXG4gICAgXSlcbiAgXVxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbENvbnRhaW5lciBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBhbmltYXRpb25TdGF0ZTogJ3ZvaWQnIHwgJ2VudGVyJyB8ICdsZWF2ZScgPSAnZW50ZXInO1xuICBwdWJsaWMgYW5pbWF0aW9uU3RhdGVDaGFuZ2VkID0gbmV3IEV2ZW50RW1pdHRlcjxBbmltYXRpb25FdmVudD4oKTtcbiAgc2hvd0Zvb3RlciA9IGZhbHNlO1xuICBwcmltYXJ5QWN0aW9uczogW107XG4gIHNlY29uZGFyeUFjdGlvbnM6IFtdO1xuXG4gIEBIb3N0QmluZGluZygnY2xhc3MubW9kYWwtLWRlZmF1bHQnKSBiYXNlQ2xhc3MgPSB0cnVlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1vZGFsUmVmLFxuICAgIEBJbmplY3QoTU9EQUxfQ09OVEVOVF9EQVRBKSBwdWJsaWMgY29udGVudDogYW55XG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmNvbnRlbnQuYWN0aW9ucyAmJiB0aGlzLmNvbnRlbnQuYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnNob3dGb290ZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wcmltYXJ5QWN0aW9ucyA9IHRoaXMuY29udGVudC5hY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gJ3ByaW1hcnknKTtcbiAgICAgIHRoaXMuc2Vjb25kYXJ5QWN0aW9ucyA9IHRoaXMuY29udGVudC5hY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24udHlwZSA9PT0gJ3NlY29uZGFyeScpO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1RlbXBsYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gIH1cblxuICBwdWJsaWMgb25DbG9zZShldmVudD86IGFueSkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdjYW5jZWwnKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkFjdGlvbih0YWc6IHN0cmluZykge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKHRhZyk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDprZXlkb3duJywgWyckZXZlbnQnXSkgcHVibGljIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGRlcHJlY2F0aW9uXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCdjYW5jZWwnKTtcbiAgICB9XG4gIH1cblxuICBvbkFuaW1hdGlvblN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgb25BbmltYXRpb25Eb25lKGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGVDaGFuZ2VkLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgc3RhcnRFeGl0QW5pbWF0aW9uKCkge1xuICAgIHRoaXMuYW5pbWF0aW9uU3RhdGUgPSAnbGVhdmUnO1xuICB9XG5cbiAgY2xvc2VNb2RhbCgkZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCRldmVudCk7XG4gIH1cbn1cbiJdfQ==