UNPKG

ng-zorro-antd-mobile

Version:

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

334 lines 24.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core'; var SwipeActionComponent = /** @class */ (function () { function SwipeActionComponent() { var _this = this; this.prefixCls = 'am-swipe'; this.wrapCls = {}; this._swiping = false; this._openedLeft = false; this._openedRight = false; this.left = []; this.right = []; this.autoClose = false; this.disabled = false; this.onOpen = new EventEmitter(); this.onClose = new EventEmitter(); this.onCloseSwipe = (/** * @param {?} ev * @return {?} */ function (ev) { if (!(_this._openedLeft || _this._openedRight)) { return; } /** @type {?} */ var pNode = ev.target.closest("." + _this.prefixCls + "-actions"); if (!pNode) { _this.close(); } }); } /** * @return {?} */ SwipeActionComponent.prototype.setClassMap = /** * @return {?} */ function () { var _a; this.wrapCls = (_a = {}, _a[this.prefixCls] = true, _a[this.prefixCls + "-swiping"] = this._swiping, _a); }; /** * @return {?} */ SwipeActionComponent.prototype.close = /** * @return {?} */ function () { if (this._openedLeft || this._openedRight) { this.onClose.emit(); } this.setBtnStyle(0); this._openedLeft = false; this._openedRight = false; }; /** * @param {?} value * @return {?} */ SwipeActionComponent.prototype.setBtnStyle = /** * @param {?} value * @return {?} */ function (value) { if (this._btnsLeftWidth === 0 || this._btnsRightWidth === 0) { this._btnsLeftWidth = this.leftBtnRef ? this.leftBtnRef.nativeElement.offsetWidth : 0; this._btnsRightWidth = this.rightBtnRef ? this.rightBtnRef.nativeElement.offsetWidth : 0; } /** @type {?} */ var limit = value > 0 ? this._btnsLeftWidth : -this._btnsRightWidth; /** @type {?} */ var contentLeft = this.getContentEasing(value, limit); this.content.nativeElement.style.left = contentLeft + "px"; this.cover.nativeElement.style.display = Math.abs(value) > 0 ? 'block' : 'none'; this.cover.nativeElement.style.left = contentLeft + "px"; }; /** * @param {?} value * @param {?} limit * @return {?} */ SwipeActionComponent.prototype.getContentEasing = /** * @param {?} value * @param {?} limit * @return {?} */ function (value, limit) { return Math.abs(value) - Math.abs(limit) > 0 ? limit : value; }; /** * @param {?} e * @return {?} */ SwipeActionComponent.prototype.onTouchStart = /** * @param {?} e * @return {?} */ function (e) { this._startX = e.changedTouches[0].clientX; this._swiping = true; }; /** * @param {?} e * @return {?} */ SwipeActionComponent.prototype.onTouchMove = /** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var deltaX = e.changedTouches[0].clientX - this._startX; this._needShowRight = deltaX < -5 && this.right.length > 0; this._needShowLeft = deltaX > 5 && this.left.length > 0; if (this.leftBtnRef) { this.leftBtnRef.nativeElement.style.visibility = this._needShowRight ? 'hidden' : 'visible'; } if (this.rightBtnRef) { this.rightBtnRef.nativeElement.style.visibility = this._needShowLeft ? 'hidden' : 'visible'; } this.setBtnStyle(deltaX); }; /** * @param {?} e * @return {?} */ SwipeActionComponent.prototype.onTouchEnd = /** * @param {?} e * @return {?} */ function (e) { /** @type {?} */ var deltaX = e.changedTouches[0].clientX - this._startX; /** @type {?} */ var needOpenRight = this._needShowRight && Math.abs(deltaX) > this._btnsRightWidth / 2; /** @type {?} */ var needOpenLeft = this._needShowLeft && Math.abs(deltaX) > this._btnsLeftWidth / 2; if (needOpenRight) { this.doOpenRight(); } else if (needOpenLeft) { this.doOpenLeft(); } else { this.close(); } this._swiping = false; this._needShowLeft = false; this._needShowRight = false; }; /** * @return {?} */ SwipeActionComponent.prototype.doOpenLeft = /** * @return {?} */ function () { this.open(this._btnsLeftWidth, true, false); }; /** * @return {?} */ SwipeActionComponent.prototype.doOpenRight = /** * @return {?} */ function () { this.open(-this._btnsRightWidth, false, true); }; /** * @param {?} ev * @param {?} btn * @return {?} */ SwipeActionComponent.prototype.onBtnClick = /** * @param {?} ev * @param {?} btn * @return {?} */ function (ev, btn) { /** @type {?} */ var onPress = btn.onPress; if (onPress) { onPress(ev); } if (this.autoClose) { this.close(); } }; /** * @param {?} value * @param {?} openedLeft * @param {?} openedRight * @return {?} */ SwipeActionComponent.prototype.open = /** * @param {?} value * @param {?} openedLeft * @param {?} openedRight * @return {?} */ function (value, openedLeft, openedRight) { this.onOpen.emit(); this._openedLeft = openedLeft; this._openedRight = openedRight; this.setBtnStyle(value); }; /** * @return {?} */ SwipeActionComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.setClassMap(); }; /** * @return {?} */ SwipeActionComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { this._btnsLeftWidth = this.leftBtnRef ? this.leftBtnRef.nativeElement.offsetWidth : 0; this._btnsRightWidth = this.rightBtnRef ? this.rightBtnRef.nativeElement.offsetWidth : 0; document.body.addEventListener('touchstart', this.onCloseSwipe, true); }; /** * @return {?} */ SwipeActionComponent.prototype.ngOnDestroy = /** * @return {?} */ function () { document.body.removeEventListener('touchstart', this.onCloseSwipe, true); }; SwipeActionComponent.decorators = [ { type: Component, args: [{ selector: 'SwipeAction, nzm-swipe-action', template: "<div *ngIf=\"(left.length != 0 || right.length != 0) && !disabled\" [ngClass]=\"wrapCls\">\n <div class=\"{{ prefixCls }}-cover\" #coverRef></div>\n <div *ngIf=\"left && left.length > 0\" class=\"{{ prefixCls }}-actions {{ prefixCls }}-actions-left\" #leftBtnRef>\n <div\n *ngFor=\"let btn of left\"\n class=\"{{ prefixCls }}-btn {{ btn.className }}\"\n [ngStyle]=\"btn.style\"\n role=\"button\"\n (click)=\"onBtnClick($event, btn)\"\n >\n <div class=\"{{ prefixCls }}-btn-text\">\n {{ btn.text || 'Click' }}\n </div>\n </div>\n </div>\n <div *ngIf=\"right && right.length > 0\" class=\"{{ prefixCls }}-actions {{ prefixCls }}-actions-right\" #rightBtnRef>\n <div\n *ngFor=\"let btn of right\"\n class=\"{{ prefixCls }}-btn {{ btn.className }}\"\n [ngStyle]=\"btn.style\"\n role=\"button\"\n (click)=\"onBtnClick($event, btn)\"\n >\n <div class=\"{{ prefixCls }}-btn-text\">\n {{ btn.text || 'Click' }}\n </div>\n </div>\n </div>\n <div\n class=\"{{ prefixCls }}-content\"\n #contentRef\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\"\n >\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </div>\n</div>\n<div *ngIf=\"!((left.length != 0 || right.length != 0) && !disabled)\" class=\"{{ prefixCls }}-content\" #contentRef>\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n</div>\n\n<ng-template #content>\n <ng-content></ng-content>\n</ng-template>\n", encapsulation: ViewEncapsulation.None }] } ]; /** @nocollapse */ SwipeActionComponent.ctorParameters = function () { return []; }; SwipeActionComponent.propDecorators = { leftBtnRef: [{ type: ViewChild, args: ['leftBtnRef', { static: false },] }], rightBtnRef: [{ type: ViewChild, args: ['rightBtnRef', { static: false },] }], content: [{ type: ViewChild, args: ['contentRef', { static: false },] }], cover: [{ type: ViewChild, args: ['coverRef', { static: false },] }], left: [{ type: Input }], right: [{ type: Input }], autoClose: [{ type: Input }], disabled: [{ type: Input }], onOpen: [{ type: Output }], onClose: [{ type: Output }] }; return SwipeActionComponent; }()); export { SwipeActionComponent }; if (false) { /** @type {?} */ SwipeActionComponent.prototype.prefixCls; /** @type {?} */ SwipeActionComponent.prototype.wrapCls; /** * @type {?} * @private */ SwipeActionComponent.prototype._swiping; /** * @type {?} * @private */ SwipeActionComponent.prototype._openedLeft; /** * @type {?} * @private */ SwipeActionComponent.prototype._openedRight; /** * @type {?} * @private */ SwipeActionComponent.prototype._btnsLeftWidth; /** * @type {?} * @private */ SwipeActionComponent.prototype._btnsRightWidth; /** * @type {?} * @private */ SwipeActionComponent.prototype._needShowLeft; /** * @type {?} * @private */ SwipeActionComponent.prototype._needShowRight; /** * @type {?} * @private */ SwipeActionComponent.prototype._startX; /** @type {?} */ SwipeActionComponent.prototype.leftBtnRef; /** @type {?} */ SwipeActionComponent.prototype.rightBtnRef; /** @type {?} */ SwipeActionComponent.prototype.content; /** @type {?} */ SwipeActionComponent.prototype.cover; /** @type {?} */ SwipeActionComponent.prototype.left; /** @type {?} */ SwipeActionComponent.prototype.right; /** @type {?} */ SwipeActionComponent.prototype.autoClose; /** @type {?} */ SwipeActionComponent.prototype.disabled; /** @type {?} */ SwipeActionComponent.prototype.onOpen; /** @type {?} */ SwipeActionComponent.prototype.onClose; /** @type {?} */ SwipeActionComponent.prototype.onCloseSwipe; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpcGUtYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsic3dpcGUtYWN0aW9uL3N3aXBlLWFjdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QjtJQXdDRTtRQUFBLGlCQUFnQjtRQWxDaEIsY0FBUyxHQUFXLFVBQVUsQ0FBQztRQUMvQixZQUFPLEdBQVcsRUFBRSxDQUFDO1FBRWIsYUFBUSxHQUFZLEtBQUssQ0FBQztRQUMxQixnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQWlCdEMsU0FBSSxHQUFrQixFQUFFLENBQUM7UUFFekIsVUFBSyxHQUFrQixFQUFFLENBQUM7UUFFMUIsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUzQixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUVwRCxZQUFPLEdBQXNCLElBQUksWUFBWSxFQUFPLENBQUM7UUFXckQsaUJBQVk7Ozs7UUFBRyxVQUFBLEVBQUU7WUFDZixJQUFJLENBQUMsQ0FBQyxLQUFJLENBQUMsV0FBVyxJQUFJLEtBQUksQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDNUMsT0FBTzthQUNSOztnQkFDSyxLQUFLLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBSSxLQUFJLENBQUMsU0FBUyxhQUFVLENBQUM7WUFDN0QsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixLQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDZDtRQUNILENBQUMsRUFBQTtJQWpCYyxDQUFDOzs7O0lBRWhCLDBDQUFXOzs7SUFBWDs7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Q1IscUNBQ007O0lBRU4sb0NBQ3lCOztJQUN6QixxQ0FDMEI7O0lBQzFCLHlDQUMyQjs7SUFDM0Isd0NBQzBCOztJQUMxQixzQ0FDb0Q7O0lBQ3BELHVDQUNxRDs7SUFXckQsNENBUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDb21wb25lbnQsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPdXRwdXQsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1N3aXBlQWN0aW9uLCBuem0tc3dpcGUtYWN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N3aXBlLWFjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU3dpcGVBY3Rpb25Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXN3aXBlJztcbiAgd3JhcENsczogb2JqZWN0ID0ge307XG5cbiAgcHJpdmF0ZSBfc3dpcGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9vcGVuZWRMZWZ0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX29wZW5lZFJpZ2h0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2J0bnNMZWZ0V2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYnRuc1JpZ2h0V2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbmVlZFNob3dMZWZ0OiBib29sZWFuO1xuICBwcml2YXRlIF9uZWVkU2hvd1JpZ2h0OiBib29sZWFuO1xuICBwcml2YXRlIF9zdGFydFg6IG51bWJlcjtcblxuICBAVmlld0NoaWxkKCdsZWZ0QnRuUmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGxlZnRCdG5SZWY7XG4gIEBWaWV3Q2hpbGQoJ3JpZ2h0QnRuUmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIHJpZ2h0QnRuUmVmO1xuICBAVmlld0NoaWxkKCdjb250ZW50UmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGNvbnRlbnQ7XG4gIEBWaWV3Q2hpbGQoJ2NvdmVyUmVmJywgeyBzdGF0aWM6IGZhbHNlIH0pXG4gIGNvdmVyO1xuXG4gIEBJbnB1dCgpXG4gIGxlZnQ6IEFycmF5PG9iamVjdD4gPSBbXTtcbiAgQElucHV0KClcbiAgcmlnaHQ6IEFycmF5PG9iamVjdD4gPSBbXTtcbiAgQElucHV0KClcbiAgYXV0b0Nsb3NlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gIEBPdXRwdXQoKVxuICBvbk9wZW46IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKVxuICBvbkNsb3NlOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBzZXRDbGFzc01hcCgpIHtcbiAgICB0aGlzLndyYXBDbHMgPSB7XG4gICAgICBbdGhpcy5wcmVmaXhDbHNdOiB0cnVlLFxuICAgICAgW2Ake3RoaXMucHJlZml4Q2xzfS1zd2lwaW5nYF06IHRoaXMuX3N3aXBpbmdcbiAgICB9O1xuICB9XG5cbiAgb25DbG9zZVN3aXBlID0gZXYgPT4ge1xuICAgIGlmICghKHRoaXMuX29wZW5lZExlZnQgfHwgdGhpcy5fb3BlbmVkUmlnaHQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBOb2RlID0gZXYudGFyZ2V0LmNsb3Nlc3QoYC4ke3RoaXMucHJlZml4Q2xzfS1hY3Rpb25zYCk7XG4gICAgaWYgKCFwTm9kZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLl9vcGVuZWRMZWZ0IHx8IHRoaXMuX29wZW5lZFJpZ2h0KSB7XG4gICAgICB0aGlzLm9uQ2xvc2UuZW1pdCgpO1xuICAgIH1cbiAgICB0aGlzLnNldEJ0blN0eWxlKDApO1xuICAgIHRoaXMuX29wZW5lZExlZnQgPSBmYWxzZTtcbiAgICB0aGlzLl9vcGVuZWRSaWdodCA9IGZhbHNlO1xuICB9XG5cbiAgc2V0QnRuU3R5bGUodmFsdWUpIHtcbiAgICBpZiAodGhpcy5fYnRuc0xlZnRXaWR0aCA9PT0gMCB8fCB0aGlzLl9idG5zUmlnaHRXaWR0aCA9PT0gMCkge1xuICAgICAgdGhpcy5fYnRuc0xlZnRXaWR0aCA9IHRoaXMubGVmdEJ0blJlZiA/IHRoaXMubGVmdEJ0blJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDogMDtcbiAgICAgIHRoaXMuX2J0bnNSaWdodFdpZHRoID0gdGhpcy5yaWdodEJ0blJlZiA/IHRoaXMucmlnaHRCdG5SZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA6IDA7XG4gICAgfVxuICAgIGNvbnN0IGxpbWl0ID0gdmFsdWUgPiAwID8gdGhpcy5fYnRuc0xlZnRXaWR0aCA6IC10aGlzLl9idG5zUmlnaHRXaWR0aDtcbiAgICBjb25zdCBjb250ZW50TGVmdCA9IHRoaXMuZ2V0Q29udGVudEVhc2luZyh2YWx1ZSwgbGltaXQpO1xuICAgIHRoaXMuY29udGVudC5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtjb250ZW50TGVmdH1weGA7XG4gICAgdGhpcy5jb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLmRpc3BsYXkgPSBNYXRoLmFicyh2YWx1ZSkgPiAwID8gJ2Jsb2NrJyA6ICdub25lJztcbiAgICB0aGlzLmNvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2NvbnRlbnRMZWZ0fXB4YDtcbiAgfVxuXG4gIGdldENvbnRlbnRFYXNpbmcodmFsdWUsIGxpbWl0KSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKHZhbHVlKSAtIE1hdGguYWJzKGxpbWl0KSA+IDAgPyBsaW1pdCA6IHZhbHVlO1xuICB9XG5cbiAgb25Ub3VjaFN0YXJ0KGUpIHtcbiAgICB0aGlzLl9zdGFydFggPSBlLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFg7XG4gICAgdGhpcy5fc3dpcGluZyA9IHRydWU7XG4gIH1cblxuICBvblRvdWNoTW92ZShlKSB7XG4gICAgY29uc3QgZGVsdGFYID0gZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5fc3RhcnRYO1xuICAgIHRoaXMuX25lZWRTaG93UmlnaHQgPSBkZWx0YVggPCAtNSAmJiB0aGlzLnJpZ2h0Lmxlbmd0aCA+IDA7XG4gICAgdGhpcy5fbmVlZFNob3dMZWZ0ID0gZGVsdGFYID4gNSAmJiB0aGlzLmxlZnQubGVuZ3RoID4gMDtcbiAgICBpZiAodGhpcy5sZWZ0QnRuUmVmKSB7XG4gICAgICB0aGlzLmxlZnRCdG5SZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gdGhpcy5fbmVlZFNob3dSaWdodCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnO1xuICAgIH1cbiAgICBpZiAodGhpcy5yaWdodEJ0blJlZikge1xuICAgICAgdGhpcy5yaWdodEJ0blJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSB0aGlzLl9uZWVkU2hvd0xlZnQgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJztcbiAgICB9XG4gICAgdGhpcy5zZXRCdG5TdHlsZShkZWx0YVgpO1xuICB9XG5cbiAgb25Ub3VjaEVuZChlKSB7XG4gICAgY29uc3QgZGVsdGFYID0gZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5fc3RhcnRYO1xuXG4gICAgY29uc3QgbmVlZE9wZW5SaWdodCA9IHRoaXMuX25lZWRTaG93UmlnaHQgJiYgTWF0aC5hYnMoZGVsdGFYKSA+IHRoaXMuX2J0bnNSaWdodFdpZHRoIC8gMjtcbiAgICBjb25zdCBuZWVkT3BlbkxlZnQgPSB0aGlzLl9uZWVkU2hvd0xlZnQgJiYgTWF0aC5hYnMoZGVsdGFYKSA+IHRoaXMuX2J0bnNMZWZ0V2lkdGggLyAyO1xuXG4gICAgaWYgKG5lZWRPcGVuUmlnaHQpIHtcbiAgICAgIHRoaXMuZG9PcGVuUmlnaHQoKTtcbiAgICB9IGVsc2UgaWYgKG5lZWRPcGVuTGVmdCkge1xuICAgICAgdGhpcy5kb09wZW5MZWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5fc3dpcGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX25lZWRTaG93TGVmdCA9IGZhbHNlO1xuICAgIHRoaXMuX25lZWRTaG93UmlnaHQgPSBmYWxzZTtcbiAgfVxuXG4gIGRvT3BlbkxlZnQoKSB7XG4gICAgdGhpcy5vcGVuKHRoaXMuX2J0bnNMZWZ0V2lkdGgsIHRydWUsIGZhbHNlKTtcbiAgfVxuXG4gIGRvT3BlblJpZ2h0KCkge1xuICAgIHRoaXMub3BlbigtdGhpcy5fYnRuc1JpZ2h0V2lkdGgsIGZhbHNlLCB0cnVlKTtcbiAgfVxuXG4gIG9uQnRuQ2xpY2soZXYsIGJ0bikge1xuICAgIGNvbnN0IG9uUHJlc3MgPSBidG4ub25QcmVzcztcbiAgICBpZiAob25QcmVzcykge1xuICAgICAgb25QcmVzcyhldik7XG4gICAgfVxuICAgIGlmICh0aGlzLmF1dG9DbG9zZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW4odmFsdWUsIG9wZW5lZExlZnQsIG9wZW5lZFJpZ2h0KSB7XG4gICAgdGhpcy5vbk9wZW4uZW1pdCgpO1xuICAgIHRoaXMuX29wZW5lZExlZnQgPSBvcGVuZWRMZWZ0O1xuICAgIHRoaXMuX29wZW5lZFJpZ2h0ID0gb3BlbmVkUmlnaHQ7XG4gICAgdGhpcy5zZXRCdG5TdHlsZSh2YWx1ZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fYnRuc0xlZnRXaWR0aCA9IHRoaXMubGVmdEJ0blJlZiA/IHRoaXMubGVmdEJ0blJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDogMDtcbiAgICB0aGlzLl9idG5zUmlnaHRXaWR0aCA9IHRoaXMucmlnaHRCdG5SZWYgPyB0aGlzLnJpZ2h0QnRuUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggOiAwO1xuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25DbG9zZVN3aXBlLCB0cnVlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25DbG9zZVN3aXBlLCB0cnVlKTtcbiAgfVxufVxuIl19