UNPKG

ng-zorro-antd-mobile

Version:

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

515 lines 42.3 kB
/** * @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