UNPKG

ng-zorro-antd-mobile

Version:

An enterprise-class mobile UI components based on Ant Design and Angular

469 lines (468 loc) 35.8 kB
/** * @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