UNPKG

ng-zorro-antd-mobile

Version:

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

427 lines 32.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, ViewEncapsulation, Input, TemplateRef, EventEmitter, Output, HostBinding, HostListener } from '@angular/core'; export class ListItemComponent { 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((/** * @return {?} */ () => { 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; } } } ListItemComponent.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\n *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", encapsulation: ViewEncapsulation.None }] } ]; /** @nocollapse */ ListItemComponent.ctorParameters = () => []; ListItemComponent.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 {?} */ ListItemComponent.prototype.defaultProps; /** @type {?} */ ListItemComponent.prototype.arrowCls; /** @type {?} */ ListItemComponent.prototype.lineCls; /** @type {?} */ ListItemComponent.prototype.wrapCls; /** @type {?} */ ListItemComponent.prototype.rippleCls; /** @type {?} */ ListItemComponent.prototype.rippleClicked; /** @type {?} */ ListItemComponent.prototype.debounceTimeout; /** * @type {?} * @private */ ListItemComponent.prototype._thumb_component; /** * @type {?} * @private */ ListItemComponent.prototype._thumb; /** * @type {?} * @private */ ListItemComponent.prototype._thumb_src; /** * @type {?} * @private */ ListItemComponent.prototype._extra_component; /** * @type {?} * @private */ ListItemComponent.prototype._extra; /** * @type {?} * @private */ ListItemComponent.prototype._extra_title; /** * @type {?} * @private */ ListItemComponent.prototype._arrow; /** * @type {?} * @private */ ListItemComponent.prototype._disabled; /** * @type {?} * @private */ ListItemComponent.prototype._className; /** * @type {?} * @private */ ListItemComponent.prototype._active; /** @type {?} */ ListItemComponent.prototype.onClick; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1pdGVtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsibGlzdC9saXN0LWl0ZW0vbGlzdC1pdGVtLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxpQkFBaUIsRUFFakIsS0FBSyxFQUNMLFdBQVcsRUFDWCxZQUFZLEVBQ1osTUFBTSxFQUVOLFdBQVcsRUFDWCxZQUFZLEVBQ2IsTUFBTSxlQUFlLENBQUM7QUFPdkIsTUFBTSxPQUFPLGlCQUFpQjtJQW1LNUI7UUFsS0EsaUJBQVksR0FBRztZQUNiLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLEtBQUssRUFBRSxRQUFRO1lBQ2YsS0FBSyxFQUFFLEtBQUs7WUFDWixZQUFZLEVBQUUsS0FBSztZQUNuQixJQUFJLEVBQUUsS0FBSztZQUNYLFFBQVEsRUFBRSxLQUFLO1lBQ2YsV0FBVyxFQUFFLEVBQUU7U0FDaEIsQ0FBQztRQUNGLGFBQVEsR0FBUSxFQUFFLENBQUM7UUFDbkIsWUFBTyxHQUFRLEVBQUUsQ0FBQztRQUNsQixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBQ3JCLGNBQVMsR0FBUSxFQUFFLENBQUM7UUFDcEIsa0JBQWEsR0FBWSxLQUFLLENBQUM7UUFHdkIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBRWxDLGVBQVUsR0FBVyxFQUFFLENBQUM7UUFDeEIscUJBQWdCLEdBQVksS0FBSyxDQUFDO1FBRWxDLGlCQUFZLEdBQVcsRUFBRSxDQUFDO1FBQzFCLFdBQU0sR0FBVyxFQUFFLENBQUM7UUFDcEIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUMzQixlQUFVLEdBQVcsRUFBRSxDQUFDO1FBQ3hCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUEyRmpDLFlBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztJQThDdEMsQ0FBQzs7OztJQXZJaEIsSUFDSSxLQUFLO1FBQ1AsT0FB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QUF5QjtnQkFDbkMsaTRCQUF5QztnQkFDekMsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDdEM7Ozs7O29CQTZCRSxLQUFLO3dCQW1CTCxLQUFLO29CQUtMLEtBQUs7MkJBUUwsS0FBSztvQkFLTCxLQUFLO21CQUtMLEtBQUs7b0JBS0wsS0FBSzt1QkFLTCxLQUFLO3VCQUlMLEtBQUs7b0JBYUwsS0FBSztzQkFtQkwsTUFBTTs0QkFHTixXQUFXLFNBQUMsT0FBTztvQkFJbkIsWUFBWSxTQUFDLE9BQU8sRUFBRSxDQUFDLFFBQVEsQ0FBQztvQkFJaEMsWUFBWSxTQUFDLFlBQVk7bUJBT3pCLFlBQVksU0FBQyxXQUFXO2tCQU94QixZQUFZLFNBQUMsVUFBVTswQkFPdkIsWUFBWSxTQUFDLFdBQVc7d0JBT3hCLFlBQVksU0FBQyxTQUFTOzs7O0lBMUp2Qix5Q0FRRTs7SUFDRixxQ0FBbUI7O0lBQ25CLG9DQUFrQjs7SUFDbEIsb0NBQXFCOztJQUNyQixzQ0FBb0I7O0lBQ3BCLDBDQUErQjs7SUFDL0IsNENBQXFCOzs7OztJQUVyQiw2Q0FBMEM7Ozs7O0lBQzFDLG1DQUFpQzs7Ozs7SUFDakMsdUNBQWdDOzs7OztJQUNoQyw2Q0FBMEM7Ozs7O0lBQzFDLG1DQUFpQzs7Ozs7SUFDakMseUNBQWtDOzs7OztJQUNsQyxtQ0FBNEI7Ozs7O0lBQzVCLHNDQUFtQzs7Ozs7SUFDbkMsdUNBQWdDOzs7OztJQUNoQyxvQ0FBaUM7O0lBMEZqQyxvQ0FDcUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBPbkluaXQsXG4gIElucHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBPdXRwdXQsXG4gIE9uRGVzdHJveSxcbiAgSG9zdEJpbmRpbmcsXG4gIEhvc3RMaXN0ZW5lclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnTGlzdEl0ZW0sIG56bS1saXN0LWl0ZW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vbGlzdC1pdGVtLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBMaXN0SXRlbUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgZGVmYXVsdFByb3BzID0ge1xuICAgIHByZWZpeENsczogJ2FtLWxpc3QnLFxuICAgIGFsaWduOiAnbWlkZGxlJyxcbiAgICBlcnJvcjogZmFsc2UsXG4gICAgbXVsdGlwbGVMaW5lOiBmYWxzZSxcbiAgICB3cmFwOiBmYWxzZSxcbiAgICBwbGF0Zm9ybTogJ2lvcycsXG4gICAgcmlwcGxlU3R5bGU6IHt9XG4gIH07XG4gIGFycm93Q2xzOiBhbnkgPSB7fTtcbiAgbGluZUNsczogYW55ID0ge307XG4gIHdyYXBDbHM6IHN0cmluZyA9ICcnO1xuICByaXBwbGVDbHM6IGFueSA9IHt9O1xuICByaXBwbGVDbGlja2VkOiBib29sZWFuID0gZmFsc2U7XG4gIGRlYm91bmNlVGltZW91dDogYW55O1xuXG4gIHByaXZhdGUgX3RodW1iX2NvbXBvbmVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF90aHVtYjogVGVtcGxhdGVSZWY8YW55PjtcbiAgcHJpdmF0ZSBfdGh1bWJfc3JjOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZXh0cmFfY29tcG9uZW50OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2V4dHJhOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICBwcml2YXRlIF9leHRyYV90aXRsZTogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX2Fycm93OiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfY2xhc3NOYW1lOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfYWN0aXZlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgQElucHV0KClcbiAgZ2V0IGV4dHJhKCkge1xuICAgIHJldHVybiB0aGlzLl9leHRyYTtcbiAgfVxuICBnZXQgZXh0cmFfY29tcG9uZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9leHRyYV9jb21wb25lbnQ7XG4gIH1cbiAgZ2V0IGV4dHJhX3RpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLl9leHRyYV90aXRsZTtcbiAgfVxuICBzZXQgZXh0cmEodmFsdWU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4pIHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikge1xuICAgICAgdGhpcy5fZXh0cmFfY29tcG9uZW50ID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2V4dHJhID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2V4dHJhX2NvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgdGhpcy5fZXh0cmFfdGl0bGUgPSA8c3RyaW5nPnZhbHVlO1xuICAgIH1cbiAgfVxuICBASW5wdXQoKVxuICBzZXQgY2xhc3NOYW1lKHZhbHVlKSB7XG4gICAgdGhpcy5fY2xhc3NOYW1lID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgYXJyb3coKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Fycm93O1xuICB9XG4gIHNldCBhcnJvdyh2YWx1ZSkge1xuICAgIHRoaXMuX2Fycm93ID0gdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgbXVsdGlwbGVMaW5lKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMubXVsdGlwbGVMaW5lID0gdmFsdWUgPT09ICcnID8gdHJ1ZSA6IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IGVycm9yKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMuZXJyb3IgPSB2YWx1ZSA9PT0gJycgPyB0cnVlIDogdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgd3JhcCh2YWx1ZSkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLndyYXAgPSB2YWx1ZSA9PT0gJycgPyB0cnVlIDogdmFsdWU7XG4gICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgYWxpZ24odmFsdWUpIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wcy5hbGlnbiA9IHZhbHVlO1xuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgc2V0IHBsYXRmb3JtKHZhbHVlKSB7XG4gICAgdGhpcy5kZWZhdWx0UHJvcHMucGxhdGZvcm0gPSB2YWx1ZTtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcbiAgICAgIHRoaXMuX2Rpc2FibGVkID0gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2Rpc2FibGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gIH1cbiAgQElucHV0KClcbiAgZ2V0IHRodW1iKCkge1xuICAgIHJldHVybiB0aGlzLl90aHVtYjtcbiAgfVxuICBnZXQgdGh1bWJfY29tcG9uZW50KCkge1xuICAgIHJldHVybiB0aGlzLl90aHVtYl9jb21wb25lbnQ7XG4gIH1cbiAgZ2V0IHRodW1iX3NyYygpIHtcbiAgICByZXR1cm4gdGhpcy5fdGh1bWJfc3JjO1xuICB9XG4gIHNldCB0aHVtYih2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFRlbXBsYXRlUmVmKSB7XG4gICAgICB0aGlzLl90aHVtYl9jb21wb25lbnQgPSB0cnVlO1xuICAgICAgdGhpcy5fdGh1bWIgPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGh1bWJfY29tcG9uZW50ID0gZmFsc2U7XG4gICAgICB0aGlzLl90aHVtYl9zcmMgPSA8c3RyaW5nPnZhbHVlO1xuICAgIH1cbiAgfVxuICBAT3V0cHV0KClcbiAgb25DbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJylcbiAgZ2V0IGJpbmdDbGFzc05hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53cmFwQ2xzO1xuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ2NsaWNrJywgWyckZXZlbnQnXSlcbiAgY2xpY2soZXZlbnQpIHtcbiAgICB0aGlzLm9uSXRlbUNsaWNrKGV2ZW50KTtcbiAgfVxuICBASG9zdExpc3RlbmVyKCd0b3VjaHN0YXJ0JylcbiAgc3RhcnQoKSB7XG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCAmJiB0aGlzLm9uQ2xpY2sub2JzZXJ2ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZSA9IHRydWU7XG4gICAgICB0aGlzLnNldENsc01hcCgpO1xuICAgIH1cbiAgfVxuICBASG9zdExpc3RlbmVyKCd0b3VjaG1vdmUnKVxuICBtb3ZlKCkge1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5vbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ3RvdWNoZW5kJylcbiAgZW5kKCkge1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5vbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgfVxuICB9XG4gIEBIb3N0TGlzdGVuZXIoJ21vdXNlZG93bicpXG4gIG1vdXNlX3N0YXJ0KCkge1xuICAgIGlmICghdGhpcy5fZGlzYWJsZWQgJiYgdGhpcy5vbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlO1xuICAgICAgdGhpcy5zZXRDbHNNYXAoKTtcbiAgICB9XG4gIH1cbiAgQEhvc3RMaXN0ZW5lcignbW91c2V1cCcpXG4gIG1vdXNlX2VuZCgpIHtcbiAgICBpZiAoIXRoaXMuX2Rpc2FibGVkICYmIHRoaXMub25DbGljay5vYnNlcnZlcnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7XG4gICAgICB0aGlzLnNldENsc01hcCgpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBzZXRDbHNNYXAoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lTGlzdCA9IHRoaXMuX2NsYXNzTmFtZS5zcGxpdCgnICcpO1xuICAgIGxldCBjbGFzc05hbWVPYmogPSB7fTtcbiAgICB0aGlzLndyYXBDbHMgPSAnJztcblxuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgY2xhc3NOYW1lTGlzdCkge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNsYXNzTmFtZU9iaiA9IHtcbiAgICAgICAgICAuLi5jbGFzc05hbWVPYmosXG4gICAgICAgICAgLi4ueyBbYCR7dmFsdWV9YF06IHRydWUgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHdyYXBDbHNPYmogPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1pdGVtYF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1pdGVtLWRpc2FibGVkYF06IHRoaXMuX2Rpc2FibGVkLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbS1hY3RpdmVgXTogdGhpcy5fYWN0aXZlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30taXRlbS1lcnJvcmBdOiB0aGlzLmRlZmF1bHRQcm9wcy5lcnJvcixcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW0tdG9wYF06IHRoaXMuZGVmYXVsdFByb3BzLmFsaWduID09PSAndG9wJyxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW0tbWlkZGxlYF06IHRoaXMuZGVmYXVsdFByb3BzLmFsaWduID09PSAnbWlkZGxlJyxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWl0ZW0tYm90dG9tYF06IHRoaXMuZGVmYXVsdFByb3BzLmFsaWduID09PSAnYm90dG9tJyxcbiAgICAgIC4uLmNsYXNzTmFtZU9ialxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB3cmFwQ2xzT2JqKSB7XG4gICAgICBpZiAod3JhcENsc09ialtrZXldKSB7XG4gICAgICAgIHRoaXMud3JhcENscyArPSBgICR7a2V5fWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5yaXBwbGVDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1yaXBwbGVgXTogdHJ1ZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LXJpcHBsZS1hbmltYXRlYF06IHRoaXMucmlwcGxlQ2xpY2tlZFxuICAgIH07XG5cbiAgICB0aGlzLmxpbmVDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1saW5lYF06IHRydWUsXG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1saW5lLW11bHRpcGxlYF06IHRoaXMuZGVmYXVsdFByb3BzLm11bHRpcGxlTGluZSxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWxpbmUtd3JhcGBdOiB0aGlzLmRlZmF1bHRQcm9wcy53cmFwXG4gICAgfTtcblxuICAgIHRoaXMuYXJyb3dDbHMgPSB7XG4gICAgICBbYCR7dGhpcy5kZWZhdWx0UHJvcHMucHJlZml4Q2xzfS1hcnJvd2BdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tYXJyb3ctaG9yaXpvbnRhbGBdOiB0aGlzLl9hcnJvdyA9PT0gJ2hvcml6b250YWwnLFxuICAgICAgW2Ake3RoaXMuZGVmYXVsdFByb3BzLnByZWZpeENsc30tYXJyb3ctdmVydGljYWxgXTogdGhpcy5fYXJyb3cgPT09ICdkb3duJyB8fCB0aGlzLl9hcnJvdyA9PT0gJ3VwJyxcbiAgICAgIFtgJHt0aGlzLmRlZmF1bHRQcm9wcy5wcmVmaXhDbHN9LWFycm93LXZlcnRpY2FsLXVwYF06IHRoaXMuX2Fycm93ID09PSAndXAnXG4gICAgfTtcbiAgfVxuXG4gIG9uSXRlbUNsaWNrKGV2KSB7XG4gICAgY29uc3QgaXNBbmRyb2lkID0gdGhpcy5kZWZhdWx0UHJvcHMucGxhdGZvcm0gPT09ICdhbmRyb2lkJztcbiAgICBpZiAoaXNBbmRyb2lkKSB7XG4gICAgICBpZiAodGhpcy5kZWJvdW5jZVRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZGVib3VuY2VUaW1lb3V0KTtcbiAgICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgSXRlbSA9IGV2LmN1cnJlbnRUYXJnZXQ7XG4gICAgICBjb25zdCBSaXBwbGVXaWR0aCA9IE1hdGgubWF4KEl0ZW0ub2Zmc2V0SGVpZ2h0LCBJdGVtLm9mZnNldFdpZHRoKTtcbiAgICAgIGNvbnN0IENsaWVudFJlY3QgPSBldi5jdXJyZW50VGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgcG9pbnRYID0gZXYuY2xpZW50WCAtIENsaWVudFJlY3QubGVmdCAtIEl0ZW0ub2Zmc2V0V2lkdGggLyAyO1xuICAgICAgY29uc3QgcG9pbnRZID0gZXYuY2xpZW50WSAtIENsaWVudFJlY3QudG9wIC0gSXRlbS5vZmZzZXRXaWR0aCAvIDI7XG4gICAgICBjb25zdCBjb3ZlclJpcHBsZVN0eWxlID0ge1xuICAgICAgICB3aWR0aDogYCR7UmlwcGxlV2lkdGh9cHhgLFxuICAgICAgICBoZWlnaHQ6IGAke1JpcHBsZVdpZHRofXB4YCxcbiAgICAgICAgbGVmdDogYCR7cG9pbnRYfXB4YCxcbiAgICAgICAgdG9wOiBgJHtwb2ludFl9cHhgXG4gICAgICB9O1xuICAgICAgdGhpcy5kZWZhdWx0UHJvcHMucmlwcGxlU3R5bGUgPSBjb3ZlclJpcHBsZVN0eWxlO1xuICAgICAgdGhpcy5yaXBwbGVDbGlja2VkID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0Q2xzTWFwKCk7XG4gICAgICB0aGlzLmRlYm91bmNlVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLnJpcHBsZUNsaWNrZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5kZWZhdWx0UHJvcHMucmlwcGxlU3R5bGUgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICAgICAgICB0aGlzLnNldENsc01hcCgpO1xuICAgICAgfSwgMTAwMCk7XG4gICAgfVxuICAgIHRoaXMub25DbGljay5lbWl0KGV2KTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuZGVmYXVsdFByb3BzLnJpcHBsZVN0eWxlID0geyBkaXNwbGF5OiAnbm9uZScgfTtcbiAgICB0aGlzLnNldENsc01hcCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGVib3VuY2VUaW1lb3V0KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5kZWJvdW5jZVRpbWVvdXQpO1xuICAgICAgdGhpcy5kZWJvdW5jZVRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxufVxuIl19