ng-zorro-antd-mobile
Version:
An enterprise-class mobile UI components based on Ant Design and Angular
515 lines • 42.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { Component, ViewEncapsulation, Input, HostBinding, Output, EventEmitter, ElementRef } from '@angular/core';
var DrawerComponent = /** @class */ (function () {
function DrawerComponent(_el) {
this._el = _el;
this.prefixCls = 'am-drawer';
this.sidebarStyleFinal = {};
this.contentStyleFinal = {};
this.overlayStyleFinal = {};
this.sidebarWidth = 0;
this.sidebarHeight = 0;
this.sidebarTop = 0;
this.dragHandleTop = 0;
this.touchIdentifier = null;
this.touchStartX = null;
this.touchStartY = null;
this.touchCurrentX = null;
this.touchCurrentY = null;
this.touchSupported = typeof window === 'object' && 'ontouchstart' in window;
this._docked = false;
this._open = false;
this._position = 'left';
this.sidebarStyle = {};
this.contentStyle = {};
this.overlayStyle = {};
this.dragHandleStyle = {};
this.transitions = true;
this.touch = true;
this.enableDragHandle = false;
this.dragToggleDistance = 30;
this.onOpenChange = new EventEmitter();
this.am = true;
this.left = this._position === 'left';
this.right = this._position === 'right';
this.top = this._position == 'top';
this.bottom = this._position == 'bottom';
this.dockedCls = this._docked;
this.openCls = this._open;
}
Object.defineProperty(DrawerComponent.prototype, "docked", {
get: /**
* @return {?}
*/
function () {
return this._docked;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this._docked = v;
this.dockedCls = v;
},
enumerable: true,
configurable: true
});
Object.defineProperty(DrawerComponent.prototype, "open", {
get: /**
* @return {?}
*/
function () {
return this._open;
},
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this._open = v;
this.openCls = v;
},
enumerable: true,
configurable: true
});
Object.defineProperty(DrawerComponent.prototype, "position", {
set: /**
* @param {?} v
* @return {?}
*/
function (v) {
this._position = v;
this.right = false;
this.left = false;
this.top = false;
this.bottom = false;
switch (v) {
case 'right':
this.right = true;
break;
case 'left':
this.left = true;
break;
case 'top':
this.top = true;
break;
case 'bottom':
this.bottom = true;
break;
}
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
DrawerComponent.prototype.onOverlayClicked = /**
* @return {?}
*/
function () {
if (this._open) {
this.onOpenChange.emit(true);
}
};
/**
* @return {?}
*/
DrawerComponent.prototype.isTouching = /**
* @return {?}
*/
function () {
return this.touchIdentifier !== null;
};
/**
* @param {?} event
* @return {?}
*/
DrawerComponent.prototype.onTouchStart = /**
* @param {?} event
* @return {?}
*/
function (event) {
/** @type {?} */
var touch = event.changedTouches[0];
this.touchIdentifier = touch.identifier;
this.touchStartX = touch.clientX;
this.touchStartY = touch.clientY;
this.touchCurrentX = touch.clientX;
this.touchCurrentY = touch.clientY;
};
/**
* @param {?} ev
* @return {?}
*/
DrawerComponent.prototype.onTouchMove = /**
* @param {?} ev
* @return {?}
*/
function (ev) {
for (var ind = 0; ind < ev.changedTouches.length; ind++) {
if (ev.changedTouches[ind].identifier === this.touchIdentifier) {
this.touchCurrentX = ev.changedTouches[ind].clientX;
this.touchCurrentY = ev.changedTouches[ind].clientY;
break;
}
}
this.update();
};
/**
* @return {?}
*/
DrawerComponent.prototype.onTouchEnd = /**
* @return {?}
*/
function () {
/** @type {?} */
var touchWidth = this.touchSidebarWidth();
if (!this._open && touchWidth > this.dragToggleDistance) {
this.onOpenChange.emit(!this._open);
}
/** @type {?} */
var touchHeight = this.touchSidebarHeight();
if (!this._open && touchHeight > this.dragToggleDistance) {
this.onOpenChange.emit(!this._open);
}
this.touchIdentifier = null;
this.touchStartX = null;
this.touchStartY = null;
this.touchCurrentX = null;
this.touchCurrentY = null;
this.update();
};
/**
* @return {?}
*/
DrawerComponent.prototype.saveSidebarSize = /**
* @return {?}
*/
function () {
/** @type {?} */
var sidebar = this._el.nativeElement.querySelector('#sidebar');
/** @type {?} */
var dragHandle = this._el.nativeElement.querySelector('#dragHandle');
/** @type {?} */
var width = sidebar.offsetWidth;
/** @type {?} */
var height = sidebar.offsetHeight;
/** @type {?} */
var sidebarTop = this.getOffset(sidebar).top;
/** @type {?} */
var dragHandleTop = this.getOffset(dragHandle).top;
if (width !== this.sidebarWidth) {
this.sidebarWidth = width;
}
if (height !== this.sidebarHeight) {
this.sidebarHeight = height;
}
if (sidebarTop !== this.sidebarTop) {
this.sidebarTop = sidebarTop;
}
if (dragHandleTop !== this.dragHandleTop) {
this.dragHandleTop = dragHandleTop;
}
};
/**
* @return {?}
*/
DrawerComponent.prototype.touchSidebarWidth = /**
* @return {?}
*/
function () {
if (this._position === 'right') {
return Math.min(window.innerWidth - this.touchCurrentX, this.sidebarWidth);
}
if (this._position === 'left') {
return Math.min(this.touchCurrentX, this.sidebarWidth);
}
};
/**
* @return {?}
*/
DrawerComponent.prototype.touchSidebarHeight = /**
* @return {?}
*/
function () {
if (this._position === 'bottom') {
return Math.min(this._el.nativeElement.offsetHeight - this.touchCurrentY + this._el.nativeElement.offsetTop, this.sidebarHeight);
}
if (this._position === 'top') {
return Math.min(this.touchCurrentY - this.dragHandleTop, this.sidebarHeight);
}
};
/**
* @param {?} __0
* @return {?}
*/
DrawerComponent.prototype.renderStyle = /**
* @param {?} __0
* @return {?}
*/
function (_a) {
var sidebarStyle = _a.sidebarStyle, isTouching = _a.isTouching, overlayStyle = _a.overlayStyle, contentStyle = _a.contentStyle;
if (this._position === 'right' || this._position === 'left') {
sidebarStyle.transform = "translateX(0%)";
sidebarStyle.WebkitTransform = "translateX(0%)";
if (isTouching) {
/** @type {?} */
var percentage = this.touchSidebarWidth() / this.sidebarWidth;
// slide open to what we dragged
if (this._position === 'right') {
sidebarStyle.transform = "translateX(" + (1 - percentage) * 100 + "%)";
sidebarStyle.WebkitTransform = "translateX(" + (1 - percentage) * 100 + "%)";
}
if (this._position === 'left') {
sidebarStyle.transform = "translateX(-" + (1 - percentage) * 100 + "%)";
sidebarStyle.WebkitTransform = "translateX(-" + (1 - percentage) * 100 + "%)";
}
overlayStyle.opacity = percentage;
overlayStyle.visibility = 'visible';
}
if (contentStyle) {
contentStyle[this._position] = this.sidebarWidth + "px";
}
}
if (this._position === 'top' || this._position === 'bottom') {
sidebarStyle.transform = "translateY(0%)";
sidebarStyle.WebkitTransform = "translateY(0%)";
if (isTouching) {
/** @type {?} */
var percentage = this.touchSidebarHeight() / this.sidebarHeight;
if (this._position === 'bottom') {
sidebarStyle.transform = "translateY(" + (1 - percentage) * 100 + "%)";
sidebarStyle.WebkitTransform = "translateY(" + (1 - percentage) * 100 + "%)";
}
if (this._position === 'top') {
sidebarStyle.transform = "translateY(-" + (1 - percentage) * 100 + "%)";
sidebarStyle.WebkitTransform = "translateY(-" + (1 - percentage) * 100 + "%)";
}
overlayStyle.opacity = percentage;
overlayStyle.visibility = 'visible';
}
if (contentStyle) {
contentStyle[this._position] = this.sidebarHeight + "px";
}
}
};
/**
* @return {?}
*/
DrawerComponent.prototype.update = /**
* @return {?}
*/
function () {
/** @type {?} */
var sidebarStyle = tslib_1.__assign({}, this.sidebarStyle);
/** @type {?} */
var contentStyle = tslib_1.__assign({}, this.contentStyle);
/** @type {?} */
var overlayStyle = tslib_1.__assign({}, this.overlayStyle);
if (this.isTouching()) {
this.renderStyle({
sidebarStyle: sidebarStyle,
isTouching: true,
contentStyle: undefined,
overlayStyle: overlayStyle
});
}
else if (this._docked) {
this.dockedCls = true;
this.renderStyle({
sidebarStyle: sidebarStyle,
isTouching: undefined,
contentStyle: contentStyle,
overlayStyle: undefined
});
}
else if (this._open) {
this.openCls = true;
this.renderStyle({
sidebarStyle: sidebarStyle,
isTouching: undefined,
contentStyle: undefined,
overlayStyle: undefined
});
overlayStyle.opacity = 1;
overlayStyle.visibility = 'visible';
}
if (this.isTouching() || !this.transitions) {
sidebarStyle.transition = 'none';
sidebarStyle.WebkitTransition = 'none';
contentStyle.transition = 'none';
overlayStyle.transition = 'none';
}
this.sidebarStyleFinal = sidebarStyle;
this.contentStyleFinal = contentStyle;
this.overlayStyleFinal = overlayStyle;
};
/**
* @param {?} ele
* @return {?}
*/
DrawerComponent.prototype.getOffset = /**
* @param {?} ele
* @return {?}
*/
function (ele) {
/** @type {?} */
var el = ele;
/** @type {?} */
var _x = 0;
/** @type {?} */
var _y = 0;
while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
_x += el.offsetLeft - el.scrollLeft;
_y += el.offsetTop - el.scrollTop;
el = el.offsetParent;
}
return { top: _y, left: _x };
};
/**
* @return {?}
*/
DrawerComponent.prototype.ngAfterViewChecked = /**
* @return {?}
*/
function () {
if (!this.isTouching()) {
this.saveSidebarSize();
}
};
/**
* @return {?}
*/
DrawerComponent.prototype.ngOnChanges = /**
* @return {?}
*/
function () {
this.update();
};
DrawerComponent.decorators = [
{ type: Component, args: [{
selector: 'Drawer, nzm-drawer',
template: "<div class=\"{{ prefixCls }}-sidebar\" [ngStyle]=\"sidebarStyleFinal\" id=\"sidebar\">\n <ng-template [ngTemplateOutlet]=\"sidebar\"></ng-template>\n</div>\n<div\n class=\"{{ prefixCls }}-overlay\"\n [ngStyle]=\"overlayStyleFinal\"\n role=\"presentation\"\n ref=\"overlay\"\n (click)=\"onOverlayClicked()\"\n></div>\n<div class=\"{{ prefixCls }}-content\" [ngStyle]=\"contentStyleFinal\" ref=\"content\">\n <div\n *ngIf=\"touch && touchSupported && !open && !docked && enableDragHandle\"\n id=\"dragHandle\"\n class=\"{{ prefixCls }}-draghandle\"\n [ngStyle]=\"dragHandleStyle\"\n (touchstart)=\"onTouchStart($event)\"\n (touchmove)=\"onTouchMove($event)\"\n (touchend)=\"onTouchEnd()\"\n (touchcancle)=\"onTouchEnd()\"\n ></div>\n <ng-content></ng-content>\n</div>\n",
encapsulation: ViewEncapsulation.None
}] }
];
/** @nocollapse */
DrawerComponent.ctorParameters = function () { return [
{ type: ElementRef }
]; };
DrawerComponent.propDecorators = {
sidebar: [{ type: Input }],
sidebarStyle: [{ type: Input }],
contentStyle: [{ type: Input }],
overlayStyle: [{ type: Input }],
dragHandleStyle: [{ type: Input }],
transitions: [{ type: Input }],
touch: [{ type: Input }],
enableDragHandle: [{ type: Input }],
dragToggleDistance: [{ type: Input }],
docked: [{ type: Input }],
open: [{ type: Input }],
position: [{ type: Input }],
onOpenChange: [{ type: Output }],
am: [{ type: HostBinding, args: ['class.am-drawer',] }],
left: [{ type: HostBinding, args: ['class.am-drawer-left',] }],
right: [{ type: HostBinding, args: ['class.am-drawer-right',] }],
top: [{ type: HostBinding, args: ['class.am-drawer-top',] }],
bottom: [{ type: HostBinding, args: ['class.am-drawer-bottom',] }],
dockedCls: [{ type: HostBinding, args: ['class.am-drawer-docked',] }],
openCls: [{ type: HostBinding, args: ['class.am-drawer-open',] }]
};
return DrawerComponent;
}());
export { DrawerComponent };
if (false) {
/** @type {?} */
DrawerComponent.prototype.prefixCls;
/** @type {?} */
DrawerComponent.prototype.sidebarStyleFinal;
/** @type {?} */
DrawerComponent.prototype.contentStyleFinal;
/** @type {?} */
DrawerComponent.prototype.overlayStyleFinal;
/** @type {?} */
DrawerComponent.prototype.sidebarWidth;
/** @type {?} */
DrawerComponent.prototype.sidebarHeight;
/** @type {?} */
DrawerComponent.prototype.sidebarTop;
/** @type {?} */
DrawerComponent.prototype.dragHandleTop;
/** @type {?} */
DrawerComponent.prototype.touchIdentifier;
/** @type {?} */
DrawerComponent.prototype.touchStartX;
/** @type {?} */
DrawerComponent.prototype.touchStartY;
/** @type {?} */
DrawerComponent.prototype.touchCurrentX;
/** @type {?} */
DrawerComponent.prototype.touchCurrentY;
/** @type {?} */
DrawerComponent.prototype.touchSupported;
/**
* @type {?}
* @private
*/
DrawerComponent.prototype._docked;
/**
* @type {?}
* @private
*/
DrawerComponent.prototype._open;
/**
* @type {?}
* @private
*/
DrawerComponent.prototype._position;
/** @type {?} */
DrawerComponent.prototype.sidebar;
/** @type {?} */
DrawerComponent.prototype.sidebarStyle;
/** @type {?} */
DrawerComponent.prototype.contentStyle;
/** @type {?} */
DrawerComponent.prototype.overlayStyle;
/** @type {?} */
DrawerComponent.prototype.dragHandleStyle;
/** @type {?} */
DrawerComponent.prototype.transitions;
/** @type {?} */
DrawerComponent.prototype.touch;
/** @type {?} */
DrawerComponent.prototype.enableDragHandle;
/** @type {?} */
DrawerComponent.prototype.dragToggleDistance;
/** @type {?} */
DrawerComponent.prototype.onOpenChange;
/** @type {?} */
DrawerComponent.prototype.am;
/** @type {?} */
DrawerComponent.prototype.left;
/** @type {?} */
DrawerComponent.prototype.right;
/** @type {?} */
DrawerComponent.prototype.top;
/** @type {?} */
DrawerComponent.prototype.bottom;
/** @type {?} */
DrawerComponent.prototype.dockedCls;
/** @type {?} */
DrawerComponent.prototype.openCls;
/**
* @type {?}
* @private
*/
DrawerComponent.prototype._el;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXpvcnJvLWFudGQtbW9iaWxlLyIsInNvdXJjZXMiOlsiZHJhd2VyL2RyYXdlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsV0FBVyxFQUNYLE1BQU0sRUFDTixZQUFZLEVBQ1osVUFBVSxFQUdYLE1BQU0sZUFBZSxDQUFDO0FBRXZCO0lBbUdFLHlCQUFvQixHQUFlO1FBQWYsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQTdGbkMsY0FBUyxHQUFXLFdBQVcsQ0FBQztRQUNoQyxzQkFBaUIsR0FBeUIsRUFBRSxDQUFDO1FBQzdDLHNCQUFpQixHQUF5QixFQUFFLENBQUM7UUFDN0Msc0JBQWlCLEdBQXlCLEVBQUUsQ0FBQztRQUM3QyxpQkFBWSxHQUFXLENBQUMsQ0FBQztRQUN6QixrQkFBYSxHQUFXLENBQUMsQ0FBQztRQUMxQixlQUFVLEdBQVcsQ0FBQyxDQUFDO1FBQ3ZCLGtCQUFhLEdBQVcsQ0FBQyxDQUFDO1FBQzFCLG9CQUFlLEdBQVcsSUFBSSxDQUFDO1FBQy9CLGdCQUFXLEdBQVcsSUFBSSxDQUFDO1FBQzNCLGdCQUFXLEdBQVcsSUFBSSxDQUFDO1FBQzNCLGtCQUFhLEdBQVcsSUFBSSxDQUFDO1FBQzdCLGtCQUFhLEdBQVcsSUFBSSxDQUFDO1FBQzdCLG1CQUFjLEdBQVksT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLGNBQWMsSUFBSSxNQUFNLENBQUM7UUFFekUsWUFBTyxHQUFZLEtBQUssQ0FBQztRQUN6QixVQUFLLEdBQVksS0FBSyxDQUFDO1FBQ3ZCLGNBQVMsR0FBVyxNQUFNLENBQUM7UUFLbkMsaUJBQVksR0FBeUIsRUFBRSxDQUFDO1FBRXhDLGlCQUFZLEdBQXlCLEVBQUUsQ0FBQztRQUV4QyxpQkFBWSxHQUF5QixFQUFFLENBQUM7UUFFeEMsb0JBQWUsR0FB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NENBQTZDOztJQUM3Qyw0Q0FBNkM7O0lBQzdDLDRDQUE2Qzs7SUFDN0MsdUNBQXlCOztJQUN6Qix3Q0FBMEI7O0lBQzFCLHFDQUF1Qjs7SUFDdkIsd0NBQTBCOztJQUMxQiwwQ0FBK0I7O0lBQy9CLHNDQUEyQjs7SUFDM0Isc0NBQTJCOztJQUMzQix3Q0FBNkI7O0lBQzdCLHdDQUE2Qjs7SUFDN0IseUNBQWlGOzs7OztJQUVqRixrQ0FBaUM7Ozs7O0lBQ2pDLGdDQUErQjs7Ozs7SUFDL0Isb0NBQW1DOztJQUVuQyxrQ0FDYTs7SUFDYix1Q0FDd0M7O0lBQ3hDLHVDQUN3Qzs7SUFDeEMsdUNBQ3dDOztJQUN4QywwQ0FDMkM7O0lBQzNDLHNDQUM0Qjs7SUFDNUIsZ0NBQ3NCOztJQUN0QiwyQ0FDa0M7O0lBQ2xDLDZDQUNnQzs7SUF1Q2hDLHVDQUMwRDs7SUFFMUQsNkJBQ21COztJQUNuQiwrQkFDMEM7O0lBQzFDLGdDQUM0Qzs7SUFDNUMsOEJBQ3VDOztJQUN2QyxpQ0FDNkM7O0lBQzdDLG9DQUNrQzs7SUFDbEMsa0NBQzhCOzs7OztJQUVsQiw4QkFBdUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxuICBJbnB1dCxcbiAgSG9zdEJpbmRpbmcsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBFbGVtZW50UmVmLFxuICBPbkNoYW5nZXMsXG4gIEFmdGVyVmlld0NoZWNrZWRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ0RyYXdlciwgbnptLWRyYXdlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9kcmF3ZXIuY29tcG9uZW50Lmh0bWwnLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIERyYXdlckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0NoZWNrZWQsIE9uQ2hhbmdlcyB7XG4gIHByZWZpeENsczogc3RyaW5nID0gJ2FtLWRyYXdlcic7XG4gIHNpZGViYXJTdHlsZUZpbmFsOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBjb250ZW50U3R5bGVGaW5hbDogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgb3ZlcmxheVN0eWxlRmluYWw6IHsgW2s6IHN0cmluZ106IGFueSB9ID0ge307XG4gIHNpZGViYXJXaWR0aDogbnVtYmVyID0gMDtcbiAgc2lkZWJhckhlaWdodDogbnVtYmVyID0gMDtcbiAgc2lkZWJhclRvcDogbnVtYmVyID0gMDtcbiAgZHJhZ0hhbmRsZVRvcDogbnVtYmVyID0gMDtcbiAgdG91Y2hJZGVudGlmaWVyOiBudW1iZXIgPSBudWxsO1xuICB0b3VjaFN0YXJ0WDogbnVtYmVyID0gbnVsbDtcbiAgdG91Y2hTdGFydFk6IG51bWJlciA9IG51bGw7XG4gIHRvdWNoQ3VycmVudFg6IG51bWJlciA9IG51bGw7XG4gIHRvdWNoQ3VycmVudFk6IG51bWJlciA9IG51bGw7XG4gIHRvdWNoU3VwcG9ydGVkOiBib29sZWFuID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgJ29udG91Y2hzdGFydCcgaW4gd2luZG93O1xuXG4gIHByaXZhdGUgX2RvY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF9vcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3Bvc2l0aW9uOiBzdHJpbmcgPSAnbGVmdCc7XG5cbiAgQElucHV0KClcbiAgc2lkZWJhcjogYW55O1xuICBASW5wdXQoKVxuICBzaWRlYmFyU3R5bGU6IHsgW2s6IHN0cmluZ106IGFueSB9ID0ge307XG4gIEBJbnB1dCgpXG4gIGNvbnRlbnRTdHlsZTogeyBbazogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgQElucHV0KClcbiAgb3ZlcmxheVN0eWxlOiB7IFtrOiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuICBASW5wdXQoKVxuICBkcmFnSGFuZGxlU3R5bGU6IHsgW2s6IHN0cmluZ106IGFueSB9ID0ge307XG4gIEBJbnB1dCgpXG4gIHRyYW5zaXRpb25zOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KClcbiAgdG91Y2g6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKVxuICBlbmFibGVEcmFnSGFuZGxlOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGRyYWdUb2dnbGVEaXN0YW5jZTogbnVtYmVyID0gMzA7XG4gIEBJbnB1dCgpXG4gIGdldCBkb2NrZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY2tlZDtcbiAgfVxuICBzZXQgZG9ja2VkKHYpIHtcbiAgICB0aGlzLl9kb2NrZWQgPSB2O1xuICAgIHRoaXMuZG9ja2VkQ2xzID0gdjtcbiAgfVxuICBASW5wdXQoKVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5fb3BlbjtcbiAgfVxuICBzZXQgb3Blbih2KSB7XG4gICAgdGhpcy5fb3BlbiA9IHY7XG4gICAgdGhpcy5vcGVuQ2xzID0gdjtcbiAgfVxuICBASW5wdXQoKVxuICBzZXQgcG9zaXRpb24odikge1xuICAgIHRoaXMuX3Bvc2l0aW9uID0gdjtcbiAgICB0aGlzLnJpZ2h0ID0gZmFsc2U7XG4gICAgdGhpcy5sZWZ0ID0gZmFsc2U7XG4gICAgdGhpcy50b3AgPSBmYWxzZTtcbiAgICB0aGlzLmJvdHRvbSA9IGZhbHNlO1xuICAgIHN3aXRjaCAodikge1xuICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICB0aGlzLnJpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgdGhpcy5sZWZ0ID0gdHJ1ZTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd0b3AnOlxuICAgICAgICB0aGlzLnRvcCA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgdGhpcy5ib3R0b20gPSB0cnVlO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cbiAgQE91dHB1dCgpXG4gIG9uT3BlbkNoYW5nZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWRyYXdlcicpXG4gIGFtOiBib29sZWFuID0gdHJ1ZTtcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1kcmF3ZXItbGVmdCcpXG4gIGxlZnQ6IGJvb2xlYW4gPSB0aGlzLl9wb3NpdGlvbiA9PT0gJ2xlZnQnO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWRyYXdlci1yaWdodCcpXG4gIHJpZ2h0OiBib29sZWFuID0gdGhpcy5fcG9zaXRpb24gPT09ICdyaWdodCc7XG4gIEBIb3N0QmluZGluZygnY2xhc3MuYW0tZHJhd2VyLXRvcCcpXG4gIHRvcDogYm9vbGVhbiA9IHRoaXMuX3Bvc2l0aW9uID09ICd0b3AnO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWRyYXdlci1ib3R0b20nKVxuICBib3R0b206IGJvb2xlYW4gPSB0aGlzLl9wb3NpdGlvbiA9PSAnYm90dG9tJztcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcy5hbS1kcmF3ZXItZG9ja2VkJylcbiAgZG9ja2VkQ2xzOiBib29sZWFuID0gdGhpcy5fZG9ja2VkO1xuICBASG9zdEJpbmRpbmcoJ2NsYXNzLmFtLWRyYXdlci1vcGVuJylcbiAgb3BlbkNsczogYm9vbGVhbiA9IHRoaXMuX29wZW47XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYpIHt9XG5cbiAgb25PdmVybGF5Q2xpY2tlZCgpIHtcbiAgICBpZiAodGhpcy5fb3Blbikge1xuICAgICAgdGhpcy5vbk9wZW5DaGFuZ2UuZW1pdCh0cnVlKTtcbiAgICB9XG4gIH1cblxuICBpc1RvdWNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvdWNoSWRlbnRpZmllciAhPT0gbnVsbDtcbiAgfVxuXG4gIG9uVG91Y2hTdGFydChldmVudCkge1xuICAgIGNvbnN0IHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XG4gICAgdGhpcy50b3VjaElkZW50aWZpZXIgPSB0b3VjaC5pZGVudGlmaWVyO1xuICAgIHRoaXMudG91Y2hTdGFydFggPSB0b3VjaC5jbGllbnRYO1xuICAgIHRoaXMudG91Y2hTdGFydFkgPSB0b3VjaC5jbGllbnRZO1xuICAgIHRoaXMudG91Y2hDdXJyZW50WCA9IHRvdWNoLmNsaWVudFg7XG4gICAgdGhpcy50b3VjaEN1cnJlbnRZID0gdG91Y2guY2xpZW50WTtcbiAgfVxuXG4gIG9uVG91Y2hNb3ZlKGV2KSB7XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgZXYuY2hhbmdlZFRvdWNoZXMubGVuZ3RoOyBpbmQrKykge1xuICAgICAgaWYgKGV2LmNoYW5nZWRUb3VjaGVzW2luZF0uaWRlbnRpZmllciA9PT0gdGhpcy50b3VjaElkZW50aWZpZXIpIHtcbiAgICAgICAgdGhpcy50b3VjaEN1cnJlbnRYID0gZXYuY2hhbmdlZFRvdWNoZXNbaW5kXS5jbGllbnRYO1xuICAgICAgICB0aGlzLnRvdWNoQ3VycmVudFkgPSBldi5jaGFuZ2VkVG91Y2hlc1tpbmRdLmNsaWVudFk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9XG5cbiAgb25Ub3VjaEVuZCgpIHtcbiAgICBjb25zdCB0b3VjaFdpZHRoID0gdGhpcy50b3VjaFNpZGViYXJXaWR0aCgpO1xuICAgIGlmICghdGhpcy5fb3BlbiAmJiB0b3VjaFdpZHRoID4gdGhpcy5kcmFnVG9nZ2xlRGlzdGFuY2UpIHtcbiAgICAgIHRoaXMub25PcGVuQ2hhbmdlLmVtaXQoIXRoaXMuX29wZW4pO1xuICAgIH1cblxuICAgIGNvbnN0IHRvdWNoSGVpZ2h0ID0gdGhpcy50b3VjaFNpZGViYXJIZWlnaHQoKTtcbiAgICBpZiAoIXRoaXMuX29wZW4gJiYgdG91Y2hIZWlnaHQgPiB0aGlzLmRyYWdUb2dnbGVEaXN0YW5jZSkge1xuICAgICAgdGhpcy5vbk9wZW5DaGFuZ2UuZW1pdCghdGhpcy5fb3Blbik7XG4gICAgfVxuICAgIHRoaXMudG91Y2hJZGVudGlmaWVyID0gbnVsbDtcbiAgICB0aGlzLnRvdWNoU3RhcnRYID0gbnVsbDtcbiAgICB0aGlzLnRvdWNoU3RhcnRZID0gbnVsbDtcbiAgICB0aGlzLnRvdWNoQ3VycmVudFggPSBudWxsO1xuICAgIHRoaXMudG91Y2hDdXJyZW50WSA9IG51bGw7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHNhdmVTaWRlYmFyU2l6ZSgpIHtcbiAgICBjb25zdCBzaWRlYmFyID0gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCcjc2lkZWJhcicpO1xuICAgIGNvbnN0IGRyYWdIYW5kbGUgPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJyNkcmFnSGFuZGxlJyk7XG5cbiAgICBjb25zdCB3aWR0aCA9IHNpZGViYXIub2Zmc2V0V2lkdGg7XG4gICAgY29uc3QgaGVpZ2h0ID0gc2lkZWJhci5vZmZzZXRIZWlnaHQ7XG4gICAgY29uc3Qgc2lkZWJhclRvcCA9IHRoaXMuZ2V0T2Zmc2V0KHNpZGViYXIpLnRvcDtcbiAgICBjb25zdCBkcmFnSGFuZGxlVG9wID0gdGhpcy5nZXRPZmZzZXQoZHJhZ0hhbmRsZSkudG9wO1xuXG4gICAgaWYgKHdpZHRoICE9PSB0aGlzLnNpZGViYXJXaWR0aCkge1xuICAgICAgdGhpcy5zaWRlYmFyV2lkdGggPSB3aWR0aDtcbiAgICB9XG4gICAgaWYgKGhlaWdodCAhPT0gdGhpcy5zaWRlYmFySGVpZ2h0KSB7XG4gICAgICB0aGlzLnNpZGViYXJIZWlnaHQgPSBoZWlnaHQ7XG4gICAgfVxuICAgIGlmIChzaWRlYmFyVG9wICE9PSB0aGlzLnNpZGViYXJUb3ApIHtcbiAgICAgIHRoaXMuc2lkZWJhclRvcCA9IHNpZGViYXJUb3A7XG4gICAgfVxuICAgIGlmIChkcmFnSGFuZGxlVG9wICE9PSB0aGlzLmRyYWdIYW5kbGVUb3ApIHtcbiAgICAgIHRoaXMuZHJhZ0hhbmRsZVRvcCA9IGRyYWdIYW5kbGVUb3A7XG4gICAgfVxuICB9XG5cbiAgdG91Y2hTaWRlYmFyV2lkdGgoKSB7XG4gICAgaWYgKHRoaXMuX3Bvc2l0aW9uID09PSAncmlnaHQnKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4od2luZG93LmlubmVyV2lkdGggLSB0aGlzLnRvdWNoQ3VycmVudFgsIHRoaXMuc2lkZWJhcldpZHRoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcG9zaXRpb24gPT09ICdsZWZ0Jykge1xuICAgICAgcmV0dXJuIE1hdGgubWluKHRoaXMudG91Y2hDdXJyZW50WCwgdGhpcy5zaWRlYmFyV2lkdGgpO1xuICAgIH1cbiAgfVxuXG4gIHRvdWNoU2lkZWJhckhlaWdodCgpIHtcbiAgICBpZiAodGhpcy5fcG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4oXG4gICAgICAgIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQub2Zmc2V0SGVpZ2h0IC0gdGhpcy50b3VjaEN1cnJlbnRZICsgdGhpcy5fZWwubmF0aXZlRWxlbWVudC5vZmZzZXRUb3AsXG4gICAgICAgIHRoaXMuc2lkZWJhckhlaWdodFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcG9zaXRpb24gPT09ICd0b3AnKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy50b3VjaEN1cnJlbnRZIC0gdGhpcy5kcmFnSGFuZGxlVG9wLCB0aGlzLnNpZGViYXJIZWlnaHQpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlclN0eWxlKHsgc2lkZWJhclN0eWxlLCBpc1RvdWNoaW5nLCBvdmVybGF5U3R5bGUsIGNvbnRlbnRTdHlsZSB9KSB7XG4gICAgaWYgKHRoaXMuX3Bvc2l0aW9uID09PSAncmlnaHQnIHx8IHRoaXMuX3Bvc2l0aW9uID09PSAnbGVmdCcpIHtcbiAgICAgIHNpZGViYXJTdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgwJSlgO1xuICAgICAgc2lkZWJhclN0eWxlLldlYmtpdFRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKDAlKWA7XG4gICAgICBpZiAoaXNUb3VjaGluZykge1xuICAgICAgICBjb25zdCBwZXJjZW50YWdlID0gdGhpcy50b3VjaFNpZGViYXJXaWR0aCgpIC8gdGhpcy5zaWRlYmFyV2lkdGg7XG4gICAgICAgIC8vIHNsaWRlIG9wZW4gdG8gd2hhdCB3ZSBkcmFnZ2VkXG4gICAgICAgIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIHNpZGViYXJTdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgkeygxIC0gcGVyY2VudGFnZSkgKiAxMDB9JSlgO1xuICAgICAgICAgIHNpZGViYXJTdHlsZS5XZWJraXRUcmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgkeygxIC0gcGVyY2VudGFnZSkgKiAxMDB9JSlgO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9wb3NpdGlvbiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgc2lkZWJhclN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVYKC0keygxIC0gcGVyY2VudGFnZSkgKiAxMDB9JSlgO1xuICAgICAgICAgIHNpZGViYXJTdHlsZS5XZWJraXRUcmFuc2Zvcm0gPSBgdHJhbnNsYXRlWCgtJHsoMSAtIHBlcmNlbnRhZ2UpICogMTAwfSUpYDtcbiAgICAgICAgfVxuICAgICAgICBvdmVybGF5U3R5bGUub3BhY2l0eSA9IHBlcmNlbnRhZ2U7XG4gICAgICAgIG92ZXJsYXlTdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgfVxuICAgICAgaWYgKGNvbnRlbnRTdHlsZSkge1xuICAgICAgICBjb250ZW50U3R5bGVbdGhpcy5fcG9zaXRpb25dID0gYCR7dGhpcy5zaWRlYmFyV2lkdGh9cHhgO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fcG9zaXRpb24gPT09ICd0b3AnIHx8IHRoaXMuX3Bvc2l0aW9uID09PSAnYm90dG9tJykge1xuICAgICAgc2lkZWJhclN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKDAlKWA7XG4gICAgICBzaWRlYmFyU3R5bGUuV2Via2l0VHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoMCUpYDtcbiAgICAgIGlmIChpc1RvdWNoaW5nKSB7XG4gICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSB0aGlzLnRvdWNoU2lkZWJhckhlaWdodCgpIC8gdGhpcy5zaWRlYmFySGVpZ2h0O1xuICAgICAgICBpZiAodGhpcy5fcG9zaXRpb24gPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgc2lkZWJhclN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7KDEgLSBwZXJjZW50YWdlKSAqIDEwMH0lKWA7XG4gICAgICAgICAgc2lkZWJhclN0eWxlLldlYmtpdFRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7KDEgLSBwZXJjZW50YWdlKSAqIDEwMH0lKWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3Bvc2l0aW9uID09PSAndG9wJykge1xuICAgICAgICAgIHNpZGViYXJTdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgtJHsoMSAtIHBlcmNlbnRhZ2UpICogMTAwfSUpYDtcbiAgICAgICAgICBzaWRlYmFyU3R5bGUuV2Via2l0VHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoLSR7KDEgLSBwZXJjZW50YWdlKSAqIDEwMH0lKWA7XG4gICAgICAgIH1cbiAgICAgICAgb3ZlcmxheVN0eWxlLm9wYWNpdHkgPSBwZXJjZW50YWdlO1xuICAgICAgICBvdmVybGF5U3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJztcbiAgICAgIH1cbiAgICAgIGlmIChjb250ZW50U3R5bGUpIHtcbiAgICAgICAgY29udGVudFN0eWxlW3RoaXMuX3Bvc2l0aW9uXSA9IGAke3RoaXMuc2lkZWJhckhlaWdodH1weGA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlKCkge1xuICAgIGNvbnN0IHNpZGViYXJTdHlsZSA9IHsgLi4udGhpcy5zaWRlYmFyU3R5bGUgfTtcbiAgICBjb25zdCBjb250ZW50U3R5bGUgPSB7IC4uLnRoaXMuY29udGVudFN0eWxlIH07XG4gICAgY29uc3Qgb3ZlcmxheVN0eWxlID0geyAuLi50aGlzLm92ZXJsYXlTdHlsZSB9O1xuXG4gICAgaWYgKHRoaXMuaXNUb3VjaGluZygpKSB7XG4gICAgICB0aGlzLnJlbmRlclN0eWxlKHtcbiAgICAgICAgc2lkZWJhclN0eWxlOiBzaWRlYmFyU3R5bGUsXG4gICAgICAgIGlzVG91Y2hpbmc6IHRydWUsXG4gICAgICAgIGNvbnRlbnRTdHlsZTogdW5kZWZpbmVkLFxuICAgICAgICBvdmVybGF5U3R5bGU6IG92ZXJsYXlTdHlsZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9kb2NrZWQpIHtcbiAgICAgIHRoaXMuZG9ja2VkQ2xzID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyU3R5bGUoe1xuICAgICAgICBzaWRlYmFyU3R5bGU6IHNpZGViYXJTdHlsZSxcbiAgICAgICAgaXNUb3VjaGluZzogdW5kZWZpbmVkLFxuICAgICAgICBjb250ZW50U3R5bGU6IGNvbnRlbnRTdHlsZSxcbiAgICAgICAgb3ZlcmxheVN0eWxlOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fb3Blbikge1xuICAgICAgdGhpcy5vcGVuQ2xzID0gdHJ1ZTtcbiAgICAgIHRoaXMucmVuZGVyU3R5bGUoe1xuICAgICAgICBzaWRlYmFyU3R5bGU6IHNpZGViYXJTdHlsZSxcbiAgICAgICAgaXNUb3VjaGluZzogdW5kZWZpbmVkLFxuICAgICAgICBjb250ZW50U3R5bGU6IHVuZGVmaW5lZCxcbiAgICAgICAgb3ZlcmxheVN0eWxlOiB1bmRlZmluZWRcbiAgICAgIH0pO1xuICAgICAgb3ZlcmxheVN0eWxlLm9wYWNpdHkgPSAxO1xuICAgICAgb3ZlcmxheVN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNUb3VjaGluZygpIHx8ICF0aGlzLnRyYW5zaXRpb25zKSB7XG4gICAgICBzaWRlYmFyU3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICAgIHNpZGViYXJTdHlsZS5XZWJraXRUcmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgY29udGVudFN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICBvdmVybGF5U3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICB9XG4gICAgdGhpcy5zaWRlYmFyU3R5bGVGaW5hbCA9IHNpZGViYXJTdHlsZTtcbiAgICB0aGlzLmNvbnRlbnRTdHlsZUZpbmFsID0gY29udGVudFN0eWxlO1xuICAgIHRoaXMub3ZlcmxheVN0eWxlRmluYWwgPSBvdmVybGF5U3R5bGU7XG4gIH1cblxuICBnZXRPZmZzZXQoZWxlKSB7XG4gICAgbGV0IGVsID0gZWxlO1xuICAgIGxldCBfeCA9IDA7XG4gICAgbGV0IF95ID0gMDtcbiAgICB3aGlsZSAoZWwgJiYgIWlzTmFOKGVsLm9mZnNldExlZnQpICYmICFpc05hTihlbC5vZmZzZXRUb3ApKSB7XG4gICAgICBfeCArPSBlbC5vZmZzZXRMZWZ0IC0gZWwuc2Nyb2xsTGVmdDtcbiAgICAgIF95ICs9IGVsLm9mZnNldFRvcCAtIGVsLnNjcm9sbFRvcDtcbiAgICAgIGVsID0gZWwub2Zmc2V0UGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4geyB0b3A6IF95LCBsZWZ0OiBfeCB9O1xuICB9XG5cbiAgbmdBZnRlclZpZXdDaGVja2VkKCkge1xuICAgIGlmICghdGhpcy5pc1RvdWNoaW5nKCkpIHtcbiAgICAgIHRoaXMuc2F2ZVNpZGViYXJTaXplKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkNoYW5nZXMoKSB7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxufVxuIl19