ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
502 lines (501 loc) • 35.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ViewEncapsulation, Input, TemplateRef, EventEmitter, Output, HostBinding, HostListener } from '@angular/core';
var ListItem = /** @class */ (function () {
function ListItem() {
this.defaultProps = {
prefixCls: 'am-list',
align: 'middle',
error: false,
multipleLine: false,
wrap: false,
platform: 'ios',
rippleStyle: {}
};
this.arrowCls = {};
this.lineCls = {};
this.wrapCls = '';
this.rippleCls = {};
this.rippleClicked = false;
this._thumb_component = false;
this._thumb_src = '';
this._extra_component = false;
this._extra_title = '';
this._arrow = '';
this._disabled = false;
this._className = '';
this._active = false;
this.onClick = new EventEmitter();
}
Object.defineProperty(ListItem.prototype, "extra", {
get: /**
* @return {?}
*/
function () {
return this._extra;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value instanceof TemplateRef) {
this._extra_component = true;
this._extra = value;
}
else {
this._extra_component = false;
this._extra_title = /** @type {?} */ (value);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "extra_component", {
get: /**
* @return {?}
*/
function () {
return this._extra_component;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "extra_title", {
get: /**
* @return {?}
*/
function () {
return this._extra_title;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "className", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._className = value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "arrow", {
get: /**
* @return {?}
*/
function () {
return this._arrow;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this._arrow = value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "multipleLine", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.multipleLine = value === '' ? true : value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "error", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.error = value === '' ? true : value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "wrap", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.wrap = value === '' ? true : value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "align", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.align = value;
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "platform", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.defaultProps.platform = value;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "disabled", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (typeof value === 'boolean') {
this._disabled = value;
}
else {
if (value === 'true') {
this._disabled = true;
}
else {
this._disabled = false;
}
}
this.setClsMap();
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "thumb", {
get: /**
* @return {?}
*/
function () {
return this._thumb;
},
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
if (value instanceof TemplateRef) {
this._thumb_component = true;
this._thumb = value;
}
else {
this._thumb_component = false;
this._thumb_src = /** @type {?} */ (value);
}
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "thumb_component", {
get: /**
* @return {?}
*/
function () {
return this._thumb_component;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "thumb_src", {
get: /**
* @return {?}
*/
function () {
return this._thumb_src;
},
enumerable: true,
configurable: true
});
Object.defineProperty(ListItem.prototype, "bingClassName", {
get: /**
* @return {?}
*/
function () {
return this.wrapCls;
},
enumerable: true,
configurable: true
});
/**
* @param {?} event
* @return {?}
*/
ListItem.prototype.click = /**
* @param {?} event
* @return {?}
*/
function (event) {
this.onItemClick(event);
};
/**
* @return {?}
*/
ListItem.prototype.start = /**
* @return {?}
*/
function () {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = true;
this.setClsMap();
}
};
/**
* @return {?}
*/
ListItem.prototype.move = /**
* @return {?}
*/
function () {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
};
/**
* @return {?}
*/
ListItem.prototype.end = /**
* @return {?}
*/
function () {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
};
/**
* @return {?}
*/
ListItem.prototype.mouse_start = /**
* @return {?}
*/
function () {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = true;
this.setClsMap();
}
};
/**
* @return {?}
*/
ListItem.prototype.mouse_end = /**
* @return {?}
*/
function () {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
};
/**
* @return {?}
*/
ListItem.prototype.setClsMap = /**
* @return {?}
*/
function () {
var e_1, _a, _b, _c, _d, _e, _f;
/** @type {?} */
var classNameList = this._className.split(' ');
/** @type {?} */
var classNameObj = {};
this.wrapCls = '';
try {
for (var classNameList_1 = tslib_1.__values(classNameList), classNameList_1_1 = classNameList_1.next(); !classNameList_1_1.done; classNameList_1_1 = classNameList_1.next()) {
var value = classNameList_1_1.value;
if (value) {
classNameObj = tslib_1.__assign({}, classNameObj, (_b = {}, _b["" + value] = true, _b));
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (classNameList_1_1 && !classNameList_1_1.done && (_a = classNameList_1.return)) _a.call(classNameList_1);
}
finally { if (e_1) throw e_1.error; }
}
/** @type {?} */
var wrapClsObj = tslib_1.__assign((_c = {}, _c[this.defaultProps.prefixCls + "-item"] = true, _c[this.defaultProps.prefixCls + "-item-disabled"] = this._disabled, _c[this.defaultProps.prefixCls + "-item-active"] = this._active, _c[this.defaultProps.prefixCls + "-item-error"] = this.defaultProps.error, _c[this.defaultProps.prefixCls + "-item-top"] = this.defaultProps.align === 'top', _c[this.defaultProps.prefixCls + "-item-middle"] = this.defaultProps.align === 'middle', _c[this.defaultProps.prefixCls + "-item-bottom"] = this.defaultProps.align === 'bottom', _c), classNameObj);
for (var key in wrapClsObj) {
if (wrapClsObj[key]) {
this.wrapCls += " " + key;
}
}
this.rippleCls = (_d = {},
_d[this.defaultProps.prefixCls + "-ripple"] = true,
_d[this.defaultProps.prefixCls + "-ripple-animate"] = this.rippleClicked,
_d);
this.lineCls = (_e = {},
_e[this.defaultProps.prefixCls + "-line"] = true,
_e[this.defaultProps.prefixCls + "-line-multiple"] = this.defaultProps.multipleLine,
_e[this.defaultProps.prefixCls + "-line-wrap"] = this.defaultProps.wrap,
_e);
this.arrowCls = (_f = {},
_f[this.defaultProps.prefixCls + "-arrow"] = true,
_f[this.defaultProps.prefixCls + "-arrow-horizontal"] = this._arrow === 'horizontal',
_f[this.defaultProps.prefixCls + "-arrow-vertical"] = this._arrow === 'down' || this._arrow === 'up',
_f[this.defaultProps.prefixCls + "-arrow-vertical-up"] = this._arrow === 'up',
_f);
};
/**
* @param {?} ev
* @return {?}
*/
ListItem.prototype.onItemClick = /**
* @param {?} ev
* @return {?}
*/
function (ev) {
var _this = this;
/** @type {?} */
var isAndroid = this.defaultProps.platform === 'android';
if (isAndroid) {
if (this.debounceTimeout) {
clearTimeout(this.debounceTimeout);
this.debounceTimeout = null;
}
/** @type {?} */
var Item = ev.currentTarget;
/** @type {?} */
var RippleWidth = Math.max(Item.offsetHeight, Item.offsetWidth);
/** @type {?} */
var ClientRect_1 = ev.currentTarget.getBoundingClientRect();
/** @type {?} */
var pointX = ev.clientX - ClientRect_1.left - Item.offsetWidth / 2;
/** @type {?} */
var pointY = ev.clientY - ClientRect_1.top - Item.offsetWidth / 2;
/** @type {?} */
var coverRippleStyle = {
width: RippleWidth + "px",
height: RippleWidth + "px",
left: pointX + "px",
top: pointY + "px"
};
this.defaultProps.rippleStyle = coverRippleStyle;
this.rippleClicked = true;
this.setClsMap();
this.debounceTimeout = setTimeout(function () {
_this.rippleClicked = false;
_this.defaultProps.rippleStyle = { display: 'none' };
_this.setClsMap();
}, 1000);
}
this.onClick.emit(ev);
};
/**
* @return {?}
*/
ListItem.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.defaultProps.rippleStyle = { display: 'none' };
this.setClsMap();
};
/**
* @return {?}
*/
ListItem.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
if (this.debounceTimeout) {
clearTimeout(this.debounceTimeout);
this.debounceTimeout = null;
}
};
ListItem.decorators = [
{ type: Component, args: [{
selector: 'ListItem, nzm-list-item',
template: "<div *ngIf=\"thumb_src && !thumb_component\" class=\"{{defaultProps.prefixCls}}-thumb\">\n <img src={{thumb_src}}/>\n</div>\n<div *ngIf=\"thumb && thumb_component\" class=\"{{defaultProps.prefixCls}}-thumb\">\n <ng-template [ngTemplateOutlet]=\"thumb\"></ng-template>\n</div>\n<div [ngClass]=\"lineCls\">\n <div class=\"{{defaultProps.prefixCls}}-content\">\n <ng-content></ng-content>\n </div>\n <div *ngIf=\"extra_title && !extra_component\"\n class=\"{{defaultProps.prefixCls}}-extra\"\n [innerHTML]=\"extra_title\"\n ></div>\n <div *ngIf=\"extra && extra_component\" class=\"{{defaultProps.prefixCls}}-extra\">\n <ng-template [ngTemplateOutlet]=\"extra\"></ng-template>\n </div>\n <div *ngIf=\"arrow\" [ngClass]=\"arrowCls\" aria-hidden=\"true\"></div>\n</div>\n<div [ngClass]=\"rippleCls\" [ngStyle]=\"defaultProps.rippleStyle\"></div>\n\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
ListItem.ctorParameters = function () { return []; };
ListItem.propDecorators = {
extra: [{ type: Input }],
className: [{ type: Input }],
arrow: [{ type: Input }],
multipleLine: [{ type: Input }],
error: [{ type: Input }],
wrap: [{ type: Input }],
align: [{ type: Input }],
platform: [{ type: Input }],
disabled: [{ type: Input }],
thumb: [{ type: Input }],
onClick: [{ type: Output }],
bingClassName: [{ type: HostBinding, args: ['class',] }],
click: [{ type: HostListener, args: ['click', ['$event'],] }],
start: [{ type: HostListener, args: ['touchstart',] }],
move: [{ type: HostListener, args: ['touchmove',] }],
end: [{ type: HostListener, args: ['touchend',] }],
mouse_start: [{ type: HostListener, args: ['mousedown',] }],
mouse_end: [{ type: HostListener, args: ['mouseup',] }]
};
return ListItem;
}());
export { ListItem };
if (false) {
/** @type {?} */
ListItem.prototype.defaultProps;
/** @type {?} */
ListItem.prototype.arrowCls;
/** @type {?} */
ListItem.prototype.lineCls;
/** @type {?} */
ListItem.prototype.wrapCls;
/** @type {?} */
ListItem.prototype.rippleCls;
/** @type {?} */
ListItem.prototype.rippleClicked;
/** @type {?} */
ListItem.prototype.debounceTimeout;
/** @type {?} */
ListItem.prototype._thumb_component;
/** @type {?} */
ListItem.prototype._thumb;
/** @type {?} */
ListItem.prototype._thumb_src;
/** @type {?} */
ListItem.prototype._extra_component;
/** @type {?} */
ListItem.prototype._extra;
/** @type {?} */
ListItem.prototype._extra_title;
/** @type {?} */
ListItem.prototype._arrow;
/** @type {?} */
ListItem.prototype._disabled;
/** @type {?} */
ListItem.prototype._className;
/** @type {?} */
ListItem.prototype._active;
/** @type {?} */
ListItem.prototype.onClick;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsibGlzdC9saXN0LWl0ZW0vbGlzdC1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsaUJBQWlCLEVBRWpCLEtBQUssRUFDTCxXQUFXLEVBQ1gsWUFBWSxFQUNaLE1BQU0sRUFFTixXQUFXLEVBQ1gsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDOztJQTBLckI7NEJBbEtlO1lBQ2IsU0FBUyxFQUFFLFNBQVM7WUFDcEIsS0FBSyxFQUFFLFFBQVE7WUFDZixLQUFLLEVBQUUsS0FBSztZQUNaLFlBQVksRUFBRSxLQUFLO1lBQ25CLElBQUksRUFBRSxLQUFLO1lBQ1gsUUFBUSxFQUFFLEtBQUs7WUFDZixXQUFXLEVBQUUsRUFBRTtTQUNoQjt3QkFDZSxFQUFFO3VCQUNILEVBQUU7dUJBQ0MsRUFBRTt5QkFDSCxFQUFFOzZCQUNNLEtBQUs7Z0NBR00sS0FBSzswQkFFWixFQUFFO2dDQUNLLEtBQUs7NEJBRVYsRUFBRTtzQkFDUixFQUFFO3lCQUNFLEtBQUs7MEJBQ0wsRUFBRTt1QkFDSixLQUFLO3VCQTJGSCxJQUFJLFlBQVksRUFBTztLQThDcEM7SUF2SWhCLHNCQUNJLDJCQUFLOzs7O1FBRFQ7WUFFRSxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7U0FDcEI7Ozs7O1FBT0QsVUFBVSxLQUFnQztZQUN4QyxJQUFJLEtBQUssWUFBWSxXQUFXLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQzdCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO2FBQ3JCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxZQUFZLHFCQUFXLEtBQUssQ0FBQSxDQUFDO2FB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USxDQUFDO3dCQUloQyxZQUFZLFNBQUMsWUFBWTt1QkFPekIsWUFBWSxTQUFDLFdBQVc7c0JBT3hCLFlBQVksU0FBQyxVQUFVOzhCQU92QixZQUFZLFNBQUMsV0FBVzs0QkFPeEIsWUFBWSxTQUFDLFNBQVM7O21CQTdLekI7O1NBa0JhLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkluaXQsXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIE9uRGVzdHJveSxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnTGlzdEl0ZW0sIG56bS1saXN0LWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgZGVmYXVsdFByb3BzID0ge1xuICAgIHByZWZpeENsczogJ2FtLWxpc3QnLFxuICAgIGFsaWduOiAnbWlkZGxlJyxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgbXVsdGlwbGVMaW5lOiBmYWxzZSxcbiAgICB3cmFwOiBmYWxzZSxcbiAgICBwbGF0Zm9ybTogJ2lvcycsXG4gICAgcmlwcGxlU3R5bGU6IHt9XG4gIH07XG4gIGFycm93Q2xzOiBhbnkgPSB7fTtcbiAgbGluZUNsczogYW55ID0ge307XG4gIHdyYXBDbHM6IHN0cmluZyA9ICcnO1xuICByaXBwbGVDbHM6IGFueSA9IHt9O1xuICByaXBwbGVDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGRlYm91bmNlVGltZW91dDogYW55O1xuXG4gIHByaXZhdGUgX3RodW1iX2NvbXBvbmVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF90aHVtYjogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfdGh1bWJfc3JjOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZXh0cmFfY29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2V4dHJhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF9leHRyYV90aXRsZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2Fycm93OiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2xhc3NOYW1lOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IGV4dHJhKCkge1xuICAgIHJldHVybiB0aGlzLl9leHRyYTtcbiAgfVxuICBnZXQgZXh0cmFfY29tcG9uZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9leHRyYV9jb21wb25lbnQ7XG4gIH1cbiAgZ2V0IGV4dHJhX3RpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLl9leHRyYV90aXRsZTtcbiAgfVxuICBzZXQgZXh0cmEodmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5fZXh0cmFfY29tcG9uZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2V4dHJhID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2V4dHJhX2NvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5fZXh0cmFfdGl0bGUgPSA8c3RyaW5nPnZhbHVlO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBzZXQgY2xhc3NOYW1lKHZhbHVlKSB7XG4gICAgdGhpcy5fY2xhc3NOYW1lID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgYXJyb3coKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fycm93O1xuICB9XG4gIHNldCBhcnJvdyh2YWx1ZSkge1xuICAgIHRoaXMuX2Fycm93ID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbXVsdGlwbGVMaW5lKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMubXVsdGlwbGVMaW5lID0gdmFsdWUgPT09ICcnID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGVycm9yKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuZXJyb3IgPSB2YWx1ZSA9PT0gJycgPyB0cnVlIDogdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgd3JhcCh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLndyYXAgPSB2YWx1ZSA9PT0gJycgPyB0cnVlIDogdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgYWxpZ24odmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5hbGlnbiA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHBsYXRmb3JtKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMucGxhdGZvcm0gPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHRodW1iKCkge1xuICAgIHJldHVybiB0aGlzLl90aHVtYjtcbiAgfVxuICBnZXQgdGh1bWJfY29tcG9uZW50KCkge1xuICAgIHJldHVybiB0aGlzLl90aHVtYl9jb21wb25lbnQ7XG4gIH1cbiAgZ2V0IHRodW1iX3NyYygpIHtcbiAgICByZXR1cm4gdGhpcy5fdGh1bWJfc3JjO1xuICB9XG4gIHNldCB0aHVtYih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLl90aHVtYl9jb21wb25lbnQgPSB0cnVlO1xuICAgICAgdGhpcy5fdGh1bWIgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGh1bWJfY29tcG9uZW50ID0gZmFsc2U7XG4gICAgICB0aGlzLl90aHVtYl9zcmMgPSA8c3RyaW5nPnZhbHVlO1xuICAgIH1cbiAgfVxuICBAT3V0cHV0KClcbiAgb25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGJpbmdDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53cmFwQ2xzO1xuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgY2xpY2soZXZlbnQpIHtcbiAgICB0aGlzLm9uSXRlbUNsaWNrKGV2ZW50KTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JylcbiAgc3RhcnQoKSB7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLm9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLnNldENsc01hcCgpO1xuICAgIH1cbiAgfVxuICBASG9zdExpc3RlbmVyKCd0b3VjaG1vdmUnKVxuICBtb3ZlKCkge1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5vbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoZW5kJylcbiAgZW5kKCkge1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5vbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicpXG4gIG1vdXNlX3N0YXJ0KCkge1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5vbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcpXG4gIG1vdXNlX2VuZCgpIHtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmIHRoaXMub25DbGljay5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLnNldENsc01hcCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBzZXRDbHNNYXAoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lTGlzdCA9IHRoaXMuX2NsYXNzTmFtZS5zcGxpdCgnICcpO1xuICAgIGxldCBjbGFzc05hbWVPYmogPSB7fTtcbiAgICB0aGlzLndyYXBDbHMgPSAnJztcblxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgY2xhc3NOYW1lTGlzdCkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNsYXNzTmFtZU9iaiA9IHtcbiAgICAgICAgICAuLi5jbGFzc05hbWVPYmosXG4gICAgICAgICAgLi4ueyBbYCR7dmFsdWV9YF06IHRydWUgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdyYXBDbHNPYmogPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1pdGVtYF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1pdGVtLWRpc2FibGVkYF06IHRoaXMuX2Rpc2FibGVkLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbS1hY3RpdmVgXTogdGhpcy5fYWN0aXZlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbS1lcnJvcmBdOiB0aGlzLmRlZmF1bHRQcm9wcy5lcnJvcixcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW0tdG9wYF06IHRoaXMuZGVmYXVsdFByb3BzLmFsaWduID09PSAndG9wJyxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW0tbWlkZGxlYF06IHRoaXMuZGVmYXVsdFByb3BzLmFsaWduID09PSAnbWlkZGxlJyxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW0tYm90dG9tYF06IHRoaXMuZGVmYXVsdFByb3BzLmFsaWduID09PSAnYm90dG9tJyxcbiAgICAgIC4uLmNsYXNzTmFtZU9ialxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB3cmFwQ2xzT2JqKSB7XG4gICAgICBpZiAod3JhcENsc09ialtrZXldKSB7XG4gICAgICAgIHRoaXMud3JhcENscyArPSBgICR7a2V5fWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yaXBwbGVDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1yaXBwbGVgXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LXJpcHBsZS1hbmltYXRlYF06IHRoaXMucmlwcGxlQ2xpY2tlZFxuICAgIH07XG5cbiAgICB0aGlzLmxpbmVDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1saW5lYF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1saW5lLW11bHRpcGxlYF06IHRoaXMuZGVmYXVsdFByb3BzLm11bHRpcGxlTGluZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWxpbmUtd3JhcGBdOiB0aGlzLmRlZmF1bHRQcm9wcy53cmFwXG4gICAgfTtcblxuICAgIHRoaXMuYXJyb3dDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1hcnJvd2BdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tYXJyb3ctaG9yaXpvbnRhbGBdOiB0aGlzLl9hcnJvdyA9PT0gJ2hvcml6b250YWwnLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tYXJyb3ctdmVydGljYWxgXTogdGhpcy5fYXJyb3cgPT09ICdkb3duJyB8fCB0aGlzLl9hcnJvdyA9PT0gJ3VwJyxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWFycm93LXZlcnRpY2FsLXVwYF06IHRoaXMuX2Fycm93ID09PSAndXAnXG4gICAgfTtcbiAgfVxuXG4gIG9uSXRlbUNsaWNrKGV2KSB7XG4gICAgY29uc3QgaXNBbmRyb2lkID0gdGhpcy5kZWZhdWx0UHJvcHMucGxhdGZvcm0gPT09ICdhbmRyb2lkJztcbiAgICBpZiAoaXNBbmRyb2lkKSB7XG4gICAgICBpZiAodGhpcy5kZWJvdW5jZVRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgSXRlbSA9IGV2LmN1cnJlbnRUYXJnZXQ7XG4gICAgICBjb25zdCBSaXBwbGVXaWR0aCA9IE1hdGgubWF4KEl0ZW0ub2Zmc2V0SGVpZ2h0LCBJdGVtLm9mZnNldFdpZHRoKTtcbiAgICAgIGNvbnN0IENsaWVudFJlY3QgPSBldi5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgcG9pbnRYID0gZXYuY2xpZW50WCAtIENsaWVudFJlY3QubGVmdCAtIEl0ZW0ub2Zmc2V0V2lkdGggLyAyO1xuICAgICAgY29uc3QgcG9pbnRZID0gZXYuY2xpZW50WSAtIENsaWVudFJlY3QudG9wIC0gSXRlbS5vZmZzZXRXaWR0aCAvIDI7XG4gICAgICBjb25zdCBjb3ZlclJpcHBsZVN0eWxlID0ge1xuICAgICAgICB3aWR0aDogYCR7UmlwcGxlV2lkdGh9cHhgLFxuICAgICAgICBoZWlnaHQ6IGAke1JpcHBsZVdpZHRofXB4YCxcbiAgICAgICAgbGVmdDogYCR7cG9pbnRYfXB4YCxcbiAgICAgICAgdG9wOiBgJHtwb2ludFl9cHhgXG4gICAgICB9O1xuICAgICAgdGhpcy5kZWZhdWx0UHJvcHMucmlwcGxlU3R5bGUgPSBjb3ZlclJpcHBsZVN0eWxlO1xuICAgICAgdGhpcy5yaXBwbGVDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJpcHBsZUNsaWNrZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZWZhdWx0UHJvcHMucmlwcGxlU3R5bGUgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICAgICAgICB0aGlzLnNldENsc01hcCgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfVxuICAgIHRoaXMub25DbGljay5lbWl0KGV2KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLnJpcHBsZVN0eWxlID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVib3VuY2VUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpO1xuICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19