ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
469 lines (468 loc) • 35.8 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';
var ModalComponent = /** @class */ (function () {
function ModalComponent(_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();
}
Object.defineProperty(ModalComponent.prototype, "title", {
get: /**
* @return {?}
*/
function () {
return this._title;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value instanceof TemplateRef) {
this.isTitleString = false;
}
else {
this.isTitleString = true;
}
this._title = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "visible", {
set: /**
* @param {?} value
* @return {?}
*/
function (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();
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "closable", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.closable = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "maskClosable", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.maskClosable = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "popup", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.popup = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "animationType", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.animationType = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "transparent", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.transparent = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "footer", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.footer = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "platform", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.platform = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "message", {
get: /**
* @return {?}
*/
function () {
return this._message;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value instanceof TemplateRef) {
this.isMessageString = false;
}
else {
this.isMessageString = true;
}
this._message = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "className", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.className = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "wrapClassName", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.wrapClassName = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "actions", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.footer = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "defaultValue", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.defaultValue = value !== undefined ? value : '';
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "type", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.type = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "placeholders", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.placeholders = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "operation", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.operation = value;
this.setClassMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ModalComponent.prototype, "focus", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value) {
this._focus = value;
}
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
ModalComponent.prototype.setClassMap = /**
* @return {?}
*/
function () {
var _a, _b, _c;
this.wrapCls = (_a = {},
_a[this.defaultProps.wrapClassName] = true,
_a[this.defaultProps.prefixCls + "-wrap-popup"] = this.defaultProps.popup,
_a);
this.cls = (_b = {},
_b[this.defaultProps.className] = true,
_b[this.defaultProps.prefixCls + "-transparent"] = this.defaultProps.transparent,
_b[this.defaultProps.prefixCls + "-popup"] = this.defaultProps.popup,
_b[this.defaultProps.prefixCls + "-popup-" + this.defaultProps.animationType] = this.defaultProps.popup && this.defaultProps.animationType,
_b[this.defaultProps.prefixCls + "-android"] = this.defaultProps.platform === 'android',
_b);
this.btnGroupClass = (_c = {},
_c[this.defaultProps.prefixCls + "-button-group-" + (this.defaultProps.footer.length === 2 && !this.defaultProps.operation ? 'h' : 'v')] = true,
_c[this.defaultProps.prefixCls + "-button-group-" + (this.defaultProps.operation ? 'operation' : 'normal')] = true,
_c);
};
/**
* @param {?} type
* @param {?} value
* @return {?}
*/
ModalComponent.prototype.inputChange = /**
* @param {?} type
* @param {?} value
* @return {?}
*/
function (type, value) {
this.data[type] = value;
};
/**
* @return {?}
*/
ModalComponent.prototype.leaveAnimation = /**
* @return {?}
*/
function () {
var _this = this;
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(function () {
_this.defaultProps.visible = false;
}, 200);
};
/**
* @return {?}
*/
ModalComponent.prototype.close = /**
* @return {?}
*/
function () {
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 {?}
*/
ModalComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
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 = function () { return [
{ 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 }]
};
return ModalComponent;
}());
export { ModalComponent };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmctem9ycm8tYW50ZC1tb2JpbGUvIiwic291cmNlcyI6WyJtb2RhbC9tb2RhbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxSCxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7SUEwS3RELHdCQUFvQixPQUFxQjtRQUFyQixZQUFPLEdBQVAsT0FBTyxDQUFjOzRCQWpLMUI7WUFDYixPQUFPLEVBQUUsS0FBSztZQUNkLFNBQVMsRUFBRSxVQUFVO1lBQ3JCLFdBQVcsRUFBRSxLQUFLO1lBQ2xCLEtBQUssRUFBRSxLQUFLO1lBQ1osYUFBYSxFQUFFLFlBQVk7WUFDM0IsUUFBUSxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsRUFBRTtZQUNULE1BQU0sRUFBRSxFQUFFO1lBQ1YsUUFBUSxFQUFFLEtBQUs7WUFDZixZQUFZLEVBQUUsS0FBSztZQUNuQixTQUFTLEVBQUUsS0FBSztZQUNoQixRQUFRLEVBQUUsS0FBSztZQUNmLFNBQVMsRUFBRSxFQUFFO1lBQ2IsYUFBYSxFQUFFLEVBQUU7WUFDakIsT0FBTyxFQUFFLEVBQUU7WUFDWCxPQUFPLEVBQUUsRUFBRTtZQUNYLGlCQUFpQixFQUFFLEVBQUU7WUFDckIsSUFBSSxFQUFFLEVBQUU7WUFDUixZQUFZLEVBQUUsRUFBRTtZQUNoQixZQUFZLEVBQUUsRUFBRTtTQUNqQjtxQkFDZSxFQUFFOzZCQUNNLEVBQUU7eUJBQ2QsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLElBQUksRUFBRSxFQUFF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S0wsS0FBSzswQkFNTCxNQUFNOzt5QkF6S1Q7O1NBVWEsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbnB1dCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgRXZlbnRFbWl0dGVyLCBWaWV3RW5jYXBzdWxhdGlvbiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ1N3aXRjaCwgTmdTd2l0Y2hDYXNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE1vZGFsT3B0aW9ucyB9IGZyb20gJy4vbW9kYWwtb3B0aW9ucy5wcm92aWRlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ01vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21vZGFsLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgcHJvdmlkZXJzOiBbTmdTd2l0Y2gsIE5nU3dpdGNoQ2FzZSwgTW9kYWxPcHRpb25zXVxufSlcbmV4cG9ydCBjbGFzcyBNb2RhbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIGRlZmF1bHRQcm9wcyA9IHtcbiAgICB2aXNpYmxlOiBmYWxzZSxcbiAgICBwcmVmaXhDbHM6ICdhbS1tb2RhbCcsXG4gICAgdHJhbnNwYXJlbnQ6IGZhbHNlLFxuICAgIHBvcHVwOiBmYWxzZSxcbiAgICBhbmltYXRpb25UeXBlOiAnc2xpZGUtZG93bicsXG4gICAgYW5pbWF0ZWQ6IHRydWUsXG4gICAgc3R5bGU6IHt9LFxuICAgIGZvb3RlcjogW10sXG4gICAgY2xvc2FibGU6IGZhbHNlLFxuICAgIG1hc2tDbG9zYWJsZTogZmFsc2UsXG4gICAgb3BlcmF0aW9uOiBmYWxzZSxcbiAgICBwbGF0Zm9ybTogJ2lvcycsXG4gICAgY2xhc3NOYW1lOiAnJyxcbiAgICB3cmFwQ2xhc3NOYW1lOiAnJyxcbiAgICBtZXNzYWdlOiAnJyxcbiAgICBhY3Rpb25zOiBbXSxcbiAgICBjYWxsYmFja09yQWN0aW9uczogW10sXG4gICAgdHlwZTogJycsXG4gICAgZGVmYXVsdFZhbHVlOiAnJyxcbiAgICBwbGFjZWhvbGRlcnM6IFtdXG4gIH07XG4gIHZhbHVlOiBzdHJpbmcgPSAnJztcbiAgcGFzc3dvcmRWYWx1ZTogc3RyaW5nID0gJyc7XG4gIGF1dG9Gb2N1cyA9IHsgZm9jdXM6IHRydWUsIGRhdGU6IG5ldyBEYXRlKCkgfTtcbiAgdHJhbnNpdGlvbk5hbWU6IHN0cmluZyA9ICcnO1xuICBtYXNrVHJhbnNpdGlvbk5hbWU6IHN0cmluZyA9ICcnO1xuICBpc1RpdGxlU3RyaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgaXNNZXNzYWdlU3RyaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgd3JhcENscyA9IHt9O1xuICBjbHMgPSB7fTtcbiAgYnRuR3JvdXBDbGFzcyA9IHt9O1xuICBkYXRhID0ge307XG5cbiAgcHJpdmF0ZSBfdGl0bGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gPSAnJztcbiAgcHJpdmF0ZSBfbWVzc2FnZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiA9ICcnO1xuICBwcml2YXRlIF9mb2N1czogYm9vbGVhbiA9IHRydWU7XG5cbiAgQFZpZXdDaGlsZCgnaW5wdXRFbGVtZW50JylcbiAgaW5wdXRFbGVtZW50UmVmO1xuXG4gIEBJbnB1dCgpXG4gIGdldCB0aXRsZSgpOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fdGl0bGU7XG4gIH1cbiAgc2V0IHRpdGxlKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMuaXNUaXRsZVN0cmluZyA9IGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmlzVGl0bGVTdHJpbmcgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl90aXRsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB2aXNpYmxlKHZhbHVlKSB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgdGhpcy5sZWF2ZUFuaW1hdGlvbigpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlZmF1bHRQcm9wcy52aXNpYmxlID0gdmFsdWU7XG4gICAgICBpZiAodGhpcy5kZWZhdWx0UHJvcHMuYW5pbWF0ZWQpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVmYXVsdFByb3BzLnRyYW5zcGFyZW50KSB7XG4gICAgICAgICAgdGhpcy50cmFuc2l0aW9uTmFtZSA9IHRoaXMubWFza1RyYW5zaXRpb25OYW1lID0gJ2FtLWZhZGUtZW50ZXIgYW0tZmFkZS1lbnRlci1hY3RpdmUnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudHJhbnNpdGlvbk5hbWUgPSB0aGlzLm1hc2tUcmFuc2l0aW9uTmFtZSA9ICdhbS1zbGlkZS11cC1lbnRlciBhbS1zbGlkZS11cC1lbnRlci1hY3RpdmUnO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmRlZmF1bHRQcm9wcy5wb3B1cCkge1xuICAgICAgICAgIHRoaXMudHJhbnNpdGlvbk5hbWUgPVxuICAgICAgICAgICAgdGhpcy5kZWZhdWx0UHJvcHMuYW5pbWF0aW9uVHlwZSA9PT0gJ3NsaWRlLXVwJ1xuICAgICAgICAgICAgICA/ICdhbS1zbGlkZS11cC1lbnRlciBhbS1zbGlkZS11cC1lbnRlci1hY3RpdmUnXG4gICAgICAgICAgICAgIDogJ2FtLXNsaWRlLWRvd24tZW50ZXIgYW0tc2xpZGUtZG93bi1lbnRlci1hY3RpdmUnO1xuICAgICAgICAgIHRoaXMubWFza1RyYW5zaXRpb25OYW1lID0gJ2FtLWZhZGUtZW50ZXIgYW0tZmFkZS1lbnRlci1hY3RpdmUnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gICAgfVxuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBjbG9zYWJsZSh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLmNsb3NhYmxlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG1hc2tDbG9zYWJsZSh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLm1hc2tDbG9zYWJsZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBwb3B1cCh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLnBvcHVwID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBhbmltYXRpb25UeXBlKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuYW5pbWF0aW9uVHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgdHJhbnNwYXJlbnQodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy50cmFuc3BhcmVudCA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZm9vdGVyKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuZm9vdGVyID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHBsYXRmb3JtKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMucGxhdGZvcm0gPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IG1lc3NhZ2UoKTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX21lc3NhZ2U7XG4gIH1cbiAgc2V0IG1lc3NhZ2UodmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5pc01lc3NhZ2VTdHJpbmcgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5pc01lc3NhZ2VTdHJpbmcgPSB0cnVlO1xuICAgIH1cbiAgICB0aGlzLl9tZXNzYWdlID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGNsYXNzTmFtZSh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLmNsYXNzTmFtZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgd3JhcENsYXNzTmFtZSh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLndyYXBDbGFzc05hbWUgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGFjdGlvbnModmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5mb290ZXIgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGRlZmF1bHRWYWx1ZSh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLmRlZmF1bHRWYWx1ZSA9IHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6ICcnO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCB0eXBlKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMudHlwZSA9IHZhbHVlO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBwbGFjZWhvbGRlcnModmFsdWU6IEFycmF5PHN0cmluZz4pIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5wbGFjZWhvbGRlcnMgPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgb3BlcmF0aW9uKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMub3BlcmF0aW9uID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBmb2N1cyh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy5fZm9jdXMgPSB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX29wdGlvbjogTW9kYWxPcHRpb25zKSB7fVxuXG4gIHNldENsYXNzTWFwKCkge1xuICAgIHRoaXMud3JhcENscyA9IHtcbiAgICAgIFt0aGlzLmRlZmF1bHRQcm9wcy53cmFwQ2xhc3NOYW1lXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LXdyYXAtcG9wdXBgXTogdGhpcy5kZWZhdWx0UHJvcHMucG9wdXBcbiAgICB9O1xuXG4gICAgdGhpcy5jbHMgPSB7XG4gICAgICBbdGhpcy5kZWZhdWx0UHJvcHMuY2xhc3NOYW1lXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LXRyYW5zcGFyZW50YF06IHRoaXMuZGVmYXVsdFByb3BzLnRyYW5zcGFyZW50LFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tcG9wdXBgXTogdGhpcy5kZWZhdWx0UHJvcHMucG9wdXAsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1wb3B1cC0ke3RoaXMuZGVmYXVsdFByb3BzLmFuaW1hdGlvblR5cGV9YF06XG4gICAgICAgIHRoaXMuZGVmYXVsdFByb3BzLnBvcHVwICYmIHRoaXMuZGVmYXVsdFByb3BzLmFuaW1hdGlvblR5cGUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1hbmRyb2lkYF06IHRoaXMuZGVmYXVsdFByb3BzLnBsYXRmb3JtID09PSAnYW5kcm9pZCdcbiAgICB9O1xuXG4gICAgdGhpcy5idG5Hcm91cENsYXNzID0ge1xuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tYnV0dG9uLWdyb3VwLSR7XG4gICAgICAgIHRoaXMuZGVmYXVsdFByb3BzLmZvb3Rlci5sZW5ndGggPT09IDIgJiYgIXRoaXMuZGVmYXVsdFByb3BzLm9wZXJhdGlvbiA/ICdoJyA6ICd2J1xuICAgICAgfWBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tYnV0dG9uLWdyb3VwLSR7dGhpcy5kZWZhdWx0UHJvcHMub3BlcmF0aW9uID8gJ29wZXJhdGlvbicgOiAnbm9ybWFsJ31gXTogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBpbnB1dENoYW5nZSh0eXBlLCB2YWx1ZSkge1xuICAgIHRoaXMuZGF0YVt0eXBlXSA9IHZhbHVlO1xuICB9XG5cbiAgbGVhdmVBbmltYXRpb24oKSB7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFByb3BzLmFuaW1hdGVkKSB7XG4gICAgICBpZiAodGhpcy5kZWZhdWx0UHJvcHMudHJhbnNwYXJlbnQpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uTmFtZSA9IHRoaXMubWFza1RyYW5zaXRpb25OYW1lID0gJ2FtLWZhZGUtbGVhdmUgYW0tZmFkZS1sZWF2ZS1hY3RpdmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uTmFtZSA9IHRoaXMubWFza1RyYW5zaXRpb25OYW1lID0gJ2FtLXNsaWRlLXVwLWxlYXZlIGFtLXNsaWRlLXVwLWxlYXZlLWFjdGl2ZSc7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5kZWZhdWx0UHJvcHMucG9wdXApIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9uTmFtZSA9XG4gICAgICAgICAgdGhpcy5kZWZhdWx0UHJvcHMuYW5pbWF0aW9uVHlwZSA9PT0gJ3NsaWRlLXVwJ1xuICAgICAgICAgICAgPyAnYW0tc2xpZGUtdXAtbGVhdmUgYW0tc2xpZGUtdXAtbGVhdmUtYWN0aXZlJ1xuICAgICAgICAgICAgOiAnYW0tc2xpZGUtZG93bi1sZWF2ZSBhbS1zbGlkZS1kb3duLWxlYXZlLWFjdGl2ZSc7XG4gICAgICAgIHRoaXMubWFza1RyYW5zaXRpb25OYW1lID0gJ2FtLWZhZGUtbGVhdmUgYW0tZmFkZS1sZWF2ZS1hY3RpdmUnO1xuICAgICAgfVxuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZGVmYXVsdFByb3BzLnZpc2libGUgPSBmYWxzZTtcbiAgICB9LCAyMDApO1xuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgaWYgKCghdGhpcy5kZWZhdWx0UHJvcHMuY2xvc2FibGUgfHwgIXRoaXMuZGVmYXVsdFByb3BzLm1hc2tDbG9zYWJsZSkgJiYgIXRoaXMuZGVmYXVsdFByb3BzLnBvcHVwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9vcHRpb24uY2xvc2UpIHtcbiAgICAgIHRoaXMuX29wdGlvbi5jbG9zZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxlYXZlQW5pbWF0aW9uKCk7XG4gICAgICB0aGlzLm9uQ2xvc2UuZW1pdCgpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxufVxuIl19