@fivethree/core
Version:
Fivethree Core Components
299 lines • 22.5 kB
JavaScript
/**
* @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=