UNPKG

ng-zorro-antd-mobile

Version:

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

277 lines 23.1 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'; export class SwipeActionComponent { constructor() { 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 {?} */ ev => { if (!(this._openedLeft || this._openedRight)) { return; } /** @type {?} */ const pNode = ev.target.closest(`.${this.prefixCls}-actions`); if (!pNode) { this.close(); } }); } /** * @return {?} */ setClassMap() { this.wrapCls = { [this.prefixCls]: true, [`${this.prefixCls}-swiping`]: this._swiping }; } /** * @return {?} */ close() { if (this._openedLeft || this._openedRight) { this.onClose.emit(); } this.setBtnStyle(0); this._openedLeft = false; this._openedRight = false; } /** * @param {?} value * @return {?} */ setBtnStyle(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 {?} */ const limit = value > 0 ? this._btnsLeftWidth : -this._btnsRightWidth; /** @type {?} */ const 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 {?} */ getContentEasing(value, limit) { return Math.abs(value) - Math.abs(limit) > 0 ? limit : value; } /** * @param {?} e * @return {?} */ onTouchStart(e) { this._startX = e.changedTouches[0].clientX; this._swiping = true; } /** * @param {?} e * @return {?} */ onTouchMove(e) { /** @type {?} */ const 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 {?} */ onTouchEnd(e) { /** @type {?} */ const deltaX = e.changedTouches[0].clientX - this._startX; /** @type {?} */ const needOpenRight = this._needShowRight && Math.abs(deltaX) > this._btnsRightWidth / 2; /** @type {?} */ const 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 {?} */ doOpenLeft() { this.open(this._btnsLeftWidth, true, false); } /** * @return {?} */ doOpenRight() { this.open(-this._btnsRightWidth, false, true); } /** * @param {?} ev * @param {?} btn * @return {?} */ onBtnClick(ev, btn) { /** @type {?} */ const onPress = btn.onPress; if (onPress) { onPress(ev); } if (this.autoClose) { this.close(); } } /** * @param {?} value * @param {?} openedLeft * @param {?} openedRight * @return {?} */ open(value, openedLeft, openedRight) { this.onOpen.emit(); this._openedLeft = openedLeft; this._openedRight = openedRight; this.setBtnStyle(value); } /** * @return {?} */ ngOnInit() { this.setClassMap(); } /** * @return {?} */ ngAfterViewInit() { 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 {?} */ ngOnDestroy() { 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 = () => []; 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 }] }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpcGUtYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsic3dpcGUtYWN0aW9uL3N3aXBlLWFjdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQU92QixNQUFNLE9BQU8sb0JBQW9CO0lBbUMvQjtRQWxDQSxjQUFTLEdBQVcsVUFBVSxDQUFDO1FBQy9CLFlBQU8sR0FBVyxFQUFFLENBQUM7UUFFYixhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLGdCQUFXLEdBQVksS0FBSyxDQUFDO1FBQzdCLGlCQUFZLEdBQVksS0FBSyxDQUFDO1FBaUJ0QyxTQUFJLEdBQWtCLEVBQUUsQ0FBQztRQUV6QixVQUFLLEdBQWtCLEVBQUUsQ0FBQztRQUUxQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBRTNCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBTyxDQUFDO1FBRXBELFlBQU8sR0FBc0IsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQVdyRCxpQkFBWTs7OztRQUFHLEVBQUUsQ0FBQyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUM1QyxPQUFPO2FBQ1I7O2tCQUNLLEtBQUssR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLFVBQVUsQ0FBQztZQUM3RCxJQUFJLENBQUMsS0FBSyxFQUFFO2dCQUNWLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNkO1FBQ0gsQ0FBQyxFQUFBO0lBakJjLENBQUM7Ozs7SUFFaEIsV0FB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cG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE91dHB1dCxcbiAgVmlld0NoaWxkLFxuICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnU3dpcGVBY3Rpb24sIG56bS1zd2lwZS1hY3Rpb24nLFxuICB0ZW1wbGF0ZVVybDogJy4vc3dpcGUtYWN0aW9uLmNvbXBvbmVudC5odG1sJyxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTd2lwZUFjdGlvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgcHJlZml4Q2xzOiBzdHJpbmcgPSAnYW0tc3dpcGUnO1xuICB3cmFwQ2xzOiBvYmplY3QgPSB7fTtcblxuICBwcml2YXRlIF9zd2lwaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX29wZW5lZExlZnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3BlbmVkUmlnaHQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfYnRuc0xlZnRXaWR0aDogbnVtYmVyO1xuICBwcml2YXRlIF9idG5zUmlnaHRXaWR0aDogbnVtYmVyO1xuICBwcml2YXRlIF9uZWVkU2hvd0xlZnQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX25lZWRTaG93UmlnaHQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX3N0YXJ0WDogbnVtYmVyO1xuXG4gIEBWaWV3Q2hpbGQoJ2xlZnRCdG5SZWYnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgbGVmdEJ0blJlZjtcbiAgQFZpZXdDaGlsZCgncmlnaHRCdG5SZWYnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgcmlnaHRCdG5SZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgY29udGVudDtcbiAgQFZpZXdDaGlsZCgnY292ZXJSZWYnLCB7IHN0YXRpYzogZmFsc2UgfSlcbiAgY292ZXI7XG5cbiAgQElucHV0KClcbiAgbGVmdDogQXJyYXk8b2JqZWN0PiA9IFtdO1xuICBASW5wdXQoKVxuICByaWdodDogQXJyYXk8b2JqZWN0PiA9IFtdO1xuICBASW5wdXQoKVxuICBhdXRvQ2xvc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpXG4gIG9uT3BlbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHNldENsYXNzTWFwKCkge1xuICAgIHRoaXMud3JhcENscyA9IHtcbiAgICAgIFt0aGlzLnByZWZpeENsc106IHRydWUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXN3aXBpbmdgXTogdGhpcy5fc3dpcGluZ1xuICAgIH07XG4gIH1cblxuICBvbkNsb3NlU3dpcGUgPSBldiA9PiB7XG4gICAgaWYgKCEodGhpcy5fb3BlbmVkTGVmdCB8fCB0aGlzLl9vcGVuZWRSaWdodCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgcE5vZGUgPSBldi50YXJnZXQuY2xvc2VzdChgLiR7dGhpcy5wcmVmaXhDbHN9LWFjdGlvbnNgKTtcbiAgICBpZiAoIXBOb2RlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgY2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuX29wZW5lZExlZnQgfHwgdGhpcy5fb3BlbmVkUmlnaHQpIHtcbiAgICAgIHRoaXMub25DbG9zZS5lbWl0KCk7XG4gICAgfVxuICAgIHRoaXMuc2V0QnRuU3R5bGUoMCk7XG4gICAgdGhpcy5fb3BlbmVkTGVmdCA9IGZhbHNlO1xuICAgIHRoaXMuX29wZW5lZFJpZ2h0ID0gZmFsc2U7XG4gIH1cblxuICBzZXRCdG5TdHlsZSh2YWx1ZSkge1xuICAgIGlmICh0aGlzLl9idG5zTGVmdFdpZHRoID09PSAwIHx8IHRoaXMuX2J0bnNSaWdodFdpZHRoID09PSAwKSB7XG4gICAgICB0aGlzLl9idG5zTGVmdFdpZHRoID0gdGhpcy5sZWZ0QnRuUmVmID8gdGhpcy5sZWZ0QnRuUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggOiAwO1xuICAgICAgdGhpcy5fYnRuc1JpZ2h0V2lkdGggPSB0aGlzLnJpZ2h0QnRuUmVmID8gdGhpcy5yaWdodEJ0blJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDogMDtcbiAgICB9XG4gICAgY29uc3QgbGltaXQgPSB2YWx1ZSA+IDAgPyB0aGlzLl9idG5zTGVmdFdpZHRoIDogLXRoaXMuX2J0bnNSaWdodFdpZHRoO1xuICAgIGNvbnN0IGNvbnRlbnRMZWZ0ID0gdGhpcy5nZXRDb250ZW50RWFzaW5nKHZhbHVlLCBsaW1pdCk7XG4gICAgdGhpcy5jb250ZW50Lm5hdGl2ZUVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2NvbnRlbnRMZWZ0fXB4YDtcbiAgICB0aGlzLmNvdmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuZGlzcGxheSA9IE1hdGguYWJzKHZhbHVlKSA+IDAgPyAnYmxvY2snIDogJ25vbmUnO1xuICAgIHRoaXMuY292ZXIubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7Y29udGVudExlZnR9cHhgO1xuICB9XG5cbiAgZ2V0Q29udGVudEVhc2luZyh2YWx1ZSwgbGltaXQpIHtcbiAgICByZXR1cm4gTWF0aC5hYnModmFsdWUpIC0gTWF0aC5hYnMobGltaXQpID4gMCA/IGxpbWl0IDogdmFsdWU7XG4gIH1cblxuICBvblRvdWNoU3RhcnQoZSkge1xuICAgIHRoaXMuX3N0YXJ0WCA9IGUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICB0aGlzLl9zd2lwaW5nID0gdHJ1ZTtcbiAgfVxuXG4gIG9uVG91Y2hNb3ZlKGUpIHtcbiAgICBjb25zdCBkZWx0YVggPSBlLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9zdGFydFg7XG4gICAgdGhpcy5fbmVlZFNob3dSaWdodCA9IGRlbHRhWCA8IC01ICYmIHRoaXMucmlnaHQubGVuZ3RoID4gMDtcbiAgICB0aGlzLl9uZWVkU2hvd0xlZnQgPSBkZWx0YVggPiA1ICYmIHRoaXMubGVmdC5sZW5ndGggPiAwO1xuICAgIGlmICh0aGlzLmxlZnRCdG5SZWYpIHtcbiAgICAgIHRoaXMubGVmdEJ0blJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSB0aGlzLl9uZWVkU2hvd1JpZ2h0ID8gJ2hpZGRlbicgOiAndmlzaWJsZSc7XG4gICAgfVxuICAgIGlmICh0aGlzLnJpZ2h0QnRuUmVmKSB7XG4gICAgICB0aGlzLnJpZ2h0QnRuUmVmLm5hdGl2ZUVsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9IHRoaXMuX25lZWRTaG93TGVmdCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnO1xuICAgIH1cbiAgICB0aGlzLnNldEJ0blN0eWxlKGRlbHRhWCk7XG4gIH1cblxuICBvblRvdWNoRW5kKGUpIHtcbiAgICBjb25zdCBkZWx0YVggPSBlLmNoYW5nZWRUb3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9zdGFydFg7XG5cbiAgICBjb25zdCBuZWVkT3BlblJpZ2h0ID0gdGhpcy5fbmVlZFNob3dSaWdodCAmJiBNYXRoLmFicyhkZWx0YVgpID4gdGhpcy5fYnRuc1JpZ2h0V2lkdGggLyAyO1xuICAgIGNvbnN0IG5lZWRPcGVuTGVmdCA9IHRoaXMuX25lZWRTaG93TGVmdCAmJiBNYXRoLmFicyhkZWx0YVgpID4gdGhpcy5fYnRuc0xlZnRXaWR0aCAvIDI7XG5cbiAgICBpZiAobmVlZE9wZW5SaWdodCkge1xuICAgICAgdGhpcy5kb09wZW5SaWdodCgpO1xuICAgIH0gZWxzZSBpZiAobmVlZE9wZW5MZWZ0KSB7XG4gICAgICB0aGlzLmRvT3BlbkxlZnQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgICB0aGlzLl9zd2lwaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fbmVlZFNob3dMZWZ0ID0gZmFsc2U7XG4gICAgdGhpcy5fbmVlZFNob3dSaWdodCA9IGZhbHNlO1xuICB9XG5cbiAgZG9PcGVuTGVmdCgpIHtcbiAgICB0aGlzLm9wZW4odGhpcy5fYnRuc0xlZnRXaWR0aCwgdHJ1ZSwgZmFsc2UpO1xuICB9XG5cbiAgZG9PcGVuUmlnaHQoKSB7XG4gICAgdGhpcy5vcGVuKC10aGlzLl9idG5zUmlnaHRXaWR0aCwgZmFsc2UsIHRydWUpO1xuICB9XG5cbiAgb25CdG5DbGljayhldiwgYnRuKSB7XG4gICAgY29uc3Qgb25QcmVzcyA9IGJ0bi5vblByZXNzO1xuICAgIGlmIChvblByZXNzKSB7XG4gICAgICBvblByZXNzKGV2KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXV0b0Nsb3NlKSB7XG4gICAgICB0aGlzLmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgb3Blbih2YWx1ZSwgb3BlbmVkTGVmdCwgb3BlbmVkUmlnaHQpIHtcbiAgICB0aGlzLm9uT3Blbi5lbWl0KCk7XG4gICAgdGhpcy5fb3BlbmVkTGVmdCA9IG9wZW5lZExlZnQ7XG4gICAgdGhpcy5fb3BlbmVkUmlnaHQgPSBvcGVuZWRSaWdodDtcbiAgICB0aGlzLnNldEJ0blN0eWxlKHZhbHVlKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLl9idG5zTGVmdFdpZHRoID0gdGhpcy5sZWZ0QnRuUmVmID8gdGhpcy5sZWZ0QnRuUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggOiAwO1xuICAgIHRoaXMuX2J0bnNSaWdodFdpZHRoID0gdGhpcy5yaWdodEJ0blJlZiA/IHRoaXMucmlnaHRCdG5SZWYubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCA6IDA7XG4gICAgZG9jdW1lbnQuYm9keS5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vbkNsb3NlU3dpcGUsIHRydWUpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vbkNsb3NlU3dpcGUsIHRydWUpO1xuICB9XG59XG4iXX0=