ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
395 lines (394 loc) • 31.4 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, ViewEncapsulation, Input, TemplateRef, EventEmitter, Output, HostBinding, HostListener } from '@angular/core';
export class ListItem {
constructor() {
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();
}
/**
* @return {?}
*/
get extra() {
return this._extra;
}
/**
* @return {?}
*/
get extra_component() {
return this._extra_component;
}
/**
* @return {?}
*/
get extra_title() {
return this._extra_title;
}
/**
* @param {?} value
* @return {?}
*/
set extra(value) {
if (value instanceof TemplateRef) {
this._extra_component = true;
this._extra = value;
}
else {
this._extra_component = false;
this._extra_title = /** @type {?} */ (value);
}
}
/**
* @param {?} value
* @return {?}
*/
set className(value) {
this._className = value;
this.setClsMap();
}
/**
* @return {?}
*/
get arrow() {
return this._arrow;
}
/**
* @param {?} value
* @return {?}
*/
set arrow(value) {
this._arrow = value;
this.setClsMap();
}
/**
* @param {?} value
* @return {?}
*/
set multipleLine(value) {
this.defaultProps.multipleLine = value === '' ? true : value;
this.setClsMap();
}
/**
* @param {?} value
* @return {?}
*/
set error(value) {
this.defaultProps.error = value === '' ? true : value;
this.setClsMap();
}
/**
* @param {?} value
* @return {?}
*/
set wrap(value) {
this.defaultProps.wrap = value === '' ? true : value;
this.setClsMap();
}
/**
* @param {?} value
* @return {?}
*/
set align(value) {
this.defaultProps.align = value;
this.setClsMap();
}
/**
* @param {?} value
* @return {?}
*/
set platform(value) {
this.defaultProps.platform = value;
}
/**
* @param {?} value
* @return {?}
*/
set disabled(value) {
if (typeof value === 'boolean') {
this._disabled = value;
}
else {
if (value === 'true') {
this._disabled = true;
}
else {
this._disabled = false;
}
}
this.setClsMap();
}
/**
* @return {?}
*/
get thumb() {
return this._thumb;
}
/**
* @return {?}
*/
get thumb_component() {
return this._thumb_component;
}
/**
* @return {?}
*/
get thumb_src() {
return this._thumb_src;
}
/**
* @param {?} value
* @return {?}
*/
set thumb(value) {
if (value instanceof TemplateRef) {
this._thumb_component = true;
this._thumb = value;
}
else {
this._thumb_component = false;
this._thumb_src = /** @type {?} */ (value);
}
}
/**
* @return {?}
*/
get bingClassName() {
return this.wrapCls;
}
/**
* @param {?} event
* @return {?}
*/
click(event) {
this.onItemClick(event);
}
/**
* @return {?}
*/
start() {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = true;
this.setClsMap();
}
}
/**
* @return {?}
*/
move() {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
}
/**
* @return {?}
*/
end() {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
}
/**
* @return {?}
*/
mouse_start() {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = true;
this.setClsMap();
}
}
/**
* @return {?}
*/
mouse_end() {
if (!this._disabled && this.onClick.observers.length > 0) {
this._active = false;
this.setClsMap();
}
}
/**
* @return {?}
*/
setClsMap() {
/** @type {?} */
const classNameList = this._className.split(' ');
/** @type {?} */
let classNameObj = {};
this.wrapCls = '';
for (const value of classNameList) {
if (value) {
classNameObj = Object.assign({}, classNameObj, { [`${value}`]: true });
}
}
/** @type {?} */
const wrapClsObj = Object.assign({ [`${this.defaultProps.prefixCls}-item`]: true, [`${this.defaultProps.prefixCls}-item-disabled`]: this._disabled, [`${this.defaultProps.prefixCls}-item-active`]: this._active, [`${this.defaultProps.prefixCls}-item-error`]: this.defaultProps.error, [`${this.defaultProps.prefixCls}-item-top`]: this.defaultProps.align === 'top', [`${this.defaultProps.prefixCls}-item-middle`]: this.defaultProps.align === 'middle', [`${this.defaultProps.prefixCls}-item-bottom`]: this.defaultProps.align === 'bottom' }, classNameObj);
for (const key in wrapClsObj) {
if (wrapClsObj[key]) {
this.wrapCls += ` ${key}`;
}
}
this.rippleCls = {
[`${this.defaultProps.prefixCls}-ripple`]: true,
[`${this.defaultProps.prefixCls}-ripple-animate`]: this.rippleClicked
};
this.lineCls = {
[`${this.defaultProps.prefixCls}-line`]: true,
[`${this.defaultProps.prefixCls}-line-multiple`]: this.defaultProps.multipleLine,
[`${this.defaultProps.prefixCls}-line-wrap`]: this.defaultProps.wrap
};
this.arrowCls = {
[`${this.defaultProps.prefixCls}-arrow`]: true,
[`${this.defaultProps.prefixCls}-arrow-horizontal`]: this._arrow === 'horizontal',
[`${this.defaultProps.prefixCls}-arrow-vertical`]: this._arrow === 'down' || this._arrow === 'up',
[`${this.defaultProps.prefixCls}-arrow-vertical-up`]: this._arrow === 'up'
};
}
/**
* @param {?} ev
* @return {?}
*/
onItemClick(ev) {
/** @type {?} */
const isAndroid = this.defaultProps.platform === 'android';
if (isAndroid) {
if (this.debounceTimeout) {
clearTimeout(this.debounceTimeout);
this.debounceTimeout = null;
}
/** @type {?} */
const Item = ev.currentTarget;
/** @type {?} */
const RippleWidth = Math.max(Item.offsetHeight, Item.offsetWidth);
/** @type {?} */
const ClientRect = ev.currentTarget.getBoundingClientRect();
/** @type {?} */
const pointX = ev.clientX - ClientRect.left - Item.offsetWidth / 2;
/** @type {?} */
const pointY = ev.clientY - ClientRect.top - Item.offsetWidth / 2;
/** @type {?} */
const 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(() => {
this.rippleClicked = false;
this.defaultProps.rippleStyle = { display: 'none' };
this.setClsMap();
}, 1000);
}
this.onClick.emit(ev);
}
/**
* @return {?}
*/
ngOnInit() {
this.defaultProps.rippleStyle = { display: 'none' };
this.setClsMap();
}
/**
* @return {?}
*/
ngOnDestroy() {
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 = () => [];
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',] }]
};
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsibGlzdC9saXN0LWl0ZW0vbGlzdC1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFFakIsS0FBSyxFQUNMLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUVOLFdBQVcsRUFDWCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFPdkIsTUFBTTtJQW1LSjs0QkFsS2U7WUFDYixTQUFTLEVBQUUsU0FBUztZQUNwQixLQUFLLEVBQUUsUUFBUTtZQUNmLEtBQUssRUFBRSxLQUFLO1lBQ1osWUFBWSxFQUFFLEtBQUs7WUFDbkIsSUFBSSxFQUFFLEtBQUs7WUFDWCxRQUFRLEVBQUUsS0FBSztZQUNmLFdBQVcsRUFBRSxFQUFFO1NBQ2hCO3dCQUNlLEVBQUU7dUJBQ0gsRUFBRTt1QkFDQyxFQUFFO3lCQUNILEVBQUU7NkJBQ00sS0FBSztnQ0FHTSxLQUFLOzBCQUVaLEVBQUU7Z0NBQ0ssS0FBSzs0QkFFVixFQUFFO3NCQUNSLEVBQUU7eUJBQ0UsS0FBSzswQkFDTCxFQUFFO3VCQUNKLEtBQUs7dUJBMkZILElBQUksWUFBWSxFQUFPO0tBOENwQzs7OztJQXZJaEIsSUFDSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDO0tBQ3BCOzs7O0lBQ0QsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDO0tBQzlCOzs7O0lBQ0QsSUFBSSxXQUFXO1FBQ2IsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQzFCOzs7OztJQUNELElBQUksS0FBSyxDQUFDLEtBQWdDO1FBQ3hDLElBQUksS0FBSyxZQUFZLFdBQVcsRUFBRTtZQUNoQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1lBQzdCLElBQUks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QkFPdkIsWUFBWSxTQUFDLFdBQVc7d0JBT3hCLFlBQVksU0FBQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgT25Jbml0LFxuICBJbnB1dCxcbiAgVGVtcGxhdGVSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgT3V0cHV0LFxuICBPbkRlc3Ryb3ksXG4gIEhvc3RCaW5kaW5nLFxuICBIb3N0TGlzdGVuZXJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0xpc3RJdGVtLCBuem0tbGlzdC1pdGVtJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2xpc3QtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgTGlzdEl0ZW0gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIGRlZmF1bHRQcm9wcyA9IHtcbiAgICBwcmVmaXhDbHM6ICdhbS1saXN0JyxcbiAgICBhbGlnbjogJ21pZGRsZScsXG4gICAgZXJyb3I6IGZhbHNlLFxuICAgIG11bHRpcGxlTGluZTogZmFsc2UsXG4gICAgd3JhcDogZmFsc2UsXG4gICAgcGxhdGZvcm06ICdpb3MnLFxuICAgIHJpcHBsZVN0eWxlOiB7fVxuICB9O1xuICBhcnJvd0NsczogYW55ID0ge307XG4gIGxpbmVDbHM6IGFueSA9IHt9O1xuICB3cmFwQ2xzOiBzdHJpbmcgPSAnJztcbiAgcmlwcGxlQ2xzOiBhbnkgPSB7fTtcbiAgcmlwcGxlQ2xpY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBkZWJvdW5jZVRpbWVvdXQ6IGFueTtcblxuICBwcml2YXRlIF90aHVtYl9jb21wb25lbnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdGh1bWI6IFRlbXBsYXRlUmVmPGFueT47XG4gIHByaXZhdGUgX3RodW1iX3NyYzogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2V4dHJhX2NvbXBvbmVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9leHRyYTogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfZXh0cmFfdGl0bGU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9hcnJvdzogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2NsYXNzTmFtZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBleHRyYSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmE7XG4gIH1cbiAgZ2V0IGV4dHJhX2NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmFfY29tcG9uZW50O1xuICB9XG4gIGdldCBleHRyYV90aXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0cmFfdGl0bGU7XG4gIH1cbiAgc2V0IGV4dHJhKHZhbHVlOiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KSB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgIHRoaXMuX2V4dHJhX2NvbXBvbmVudCA9IHRydWU7XG4gICAgICB0aGlzLl9leHRyYSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9leHRyYV9jb21wb25lbnQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2V4dHJhX3RpdGxlID0gPHN0cmluZz52YWx1ZTtcbiAgICB9XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGNsYXNzTmFtZSh2YWx1ZSkge1xuICAgIHRoaXMuX2NsYXNzTmFtZSA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IGFycm93KCkge1xuICAgIHJldHVybiB0aGlzLl9hcnJvdztcbiAgfVxuICBzZXQgYXJyb3codmFsdWUpIHtcbiAgICB0aGlzLl9hcnJvdyA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IG11bHRpcGxlTGluZSh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLm11bHRpcGxlTGluZSA9IHZhbHVlID09PSAnJyA/IHRydWUgOiB2YWx1ZTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBlcnJvcih2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLmVycm9yID0gdmFsdWUgPT09ICcnID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHdyYXAodmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy53cmFwID0gdmFsdWUgPT09ICcnID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGFsaWduKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuYWxpZ24gPSB2YWx1ZTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIHNldCBwbGF0Zm9ybSh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLnBsYXRmb3JtID0gdmFsdWU7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG4gIEBJbnB1dCgpXG4gIGdldCB0aHVtYigpIHtcbiAgICByZXR1cm4gdGhpcy5fdGh1bWI7XG4gIH1cbiAgZ2V0IHRodW1iX2NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fdGh1bWJfY29tcG9uZW50O1xuICB9XG4gIGdldCB0aHVtYl9zcmMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3RodW1iX3NyYztcbiAgfVxuICBzZXQgdGh1bWIodmFsdWUpIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5fdGh1bWJfY29tcG9uZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3RodW1iID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3RodW1iX2NvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5fdGh1bWJfc3JjID0gPHN0cmluZz52YWx1ZTtcbiAgICB9XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpXG4gIGdldCBiaW5nQ2xhc3NOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMud3JhcENscztcbiAgfVxuICBASG9zdExpc3RlbmVyKCdjbGljaycsIFsnJGV2ZW50J10pXG4gIGNsaWNrKGV2ZW50KSB7XG4gICAgdGhpcy5vbkl0ZW1DbGljayhldmVudCk7XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2hzdGFydCcpXG4gIHN0YXJ0KCkge1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5vbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcigndG91Y2htb3ZlJylcbiAgbW92ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmIHRoaXMub25DbGljay5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLnNldENsc01hcCgpO1xuICAgIH1cbiAgfVxuICBASG9zdExpc3RlbmVyKCd0b3VjaGVuZCcpXG4gIGVuZCgpIHtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmIHRoaXMub25DbGljay5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLnNldENsc01hcCgpO1xuICAgIH1cbiAgfVxuICBASG9zdExpc3RlbmVyKCdtb3VzZWRvd24nKVxuICBtb3VzZV9zdGFydCgpIHtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmIHRoaXMub25DbGljay5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNldXAnKVxuICBtb3VzZV9lbmQoKSB7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLm9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgc2V0Q2xzTWFwKCkge1xuICAgIGNvbnN0IGNsYXNzTmFtZUxpc3QgPSB0aGlzLl9jbGFzc05hbWUuc3BsaXQoJyAnKTtcbiAgICBsZXQgY2xhc3NOYW1lT2JqID0ge307XG4gICAgdGhpcy53cmFwQ2xzID0gJyc7XG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGNsYXNzTmFtZUxpc3QpIHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBjbGFzc05hbWVPYmogPSB7XG4gICAgICAgICAgLi4uY2xhc3NOYW1lT2JqLFxuICAgICAgICAgIC4uLnsgW2Ake3ZhbHVlfWBdOiB0cnVlIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3cmFwQ2xzT2JqID0ge1xuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbWBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbS1kaXNhYmxlZGBdOiB0aGlzLl9kaXNhYmxlZCxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW0tYWN0aXZlYF06IHRoaXMuX2FjdGl2ZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW0tZXJyb3JgXTogdGhpcy5kZWZhdWx0UHJvcHMuZXJyb3IsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1pdGVtLXRvcGBdOiB0aGlzLmRlZmF1bHRQcm9wcy5hbGlnbiA9PT0gJ3RvcCcsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1pdGVtLW1pZGRsZWBdOiB0aGlzLmRlZmF1bHRQcm9wcy5hbGlnbiA9PT0gJ21pZGRsZScsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1pdGVtLWJvdHRvbWBdOiB0aGlzLmRlZmF1bHRQcm9wcy5hbGlnbiA9PT0gJ2JvdHRvbScsXG4gICAgICAuLi5jbGFzc05hbWVPYmpcbiAgICB9O1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gd3JhcENsc09iaikge1xuICAgICAgaWYgKHdyYXBDbHNPYmpba2V5XSkge1xuICAgICAgICB0aGlzLndyYXBDbHMgKz0gYCAke2tleX1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucmlwcGxlQ2xzID0ge1xuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tcmlwcGxlYF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1yaXBwbGUtYW5pbWF0ZWBdOiB0aGlzLnJpcHBsZUNsaWNrZWRcbiAgICB9O1xuXG4gICAgdGhpcy5saW5lQ2xzID0ge1xuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tbGluZWBdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tbGluZS1tdWx0aXBsZWBdOiB0aGlzLmRlZmF1bHRQcm9wcy5tdWx0aXBsZUxpbmUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1saW5lLXdyYXBgXTogdGhpcy5kZWZhdWx0UHJvcHMud3JhcFxuICAgIH07XG5cbiAgICB0aGlzLmFycm93Q2xzID0ge1xuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tYXJyb3dgXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWFycm93LWhvcml6b250YWxgXTogdGhpcy5fYXJyb3cgPT09ICdob3Jpem9udGFsJyxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWFycm93LXZlcnRpY2FsYF06IHRoaXMuX2Fycm93ID09PSAnZG93bicgfHwgdGhpcy5fYXJyb3cgPT09ICd1cCcsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1hcnJvdy12ZXJ0aWNhbC11cGBdOiB0aGlzLl9hcnJvdyA9PT0gJ3VwJ1xuICAgIH07XG4gIH1cblxuICBvbkl0ZW1DbGljayhldikge1xuICAgIGNvbnN0IGlzQW5kcm9pZCA9IHRoaXMuZGVmYXVsdFByb3BzLnBsYXRmb3JtID09PSAnYW5kcm9pZCc7XG4gICAgaWYgKGlzQW5kcm9pZCkge1xuICAgICAgaWYgKHRoaXMuZGVib3VuY2VUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmRlYm91bmNlVGltZW91dCk7XG4gICAgICAgIHRoaXMuZGVib3VuY2VUaW1lb3V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IEl0ZW0gPSBldi5jdXJyZW50VGFyZ2V0O1xuICAgICAgY29uc3QgUmlwcGxlV2lkdGggPSBNYXRoLm1heChJdGVtLm9mZnNldEhlaWdodCwgSXRlbS5vZmZzZXRXaWR0aCk7XG4gICAgICBjb25zdCBDbGllbnRSZWN0ID0gZXYuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IHBvaW50WCA9IGV2LmNsaWVudFggLSBDbGllbnRSZWN0LmxlZnQgLSBJdGVtLm9mZnNldFdpZHRoIC8gMjtcbiAgICAgIGNvbnN0IHBvaW50WSA9IGV2LmNsaWVudFkgLSBDbGllbnRSZWN0LnRvcCAtIEl0ZW0ub2Zmc2V0V2lkdGggLyAyO1xuICAgICAgY29uc3QgY292ZXJSaXBwbGVTdHlsZSA9IHtcbiAgICAgICAgd2lkdGg6IGAke1JpcHBsZVdpZHRofXB4YCxcbiAgICAgICAgaGVpZ2h0OiBgJHtSaXBwbGVXaWR0aH1weGAsXG4gICAgICAgIGxlZnQ6IGAke3BvaW50WH1weGAsXG4gICAgICAgIHRvcDogYCR7cG9pbnRZfXB4YFxuICAgICAgfTtcbiAgICAgIHRoaXMuZGVmYXVsdFByb3BzLnJpcHBsZVN0eWxlID0gY292ZXJSaXBwbGVTdHlsZTtcbiAgICAgIHRoaXMucmlwcGxlQ2xpY2tlZCA9IHRydWU7XG4gICAgICB0aGlzLnNldENsc01hcCgpO1xuICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5yaXBwbGVDbGlja2VkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZGVmYXVsdFByb3BzLnJpcHBsZVN0eWxlID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbiAgICAgICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgICAgIH0sIDEwMDApO1xuICAgIH1cbiAgICB0aGlzLm9uQ2xpY2suZW1pdChldik7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5yaXBwbGVTdHlsZSA9IHsgZGlzcGxheTogJ25vbmUnIH07XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlYm91bmNlVGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KTtcbiAgICAgIHRoaXMuZGVib3VuY2VUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cbn1cbiJdfQ==