UNPKG

@fivethree/core

Version:
299 lines 22.5 kB
/** * @fileoverview added by tsickle * Generated from: lib/pull/pull.directive.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Directive, ElementRef, Input, Output, EventEmitter } from '@angular/core'; import { IonContent, Platform } from '@ionic/angular'; import { fromEvent, merge } from 'rxjs'; import { filter, map, skipWhile, takeUntil, takeLast } from 'rxjs/operators'; var FivPull = /** @class */ (function () { function FivPull(element, platform, content) { this.element = element; this.platform = platform; this.content = content; this.minPullHeight = 112; this.maxPullHeight = 168; this.enabled = true; this.enableScroll = false; this.direction = 'down'; this.fivRefresh = new EventEmitter(); this.fivCancel = new EventEmitter(); this.fivPull = new EventEmitter(); } /** * @return {?} */ FivPull.prototype.ngOnInit = /** * @return {?} */ function () { this.init(); }; /** * @param {?=} minPullHeight * @param {?=} maxPullHeight * @param {?=} direction * @return {?} */ FivPull.prototype.init = /** * @param {?=} minPullHeight * @param {?=} maxPullHeight * @param {?=} direction * @return {?} */ function (minPullHeight, maxPullHeight, direction) { var _this = this; if (minPullHeight === void 0) { minPullHeight = 112; } if (maxPullHeight === void 0) { maxPullHeight = 168; } if (direction === void 0) { direction = 'down'; } this.minPullHeight = minPullHeight; this.maxPullHeight = maxPullHeight; this.direction = direction; this.content.scrollEvents = true; this.content.getScrollElement().then((/** * @param {?} s * @return {?} */ function (s) { _this.scrollY = s; // needed for scrollTop _this.setupPanListener(); })); }; /** * @private * @return {?} */ FivPull.prototype.setupPanListener = /** * @private * @return {?} */ function () { var _this = this; /** @type {?} */ var touchstart$ = fromEvent(this.element.nativeElement, 'touchstart', { passive: true }); /** @type {?} */ var touchmove$ = fromEvent(this.element.nativeElement, 'touchmove', { passive: true }); /** @type {?} */ var touchend$ = fromEvent(this.element.nativeElement, 'touchend', { passive: true }); /** @type {?} */ var touchcancel$ = fromEvent(this.element.nativeElement, 'touchcancel', { passive: true }); /** @type {?} */ var end$ = merge(touchend$, touchcancel$); /** @type {?} */ var dragAtTop = touchstart$.pipe(filter((/** * @param {?} e * @return {?} */ function (e) { return (_this.scrollY.scrollTop === 0 || _this.enableScroll) && _this.direction === 'down' && _this.enabled; }))); /** @type {?} */ var dragAtBottom = touchstart$.pipe(filter((/** * @param {?} e * @return {?} */ function (e) { return (_this.scrollY.scrollTop === _this.scrollY.clientHeight - _this.platform.height() || _this.enableScroll) && _this.direction === 'up' && _this.enabled; }))); /** @type {?} */ var dragTopDown = dragAtTop.pipe(map((/** * @param {?} start * @return {?} */ function (start) { /** @type {?} */ var startY = start.touches[0].pageY; return touchmove$.pipe(map((/** * @param {?} move * @return {?} */ function (move) { /** @type {?} */ var currentY = move.touches[0].pageY; return { startEvent: start, moveEvent: move, startY: startY, currentY: currentY, offset: currentY - startY }; })), skipWhile((/** * @param {?} drag * @return {?} */ function (drag) { return drag.offset < 0; })), takeUntil(end$)); }))); dragTopDown.forEach((/** * @param {?} drags * @return {?} */ function (drags) { drags.forEach((/** * @param {?} drag * @return {?} */ function (drag) { /** @type {?} */ var offset = drag.offset / 2; if (offset < 0 || offset > _this.maxPullHeight) { return; } if (offset <= _this.maxPullHeight) { } _this.fivPull.emit(offset / _this.maxPullHeight); })); drags.pipe(takeLast(1)).subscribe((/** * @param {?} drag * @return {?} */ function (drag) { /** @type {?} */ var offset = drag.offset / 2; /** @type {?} */ var refresh = offset >= _this.minPullHeight; if (refresh) { _this.fivRefresh.emit(offset / _this.maxPullHeight); } else { _this.fivCancel.emit(offset / _this.maxPullHeight); } })); })); /** @type {?} */ var dragBottomUp = dragAtBottom.pipe(map((/** * @param {?} start * @return {?} */ function (start) { /** @type {?} */ var startY = start.touches[0].pageY; return touchmove$.pipe(map((/** * @param {?} move * @return {?} */ function (move) { /** @type {?} */ var currentY = move.touches[0].pageY; return { startEvent: start, moveEvent: move, startY: startY, currentY: currentY, offset: startY - currentY }; })), skipWhile((/** * @param {?} drag * @return {?} */ function (drag) { return drag.offset < 0; })), takeUntil(end$)); }))); dragBottomUp.forEach((/** * @param {?} drags * @return {?} */ function (drags) { drags.forEach((/** * @param {?} drag * @return {?} */ function (drag) { /** @type {?} */ var offset = drag.offset / 2; if (offset < 0 || offset > _this.maxPullHeight) { return; } _this.fivPull.emit(offset / _this.maxPullHeight); })); drags.pipe(takeLast(1)).subscribe((/** * @param {?} drag * @return {?} */ function (drag) { /** @type {?} */ var offset = drag.offset / 2; /** @type {?} */ var refresh = offset >= _this.minPullHeight; if (refresh) { _this.fivRefresh.emit(offset / _this.maxPullHeight); } else { _this.fivCancel.emit(offset / _this.maxPullHeight); } })); })); }; FivPull.decorators = [ { type: Directive, args: [{ selector: '[fivPull]' },] } ]; /** @nocollapse */ FivPull.ctorParameters = function () { return [ { type: ElementRef }, { type: Platform }, { type: IonContent } ]; }; FivPull.propDecorators = { minPullHeight: [{ type: Input }], maxPullHeight: [{ type: Input }], enabled: [{ type: Input }], enableScroll: [{ type: Input }], direction: [{ type: Input }], fivRefresh: [{ type: Output }], fivCancel: [{ type: Output }], fivPull: [{ type: Output }] }; return FivPull; }()); export { FivPull }; if (false) { /** @type {?} */ FivPull.prototype.minPullHeight; /** @type {?} */ FivPull.prototype.maxPullHeight; /** @type {?} */ FivPull.prototype.enabled; /** @type {?} */ FivPull.prototype.enableScroll; /** @type {?} */ FivPull.prototype.direction; /** @type {?} */ FivPull.prototype.fivRefresh; /** @type {?} */ FivPull.prototype.fivCancel; /** @type {?} */ FivPull.prototype.fivPull; /** @type {?} */ FivPull.prototype.scrollY; /** * @type {?} * @private */ FivPull.prototype.element; /** * @type {?} * @private */ FivPull.prototype.platform; /** * @type {?} * @private */ FivPull.prototype.content; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVsbC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZml2ZXRocmVlL2NvcmUvIiwic291cmNlcyI6WyJsaWIvcHVsbC9wdWxsLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsVUFBVSxFQUNWLEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU3RTtJQWdCRSxpQkFDVSxPQUFtQixFQUNuQixRQUFrQixFQUNsQixPQUFtQjtRQUZuQixZQUFPLEdBQVAsT0FBTyxDQUFZO1FBQ25CLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBWTtRQWZwQixrQkFBYSxHQUFHLEdBQUcsQ0FBQztRQUNwQixrQkFBYSxHQUFHLEdBQUcsQ0FBQztRQUNwQixZQUFPLEdBQUcsSUFBSSxDQUFDO1FBQ2YsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsY0FBUyxHQUFrQixNQUFNLENBQUM7UUFFakMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMsY0FBUyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDdkMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7SUFRNUMsQ0FBQzs7OztJQUVKLDBCQUFROzs7SUFBUjtRQUNFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7Ozs7Ozs7SUFDRCxzQkFBSTs7Ozs7O0lBQUosVUFDRSxhQUFtQixFQUNuQixhQUFt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O2dCQUM1QyxJQUFJLE9BQU8sRUFBRTtvQkFDWCxLQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUNuRDtxQkFBTTtvQkFDTCxLQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUNsRDtZQUNILENBQUMsRUFBQyxDQUFDO1FBQ0wsQ0FBQyxFQUFDLENBQUM7SUFDTCxDQUFDOztnQkE1SkYsU0FBUyxTQUFDO29CQUNULFFBQVEsRUFBRSxXQUFXO2lCQUN0Qjs7OztnQkFYQyxVQUFVO2dCQUtTLFFBQVE7Z0JBQXBCLFVBQVU7OztnQ0FRaEIsS0FBSztnQ0FDTCxLQUFLOzBCQUNMLEtBQUs7K0JBQ0wsS0FBSzs0QkFDTCxLQUFLOzZCQUVMLE1BQU07NEJBQ04sTUFBTTswQkFDTixNQUFNOztJQWlKVCxjQUFDO0NBQUEsQUE3SkQsSUE2SkM7U0ExSlksT0FBTzs7O0lBQ2xCLGdDQUE2Qjs7SUFDN0IsZ0NBQTZCOztJQUM3QiwwQkFBd0I7O0lBQ3hCLCtCQUE4Qjs7SUFDOUIsNEJBQTJDOztJQUUzQyw2QkFBK0M7O0lBQy9DLDRCQUFpRDs7SUFDakQsMEJBQStDOztJQUUvQywwQkFBcUI7Ozs7O0lBR25CLDBCQUEyQjs7Ozs7SUFDM0IsMkJBQTBCOzs7OztJQUMxQiwwQkFBMkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIE9uSW5pdCxcbiAgRWxlbWVudFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW9uQ29udGVudCwgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBmcm9tRXZlbnQsIG1lcmdlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgc2tpcFdoaWxlLCB0YWtlVW50aWwsIHRha2VMYXN0IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZml2UHVsbF0nXG59KVxuZXhwb3J0IGNsYXNzIEZpdlB1bGwgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBtaW5QdWxsSGVpZ2h0ID0gMTEyO1xuICBASW5wdXQoKSBtYXhQdWxsSGVpZ2h0ID0gMTY4O1xuICBASW5wdXQoKSBlbmFibGVkID0gdHJ1ZTtcbiAgQElucHV0KCkgZW5hYmxlU2Nyb2xsID0gZmFsc2U7XG4gIEBJbnB1dCgpIGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJyA9ICdkb3duJztcblxuICBAT3V0cHV0KCkgZml2UmVmcmVzaCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZml2Q2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBmaXZQdWxsID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgc2Nyb2xsWTogSFRNTEVsZW1lbnQ7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgY29udGVudDogSW9uQ29udGVudFxuICApIHt9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5pbml0KCk7XG4gIH1cbiAgaW5pdChcbiAgICBtaW5QdWxsSGVpZ2h0ID0gMTEyLFxuICAgIG1heFB1bGxIZWlnaHQgPSAxNjgsXG4gICAgZGlyZWN0aW9uOiAndXAnIHwgJ2Rvd24nID0gJ2Rvd24nXG4gICkge1xuICAgIHRoaXMubWluUHVsbEhlaWdodCA9IG1pblB1bGxIZWlnaHQ7XG4gICAgdGhpcy5tYXhQdWxsSGVpZ2h0ID0gbWF4UHVsbEhlaWdodDtcbiAgICB0aGlzLmRpcmVjdGlvbiA9IGRpcmVjdGlvbjtcbiAgICB0aGlzLmNvbnRlbnQuc2Nyb2xsRXZlbnRzID0gdHJ1ZTtcbiAgICB0aGlzLmNvbnRlbnQuZ2V0U2Nyb2xsRWxlbWVudCgpLnRoZW4ocyA9PiB7XG4gICAgICB0aGlzLnNjcm9sbFkgPSBzOyAvLyBuZWVkZWQgZm9yIHNjcm9sbFRvcFxuICAgICAgdGhpcy5zZXR1cFBhbkxpc3RlbmVyKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHNldHVwUGFuTGlzdGVuZXIoKSB7XG4gICAgY29uc3QgdG91Y2hzdGFydCQgPSBmcm9tRXZlbnQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICd0b3VjaHN0YXJ0Jywge1xuICAgICAgcGFzc2l2ZTogdHJ1ZVxuICAgIH0pO1xuICAgIGNvbnN0IHRvdWNobW92ZSQgPSBmcm9tRXZlbnQodGhpcy5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQsICd0b3VjaG1vdmUnLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgdG91Y2hlbmQkID0gZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAndG91Y2hlbmQnLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgdG91Y2hjYW5jZWwkID0gZnJvbUV2ZW50KHRoaXMuZWxlbWVudC5uYXRpdmVFbGVtZW50LCAndG91Y2hjYW5jZWwnLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgY29uc3QgZW5kJCA9IG1lcmdlKHRvdWNoZW5kJCwgdG91Y2hjYW5jZWwkKTtcblxuICAgIGNvbnN0IGRyYWdBdFRvcCA9IHRvdWNoc3RhcnQkLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIGUgPT5cbiAgICAgICAgICAodGhpcy5zY3JvbGxZLnNjcm9sbFRvcCA9PT0gMCB8fCB0aGlzLmVuYWJsZVNjcm9sbCkgJiZcbiAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9PT0gJ2Rvd24nICYmXG4gICAgICAgICAgdGhpcy5lbmFibGVkXG4gICAgICApXG4gICAgKTtcblxuICAgIGNvbnN0IGRyYWdBdEJvdHRvbSA9IHRvdWNoc3RhcnQkLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIGUgPT5cbiAgICAgICAgICAodGhpcy5zY3JvbGxZLnNjcm9sbFRvcCA9PT1cbiAgICAgICAgICAgIHRoaXMuc2Nyb2xsWS5jbGllbnRIZWlnaHQgLSB0aGlzLnBsYXRmb3JtLmhlaWdodCgpIHx8XG4gICAgICAgICAgICB0aGlzLmVuYWJsZVNjcm9sbCkgJiZcbiAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9PT0gJ3VwJyAmJlxuICAgICAgICAgIHRoaXMuZW5hYmxlZFxuICAgICAgKVxuICAgICk7XG5cbiAgICBjb25zdCBkcmFnVG9wRG93biA9IGRyYWdBdFRvcC5waXBlKFxuICAgICAgbWFwKChzdGFydDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0WSA9IHN0YXJ0LnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgIHJldHVybiB0b3VjaG1vdmUkLnBpcGUoXG4gICAgICAgICAgbWFwKChtb3ZlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRZID0gbW92ZS50b3VjaGVzWzBdLnBhZ2VZO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3RhcnRFdmVudDogc3RhcnQsXG4gICAgICAgICAgICAgIG1vdmVFdmVudDogbW92ZSxcbiAgICAgICAgICAgICAgc3RhcnRZOiBzdGFydFksXG4gICAgICAgICAgICAgIGN1cnJlbnRZOiBjdXJyZW50WSxcbiAgICAgICAgICAgICAgb2Zmc2V0OiBjdXJyZW50WSAtIHN0YXJ0WVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBza2lwV2hpbGUoZHJhZyA9PiBkcmFnLm9mZnNldCA8IDApLFxuICAgICAgICAgIHRha2VVbnRpbChlbmQkKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgZHJhZ1RvcERvd24uZm9yRWFjaChkcmFncyA9PiB7XG4gICAgICBkcmFncy5mb3JFYWNoKGRyYWcgPT4ge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBkcmFnLm9mZnNldCAvIDI7XG4gICAgICAgIGlmIChvZmZzZXQgPCAwIHx8IG9mZnNldCA+IHRoaXMubWF4UHVsbEhlaWdodCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAob2Zmc2V0IDw9IHRoaXMubWF4UHVsbEhlaWdodCkge1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZml2UHVsbC5lbWl0KG9mZnNldCAvIHRoaXMubWF4UHVsbEhlaWdodCk7XG4gICAgICB9KTtcblxuICAgICAgZHJhZ3MucGlwZSh0YWtlTGFzdCgxKSkuc3Vic2NyaWJlKGRyYWcgPT4ge1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBkcmFnLm9mZnNldCAvIDI7XG4gICAgICAgIGNvbnN0IHJlZnJlc2ggPSBvZmZzZXQgPj0gdGhpcy5taW5QdWxsSGVpZ2h0O1xuICAgICAgICBpZiAocmVmcmVzaCkge1xuICAgICAgICAgIHRoaXMuZml2UmVmcmVzaC5lbWl0KG9mZnNldCAvIHRoaXMubWF4UHVsbEhlaWdodCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5maXZDYW5jZWwuZW1pdChvZmZzZXQgLyB0aGlzLm1heFB1bGxIZWlnaHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGRyYWdCb3R0b21VcCA9IGRyYWdBdEJvdHRvbS5waXBlKFxuICAgICAgbWFwKChzdGFydDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXJ0WSA9IHN0YXJ0LnRvdWNoZXNbMF0ucGFnZVk7XG4gICAgICAgIHJldHVybiB0b3VjaG1vdmUkLnBpcGUoXG4gICAgICAgICAgbWFwKChtb3ZlOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRZID0gbW92ZS50b3VjaGVzWzBdLnBhZ2VZO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgc3RhcnRFdmVudDogc3RhcnQsXG4gICAgICAgICAgICAgIG1vdmVFdmVudDogbW92ZSxcbiAgICAgICAgICAgICAgc3RhcnRZOiBzdGFydFksXG4gICAgICAgICAgICAgIGN1cnJlbnRZOiBjdXJyZW50WSxcbiAgICAgICAgICAgICAgb2Zmc2V0OiBzdGFydFkgLSBjdXJyZW50WVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBza2lwV2hpbGUoZHJhZyA9PiBkcmFnLm9mZnNldCA8IDApLFxuICAgICAgICAgIHRha2VVbnRpbChlbmQkKVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgZHJhZ0JvdHRvbVVwLmZvckVhY2goZHJhZ3MgPT4ge1xuICAgICAgZHJhZ3MuZm9yRWFjaChkcmFnID0+IHtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gZHJhZy5vZmZzZXQgLyAyO1xuICAgICAgICBpZiAob2Zmc2V0IDwgMCB8fCBvZmZzZXQgPiB0aGlzLm1heFB1bGxIZWlnaHQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maXZQdWxsLmVtaXQob2Zmc2V0IC8gdGhpcy5tYXhQdWxsSGVpZ2h0KTtcbiAgICAgIH0pO1xuXG4gICAgICBkcmFncy5waXBlKHRha2VMYXN0KDEpKS5zdWJzY3JpYmUoZHJhZyA9PiB7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGRyYWcub2Zmc2V0IC8gMjtcbiAgICAgICAgY29uc3QgcmVmcmVzaCA9IG9mZnNldCA+PSB0aGlzLm1pblB1bGxIZWlnaHQ7XG4gICAgICAgIGlmIChyZWZyZXNoKSB7XG4gICAgICAgICAgdGhpcy5maXZSZWZyZXNoLmVtaXQob2Zmc2V0IC8gdGhpcy5tYXhQdWxsSGVpZ2h0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmZpdkNhbmNlbC5lbWl0KG9mZnNldCAvIHRoaXMubWF4UHVsbEhlaWdodCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=