ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
268 lines (267 loc) • 19.2 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, ViewEncapsulation, Input, Output, ElementRef, HostListener, EventEmitter, Renderer2, TemplateRef } from '@angular/core';
export class Button {
/**
* @param {?} _elementRef
* @param {?} _render
*/
constructor(_elementRef, _render) {
this._elementRef = _elementRef;
this._render = _render;
this.prefixCls = 'am-button';
this.ngTemplate = false;
this._className = '';
this._classList = [];
this._size = 'large';
this._loading = false;
this._active = false;
this._inline = false;
this._disabled = false;
this._icon = '';
this._userAgent = (/** @type {?} */ (navigator)).userAgent || (/** @type {?} */ (navigator)).vendor || (/** @type {?} */ (window)).opera;
this.onClick = new EventEmitter();
this._el = this._elementRef.nativeElement;
this._render.addClass(this._el, this.prefixCls);
this._className = this._el.className;
}
/**
* @return {?}
*/
get type() {
return this._type;
}
/**
* @return {?}
*/
get size() {
return this._size;
}
/**
* @return {?}
*/
get disabled() {
return this._disabled;
}
/**
* @return {?}
*/
get loading() {
return this._loading;
}
/**
* @return {?}
*/
get inline() {
return this._inline;
}
/**
* @return {?}
*/
get icon() {
return this._icon;
}
/**
* @param {?} value
* @return {?}
*/
set icon(value) {
if (value instanceof TemplateRef) {
this.ngTemplate = true;
this._icon = value;
}
else {
this.ngTemplate = false;
this._icon = /** @type {?} */ (value);
this.setClassMap();
}
}
/**
* @param {?} v
* @return {?}
*/
set className(v) {
this._className = this._className + ' ' + v;
this.setClassMap();
}
/**
* @param {?} event
* @return {?}
*/
touchStart(event) {
if (this._disabled) {
return;
}
this._active = true;
this.setClassMap();
}
/**
* @param {?} event
* @return {?}
*/
touchEnd(event) {
if (this._disabled) {
return;
}
this._active = false;
this.setClassMap();
}
/**
* @param {?} event
* @return {?}
*/
click(event) {
if (this._disabled) {
return;
}
this.onClick.emit();
}
/**
* @param {?} value
* @return {?}
*/
isTemplateRef(value) {
if (value) {
return value instanceof TemplateRef;
}
return false;
}
/**
* @param {?} value
* @return {?}
*/
set type(value) {
this._type = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
this._disabled = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set loading(value) {
this._loading = value;
if (value) {
if (this._el.querySelector('icon')) {
this._el.querySelector('icon').parentNode.removeChild(this._el.querySelector('icon'));
}
}
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set size(value) {
this._size = value;
this.setClassMap();
}
/**
* @param {?} value
* @return {?}
*/
set inline(value) {
this._inline = value;
this.setClassMap();
}
/**
* @return {?}
*/
ngAfterViewInit() {
if (this._el.querySelector('img')) {
/** @type {?} */
const amSize = this._size === 'small' ? 'am-icon-xxs' : 'am-icon-md';
this._el.querySelector('img').setAttribute('class', `am-icon ${this.prefixCls}-icon ${amSize}`);
this._render.addClass(this._el, `${this.prefixCls}-icon`);
}
}
/**
* @return {?}
*/
setClassMap() {
this.iconType = this._loading ? 'loading' : this._icon;
this._classList = [
this._type && `${this.prefixCls}-${this._type}`,
this._size === 'small' && `${this.prefixCls}-${this._size}`,
this._disabled && `${this.prefixCls}-disabled`,
this._loading && `${this.prefixCls}-loading`,
this.iconType && `${this.prefixCls}-icon`,
this._active && `${this.prefixCls}-active`,
this._inline && `${this.prefixCls}-inline`
].filter(item => {
return !!item;
});
this._el.className = this._className + ' ' + this._classList.join(' ');
}
}
Button.decorators = [
{ type: Component, args: [{
selector: '[Button], nzm-button',
encapsulation: ViewEncapsulation.None,
template: "<Icon *ngIf=\"!ngTemplate\"\n class=\"{{prefixCls}}-icon\"\n [type]=\"iconType\"\n [size]=\"size ==='small' ? 'xxs' : 'md'\"\n></Icon>\n<ng-template *ngIf=\"ngTemplate\" [ngTemplateOutlet]=\"icon\"></ng-template>\n<ng-content select=\"img\"></ng-content>\n<div class=\"{{prefixCls}}-content\">\n <span>\n <ng-content></ng-content>\n </span>\n</div>"
}] }
];
/** @nocollapse */
Button.ctorParameters = () => [
{ type: ElementRef },
{ type: Renderer2 }
];
Button.propDecorators = {
type: [{ type: Input }],
size: [{ type: Input }],
disabled: [{ type: Input }],
loading: [{ type: Input }],
inline: [{ type: Input }],
icon: [{ type: Input }],
className: [{ type: Input }],
onClick: [{ type: Output }],
touchStart: [{ type: HostListener, args: ['touchstart', ['$event'],] }, { type: HostListener, args: ['mousedown', ['$event'],] }],
touchEnd: [{ type: HostListener, args: ['touchend', ['$event'],] }, { type: HostListener, args: ['mouseup', ['$event'],] }, { type: HostListener, args: ['touchmove', ['$event'],] }, { type: HostListener, args: ['mousemove', ['$event'],] }, { type: HostListener, args: ['touchcancel', ['$event'],] }],
click: [{ type: HostListener, args: ['click', ['$event'],] }]
};
if (false) {
/** @type {?} */
Button.prototype.prefixCls;
/** @type {?} */
Button.prototype.ngTemplate;
/** @type {?} */
Button.prototype.iconType;
/** @type {?} */
Button.prototype._el;
/** @type {?} */
Button.prototype._className;
/** @type {?} */
Button.prototype._classList;
/** @type {?} */
Button.prototype._type;
/** @type {?} */
Button.prototype._size;
/** @type {?} */
Button.prototype._loading;
/** @type {?} */
Button.prototype._active;
/** @type {?} */
Button.prototype._inline;
/** @type {?} */
Button.prototype._disabled;
/** @type {?} */
Button.prototype._icon;
/** @type {?} */
Button.prototype._userAgent;
/** @type {?} */
Button.prototype.onClick;
/** @type {?} */
Button.prototype._elementRef;
/** @type {?} */
Button.prototype._render;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsiYnV0dG9uL2J1dHRvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osU0FBUyxFQUNULFdBQVcsRUFFWixNQUFNLGVBQWUsQ0FBQztBQU92QixNQUFNOzs7OztJQXlGSixZQUFvQixXQUF1QixFQUFVLE9BQWtCO1FBQW5ELGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBVzt5QkF4Rm5ELFdBQVc7MEJBQ1QsS0FBSzswQkFJTixFQUFFOzBCQUNHLEVBQUU7cUJBRVosT0FBTzt3QkFDSixLQUFLO3VCQUNOLEtBQUs7dUJBQ0wsS0FBSzt5QkFDSCxLQUFLO3FCQUNrQixFQUFFOzBCQUN4QixtQkFBTSxTQUFTLEVBQUMsQ0FBQyxTQUFTLElBQUksbUJBQU0sU0FBUyxFQUFDLENBQUMsTUFBTSxJQUFJLG1CQUFNLE1BQU0sRUFBQyxDQUFDLEtBQUs7dUJBMENwRSxJQUFJLFlBQVksRUFBRTtRQWlDN0MsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO0tBQ3RDOzs7O0lBNUVELElBQ0ksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNuQjs7OztJQUNELElBQ0ksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUss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QUFDLFNBQVMsU0FBUztZQUMxQyxJQUFJLENBQUMsT0FBTyxJQUFJLEdBQUcsSUFBSSxDQUFDLFNBQVMsU0FBUztTQUMzQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNkLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQztTQUNmLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxVQUFVLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDOzs7O1lBOUoxRSxTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLHNCQUFzQjtnQkFDaEMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7Z0JBQ3JDLDRYQUFzQzthQUN2Qzs7OztZQVpDLFVBQVU7WUFHVixTQUFTOzs7bUJBMkJSLEtBQUs7bUJBSUwsS0FBSzt1QkFJTCxLQUFLO3NCQUlMLEtBQUs7cUJBSUwsS0FBSzttQkFJTCxLQUFLO3dCQWNMLEtBQUs7c0JBS0wsTUFBTTt5QkFHTixZQUFZLFNBQUMsWUFBWSxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQ3JDLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUM7dUJBUXBDLFlBQVksU0FBQyxVQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FDbkMsWUFBWSxTQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxjQUNsQyxZQUFZLFNBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLGNBQ3BDLFlBQVksU0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FDcEMsWUFBWSxTQUFDLGFBQWEsRUFBRSxDQUFDLFFBQVEsQ0FBQztvQkFTdEMsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgVmlld0VuY2Fwc3VsYXRpb24sXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIEVsZW1lbnRSZWYsXG4gIEhvc3RMaXN0ZW5lcixcbiAgRXZlbnRFbWl0dGVyLFxuICBSZW5kZXJlcjIsXG4gIFRlbXBsYXRlUmVmLFxuICBBZnRlclZpZXdJbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdbQnV0dG9uXSwgbnptLWJ1dHRvbicsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24uY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEJ1dHRvbiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBwcmVmaXhDbHM6IHN0cmluZyA9ICdhbS1idXR0b24nO1xuICBuZ1RlbXBsYXRlOiBib29sZWFuID0gZmFsc2U7XG4gIGljb25UeXBlOiBhbnk7XG5cbiAgcHJpdmF0ZSBfZWw6IEhUTUxFbGVtZW50O1xuICBwcml2YXRlIF9jbGFzc05hbWUgPSAnJztcbiAgcHJpdmF0ZSBfY2xhc3NMaXN0OiBhbnkgPSBbXTtcbiAgcHJpdmF0ZSBfdHlwZTogc3RyaW5nO1xuICBwcml2YXRlIF9zaXplID0gJ2xhcmdlJztcbiAgcHJpdmF0ZSBfbG9hZGluZyA9IGZhbHNlO1xuICBwcml2YXRlIF9hY3RpdmUgPSBmYWxzZTtcbiAgcHJpdmF0ZSBfaW5saW5lID0gZmFsc2U7XG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XG4gIHByaXZhdGUgX2ljb246IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gPSAnJztcbiAgcHJpdmF0ZSBfdXNlckFnZW50ID0gKDxhbnk+bmF2aWdhdG9yKS51c2VyQWdlbnQgfHwgKDxhbnk+bmF2aWdhdG9yKS52ZW5kb3IgfHwgKDxhbnk+d2luZG93KS5vcGVyYTtcblxuICBASW5wdXQoKVxuICBnZXQgdHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCBzaXplKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgbG9hZGluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbG9hZGluZztcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgaW5saW5lKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbmxpbmU7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGljb24oKTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2ljb247XG4gIH1cbiAgc2V0IGljb24odmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5uZ1RlbXBsYXRlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2ljb24gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5uZ1RlbXBsYXRlID0gZmFsc2U7XG4gICAgICB0aGlzLl9pY29uID0gPHN0cmluZz52YWx1ZTtcbiAgICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGNsYXNzTmFtZSh2KSB7XG4gICAgdGhpcy5fY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lICsgJyAnICsgdjtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoc3RhcnQnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nLCBbJyRldmVudCddKVxuICB0b3VjaFN0YXJ0KGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCd0b3VjaGVuZCcsIFsnJGV2ZW50J10pXG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaG1vdmUnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCdtb3VzZW1vdmUnLCBbJyRldmVudCddKVxuICBASG9zdExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIFsnJGV2ZW50J10pXG4gIHRvdWNoRW5kKGV2ZW50KSB7XG4gICAgaWYgKHRoaXMuX2Rpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgY2xpY2soZXZlbnQpIHtcbiAgICBpZiAodGhpcy5fZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vbkNsaWNrLmVtaXQoKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgX3JlbmRlcjogUmVuZGVyZXIyKSB7XG4gICAgdGhpcy5fZWwgPSB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgdGhpcy5fcmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsLCB0aGlzLnByZWZpeENscyk7XG4gICAgdGhpcy5fY2xhc3NOYW1lID0gdGhpcy5fZWwuY2xhc3NOYW1lO1xuICB9XG5cbiAgaXNUZW1wbGF0ZVJlZih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWY7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHNldCB0eXBlKHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG5cbiAgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cblxuICBzZXQgbG9hZGluZyh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2xvYWRpbmcgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzLl9lbC5xdWVyeVNlbGVjdG9yKCdpY29uJykpIHtcbiAgICAgICAgdGhpcy5fZWwucXVlcnlTZWxlY3RvcignaWNvbicpLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5fZWwucXVlcnlTZWxlY3RvcignaWNvbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG5cbiAgc2V0IHNpemUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMuX3NpemUgPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cblxuICBzZXQgaW5saW5lKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5faW5saW5lID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbGFzc01hcCgpO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLl9lbC5xdWVyeVNlbGVjdG9yKCdpbWcnKSkge1xuICAgICAgY29uc3QgYW1TaXplID0gdGhpcy5fc2l6ZSA9PT0gJ3NtYWxsJyA/ICdhbS1pY29uLXh4cycgOiAnYW0taWNvbi1tZCc7XG4gICAgICB0aGlzLl9lbC5xdWVyeVNlbGVjdG9yKCdpbWcnKS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgYGFtLWljb24gJHt0aGlzLnByZWZpeENsc30taWNvbiAke2FtU2l6ZX1gKTtcbiAgICAgIHRoaXMuX3JlbmRlci5hZGRDbGFzcyh0aGlzLl9lbCwgYCR7dGhpcy5wcmVmaXhDbHN9LWljb25gKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldENsYXNzTWFwKCk6IHZvaWQge1xuICAgIHRoaXMuaWNvblR5cGUgPSB0aGlzLl9sb2FkaW5nID8gJ2xvYWRpbmcnIDogdGhpcy5faWNvbjtcbiAgICB0aGlzLl9jbGFzc0xpc3QgPSBbXG4gICAgICB0aGlzLl90eXBlICYmIGAke3RoaXMucHJlZml4Q2xzfS0ke3RoaXMuX3R5cGV9YCxcbiAgICAgIHRoaXMuX3NpemUgPT09ICdzbWFsbCcgJiYgYCR7dGhpcy5wcmVmaXhDbHN9LSR7dGhpcy5fc2l6ZX1gLFxuICAgICAgdGhpcy5fZGlzYWJsZWQgJiYgYCR7dGhpcy5wcmVmaXhDbHN9LWRpc2FibGVkYCxcbiAgICAgIHRoaXMuX2xvYWRpbmcgJiYgYCR7dGhpcy5wcmVmaXhDbHN9LWxvYWRpbmdgLFxuICAgICAgdGhpcy5pY29uVHlwZSAmJiBgJHt0aGlzLnByZWZpeENsc30taWNvbmAsXG4gICAgICB0aGlzLl9hY3RpdmUgJiYgYCR7dGhpcy5wcmVmaXhDbHN9LWFjdGl2ZWAsXG4gICAgICB0aGlzLl9pbmxpbmUgJiYgYCR7dGhpcy5wcmVmaXhDbHN9LWlubGluZWBcbiAgICBdLmZpbHRlcihpdGVtID0+IHtcbiAgICAgIHJldHVybiAhIWl0ZW07XG4gICAgfSk7XG4gICAgdGhpcy5fZWwuY2xhc3NOYW1lID0gdGhpcy5fY2xhc3NOYW1lICsgJyAnICsgdGhpcy5fY2xhc3NMaXN0LmpvaW4oJyAnKTtcbiAgfVxufVxuIl19