ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
379 lines (378 loc) • 31.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, Input, Output, TemplateRef, EventEmitter, ViewEncapsulation, ViewChild } from '@angular/core';
import { NgSwitch, NgSwitchCase } from '@angular/common';
import { ModalOptions } from './modal-options.provider';
export class ModalComponent {
/**
* @param {?} _option
*/
constructor(_option) {
this._option = _option;
this.defaultProps = {
visible: false,
prefixCls: 'am-modal',
transparent: false,
popup: false,
animationType: 'slide-down',
animated: true,
style: {},
footer: [],
closable: false,
maskClosable: false,
operation: false,
platform: 'ios',
className: '',
wrapClassName: '',
message: '',
actions: [],
callbackOrActions: [],
type: '',
defaultValue: '',
placeholders: []
};
this.value = '';
this.passwordValue = '';
this.autoFocus = { focus: true, date: new Date() };
this.transitionName = '';
this.maskTransitionName = '';
this.isTitleString = true;
this.isMessageString = true;
this.wrapCls = {};
this.cls = {};
this.btnGroupClass = {};
this.data = {};
this._title = '';
this._message = '';
this._focus = true;
this.onClose = new EventEmitter();
}
/**
* @return {?}
*/
get title() {
return this._title;
}
/**
* @param {?} value
* @return {?}
*/
set title(value) {
if (value instanceof TemplateRef) {
this.isTitleString = false;
}
else {
this.isTitleString = true;
}
this._title = value;
}
/**
* @param {?} value
* @return {?}
*/
set visible(value) {
if (!value) {
this.leaveAnimation();
}
else {
this.defaultProps.visible = value;
if (this.defaultProps.animated) {
if (this.defaultProps.transparent) {
this.transitionName = this.maskTransitionName = 'am-fade-enter am-fade-enter-active';
}
else {
this.transitionName = this.maskTransitionName = 'am-slide-up-enter am-slide-up-enter-active';
}
if (this.defaultProps.popup) {
this.transitionName =
this.defaultProps.animationType === 'slide-up'
? 'am-slide-up-enter am-slide-up-enter-active'
: 'am-slide-down-enter am-slide-down-enter-active';
this.maskTransitionName = 'am-fade-enter am-fade-enter-active';
}
}
this.setClassMap();
}
}
/**
* @param {?} value
* @return {?}
*/
set closable(value) {
this.defaultProps.closable = value;
}
/**
* @param {?} value
* @return {?}
*/
set maskClosable(value) {
this.defaultProps.maskClosable = value;
}
/**
* @param {?} value
* @return {?}
*/
set popup(value) {
this.defaultProps.popup = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set animationType(value) {
this.defaultProps.animationType = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set transparent(value) {
this.defaultProps.transparent = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set footer(value) {
this.defaultProps.footer = value;
}
/**
* @param {?} value
* @return {?}
*/
set platform(value) {
this.defaultProps.platform = value;
this.setClassMap();
}
/**
* @return {?}
*/
get message() {
return this._message;
}
/**
* @param {?} value
* @return {?}
*/
set message(value) {
if (value instanceof TemplateRef) {
this.isMessageString = false;
}
else {
this.isMessageString = true;
}
this._message = value;
}
/**
* @param {?} value
* @return {?}
*/
set className(value) {
this.defaultProps.className = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set wrapClassName(value) {
this.defaultProps.wrapClassName = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set actions(value) {
this.defaultProps.footer = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set defaultValue(value) {
this.defaultProps.defaultValue = value !== undefined ? value : '';
}
/**
* @param {?} value
* @return {?}
*/
set type(value) {
this.defaultProps.type = value;
}
/**
* @param {?} value
* @return {?}
*/
set placeholders(value) {
this.defaultProps.placeholders = value;
}
/**
* @param {?} value
* @return {?}
*/
set operation(value) {
this.defaultProps.operation = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set focus(value) {
if (value) {
this._focus = value;
}
}
/**
* @return {?}
*/
setClassMap() {
this.wrapCls = {
[this.defaultProps.wrapClassName]: true,
[`${this.defaultProps.prefixCls}-wrap-popup`]: this.defaultProps.popup
};
this.cls = {
[this.defaultProps.className]: true,
[`${this.defaultProps.prefixCls}-transparent`]: this.defaultProps.transparent,
[`${this.defaultProps.prefixCls}-popup`]: this.defaultProps.popup,
[`${this.defaultProps.prefixCls}-popup-${this.defaultProps.animationType}`]: this.defaultProps.popup && this.defaultProps.animationType,
[`${this.defaultProps.prefixCls}-android`]: this.defaultProps.platform === 'android'
};
this.btnGroupClass = {
[`${this.defaultProps.prefixCls}-button-group-${this.defaultProps.footer.length === 2 && !this.defaultProps.operation ? 'h' : 'v'}`]: true,
[`${this.defaultProps.prefixCls}-button-group-${this.defaultProps.operation ? 'operation' : 'normal'}`]: true
};
}
/**
* @param {?} type
* @param {?} value
* @return {?}
*/
inputChange(type, value) {
this.data[type] = value;
}
/**
* @return {?}
*/
leaveAnimation() {
if (this.defaultProps.animated) {
if (this.defaultProps.transparent) {
this.transitionName = this.maskTransitionName = 'am-fade-leave am-fade-leave-active';
}
else {
this.transitionName = this.maskTransitionName = 'am-slide-up-leave am-slide-up-leave-active';
}
if (this.defaultProps.popup) {
this.transitionName =
this.defaultProps.animationType === 'slide-up'
? 'am-slide-up-leave am-slide-up-leave-active'
: 'am-slide-down-leave am-slide-down-leave-active';
this.maskTransitionName = 'am-fade-leave am-fade-leave-active';
}
}
setTimeout(() => {
this.defaultProps.visible = false;
}, 200);
}
/**
* @return {?}
*/
close() {
if ((!this.defaultProps.closable || !this.defaultProps.maskClosable) && !this.defaultProps.popup) {
return;
}
if (this._option.close) {
this._option.close();
}
else {
this.leaveAnimation();
this.onClose.emit();
}
}
/**
* @return {?}
*/
ngOnInit() {
this.setClassMap();
}
}
ModalComponent.decorators = [
{ type: Component, args: [{
selector: 'Modal',
template: "<div *ngIf=\"defaultProps.visible\">\n <div class=\"{{defaultProps.prefixCls}}-mask {{maskTransitionName}}\"></div>\n <div role=\"dialog\"\n class=\"{{defaultProps.prefixCls}}-wrap {{transitionName}}\"\n [ngClass]=\"wrapCls\"\n (click)=\"close()\"\n >\n <div role=\"document\"\n class=\"{{defaultProps.prefixCls}}\"\n [ngClass]=\"cls\"\n >\n <div class=\"{{defaultProps.prefixCls}}-content\">\n <div *ngIf=\"defaultProps.closable\"\n class=\"{{defaultProps.prefixCls}}-close\"\n (click)=\"close()\"\n >\n <span class=\"{{defaultProps.prefixCls}}-close-x\"></span>\n </div>\n <div class=\"{{defaultProps.prefixCls}}-header\">\n <div *ngIf=\"isTitleString\" class=\"{{defaultProps.prefixCls}}-title\">{{title}}</div>\n <ng-template *ngIf=\"!isTitleString\" [ngTemplateOutlet]=\"title\"></ng-template>\n </div>\n <div class=\"{{defaultProps.prefixCls}}-body\">\n <ng-content></ng-content>\n <div *ngIf=\"isMessageString\" class=\"{{defaultProps.prefixCls}}-alert-content\">{{message}}</div>\n <ng-template *ngIf=\"!isMessageString\" [ngTemplateOutlet]=\"message\"></ng-template>\n <ng-template *ngIf=\"defaultProps.type === 'default'\" [ngTemplateOutlet]=\"promptDefault\"></ng-template>\n <ng-template *ngIf=\"defaultProps.type === 'secure-text'\" [ngTemplateOutlet]=\"promptSecure\"></ng-template>\n <ng-template *ngIf=\"defaultProps.type === 'login-password'\" [ngTemplateOutlet]=\"promptPassword\"></ng-template>\n </div>\n <div class=\"{{defaultProps.prefixCls}}-footer\">\n <div [ngClass]=\"btnGroupClass\" role=\"group\">\n <div Button\n role=\"button\"\n *ngFor=\"let button of defaultProps.footer\"\n [className]=\"'am-modal-button'\"\n (onClick)=\"button.onPress()\"\n >\n {{button.text}}\n </div>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n\n<ng-template #promptPassword>\n <div class=\"{{defaultProps.prefixCls}}-input-container\">\n <div class=\"{{defaultProps.prefixCls}}-input\">\n <input \n #inputElement \n autofocus\n [type]=\"'text'\" \n [defaultValue]=\"defaultProps.defaultValue || ''\" \n [placeholder]=\"defaultProps.placeholders[0] || ''\"\n [(ngModel)]=\"value\" \n (ngModelChange)=\"inputChange('text', $event)\" \n >\n </div>\n <div className=\"{{defaultProps.prefixCls}}-input\">\n <input \n #inputElement \n [type]=\"'password'\" \n [defaultValue]=\"defaultProps.defaultValue || ''\" \n [placeholder]=\"defaultProps.placeholders[0] || ''\"\n [(ngModel)]=\"passwordValue\" \n (ngModelChange)=\"inputChange('password', $event)\" \n >\n </div>\n </div>\n</ng-template>\n<ng-template #promptSecure>\n <div className=\"{{defaultProps.prefixCls}}-input-container\">\n <div className=\"{{defaultProps.prefixCls}}-input\">\n <input \n #inputElement \n autofocus\n [type]=\"'password'\" \n [defaultValue]=\"defaultProps.defaultValue || ''\" \n [placeholder]=\"defaultProps.placeholders[0] || ''\"\n [(ngModel)]=\"passwordValue\" \n (ngModelChange)=\"inputChange('password', $event)\" \n >\n </div>\n </div>\n</ng-template>\n<ng-template #promptDefault>\n <div className=\"{{defaultProps.prefixCls}}-input-container\">\n <div className=\"{{defaultProps.prefixCls}}-input\">\n <input \n #inputElement \n autofocus\n [type]=\"'text'\" \n [defaultValue]=\"defaultProps.defaultValue || ''\" \n [placeholder]=\"defaultProps.placeholders[0] || ''\"\n [(ngModel)]=\"value\" \n (ngModelChange)=\"inputChange('text', $event)\" \n >\n </div>\n </div>\n</ng-template>",
encapsulation: ViewEncapsulation.None,
providers: [NgSwitch, NgSwitchCase, ModalOptions]
}] }
];
/** @nocollapse */
ModalComponent.ctorParameters = () => [
{ type: ModalOptions }
];
ModalComponent.propDecorators = {
inputElementRef: [{ type: ViewChild, args: ['inputElement',] }],
title: [{ type: Input }],
visible: [{ type: Input }],
closable: [{ type: Input }],
maskClosable: [{ type: Input }],
popup: [{ type: Input }],
animationType: [{ type: Input }],
transparent: [{ type: Input }],
footer: [{ type: Input }],
platform: [{ type: Input }],
message: [{ type: Input }],
className: [{ type: Input }],
wrapClassName: [{ type: Input }],
actions: [{ type: Input }],
defaultValue: [{ type: Input }],
type: [{ type: Input }],
placeholders: [{ type: Input }],
operation: [{ type: Input }],
focus: [{ type: Input }],
onClose: [{ type: Output }]
};
if (false) {
/** @type {?} */
ModalComponent.prototype.defaultProps;
/** @type {?} */
ModalComponent.prototype.value;
/** @type {?} */
ModalComponent.prototype.passwordValue;
/** @type {?} */
ModalComponent.prototype.autoFocus;
/** @type {?} */
ModalComponent.prototype.transitionName;
/** @type {?} */
ModalComponent.prototype.maskTransitionName;
/** @type {?} */
ModalComponent.prototype.isTitleString;
/** @type {?} */
ModalComponent.prototype.isMessageString;
/** @type {?} */
ModalComponent.prototype.wrapCls;
/** @type {?} */
ModalComponent.prototype.cls;
/** @type {?} */
ModalComponent.prototype.btnGroupClass;
/** @type {?} */
ModalComponent.prototype.data;
/** @type {?} */
ModalComponent.prototype._title;
/** @type {?} */
ModalComponent.prototype._message;
/** @type {?} */
ModalComponent.prototype._focus;
/** @type {?} */
ModalComponent.prototype.inputElementRef;
/** @type {?} */
ModalComponent.prototype.onClose;
/** @type {?} */
ModalComponent.prototype._option;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvIiwic291cmNlcyI6WyJtb2RhbC9tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxSCxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQVF4RCxNQUFNOzs7O0lBa0tKLFlBQW9CLE9BQXFCO1FBQXJCLFlBQU8sR0FBUCxPQUFPLENBQWM7NEJBaksxQjtZQUNiLE9BQU8sRUFBRSxLQUFLO1lBQ2QsU0FBUyxFQUFFLFVBQVU7WUFDckIsV0FBVyxFQUFFLEtBQUs7WUFDbEIsS0FBSyxFQUFFLEtBQUs7WUFDWixhQUFhLEVBQUUsWUFBWTtZQUMzQixRQUFRLEVBQUUsSUFBSTtZQUNkLEtBQUssRUFBRSxFQUFFO1lBQ1QsTUFBTSxFQUFFLEVBQUU7WUFDVixRQUFRLEVBQUUsS0FBSztZQUNmLFlBQVksRUFBRSxLQUFLO1lBQ25CLFNBQVMsRUFBRSxLQUFLO1lBQ2hCLFFBQVEsRUFBRSxLQUFLO1lBQ2YsU0FBUyxFQUFFLEVBQUU7WUFDYixhQUFhLEVBQUUsRUFBRTtZQUNqQixPQUFPLEVBQUUsRUFBRTtZQUNYLE9BQU8sRUFBRSxFQUFFO1lBQ1gsaUJBQWlCLEVBQUUsRUFBRTtZQUNyQixJQUFJLEVBQUUsRUFBRTtZQUNSLFlBQVksRUFBRSxFQUFFO1lBQ2hCLFlBQVksRUFBRSxFQUFFO1NBQ2pCO3FCQUNlLEVBQUU7NkJBQ00sRUFBRTt5QkFDZCxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksSUFB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Q0FBQyxRQUFRLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUU7WUFDaEcsT0FBTztTQUNSO1FBQ0QsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRTtZQUN0QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ3RCO2FBQU07WUFDTCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNyQjtLQUNGOzs7O0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztLQUNwQjs7O1lBdk9GLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsT0FBTztnQkFDakIseTlIQUFxQztnQkFDckMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLFNBQVMsRUFBRSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsWUFBWSxDQUFDO2FBQ2xEOzs7O1lBUFEsWUFBWTs7OzhCQStDbEIsU0FBUyxTQUFDLGNBQWM7b0JBR3hCLEtBQUs7c0JBWUwsS0FBSzt1QkF1QkwsS0FBSzsyQkFJTCxLQUFLO29CQUlMLEtBQUs7NEJBS0wsS0FBSzswQkFLTCxLQUFLO3FCQUtMLEtBQUs7dUJBSUwsS0FBSztzQkFLTCxLQUFLO3dCQVlMLEtBQUs7NEJBS0wsS0FBSztzQkFLTCxLQUFLOzJCQUtMLEtBQUs7bUJBSUwsS0FBSzsyQkFJTCxLQUFLO3dCQUlMLEtBQUs7b0JBS0wsS0FBSztzQkFNTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPdXRwdXQsIFRlbXBsYXRlUmVmLCBFdmVudEVtaXR0ZXIsIFZpZXdFbmNhcHN1bGF0aW9uLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nU3dpdGNoLCBOZ1N3aXRjaENhc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTW9kYWxPcHRpb25zIH0gZnJvbSAnLi9tb2RhbC1vcHRpb25zLnByb3ZpZGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnTW9kYWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICBwcm92aWRlcnM6IFtOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlLCBNb2RhbE9wdGlvbnNdXG59KVxuZXhwb3J0IGNsYXNzIE1vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGVmYXVsdFByb3BzID0ge1xuICAgIHZpc2libGU6IGZhbHNlLFxuICAgIHByZWZpeENsczogJ2FtLW1vZGFsJyxcbiAgICB0cmFuc3BhcmVudDogZmFsc2UsXG4gICAgcG9wdXA6IGZhbHNlLFxuICAgIGFuaW1hdGlvblR5cGU6ICdzbGlkZS1kb3duJyxcbiAgICBhbmltYXRlZDogdHJ1ZSxcbiAgICBzdHlsZToge30sXG4gICAgZm9vdGVyOiBbXSxcbiAgICBjbG9zYWJsZTogZmFsc2UsXG4gICAgbWFza0Nsb3NhYmxlOiBmYWxzZSxcbiAgICBvcGVyYXRpb246IGZhbHNlLFxuICAgIHBsYXRmb3JtOiAnaW9zJyxcbiAgICBjbGFzc05hbWU6ICcnLFxuICAgIHdyYXBDbGFzc05hbWU6ICcnLFxuICAgIG1lc3NhZ2U6ICcnLFxuICAgIGFjdGlvbnM6IFtdLFxuICAgIGNhbGxiYWNrT3JBY3Rpb25zOiBbXSxcbiAgICB0eXBlOiAnJyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnLFxuICAgIHBsYWNlaG9sZGVyczogW11cbiAgfTtcbiAgdmFsdWU6IHN0cmluZyA9ICcnO1xuICBwYXNzd29yZFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgYXV0b0ZvY3VzID0geyBmb2N1czogdHJ1ZSwgZGF0ZTogbmV3IERhdGUoKSB9O1xuICB0cmFuc2l0aW9uTmFtZTogc3RyaW5nID0gJyc7XG4gIG1hc2tUcmFuc2l0aW9uTmFtZTogc3RyaW5nID0gJyc7XG4gIGlzVGl0bGVTdHJpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBpc01lc3NhZ2VTdHJpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICB3cmFwQ2xzID0ge307XG4gIGNscyA9IHt9O1xuICBidG5Hcm91cENsYXNzID0ge307XG4gIGRhdGEgPSB7fTtcblxuICBwcml2YXRlIF90aXRsZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICcnO1xuICBwcml2YXRlIF9tZXNzYWdlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+ID0gJyc7XG4gIHByaXZhdGUgX2ZvY3VzOiBib29sZWFuID0gdHJ1ZTtcblxuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnKVxuICBpbnB1dEVsZW1lbnRSZWY7XG5cbiAgQElucHV0KClcbiAgZ2V0IHRpdGxlKCk6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl90aXRsZTtcbiAgfVxuICBzZXQgdGl0bGUodmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5pc1RpdGxlU3RyaW5nID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNUaXRsZVN0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX3RpdGxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHZpc2libGUodmFsdWUpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLmxlYXZlQW5pbWF0aW9uKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVmYXVsdFByb3BzLnZpc2libGUgPSB2YWx1ZTtcbiAgICAgIGlmICh0aGlzLmRlZmF1bHRQcm9wcy5hbmltYXRlZCkge1xuICAgICAgICBpZiAodGhpcy5kZWZhdWx0UHJvcHMudHJhbnNwYXJlbnQpIHtcbiAgICAgICAgICB0aGlzLnRyYW5zaXRpb25OYW1lID0gdGhpcy5tYXNrVHJhbnNpdGlvbk5hbWUgPSAnYW0tZmFkZS1lbnRlciBhbS1mYWRlLWVudGVyLWFjdGl2ZSc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uTmFtZSA9IHRoaXMubWFza1RyYW5zaXRpb25OYW1lID0gJ2FtLXNsaWRlLXVwLWVudGVyIGFtLXNsaWRlLXVwLWVudGVyLWFjdGl2ZSc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFByb3BzLnBvcHVwKSB7XG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uTmFtZSA9XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRQcm9wcy5hbmltYXRpb25UeXBlID09PSAnc2xpZGUtdXAnXG4gICAgICAgICAgICAgID8gJ2FtLXNsaWRlLXVwLWVudGVyIGFtLXNsaWRlLXVwLWVudGVyLWFjdGl2ZSdcbiAgICAgICAgICAgICAgOiAnYW0tc2xpZGUtZG93bi1lbnRlciBhbS1zbGlkZS1kb3duLWVudGVyLWFjdGl2ZSc7XG4gICAgICAgICAgdGhpcy5tYXNrVHJhbnNpdGlvbk5hbWUgPSAnYW0tZmFkZS1lbnRlciBhbS1mYWRlLWVudGVyLWFjdGl2ZSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGNsb3NhYmxlKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuY2xvc2FibGUgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbWFza0Nsb3NhYmxlKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMubWFza0Nsb3NhYmxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHBvcHVwKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMucG9wdXAgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGFuaW1hdGlvblR5cGUodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5hbmltYXRpb25UeXBlID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB0cmFuc3BhcmVudCh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLnRyYW5zcGFyZW50ID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBmb290ZXIodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5mb290ZXIgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcGxhdGZvcm0odmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5wbGF0Zm9ybSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbWVzc2FnZSgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fbWVzc2FnZTtcbiAgfVxuICBzZXQgbWVzc2FnZSh2YWx1ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55Pikge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLmlzTWVzc2FnZVN0cmluZyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzTWVzc2FnZVN0cmluZyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX21lc3NhZ2UgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgY2xhc3NOYW1lKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuY2xhc3NOYW1lID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB3cmFwQ2xhc3NOYW1lKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMud3JhcENsYXNzTmFtZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgYWN0aW9ucyh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLmZvb3RlciA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZGVmYXVsdFZhbHVlKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuZGVmYXVsdFZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDogJyc7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHR5cGUodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy50eXBlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHBsYWNlaG9sZGVycyh2YWx1ZTogQXJyYXk8c3RyaW5nPikge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLnBsYWNlaG9sZGVycyA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBvcGVyYXRpb24odmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5vcGVyYXRpb24gPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGZvY3VzKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9mb2N1cyA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICBAT3V0cHV0KClcbiAgb25DbG9zZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfb3B0aW9uOiBNb2RhbE9wdGlvbnMpIHt9XG5cbiAgc2V0Q2xhc3NNYXAoKSB7XG4gICAgdGhpcy53cmFwQ2xzID0ge1xuICAgICAgW3RoaXMuZGVmYXVsdFByb3BzLndyYXBDbGFzc05hbWVdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30td3JhcC1wb3B1cGBdOiB0aGlzLmRlZmF1bHRQcm9wcy5wb3B1cFxuICAgIH07XG5cbiAgICB0aGlzLmNscyA9IHtcbiAgICAgIFt0aGlzLmRlZmF1bHRQcm9wcy5jbGFzc05hbWVdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tdHJhbnNwYXJlbnRgXTogdGhpcy5kZWZhdWx0UHJvcHMudHJhbnNwYXJlbnQsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1wb3B1cGBdOiB0aGlzLmRlZmF1bHRQcm9wcy5wb3B1cCxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LXBvcHVwLSR7dGhpcy5kZWZhdWx0UHJvcHMuYW5pbWF0aW9uVHlwZX1gXTpcbiAgICAgICAgdGhpcy5kZWZhdWx0UHJvcHMucG9wdXAgJiYgdGhpcy5kZWZhdWx0UHJvcHMuYW5pbWF0aW9uVHlwZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWFuZHJvaWRgXTogdGhpcy5kZWZhdWx0UHJvcHMucGxhdGZvcm0gPT09ICdhbmRyb2lkJ1xuICAgIH07XG5cbiAgICB0aGlzLmJ0bkdyb3VwQ2xhc3MgPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1idXR0b24tZ3JvdXAtJHtcbiAgICAgICAgdGhpcy5kZWZhdWx0UHJvcHMuZm9vdGVyLmxlbmd0aCA9PT0gMiAmJiAhdGhpcy5kZWZhdWx0UHJvcHMub3BlcmF0aW9uID8gJ2gnIDogJ3YnXG4gICAgICB9YF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1idXR0b24tZ3JvdXAtJHt0aGlzLmRlZmF1bHRQcm9wcy5vcGVyYXRpb24gPyAnb3BlcmF0aW9uJyA6ICdub3JtYWwnfWBdOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIGlucHV0Q2hhbmdlKHR5cGUsIHZhbHVlKSB7XG4gICAgdGhpcy5kYXRhW3R5cGVdID0gdmFsdWU7XG4gIH1cblxuICBsZWF2ZUFuaW1hdGlvbigpIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0UHJvcHMuYW5pbWF0ZWQpIHtcbiAgICAgIGlmICh0aGlzLmRlZmF1bHRQcm9wcy50cmFuc3BhcmVudCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25OYW1lID0gdGhpcy5tYXNrVHJhbnNpdGlvbk5hbWUgPSAnYW0tZmFkZS1sZWF2ZSBhbS1mYWRlLWxlYXZlLWFjdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25OYW1lID0gdGhpcy5tYXNrVHJhbnNpdGlvbk5hbWUgPSAnYW0tc2xpZGUtdXAtbGVhdmUgYW0tc2xpZGUtdXAtbGVhdmUtYWN0aXZlJztcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmRlZmF1bHRQcm9wcy5wb3B1cCkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25OYW1lID1cbiAgICAgICAgICB0aGlzLmRlZmF1bHRQcm9wcy5hbmltYXRpb25UeXBlID09PSAnc2xpZGUtdXAnXG4gICAgICAgICAgICA/ICdhbS1zbGlkZS11cC1sZWF2ZSBhbS1zbGlkZS11cC1sZWF2ZS1hY3RpdmUnXG4gICAgICAgICAgICA6ICdhbS1zbGlkZS1kb3duLWxlYXZlIGFtLXNsaWRlLWRvd24tbGVhdmUtYWN0aXZlJztcbiAgICAgICAgdGhpcy5tYXNrVHJhbnNpdGlvbk5hbWUgPSAnYW0tZmFkZS1sZWF2ZSBhbS1mYWRlLWxlYXZlLWFjdGl2ZSc7XG4gICAgICB9XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kZWZhdWx0UHJvcHMudmlzaWJsZSA9IGZhbHNlO1xuICAgIH0sIDIwMCk7XG4gIH1cblxuICBjbG9zZSgpIHtcbiAgICBpZiAoKCF0aGlzLmRlZmF1bHRQcm9wcy5jbG9zYWJsZSB8fCAhdGhpcy5kZWZhdWx0UHJvcHMubWFza0Nsb3NhYmxlKSAmJiAhdGhpcy5kZWZhdWx0UHJvcHMucG9wdXApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX29wdGlvbi5jbG9zZSkge1xuICAgICAgdGhpcy5fb3B0aW9uLmNsb3NlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVhdmVBbmltYXRpb24oKTtcbiAgICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG59XG4iXX0=