ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
294 lines (293 loc) • 21.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, EventEmitter, Input, Output, ViewChild, ViewEncapsulation } from '@angular/core';
var SwipeAction = /** @class */ (function () {
function SwipeAction() {
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 = function () {
if (!(_this._openedLeft || _this._openedRight)) {
return;
}
_this.close();
};
this.onTouchStart = function (e) {
_this._startX = e.changedTouches[0].clientX;
_this._swiping = true;
};
}
/**
* @return {?}
*/
SwipeAction.prototype.setClassMap = /**
* @return {?}
*/
function () {
var _a;
this.wrapCls = (_a = {},
_a[this.prefixCls] = true,
_a[this.prefixCls + "-swiping"] = this._swiping,
_a);
};
/**
* @return {?}
*/
SwipeAction.prototype.close = /**
* @return {?}
*/
function () {
if (this._openedLeft || this._openedRight) {
this.onClose.emit();
}
this.setBtnStyle(0);
this._openedLeft = false;
this._openedRight = false;
};
/**
* @param {?} value
* @return {?}
*/
SwipeAction.prototype.setBtnStyle = /**
* @param {?} value
* @return {?}
*/
function (value) {
/** @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 {?}
*/
SwipeAction.prototype.getContentEasing = /**
* @param {?} value
* @param {?} limit
* @return {?}
*/
function (value, limit) {
return Math.abs(value) - Math.abs(limit) > 0 ? limit : value;
};
/**
* @param {?} e
* @return {?}
*/
SwipeAction.prototype.onTouchMove = /**
* @param {?} e
* @return {?}
*/
function (e) {
/** @type {?} */
var deltaX = e.changedTouches[0].clientX - this._startX;
e.preventDefault();
this._needShowRight = deltaX < 0 && this.right.length > 0;
this._needShowLeft = deltaX > 0 && 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 {?}
*/
SwipeAction.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 {?}
*/
SwipeAction.prototype.doOpenLeft = /**
* @return {?}
*/
function () {
this.open(this._btnsLeftWidth, true, false);
};
/**
* @return {?}
*/
SwipeAction.prototype.doOpenRight = /**
* @return {?}
*/
function () {
this.open(-this._btnsRightWidth, false, true);
};
/**
* @param {?} ev
* @param {?} btn
* @return {?}
*/
SwipeAction.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 {?}
*/
SwipeAction.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 {?}
*/
SwipeAction.prototype.ngOnInit = /**
* @return {?}
*/
function () {
this.setClassMap();
};
/**
* @return {?}
*/
SwipeAction.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 {?}
*/
SwipeAction.prototype.ngOnDestroy = /**
* @return {?}
*/
function () {
document.body.removeEventListener('touchstart', this.onCloseSwipe, true);
};
SwipeAction.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\"\n class=\"{{prefixCls}}-actions {{prefixCls}}-actions-left\"\n #leftBtnRef>\n <div *ngFor=\"let btn of left\"\n class=\"{{prefixCls}}-btn\"\n [ngStyle]=\"btn.style\"\n role=\"button\"\n (click)=\"onBtnClick($event, btn)\">\n <div class=\"{{prefixCls}}-btn-text\">\n {{btn.text || 'Click'}}\n </div>\n </div>\n </div>\n <div *ngIf=\"right && right.length > 0\"\n class=\"{{prefixCls}}-actions {{prefixCls}}-actions-right\"\n #rightBtnRef>\n <div *ngFor=\"let btn of right\"\n class=\"{{prefixCls}}-btn\"\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 class=\"{{prefixCls}}-content\"\n #contentRef\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd($event)\">\n <ng-template [ngTemplateOutlet]=\"content\"></ng-template>\n </div>\n</div>\n<div *ngIf=\"!((left.length != 0 || right.length != 0) && !disabled)\"\n class=\"{{prefixCls}}-content\"\n #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 */
SwipeAction.ctorParameters = function () { return []; };
SwipeAction.propDecorators = {
leftBtnRef: [{ type: ViewChild, args: ['leftBtnRef',] }],
rightBtnRef: [{ type: ViewChild, args: ['rightBtnRef',] }],
content: [{ type: ViewChild, args: ['contentRef',] }],
cover: [{ type: ViewChild, args: ['coverRef',] }],
left: [{ type: Input }],
right: [{ type: Input }],
autoClose: [{ type: Input }],
disabled: [{ type: Input }],
onOpen: [{ type: Output }],
onClose: [{ type: Output }]
};
return SwipeAction;
}());
export { SwipeAction };
if (false) {
/** @type {?} */
SwipeAction.prototype.prefixCls;
/** @type {?} */
SwipeAction.prototype.wrapCls;
/** @type {?} */
SwipeAction.prototype._swiping;
/** @type {?} */
SwipeAction.prototype._openedLeft;
/** @type {?} */
SwipeAction.prototype._openedRight;
/** @type {?} */
SwipeAction.prototype._btnsLeftWidth;
/** @type {?} */
SwipeAction.prototype._btnsRightWidth;
/** @type {?} */
SwipeAction.prototype._needShowLeft;
/** @type {?} */
SwipeAction.prototype._needShowRight;
/** @type {?} */
SwipeAction.prototype._startX;
/** @type {?} */
SwipeAction.prototype.leftBtnRef;
/** @type {?} */
SwipeAction.prototype.rightBtnRef;
/** @type {?} */
SwipeAction.prototype.content;
/** @type {?} */
SwipeAction.prototype.cover;
/** @type {?} */
SwipeAction.prototype.left;
/** @type {?} */
SwipeAction.prototype.right;
/** @type {?} */
SwipeAction.prototype.autoClose;
/** @type {?} */
SwipeAction.prototype.disabled;
/** @type {?} */
SwipeAction.prototype.onOpen;
/** @type {?} */
SwipeAction.prototype.onClose;
/** @type {?} */
SwipeAction.prototype.onCloseSwipe;
/** @type {?} */
SwipeAction.prototype.onTouchStart;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dpcGUtYWN0aW9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsic3dpcGUtYWN0aW9uL3N3aXBlLWFjdGlvbi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQzs7SUEyQ3JCO1FBQUEsaUJBQWdCO3lCQWxDSSxVQUFVO3VCQUNaLEVBQUU7d0JBRVEsS0FBSzsyQkFDRixLQUFLOzRCQUNKLEtBQUs7b0JBaUJmLEVBQUU7cUJBRUQsRUFBRTt5QkFFSixLQUFLO3dCQUVOLEtBQUs7c0JBRUcsSUFBSSxZQUFZLEVBQU87dUJBRXRCLElBQUksWUFBWSxFQUFPOzRCQVdyQztZQUNiLElBQUksQ0FBQyxDQUFDLEtBQUksQ0FBQyxXQUFXLElBQUksS0FBSSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUM1QyxPQUFPO2FBQ1I7WUFDRCxLQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDZDs0QkF1QmMsVUFBQSxDQUFDO1lBQ2QsS0FBSSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUMzQyxLQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztTQUN0QjtLQXhDZTs7OztJQUVoQixpQ0FBVzs7O0lBQVg7O1FBQ0UsSUFBSSxDQUFDLE9BQU87WUFDVixHQUFDLElBQUksQ0FBQyxTQUFTLElBQUcsSUFBSTtZQUN0QixHQUFJLElBQUksQ0FBQyxTQUFTLGFBQVUsSUFBRyxJQUFJLENBQUMsUUFBUTtlQUM3QyxDQUFDO0tBQ0g7Ozs7SUFTRCwyQkFBSzs7O0lBQUw7UUFDRSxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFlBQVksRUFB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dmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ1N3aXBlQWN0aW9uLCBuem0tc3dpcGUtYWN0aW9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3N3aXBlLWFjdGlvbi5jb21wb25lbnQuaHRtbCcsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgU3dpcGVBY3Rpb24gaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLXN3aXBlJztcbiAgd3JhcENsczogb2JqZWN0ID0ge307XG5cbiAgcHJpdmF0ZSBfc3dpcGluZzogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9vcGVuZWRMZWZ0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX29wZW5lZFJpZ2h0OiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2J0bnNMZWZ0V2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfYnRuc1JpZ2h0V2lkdGg6IG51bWJlcjtcbiAgcHJpdmF0ZSBfbmVlZFNob3dMZWZ0OiBib29sZWFuO1xuICBwcml2YXRlIF9uZWVkU2hvd1JpZ2h0OiBib29sZWFuO1xuICBwcml2YXRlIF9zdGFydFg6IG51bWJlcjtcblxuICBAVmlld0NoaWxkKCdsZWZ0QnRuUmVmJylcbiAgbGVmdEJ0blJlZjtcbiAgQFZpZXdDaGlsZCgncmlnaHRCdG5SZWYnKVxuICByaWdodEJ0blJlZjtcbiAgQFZpZXdDaGlsZCgnY29udGVudFJlZicpXG4gIGNvbnRlbnQ7XG4gIEBWaWV3Q2hpbGQoJ2NvdmVyUmVmJylcbiAgY292ZXI7XG5cbiAgQElucHV0KClcbiAgbGVmdDogQXJyYXk8b2JqZWN0PiA9IFtdO1xuICBASW5wdXQoKVxuICByaWdodDogQXJyYXk8b2JqZWN0PiA9IFtdO1xuICBASW5wdXQoKVxuICBhdXRvQ2xvc2U6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQE91dHB1dCgpXG4gIG9uT3BlbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpXG4gIG9uQ2xvc2U6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIHNldENsYXNzTWFwKCkge1xuICAgIHRoaXMud3JhcENscyA9IHtcbiAgICAgIFt0aGlzLnByZWZpeENsc106IHRydWUsXG4gICAgICBbYCR7dGhpcy5wcmVmaXhDbHN9LXN3aXBpbmdgXTogdGhpcy5fc3dpcGluZ1xuICAgIH07XG4gIH1cblxuICBvbkNsb3NlU3dpcGUgPSAoKSA9PiB7XG4gICAgaWYgKCEodGhpcy5fb3BlbmVkTGVmdCB8fCB0aGlzLl9vcGVuZWRSaWdodCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5jbG9zZSgpO1xuICB9O1xuXG4gIGNsb3NlKCkge1xuICAgIGlmICh0aGlzLl9vcGVuZWRMZWZ0IHx8IHRoaXMuX29wZW5lZFJpZ2h0KSB7XG4gICAgICB0aGlzLm9uQ2xvc2UuZW1pdCgpO1xuICAgIH1cbiAgICB0aGlzLnNldEJ0blN0eWxlKDApO1xuICAgIHRoaXMuX29wZW5lZExlZnQgPSBmYWxzZTtcbiAgICB0aGlzLl9vcGVuZWRSaWdodCA9IGZhbHNlO1xuICB9XG5cbiAgc2V0QnRuU3R5bGUodmFsdWUpIHtcbiAgICBjb25zdCBsaW1pdCA9IHZhbHVlID4gMCA/IHRoaXMuX2J0bnNMZWZ0V2lkdGggOiAtdGhpcy5fYnRuc1JpZ2h0V2lkdGg7XG4gICAgY29uc3QgY29udGVudExlZnQgPSB0aGlzLmdldENvbnRlbnRFYXNpbmcodmFsdWUsIGxpbWl0KTtcbiAgICB0aGlzLmNvbnRlbnQubmF0aXZlRWxlbWVudC5zdHlsZS5sZWZ0ID0gYCR7Y29udGVudExlZnR9cHhgO1xuICAgIHRoaXMuY292ZXIubmF0aXZlRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gTWF0aC5hYnModmFsdWUpID4gMCA/ICdibG9jaycgOiAnbm9uZSc7XG4gICAgdGhpcy5jb3Zlci5uYXRpdmVFbGVtZW50LnN0eWxlLmxlZnQgPSBgJHtjb250ZW50TGVmdH1weGA7XG4gIH1cblxuICBnZXRDb250ZW50RWFzaW5nKHZhbHVlLCBsaW1pdCkge1xuICAgIHJldHVybiBNYXRoLmFicyh2YWx1ZSkgLSBNYXRoLmFicyhsaW1pdCkgPiAwID8gbGltaXQgOiB2YWx1ZTtcbiAgfVxuXG4gIG9uVG91Y2hTdGFydCA9IGUgPT4ge1xuICAgIHRoaXMuX3N0YXJ0WCA9IGUuY2hhbmdlZFRvdWNoZXNbMF0uY2xpZW50WDtcbiAgICB0aGlzLl9zd2lwaW5nID0gdHJ1ZTtcbiAgfTtcblxuICBvblRvdWNoTW92ZShlKSB7XG4gICAgY29uc3QgZGVsdGFYID0gZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5fc3RhcnRYO1xuICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB0aGlzLl9uZWVkU2hvd1JpZ2h0ID0gZGVsdGFYIDwgMCAmJiB0aGlzLnJpZ2h0Lmxlbmd0aCA+IDA7XG4gICAgdGhpcy5fbmVlZFNob3dMZWZ0ID0gZGVsdGFYID4gMCAmJiB0aGlzLmxlZnQubGVuZ3RoID4gMDtcbiAgICBpZiAodGhpcy5sZWZ0QnRuUmVmKSB7XG4gICAgICB0aGlzLmxlZnRCdG5SZWYubmF0aXZlRWxlbWVudC5zdHlsZS52aXNpYmlsaXR5ID0gdGhpcy5fbmVlZFNob3dSaWdodCA/ICdoaWRkZW4nIDogJ3Zpc2libGUnO1xuICAgIH1cbiAgICBpZiAodGhpcy5yaWdodEJ0blJlZikge1xuICAgICAgdGhpcy5yaWdodEJ0blJlZi5uYXRpdmVFbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSB0aGlzLl9uZWVkU2hvd0xlZnQgPyAnaGlkZGVuJyA6ICd2aXNpYmxlJztcbiAgICB9XG4gICAgdGhpcy5zZXRCdG5TdHlsZShkZWx0YVgpO1xuICB9XG5cbiAgb25Ub3VjaEVuZChlKSB7XG4gICAgY29uc3QgZGVsdGFYID0gZS5jaGFuZ2VkVG91Y2hlc1swXS5jbGllbnRYIC0gdGhpcy5fc3RhcnRYO1xuXG4gICAgY29uc3QgbmVlZE9wZW5SaWdodCA9IHRoaXMuX25lZWRTaG93UmlnaHQgJiYgTWF0aC5hYnMoZGVsdGFYKSA+IHRoaXMuX2J0bnNSaWdodFdpZHRoIC8gMjtcbiAgICBjb25zdCBuZWVkT3BlbkxlZnQgPSB0aGlzLl9uZWVkU2hvd0xlZnQgJiYgTWF0aC5hYnMoZGVsdGFYKSA+IHRoaXMuX2J0bnNMZWZ0V2lkdGggLyAyO1xuXG4gICAgaWYgKG5lZWRPcGVuUmlnaHQpIHtcbiAgICAgIHRoaXMuZG9PcGVuUmlnaHQoKTtcbiAgICB9IGVsc2UgaWYgKG5lZWRPcGVuTGVmdCkge1xuICAgICAgdGhpcy5kb09wZW5MZWZ0KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xvc2UoKTtcbiAgICB9XG4gICAgdGhpcy5fc3dpcGluZyA9IGZhbHNlO1xuICAgIHRoaXMuX25lZWRTaG93TGVmdCA9IGZhbHNlO1xuICAgIHRoaXMuX25lZWRTaG93UmlnaHQgPSBmYWxzZTtcbiAgfVxuXG4gIGRvT3BlbkxlZnQoKSB7XG4gICAgdGhpcy5vcGVuKHRoaXMuX2J0bnNMZWZ0V2lkdGgsIHRydWUsIGZhbHNlKTtcbiAgfVxuXG4gIGRvT3BlblJpZ2h0KCkge1xuICAgIHRoaXMub3BlbigtdGhpcy5fYnRuc1JpZ2h0V2lkdGgsIGZhbHNlLCB0cnVlKTtcbiAgfVxuXG4gIG9uQnRuQ2xpY2soZXYsIGJ0bikge1xuICAgIGNvbnN0IG9uUHJlc3MgPSBidG4ub25QcmVzcztcbiAgICBpZiAob25QcmVzcykge1xuICAgICAgb25QcmVzcyhldik7XG4gICAgfVxuICAgIGlmICh0aGlzLmF1dG9DbG9zZSkge1xuICAgICAgdGhpcy5jbG9zZSgpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW4odmFsdWUsIG9wZW5lZExlZnQsIG9wZW5lZFJpZ2h0KSB7XG4gICAgdGhpcy5vbk9wZW4uZW1pdCgpO1xuICAgIHRoaXMuX29wZW5lZExlZnQgPSBvcGVuZWRMZWZ0O1xuICAgIHRoaXMuX29wZW5lZFJpZ2h0ID0gb3BlbmVkUmlnaHQ7XG4gICAgdGhpcy5zZXRCdG5TdHlsZSh2YWx1ZSk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XG4gIH1cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgdGhpcy5fYnRuc0xlZnRXaWR0aCA9IHRoaXMubGVmdEJ0blJlZiA/IHRoaXMubGVmdEJ0blJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoIDogMDtcbiAgICB0aGlzLl9idG5zUmlnaHRXaWR0aCA9IHRoaXMucmlnaHRCdG5SZWYgPyB0aGlzLnJpZ2h0QnRuUmVmLm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGggOiAwO1xuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25DbG9zZVN3aXBlLCB0cnVlKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMub25DbG9zZVN3aXBlLCB0cnVlKTtcbiAgfVxufVxuIl19