UNPKG

@uex/web-extensions

Version:

Uex extensions for Angular 6+ web projects

573 lines 40.8 kB
/** * @fileoverview added by tsickle * Generated from: lib/modules/drawer/drawer.base.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Injectable, EventEmitter } from '@angular/core'; import * as _ from 'lodash'; export class DrawerBase { /** * @param {?} _drawers * @param {?} _data * @param {?} index */ constructor(_drawers, _data, index) { this._drawers = _drawers; this._data = _data; this.index = index; this.destroyed = false; this.headerInstances = []; this.footerInstances = []; this.onShow = new EventEmitter(); this.onShown = new EventEmitter(); this.onHide = new EventEmitter(); this.onHidden = new EventEmitter(); this.onOpen = new EventEmitter(); this.onDismiss = new EventEmitter(); this.onClose = new Promise((/** * @param {?} resolve * @return {?} */ (resolve) => this._onClosePromise = resolve)); this.onReturnValue = new EventEmitter(); this.onParamsChange = new EventEmitter(); this.onSettingsChange = new EventEmitter(); this.$onResizeRequested = new EventEmitter(); this.onResize = new EventEmitter(); this.$onHeaderListChange = new EventEmitter(); this.$onFooterListChange = new EventEmitter(); this._params = new DrawerParamsBase(); _drawers.push(this); this._updateParams(); } /** * @return {?} */ get visible() { return this.ready ? this.componentInstance.visible : false; } /** * @param {?} visible * @return {?} */ set visible(visible) { if (this.ready) { this.componentInstance.visible = visible; } } /** * @return {?} */ get ready() { return this.componentInstance ? this.componentInstance.ready : false; } /** * @param {?} ready * @return {?} */ set ready(ready) { if (this.componentInstance) { this.componentInstance.ready = ready; } } /** * @return {?} */ get component() { return this._data.component; } /** * @return {?} */ get params() { return this._params; } /** * @return {?} */ get settings() { /** @type {?} */ let settings = this._data.settings; if (!settings) { settings = {}; } if (!(settings.backdrop && settings.backdrop.onClick)) { if (!settings.backdrop) { settings.backdrop = {}; } settings.backdrop.onClick = 'close'; } if (!(settings.header && settings.header.closable && settings.header.closeClick)) { if (!settings.header) { settings.header = { title: null }; } if (settings.header.closable) { settings.header.closeClick = 'close'; } } return settings; } /** * @return {?} */ get zindex() { return this._data.zindex; } /** * @return {?} */ get content_zindex() { return this._data.content_zindex; } /** * @return {?} */ get backdrop_zindex() { return this._data.backdrop_zindex; } /** * @return {?} */ get close_on_route_change() { if (!this._data.settings) { this._data.settings = {}; } /** @type {?} */ const close_on_route_change = this._data.settings.close_on_route_change; return _.isBoolean(close_on_route_change) ? close_on_route_change : true; } /** * @param {?} size * @return {?} */ setSize(size) { if (!this._data.settings) { this._data.settings = {}; } this._data.settings.size = size; this.onSettingsChange.emit(this._data.settings); } /** * @param {?} backdrop * @return {?} */ setBackdrop(backdrop) { if (!this._data.settings) { this._data.settings = {}; } this._data.settings.backdrop = backdrop; this.onSettingsChange.emit(this._data.settings); } /** * @param {?} keyboard * @return {?} */ setKeyboard(keyboard) { if (!this._data.settings) { this._data.settings = {}; } this._data.settings.keyboard = keyboard; this.onSettingsChange.emit(this._data.settings); } /** * @param {?} header * @return {?} */ setHeader(header) { if (!this._data.settings) { this._data.settings = {}; } this._data.settings.header = header; this.onSettingsChange.emit(this._data.settings); } /** * @param {?} params * @return {?} */ setParams(params) { this._data.params = params; this._updateParams(); this.onParamsChange.emit(this._params); } /** * @return {?} */ resize() { this.$onResizeRequested.emit(); } /** * @return {?} */ sizeClass() { switch (this.settings.size) { case 'xs': return 'drawer-xs'; case 'sm': return 'drawer-sm'; case 'md': return 'drawer-md'; case 'lg': return 'drawer-lg'; case 'responsive': return 'drawer-responsive'; default: return 'drawer-md'; } } /** * @return {?} */ hasHeader() { return this.headerInstances.length > 0; } /** * @return {?} */ hasFooter() { return this.footerInstances.length > 0; } /** * @return {?} */ getOffsetHeight() { /** @type {?} */ let height = 0; this.headerInstances.forEach((/** * @param {?} component * @return {?} */ (component) => height += component.elementRef.nativeElement.offsetHeight)); this.footerInstances.forEach((/** * @param {?} component * @return {?} */ (component) => height += component.elementRef.nativeElement.offsetHeight)); return height; } /** * @param {?} header * @return {?} */ addHeader(header) { /** @type {?} */ const index = this.headerInstances.length; this.headerInstances.push(header); this.$onHeaderListChange.emit(this.headerInstances); return index; } /** * @param {?} index * @return {?} */ removeHeader(index) { if (this.headerInstances[index]) { this.headerInstances.splice(index, 1); this.$onHeaderListChange.emit(this.headerInstances); return true; } return false; } /** * @param {?} header * @return {?} */ addFooter(header) { /** @type {?} */ const index = this.footerInstances.length; this.footerInstances.push(header); this.$onFooterListChange.emit(this.footerInstances); return index; } /** * @param {?} index * @return {?} */ removeFooter(index) { if (this.footerInstances[index]) { this.footerInstances.splice(index, 1); this.$onFooterListChange.emit(this.footerInstances); return true; } return false; } /** * @return {?} */ open() { if (this.destroyed) { console.warn('Is\'t possible to open a destroyed drawer.'); return; } if (this.ready) { this.componentInstance.visible = true; this.onOpen.emit(); this.onShow.emit(); } else { setTimeout((/** * @return {?} */ () => this.open()), 100); } } /** * @return {?} */ dismiss() { if (this.ready) { /** @type {?} */ const hidden_subscription = this.onHidden.subscribe((/** * @return {?} */ () => { hidden_subscription.unsubscribe(); this.onDismiss.emit(); })); this.componentInstance.visible = false; } else { setTimeout((/** * @return {?} */ () => this.dismiss()), 100); } } /** * @return {?} */ close() { if (this.ready) { /** @type {?} */ const hidden_subscription = this.onHidden.subscribe((/** * @return {?} */ () => { hidden_subscription.unsubscribe(); this.onDismiss.emit(); this._destroy(); })); this.componentInstance.visible = false; } else { setTimeout((/** * @return {?} */ () => this.close()), 100); } } /** * @param {?} response * @return {?} */ returnValue(response) { this.onReturnValue.emit(response); } /** * @private * @return {?} */ _updateParams() { this._params.params = this._data.params; } /** * @private * @return {?} */ _destroy() { /** @type {?} */ let this_drawer_index; this._drawers.forEach((/** * @param {?} drawer * @param {?} index * @return {?} */ (drawer, index) => { if (drawer.index == this.index) { this_drawer_index = index; } })); if (this_drawer_index >= 0) { this._drawers.splice(this_drawer_index, 1); this._onClosePromise(); this.destroyed = true; } } } if (false) { /** @type {?} */ DrawerBase.prototype.destroyed; /** @type {?} */ DrawerBase.prototype.componentRef; /** @type {?} */ DrawerBase.prototype.componentInstance; /** @type {?} */ DrawerBase.prototype.headerInstances; /** @type {?} */ DrawerBase.prototype.footerInstances; /** @type {?} */ DrawerBase.prototype.onShow; /** @type {?} */ DrawerBase.prototype.onShown; /** @type {?} */ DrawerBase.prototype.onHide; /** @type {?} */ DrawerBase.prototype.onHidden; /** @type {?} */ DrawerBase.prototype.onOpen; /** @type {?} */ DrawerBase.prototype.onDismiss; /** @type {?} */ DrawerBase.prototype.onClose; /** @type {?} */ DrawerBase.prototype.onReturnValue; /** @type {?} */ DrawerBase.prototype.onParamsChange; /** @type {?} */ DrawerBase.prototype.onSettingsChange; /** @type {?} */ DrawerBase.prototype.$onResizeRequested; /** @type {?} */ DrawerBase.prototype.onResize; /** @type {?} */ DrawerBase.prototype.$onHeaderListChange; /** @type {?} */ DrawerBase.prototype.$onFooterListChange; /** * @type {?} * @private */ DrawerBase.prototype._params; /** * @type {?} * @private */ DrawerBase.prototype._onClosePromise; /** * @type {?} * @private */ DrawerBase.prototype._drawers; /** * @type {?} * @private */ DrawerBase.prototype._data; /** @type {?} */ DrawerBase.prototype.index; } export class DrawerRefBase { } DrawerRefBase.decorators = [ { type: Injectable } ]; if (false) { /** @type {?} */ DrawerRefBase.prototype.drawer; } export class DrawerParamsBase { /** * @param {?} key * @return {?} */ get(key) { return this.params ? this.params[key] : null; } } DrawerParamsBase.decorators = [ { type: Injectable } ]; if (false) { /** @type {?} */ DrawerParamsBase.prototype.params; } /** * @record */ export function DrawerSettingsBackdrop() { } if (false) { /** @type {?|undefined} */ DrawerSettingsBackdrop.prototype.onClick; } /** * @record */ export function DrawerSettingsKeyboard() { } if (false) { /** @type {?|undefined} */ DrawerSettingsKeyboard.prototype.onEscape; /** @type {?|undefined} */ DrawerSettingsKeyboard.prototype.onReturn; } /** * @record */ export function DrawerSettingsHeader() { } if (false) { /** @type {?} */ DrawerSettingsHeader.prototype.title; /** @type {?|undefined} */ DrawerSettingsHeader.prototype.subtitle; /** @type {?|undefined} */ DrawerSettingsHeader.prototype.closable; /** @type {?|undefined} */ DrawerSettingsHeader.prototype.closeClick; } /** * @record */ export function DrawerSettings() { } if (false) { /** @type {?|undefined} */ DrawerSettings.prototype.size; /** @type {?|undefined} */ DrawerSettings.prototype.keyboard; /** @type {?|undefined} */ DrawerSettings.prototype.backdrop; /** @type {?|undefined} */ DrawerSettings.prototype.header; /** @type {?|undefined} */ DrawerSettings.prototype.close_on_route_change; } /** * @record */ export function DrawerInjectData() { } if (false) { /** @type {?} */ DrawerInjectData.prototype.component; /** @type {?|undefined} */ DrawerInjectData.prototype.instance; /** @type {?|undefined} */ DrawerInjectData.prototype.params; /** @type {?|undefined} */ DrawerInjectData.prototype.settings; /** @type {?|undefined} */ DrawerInjectData.prototype.zindex; /** @type {?|undefined} */ DrawerInjectData.prototype.content_zindex; /** @type {?|undefined} */ DrawerInjectData.prototype.backdrop_zindex; } /** * @record */ export function DrawerParamsData() { } /** * @record */ export function DrawerAlertParams() { } if (false) { /** @type {?|undefined} */ DrawerAlertParams.prototype.title; /** @type {?|undefined} */ DrawerAlertParams.prototype.subtitle; /** @type {?|undefined} */ DrawerAlertParams.prototype.message; /** @type {?|undefined} */ DrawerAlertParams.prototype.size; /** @type {?|undefined} */ DrawerAlertParams.prototype.buttonText; } /** * @record */ export function DrawerConfirmParams() { } if (false) { /** @type {?|undefined} */ DrawerConfirmParams.prototype.title; /** @type {?|undefined} */ DrawerConfirmParams.prototype.subtitle; /** @type {?|undefined} */ DrawerConfirmParams.prototype.message; /** @type {?|undefined} */ DrawerConfirmParams.prototype.size; /** @type {?|undefined} */ DrawerConfirmParams.prototype.resolveButtonText; /** @type {?|undefined} */ DrawerConfirmParams.prototype.rejectButtonText; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhd2VyLmJhc2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdWV4L3dlYi1leHRlbnNpb25zLyIsInNvdXJjZXMiOlsibGliL21vZHVsZXMvZHJhd2VyL2RyYXdlci5iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQWtDLE1BQU0sZUFBZSxDQUFDO0FBRXpGLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFDO0FBTzVCLE1BQU0sT0FBTyxVQUFVOzs7Ozs7SUFDckIsWUFDVSxRQUEyQixFQUMzQixLQUF1QixFQUN4QixLQUFhO1FBRlosYUFBUSxHQUFSLFFBQVEsQ0FBbUI7UUFDM0IsVUFBSyxHQUFMLEtBQUssQ0FBa0I7UUFDeEIsVUFBSyxHQUFMLEtBQUssQ0FBUTtRQU1mLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFHbEIsb0JBQWUsR0FBaUMsRUFBRSxDQUFDO1FBQ25ELG9CQUFlLEdBQWlDLEVBQUUsQ0FBQztRQUVuRCxXQUFNLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0MsWUFBTyxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRWhELFdBQU0sR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMvQyxhQUFRLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFHakQsV0FBTSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQy9DLGNBQVMsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNsRCxZQUFPLEdBQWlCLElBQUksT0FBTzs7OztRQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sRUFBQyxDQUFDO1FBRWpGLGtCQUFhLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEQsbUJBQWMsR0FBbUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNwRSxxQkFBZ0IsR0FBaUMsSUFBSSxZQUFZLEVBQUUsQ0FBQztR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WUFIMUUsVUFBVTs7OztJQUVULGtDQUFnQzs7Ozs7QUFNbEMsNENBRUM7OztJQURDLHlDQUF1Qzs7Ozs7QUFHekMsNENBR0M7OztJQUZDLDBDQUFtRDs7SUFDbkQsMENBQW1EOzs7OztBQUdyRCwwQ0FLQzs7O0lBSkMscUNBQWM7O0lBQ2Qsd0NBQWtCOztJQUNsQix3Q0FBbUI7O0lBQ25CLDBDQUFpQzs7Ozs7QUFHbkMsb0NBTUM7OztJQUxDLDhCQUEwQjs7SUFDMUIsa0NBQWtDOztJQUNsQyxrQ0FBa0M7O0lBQ2xDLGdDQUE4Qjs7SUFDOUIsK0NBQWdDOzs7OztBQUdsQyxzQ0FRQzs7O0lBUEMscUNBQWlDOztJQUNqQyxvQ0FBc0I7O0lBQ3RCLGtDQUEwQjs7SUFDMUIsb0NBQTBCOztJQUMxQixrQ0FBYTs7SUFDYiwwQ0FBcUI7O0lBQ3JCLDJDQUFzQjs7Ozs7QUFHeEIsc0NBRUM7Ozs7QUFFRCx1Q0FNQzs7O0lBTEMsa0NBQWU7O0lBQ2YscUNBQWtCOztJQUNsQixvQ0FBaUI7O0lBQ2pCLGlDQUFnRDs7SUFDaEQsdUNBQW9COzs7OztBQUd0Qix5Q0FPQzs7O0lBTkMsb0NBQWU7O0lBQ2YsdUNBQWtCOztJQUNsQixzQ0FBaUI7O0lBQ2pCLG1DQUFnRDs7SUFDaEQsZ0RBQTJCOztJQUMzQiwrQ0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBFdmVudEVtaXR0ZXIsIENvbXBvbmVudEZhY3RvcnksIENvbXBvbmVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuXHJcbmltcG9ydCB7IERyYXdlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9kcmF3ZXIvZHJhd2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERyYXdlckhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wYXJ0aWFscy9oZWFkZXIvaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERyYXdlckZvb3RlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9wYXJ0aWFscy9mb290ZXIvZm9vdGVyLmNvbXBvbmVudCc7XHJcblxyXG5leHBvcnQgY2xhc3MgRHJhd2VyQmFzZSB7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9kcmF3ZXJzOiBBcnJheTxEcmF3ZXJCYXNlPixcclxuICAgIHByaXZhdGUgX2RhdGE6IERyYXdlckluamVjdERhdGEsXHJcbiAgICBwdWJsaWMgaW5kZXg6IG51bWJlclxyXG4gICkge1xyXG4gICAgX2RyYXdlcnMucHVzaCh0aGlzKTtcclxuICAgIHRoaXMuX3VwZGF0ZVBhcmFtcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlc3Ryb3llZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+O1xyXG4gIHB1YmxpYyBjb21wb25lbnRJbnN0YW5jZTogRHJhd2VyQ29tcG9uZW50O1xyXG4gIHB1YmxpYyBoZWFkZXJJbnN0YW5jZXM6IEFycmF5PERyYXdlckhlYWRlckNvbXBvbmVudD4gPSBbXTtcclxuICBwdWJsaWMgZm9vdGVySW5zdGFuY2VzOiBBcnJheTxEcmF3ZXJGb290ZXJDb21wb25lbnQ+ID0gW107XHJcblxyXG4gIHB1YmxpYyBvblNob3c6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBvblNob3duOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHVibGljIG9uSGlkZTogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgcHVibGljIG9uSGlkZGVuOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcblxyXG4gIHB1YmxpYyBvbk9wZW46IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBvbkRpc21pc3M6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBvbkNsb3NlOiBQcm9taXNlPGFueT4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gdGhpcy5fb25DbG9zZVByb21pc2UgPSByZXNvbHZlKTtcclxuXHJcbiAgcHVibGljIG9uUmV0dXJuVmFsdWU6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBvblBhcmFtc0NoYW5nZTogRXZlbnRFbWl0dGVyPERyYXdlclBhcmFtc0Jhc2U+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBvblNldHRpbmdzQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RHJhd2VyU2V0dGluZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwdWJsaWMgJG9uUmVzaXplUmVxdWVzdGVkOiBFdmVudEVtaXR0ZXI8RHJhd2VyU2V0dGluZ3M+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIHB1YmxpYyBvblJlc2l6ZTogRXZlbnRFbWl0dGVyPERyYXdlclNldHRpbmdzPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuXHJcbiAgcHVibGljICRvbkhlYWRlckxpc3RDaGFuZ2U6IEV2ZW50RW1pdHRlcjxBcnJheTxEcmF3ZXJIZWFkZXJDb21wb25lbnQ+PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBwdWJsaWMgJG9uRm9vdGVyTGlzdENoYW5nZTogRXZlbnRFbWl0dGVyPEFycmF5PERyYXdlckZvb3RlckNvbXBvbmVudD4+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuICBwcml2YXRlIF9wYXJhbXM6IERyYXdlclBhcmFtc0Jhc2UgPSBuZXcgRHJhd2VyUGFyYW1zQmFzZSgpO1xyXG4gIHByaXZhdGUgX29uQ2xvc2VQcm9taXNlOiAodmFsdWU/OiBhbnkpID0+IHZvaWQ7XHJcblxyXG4gIHB1YmxpYyBnZXQgdmlzaWJsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnJlYWR5ID8gdGhpcy5jb21wb25lbnRJbnN0YW5jZS52aXNpYmxlIDogZmFsc2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgdmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodGhpcy5yZWFkeSkgeyB0aGlzLmNvbXBvbmVudEluc3RhbmNlLnZpc2libGUgPSB2aXNpYmxlOyB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHJlYWR5KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SW5zdGFuY2UgPyB0aGlzLmNvbXBvbmVudEluc3RhbmNlLnJlYWR5IDogZmFsc2U7XHJcbiAgfVxyXG4gIHB1YmxpYyBzZXQgcmVhZHkocmVhZHk6IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLmNvbXBvbmVudEluc3RhbmNlKSB7IHRoaXMuY29tcG9uZW50SW5zdGFuY2UucmVhZHkgPSByZWFkeTsgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjb21wb25lbnQoKTogYW55IHsgcmV0dXJuIHRoaXMuX2RhdGEuY29tcG9uZW50OyB9XHJcbiAgcHVibGljIGdldCBwYXJhbXMoKTogRHJhd2VyUGFyYW1zQmFzZSB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1zO1xyXG4gIH1cclxuICBwdWJsaWMgZ2V0IHNldHRpbmdzKCk6IERyYXdlclNldHRpbmdzIHtcclxuICAgIGxldCBzZXR0aW5nczogRHJhd2VyU2V0dGluZ3MgPSB0aGlzLl9kYXRhLnNldHRpbmdzO1xyXG4gICAgaWYgKCFzZXR0aW5ncykgeyBzZXR0aW5ncyA9IHt9OyB9XHJcbiAgICBpZiAoIShzZXR0aW5ncy5iYWNrZHJvcCAmJiBzZXR0aW5ncy5iYWNrZHJvcC5vbkNsaWNrKSkge1xyXG4gICAgICBpZiAoIXNldHRpbmdzLmJhY2tkcm9wKSB7IHNldHRpbmdzLmJhY2tkcm9wID0ge307IH1cclxuICAgICAgc2V0dGluZ3MuYmFja2Ryb3Aub25DbGljayA9ICdjbG9zZSc7XHJcbiAgICB9XHJcbiAgICBpZiAoIShzZXR0aW5ncy5oZWFkZXIgJiYgc2V0dGluZ3MuaGVhZGVyLmNsb3NhYmxlICYmIHNldHRpbmdzLmhlYWRlci5jbG9zZUNsaWNrKSkge1xyXG4gICAgICBpZiAoIXNldHRpbmdzLmhlYWRlcikgeyBzZXR0aW5ncy5oZWFkZXIgPSB7IHRpdGxlOiBudWxsIH07IH1cclxuICAgICAgaWYgKHNldHRpbmdzLmhlYWRlci5jbG9zYWJsZSkgeyBzZXR0aW5ncy5oZWFkZXIuY2xvc2VDbGljayA9ICdjbG9zZSc7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBzZXR0aW5ncztcclxuICB9XHJcbiAgcHVibGljIGdldCB6aW5kZXgoKTogbnVtYmVyIHsgcmV0dXJuIHRoaXMuX2RhdGEuemluZGV4OyB9XHJcbiAgcHVibGljIGdldCBjb250ZW50X3ppbmRleCgpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5fZGF0YS5jb250ZW50X3ppbmRleDsgfVxyXG4gIHB1YmxpYyBnZXQgYmFja2Ryb3BfemluZGV4KCk6IG51bWJlciB7IHJldHVybiB0aGlzLl9kYXRhLmJhY2tkcm9wX3ppbmRleDsgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGNsb3NlX29uX3JvdXRlX2NoYW5nZSgpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5fZGF0YS5zZXR0aW5ncykgeyB0aGlzLl9kYXRhLnNldHRpbmdzID0ge307IH1cclxuICAgIGNvbnN0IGNsb3NlX29uX3JvdXRlX2NoYW5nZSA9IHRoaXMuX2RhdGEuc2V0dGluZ3MuY2xvc2Vfb25fcm91dGVfY2hhbmdlO1xyXG4gICAgcmV0dXJuIF8uaXNCb29sZWFuKGNsb3NlX29uX3JvdXRlX2NoYW5nZSkgPyBjbG9zZV9vbl9yb3V0ZV9jaGFuZ2UgOiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldFNpemUoc2l6ZTogRHJhd2VyU2V0dGluZ3NTaXplKSB7XHJcbiAgICBpZiAoIXRoaXMuX2RhdGEuc2V0dGluZ3MpIHsgdGhpcy5fZGF0YS5zZXR0aW5ncyA9IHt9OyB9XHJcbiAgICB0aGlzLl9kYXRhLnNldHRpbmdzLnNpemUgPSBzaXplO1xyXG4gICAgdGhpcy5vblNldHRpbmdzQ2hhbmdlLmVtaXQodGhpcy5fZGF0YS5zZXR0aW5ncyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0QmFja2Ryb3AoYmFja2Ryb3A6IERyYXdlclNldHRpbmdzQmFja2Ryb3ApIHtcclxuICAgIGlmICghdGhpcy5fZGF0YS5zZXR0aW5ncykgeyB0aGlzLl9kYXRhLnNldHRpbmdzID0ge307IH1cclxuICAgIHRoaXMuX2RhdGEuc2V0dGluZ3MuYmFja2Ryb3AgPSBiYWNrZHJvcDtcclxuICAgIHRoaXMub25TZXR0aW5nc0NoYW5nZS5lbWl0KHRoaXMuX2RhdGEuc2V0dGluZ3MpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEtleWJvYXJkKGtleWJvYXJkOiBEcmF3ZXJTZXR0aW5nc0tleWJvYXJkKSB7XHJcbiAgICBpZiAoIXRoaXMuX2RhdGEuc2V0dGluZ3MpIHsgdGhpcy5fZGF0YS5zZXR0aW5ncyA9IHt9OyB9XHJcbiAgICB0aGlzLl9kYXRhLnNldHRpbmdzLmtleWJvYXJkID0ga2V5Ym9hcmQ7XHJcbiAgICB0aGlzLm9uU2V0dGluZ3NDaGFuZ2UuZW1pdCh0aGlzLl9kYXRhLnNldHRpbmdzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRIZWFkZXIoaGVhZGVyOiBEcmF3ZXJTZXR0aW5nc0hlYWRlcikge1xyXG4gICAgaWYgKCF0aGlzLl9kYXRhLnNldHRpbmdzKSB7IHRoaXMuX2RhdGEuc2V0dGluZ3MgPSB7fTsgfVxyXG4gICAgdGhpcy5fZGF0YS5zZXR0aW5ncy5oZWFkZXIgPSBoZWFkZXI7XHJcbiAgICB0aGlzLm9uU2V0dGluZ3NDaGFuZ2UuZW1pdCh0aGlzLl9kYXRhLnNldHRpbmdzKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRQYXJhbXMocGFyYW1zOiBEcmF3ZXJQYXJhbXNEYXRhKSB7XHJcbiAgICB0aGlzLl9kYXRhLnBhcmFtcyA9IHBhcmFtcztcclxuICAgIHRoaXMuX3VwZGF0ZVBhcmFtcygpO1xyXG4gICAgdGhpcy5vblBhcmFtc0NoYW5nZS5lbWl0KHRoaXMuX3BhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVzaXplKCkge1xyXG4gICAgdGhpcy4kb25SZXNpemVSZXF1ZXN0ZWQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNpemVDbGFzcygpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLnNldHRpbmdzLnNpemUpIHtcclxuICAgICAgY2FzZSAneHMnOiByZXR1cm4gJ2RyYXdlci14cyc7XHJcbiAgICAgIGNhc2UgJ3NtJzogcmV0dXJuICdkcmF3ZXItc20nO1xyXG4gICAgICBjYXNlICdtZCc6IHJldHVybiAnZHJhd2VyLW1kJztcclxuICAgICAgY2FzZSAnbGcnOiByZXR1cm4gJ2RyYXdlci1sZyc7XHJcbiAgICAgIGNhc2UgJ3Jlc3BvbnNpdmUnOiByZXR1cm4gJ2RyYXdlci1yZXNwb25zaXZlJztcclxuICAgICAgZGVmYXVsdDogcmV0dXJuICdkcmF3ZXItbWQnO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0hlYWRlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmhlYWRlckluc3RhbmNlcy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc0Zvb3RlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmZvb3Rlckluc3RhbmNlcy5sZW5ndGggPiAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldE9mZnNldEhlaWdodCgpOiBudW1iZXIge1xyXG4gICAgbGV0IGhlaWdodCA9IDA7XHJcbiAgICB0aGlzLmhlYWRlckluc3RhbmNlcy5mb3JFYWNoKChjb21wb25lbnQpID0+IGhlaWdodCArPSBjb21wb25lbnQuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCk7XHJcbiAgICB0aGlzLmZvb3Rlckluc3RhbmNlcy5mb3JFYWNoKChjb21wb25lbnQpID0+IGhlaWdodCArPSBjb21wb25lbnQuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldEhlaWdodCk7XHJcbiAgICByZXR1cm4gaGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEhlYWRlcihoZWFkZXI6IERyYXdlckhlYWRlckNvbXBvbmVudCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuaGVhZGVySW5zdGFuY2VzLmxlbmd0aDtcclxuICAgIHRoaXMuaGVhZGVySW5zdGFuY2VzLnB1c2goaGVhZGVyKTtcclxuICAgIHRoaXMuJG9uSGVhZGVyTGlzdENoYW5nZS5lbWl0KHRoaXMuaGVhZGVySW5zdGFuY2VzKTtcclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVIZWFkZXIoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuaGVhZGVySW5zdGFuY2VzW2luZGV4XSkge1xyXG4gICAgICB0aGlzLmhlYWRlckluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB0aGlzLiRvbkhlYWRlckxpc3RDaGFuZ2UuZW1pdCh0aGlzLmhlYWRlckluc3RhbmNlcyk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZEZvb3RlcihoZWFkZXI6IERyYXdlckZvb3RlckNvbXBvbmVudCk6IG51bWJlciB7XHJcbiAgICBjb25zdCBpbmRleCA9IHRoaXMuZm9vdGVySW5zdGFuY2VzLmxlbmd0aDtcclxuICAgIHRoaXMuZm9vdGVySW5zdGFuY2VzLnB1c2goaGVhZGVyKTtcclxuICAgIHRoaXMuJG9uRm9vdGVyTGlzdENoYW5nZS5lbWl0KHRoaXMuZm9vdGVySW5zdGFuY2VzKTtcclxuICAgIHJldHVybiBpbmRleDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW1vdmVGb290ZXIoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuZm9vdGVySW5zdGFuY2VzW2luZGV4XSkge1xyXG4gICAgICB0aGlzLmZvb3Rlckluc3RhbmNlcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB0aGlzLiRvbkZvb3Rlckxpc3RDaGFuZ2UuZW1pdCh0aGlzLmZvb3Rlckluc3RhbmNlcyk7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9wZW4oKSB7XHJcbiAgICBpZiAodGhpcy5kZXN0cm95ZWQpIHtcclxuICAgICAgY29uc29sZS53YXJuKCdJc1xcJ3QgcG9zc2libGUgdG8gb3BlbiBhIGRlc3Ryb3llZCBkcmF3ZXIuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLnJlYWR5KSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50SW5zdGFuY2UudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMub25PcGVuLmVtaXQoKTtcclxuICAgICAgdGhpcy5vblNob3cuZW1pdCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLm9wZW4oKSwgMTAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBkaXNtaXNzKCkge1xyXG4gICAgaWYgKHRoaXMucmVhZHkpIHtcclxuICAgICAgY29uc3QgaGlkZGVuX3N1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gdGhpcy5vbkhpZGRlbi5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIGhpZGRlbl9zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICB0aGlzLm9uRGlzbWlzcy5lbWl0KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlLnZpc2libGUgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5kaXNtaXNzKCksIDEwMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xvc2UoKSB7XHJcbiAgICBpZiAodGhpcy5yZWFkeSkge1xyXG4gICAgICBjb25zdCBoaWRkZW5fc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSB0aGlzLm9uSGlkZGVuLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgaGlkZGVuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIHRoaXMub25EaXNtaXNzLmVtaXQoKTtcclxuICAgICAgICB0aGlzLl9kZXN0cm95KCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLmNvbXBvbmVudEluc3RhbmNlLnZpc2libGUgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5jbG9zZSgpLCAxMDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJldHVyblZhbHVlKHJlc3BvbnNlOiBhbnkpIHtcclxuICAgIHRoaXMub25SZXR1cm5WYWx1ZS5lbWl0KHJlc3BvbnNlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3VwZGF0ZVBhcmFtcygpIHtcclxuICAgIHRoaXMuX3BhcmFtcy5wYXJhbXMgPSB0aGlzLl9kYXRhLnBhcmFtcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2Rlc3Ryb3koKSB7XHJcbiAgICBsZXQgdGhpc19kcmF3ZXJfaW5kZXg6IG51bWJlcjtcclxuICAgIHRoaXMuX2RyYXdlcnMuZm9yRWFjaCgoZHJhd2VyLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoZHJhd2VyLmluZGV4ID09IHRoaXMuaW5kZXgpIHsgdGhpc19kcmF3ZXJfaW5kZXggPSBpbmRleDsgfVxyXG4gICAgfSk7XHJcbiAgICBpZiAodGhpc19kcmF3ZXJfaW5kZXggPj0gMCkge1xyXG4gICAgICB0aGlzLl9kcmF3ZXJzLnNwbGljZSh0aGlzX2RyYXdlcl9pbmRleCwgMSk7XHJcbiAgICAgIHRoaXMuX29uQ2xvc2VQcm9taXNlKCk7XHJcbiAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERyYXdlclJlZkJhc2Uge1xyXG4gIHB1YmxpYyBkcmF3ZXI6IERyYXdlckJhc2U7XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIERyYXdlclBhcmFtc0Jhc2Uge1xyXG4gIHB1YmxpYyBwYXJhbXM6IERyYXdlclBhcmFtc0RhdGE7XHJcbiAgcHVibGljIGdldChrZXk6IHN0cmluZykgeyByZXR1cm4gdGhpcy5wYXJhbXMgPyB0aGlzLnBhcmFtc1trZXldIDogbnVsbDsgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBEcmF3ZXJTZXR0aW5nc1NpemUgPSAneHMnIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3Jlc3BvbnNpdmUnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEcmF3ZXJTZXR0aW5nc0JhY2tkcm9wIHtcclxuICBvbkNsaWNrPzogJ2Nsb3NlJyB8ICdkaXNtaXNzJyB8ICdub25lJztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEcmF3ZXJTZXR0aW5nc0tleWJvYXJkIHtcclxuICBvbkVzY2FwZT86ICdjbG9zZScgfCAnZGlzbWlzcycgfCAnbm9uZScgfCBGdW5jdGlvbjtcclxuICBvblJldHVybj86ICdjbG9zZScgfCAnZGlzbWlzcycgfCAnbm9uZScgfCBGdW5jdGlvbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEcmF3ZXJTZXR0aW5nc0hlYWRlciB7XHJcbiAgdGl0bGU6IHN0cmluZztcclxuICBzdWJ0aXRsZT86IHN0cmluZztcclxuICBjbG9zYWJsZT86IGJvb2xlYW47XHJcbiAgY2xvc2VDbGljaz86ICdjbG9zZScgfCAnZGlzbWlzcyc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRHJhd2VyU2V0dGluZ3Mge1xyXG4gIHNpemU/OiBEcmF3ZXJTZXR0aW5nc1NpemU7XHJcbiAga2V5Ym9hcmQ/OiBEcmF3ZXJTZXR0aW5nc0tleWJvYXJkO1xyXG4gIGJhY2tkcm9wPzogRHJhd2VyU2V0dGluZ3NCYWNrZHJvcDtcclxuICBoZWFkZXI/OiBEcmF3ZXJTZXR0aW5nc0hlYWRlcjtcclxuICBjbG9zZV9vbl9yb3V0ZV9jaGFuZ2U/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERyYXdlckluamVjdERhdGEge1xyXG4gIGNvbXBvbmVudDogQ29tcG9uZW50RmFjdG9yeTxhbnk+O1xyXG4gIGluc3RhbmNlPzogRHJhd2VyQmFzZTtcclxuICBwYXJhbXM/OiBEcmF3ZXJQYXJhbXNEYXRhO1xyXG4gIHNldHRpbmdzPzogRHJhd2VyU2V0dGluZ3M7XHJcbiAgemluZGV4PzogYW55O1xyXG4gIGNvbnRlbnRfemluZGV4PzogYW55O1xyXG4gIGJhY2tkcm9wX3ppbmRleD86IGFueTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEcmF3ZXJQYXJhbXNEYXRhIHtcclxuICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRHJhd2VyQWxlcnRQYXJhbXMge1xyXG4gIHRpdGxlPzogc3RyaW5nO1xyXG4gIHN1YnRpdGxlPzogc3RyaW5nO1xyXG4gIG1lc3NhZ2U/OiBzdHJpbmc7XHJcbiAgc2l6ZT86ICd4cycgfCAnc20nIHwgJ21kJyB8ICdsZycgfCAncmVzcG9uc2l2ZSc7XHJcbiAgYnV0dG9uVGV4dD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEcmF3ZXJDb25maXJtUGFyYW1zIHtcclxuICB0aXRsZT86IHN0cmluZztcclxuICBzdWJ0aXRsZT86IHN0cmluZztcclxuICBtZXNzYWdlPzogc3RyaW5nO1xyXG4gIHNpemU/OiAneHMnIHwgJ3NtJyB8ICdtZCcgfCAnbGcnIHwgJ3Jlc3BvbnNpdmUnO1xyXG4gIHJlc29sdmVCdXR0b25UZXh0Pzogc3RyaW5nO1xyXG4gIHJlamVjdEJ1dHRvblRleHQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIERyYXdlckNvbmZpcm1DYWxsYmFjayA9IChyZXNwb25zZTogYm9vbGVhbikgPT4gdm9pZDtcclxuIl19