UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

788 lines (787 loc) 69.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import { Directive, ElementRef, Input, Output, ViewContainerRef, Type, ComponentFactoryResolver, EventEmitter } from '@angular/core'; import { NeedFocusService } from '../service/NeedFocusService.service'; import { ObservableManager } from '../service/ObservableManager.service'; import { EventUtils } from '../share/utils/EventUtils'; var /** @type {?} */ SUB_TOPIC_NAME = 'popover'; var /** @type {?} */ TOPIC_NAME_PREFIX = 'popover.'; var /** @type {?} */ SHOW_SUFFIX = 'show'; var /** @type {?} */ HIDE_SUFFIX = 'hide'; var /** @type {?} */ CMD_SUFFIX = 'cmd'; var /** @type {?} */ SHOW_TOPIC_NAME = TOPIC_NAME_PREFIX + SHOW_SUFFIX; var /** @type {?} */ HIDE_TOPIC_NAME = TOPIC_NAME_PREFIX + HIDE_SUFFIX; var /** @type {?} */ CMD_TOPIC_NAME = TOPIC_NAME_PREFIX + CMD_SUFFIX; var PopoverDirective = /** @class */ (function () { function PopoverDirective(el, needFocusService, target, componentFactoryResolver, observableMgr) { this.el = el; this.target = target; this.componentFactoryResolver = componentFactoryResolver; this.observableMgr = observableMgr; this.needFocusService = needFocusService; this._active = false; this.onFocus = false; this.onChange = false; this.onMouseover = false; this.beforePopoverClick = new EventEmitter(); this.popoverClick = new EventEmitter(); this.beforePopoverActive = new EventEmitter(); this.popoverActive = new EventEmitter(); this.beforePopoverInactive = new EventEmitter(); this.popoverInactive = new EventEmitter(); this.showSubjects = []; this.hideSubjects = []; } /** * @param {?} subTopicName * @return {?} */ PopoverDirective.getShowTopicName = /** * @param {?} subTopicName * @return {?} */ function (subTopicName) { if (subTopicName === null || typeof subTopicName === 'undefined' || subTopicName === '') { return PopoverDirective.SHOW_TOPIC_NAME; } if (subTopicName.charAt(0) === '.') { subTopicName = subTopicName.substring(1); } if (subTopicName === '') { return PopoverDirective.SHOW_TOPIC_NAME; } if (subTopicName.charAt(subTopicName.length - 1) !== '.') { subTopicName += '.'; } return TOPIC_NAME_PREFIX + subTopicName + SHOW_SUFFIX; }; /** * @param {?} subTopicName * @return {?} */ PopoverDirective.getHideTopicName = /** * @param {?} subTopicName * @return {?} */ function (subTopicName) { if (subTopicName === null || typeof subTopicName === 'undefined' || subTopicName === '') { return PopoverDirective.HIDE_TOPIC_NAME; } if (subTopicName.charAt(0) === '.') { subTopicName = subTopicName.substring(1); } if (subTopicName === '') { return PopoverDirective.HIDE_TOPIC_NAME; } if (subTopicName.charAt(subTopicName.length - 1) !== '.') { subTopicName += '.'; } return TOPIC_NAME_PREFIX + subTopicName + HIDE_SUFFIX; }; /** * @param {?} subTopicName * @return {?} */ PopoverDirective.getCmdTopicName = /** * @param {?} subTopicName * @return {?} */ function (subTopicName) { if (subTopicName === null || typeof subTopicName === 'undefined' || subTopicName === '') { return PopoverDirective.CMD_TOPIC_NAME; } if (subTopicName.charAt(0) === '.') { subTopicName = subTopicName.substring(1); } if (subTopicName === '') { return PopoverDirective.CMD_TOPIC_NAME; } if (subTopicName.charAt(subTopicName.length - 1) !== '.') { subTopicName += '.'; } return TOPIC_NAME_PREFIX + subTopicName + CMD_SUFFIX; }; /** * @param {?} showTopic * @param {?} hideTopic * @param {?} showCmdTopic * @return {?} */ PopoverDirective.prototype.initPopoverEventTopics = /** * @param {?} showTopic * @param {?} hideTopic * @param {?} showCmdTopic * @return {?} */ function (showTopic, hideTopic, showCmdTopic) { var _this = this; // Create change event observable topics if (showTopic !== null && typeof showTopic === 'string') { this.showSubjects.push(this.observableMgr.createSubject(showTopic)); } if (hideTopic !== null && typeof hideTopic === 'string') { this.hideSubjects.push(this.observableMgr.createSubject(hideTopic)); } // Subscribe on CMD topics if (showCmdTopic !== null && typeof showCmdTopic === 'string') { this.observableMgr.subscribe(showCmdTopic, function (show) { if (typeof show === 'boolean') { _this._active = show; if (_this._active) { $(_this.el.nativeElement).addClass('active'); $(_this.el.nativeElement).popover('show'); } else { $(_this.el.nativeElement).removeClass('active'); $(_this.el.nativeElement).popover('hide'); } } }); } }; /** * @return {?} */ PopoverDirective.prototype.ngOnInit = /** * @return {?} */ function () { var _this = this; if (this.selector == null || this.selector === 'undefined') { this.selector = '.anchor'; } if (this.placement == null || this.placement === 'undefined' || this.placement === '') { this.placement = 'bottom'; } if (this.delay == null) { this.delay = 0; } if (this.autoFocus === null || this.autoFocus === undefined || typeof this.autoFocus !== 'boolean') { this.autoFocus = true; } $(this.el.nativeElement).append("<button type='button' class='fake'></button>"); this.initAutoFocus(); // obs // Init super class event topics this.initPopoverEventTopics(PopoverDirective.SHOW_TOPIC_NAME, PopoverDirective.HIDE_TOPIC_NAME, PopoverDirective.CMD_TOPIC_NAME); if (this.subTopicName !== null && this.subTopicName !== '' || typeof this.subTopicName !== 'undefined') { // Init sub topic event topics this.initPopoverEventTopics(PopoverDirective.getShowTopicName(this.subTopicName), PopoverDirective.getHideTopicName(this.subTopicName), PopoverDirective.getCmdTopicName(this.subTopicName)); } $(this.el.nativeElement).popover({ html: true, placement: this.placement, content: function () { return _this.html; }, delay: this.delay }); $(this.el.nativeElement).on('click', function ($event) { $event.source = _this; if (_this.type != null && _this.type != undefined) { if (!_this.autoFocus) { _this.doClick($event); } else { setTimeout(function () { _this.doAppendComponent($event); }, _this.delay); _this.doActive(); } } else { if (_this.autoFocus) { if (!_this.onFocus) { $(_this.el.nativeElement).find(".fake").focus(); $(_this.el.nativeElement).popover('show'); } else { } } } }); if (this.type != null && this.type != undefined) { this.oldType = this.type; this.render(); this.comp = $(this.el.nativeElement).next().detach(); } this.onChange = true; }; /** * @return {?} */ PopoverDirective.prototype.ngOnChanges = /** * @return {?} */ function () { if (this.onChange) { if (this.comp !== undefined && this.comp !== null) { this.hide(); } if (this.oldType !== this.type && this.type !== null && this.type !== undefined) { this.render(); this.comp = $(this.el.nativeElement).next().detach(); this.oldType = this.type; } } }; /** * @param {?=} $event * @param {?=} fireEvent * @return {?} */ PopoverDirective.prototype.doClick = /** * @param {?=} $event * @param {?=} fireEvent * @return {?} */ function ($event, fireEvent) { var _this = this; if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforePopoverClick', $event, fireEvent, function ($event) { if (!_this._active) { setTimeout(function () { _this.doAppendComponent($event); }, _this.delay); _this.doActive(); } else { _this.doInactive(); } }, function ($event) { // emitBeforeEvent // emitBeforeEvent _this.emitBeforePopoverClickEvent($event); }, function ($event, result) { // emitAfterEvent // emitAfterEvent _this.emitPopoverClickEvent($event); }, function ($event) { // doPrevented }); }; /** * @param {?} $event * @return {?} */ PopoverDirective.prototype.doAppendComponent = /** * @param {?} $event * @return {?} */ function ($event) { var _this = this; var /** @type {?} */ popoverDiv = $(this.el.nativeElement).next(); var /** @type {?} */ popoverSelector = $(popoverDiv).find(this.selector); if (popoverSelector != null && popoverSelector !== 'undefined') { popoverSelector.append(this.comp); if (this.needFocusService) { this.needFocusService.setFocusingComponent(this.comp, $event); } if (this.autoFocus) { $(this.el.nativeElement).find(".fake").focus(); } } var /** @type {?} */ widthPopoverDiv = popoverDiv[0].offsetWidth; var /** @type {?} */ leftWrapperPopoverDiv = $(this.el.nativeElement).offset().left; var /** @type {?} */ widthWrapperPopoverDiv = $(this.el.nativeElement).outerWidth(); var /** @type {?} */ setLeft = leftWrapperPopoverDiv + (widthWrapperPopoverDiv / 2) - (widthPopoverDiv / 2); // auto remove positioning styles popoverDiv.css({ left: setLeft + 'px' }); // remove arrow positioning styles var /** @type {?} */ popoverArrowDiv = $(popoverDiv).find(".arrow"); popoverArrowDiv.css({ left: '' }); $(popoverDiv).on('mouseover', function ($event) { _this.onMouseover = true; }); $(popoverDiv).on('mouseout', function ($event) { _this.onMouseover = false; }); }; /** * @param {?=} $event * @param {?=} fireEvent * @return {?} */ PopoverDirective.prototype.doActive = /** * @param {?=} $event * @param {?=} fireEvent * @return {?} */ function ($event, fireEvent) { var _this = this; if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforePopoverActive', $event, fireEvent, function ($event) { // doEvent // doEvent _this.show(); }, function ($event) { // emitBeforeEvent // emitBeforeEvent _this.emitBeforePopoverClickEvent($event); }, function ($event, result) { // emitAfterEvent // emitAfterEvent _this.emitPopoverClickEvent($event); }, function ($event) { // doPrevented }); }; /** * @param {?=} $event * @param {?=} fireEvent * @return {?} */ PopoverDirective.prototype.doInactive = /** * @param {?=} $event * @param {?=} fireEvent * @return {?} */ function ($event, fireEvent) { var _this = this; if (fireEvent === null || fireEvent === undefined) { fireEvent = true; } EventUtils.handleBrowserEvent(this, 'beforePopoverInactive', $event, fireEvent, function ($event) { // doEvent // doEvent _this.hide(); }, function ($event) { // emitBeforeEvent // emitBeforeEvent _this.emitBeforePopoverClickEvent($event); }, function ($event, result) { // emitAfterEvent // emitAfterEvent _this.emitPopoverClickEvent($event); }, function ($event) { // doPrevented }); }; /** * @return {?} */ PopoverDirective.prototype.render = /** * @return {?} */ function () { var /** @type {?} */ simpleCompoFactory = this.componentFactoryResolver.resolveComponentFactory(this.type); this.target.createComponent(simpleCompoFactory); }; /** * @return {?} */ PopoverDirective.prototype.initAutoFocus = /** * @return {?} */ function () { var _this = this; $(this.el.nativeElement).find(".fake").on('focusin', function ($event) { _this.onFocus = true; }); $(this.el.nativeElement).find(".fake").on('blur', function ($event) { $event.source = _this; _this.doLostFocus($event); setTimeout(function () { _this.onFocus = false; }, 300); }); }; /** * @param {?} $event * @return {?} */ PopoverDirective.prototype.doLostFocus = /** * @param {?} $event * @return {?} */ function ($event) { if (!this.onMouseover) { if (this.type != null || this.type != undefined) { if (this.needFocusService !== null && this.needFocusService.getFocusingComponent() === this.comp) { this.needFocusService.resetFocusingComponent(); this.hide(); } } else { $(this.el.nativeElement).popover('hide'); } } else { $(this.el.nativeElement).find(".fake").focus(); } }; /** * @param {?} $event * @return {?} */ PopoverDirective.prototype.emitBeforePopoverClickEvent = /** * @param {?} $event * @return {?} */ function ($event) { var /** @type {?} */ ev = EventUtils.newCustomEvent("beforePopoverClick", this, null, $event); this.beforePopoverClick.emit(ev); }; /** * @param {?} $event * @return {?} */ PopoverDirective.prototype.emitPopoverClickEvent = /** * @param {?} $event * @return {?} */ function ($event) { var /** @type {?} */ ev = EventUtils.newCustomEvent("popoverClick", this, null, $event); this.popoverClick.emit(ev); }; /** * @param {?} $event * @return {?} */ PopoverDirective.prototype.emitBeforePopoverActiveEvent = /** * @param {?} $event * @return {?} */ function ($event) { var /** @type {?} */ ev = EventUtils.newCustomEvent("beforePopoverActive", this, null, $event); this.beforePopoverActive.emit(ev); }; /** * @param {?} $event * @return {?} */ PopoverDirective.prototype.emitPopoverActiveEvent = /** * @param {?} $event * @return {?} */ function ($event) { var /** @type {?} */ ev = EventUtils.newCustomEvent("popoverActive", this, null, $event); this.popoverActive.emit(ev); }; /** * @param {?} $event * @return {?} */ PopoverDirective.prototype.emitBeforePopoverInactiveEvent = /** * @param {?} $event * @return {?} */ function ($event) { var /** @type {?} */ ev = EventUtils.newCustomEvent("beforePopoverInactive", this, null, $event); this.beforePopoverInactive.emit(ev); }; /** * @param {?} $event * @return {?} */ PopoverDirective.prototype.emitPopoverInactiveEvent = /** * @param {?} $event * @return {?} */ function ($event) { var /** @type {?} */ ev = EventUtils.newCustomEvent("popoverInactive", this, null, $event); this.popoverInactive.emit(ev); }; Object.defineProperty(PopoverDirective.prototype, "active", { get: /** * @return {?} */ function () { return this._active; }, enumerable: true, configurable: true }); /** * @param {?} placement * @return {?} */ PopoverDirective.prototype.setPlacement = /** * @param {?} placement * @return {?} */ function (placement) { this.placement = placement; }; /** * @return {?} */ PopoverDirective.prototype.getPlacement = /** * @return {?} */ function () { return this.placement; }; /** * @return {?} */ PopoverDirective.prototype.show = /** * @return {?} */ function () { var _this = this; this._active = true; $(this.el.nativeElement).addClass('active'); $(this.el.nativeElement).popover('show'); if (Array.isArray(this.showSubjects)) { // Emit change event this.showSubjects.forEach(function (obsv, idx) { obsv.next(_this); }); } }; /** * @return {?} */ PopoverDirective.prototype.hide = /** * @return {?} */ function () { var _this = this; this._active = false; $(this.el.nativeElement).removeClass('active'); $(this.el.nativeElement).popover('hide'); if (Array.isArray(this.hideSubjects)) { // Emit change event this.hideSubjects.forEach(function (obsv, idx) { obsv.next(_this); _this.onFocus = false; }); } }; /** * @return {?} */ PopoverDirective.prototype.getBeforePopoverClicked = /** * @return {?} */ function () { return this.beforePopoverClick; }; /** * @param {?} event * @return {?} */ PopoverDirective.prototype.setBeforePopoverClicked = /** * @param {?} event * @return {?} */ function (event) { this.beforePopoverClick = event; }; /** * @return {?} */ PopoverDirective.prototype.getPopoverClicked = /** * @return {?} */ function () { return this.popoverClick; }; /** * @param {?} event * @return {?} */ PopoverDirective.prototype.setPopoverClicked = /** * @param {?} event * @return {?} */ function (event) { this.popoverClick = event; }; /** * @return {?} */ PopoverDirective.prototype.getBeforePopoverInactived = /** * @return {?} */ function () { return this.beforePopoverInactive; }; /** * @param {?} event * @return {?} */ PopoverDirective.prototype.setBeforePopoverInactived = /** * @param {?} event * @return {?} */ function (event) { this.beforePopoverInactive = event; }; /** * @return {?} */ PopoverDirective.prototype.getPopoverInactived = /** * @return {?} */ function () { return this.popoverInactive; }; /** * @param {?} event * @return {?} */ PopoverDirective.prototype.setPopoverInactived = /** * @param {?} event * @return {?} */ function (event) { this.popoverInactive = event; }; /** * @return {?} */ PopoverDirective.prototype.getBeforePopoverActived = /** * @return {?} */ function () { return this.beforePopoverActive; }; /** * @param {?} event * @return {?} */ PopoverDirective.prototype.setBeforePopoverActived = /** * @param {?} event * @return {?} */ function (event) { this.beforePopoverActive = event; }; /** * @return {?} */ PopoverDirective.prototype.getPopoverActived = /** * @return {?} */ function () { return this.popoverActive; }; /** * @param {?} event * @return {?} */ PopoverDirective.prototype.setPopoverActived = /** * @param {?} event * @return {?} */ function (event) { this.popoverActive = event; }; PopoverDirective.SUB_TOPIC_NAME = SUB_TOPIC_NAME; PopoverDirective.SHOW_TOPIC_NAME = SHOW_TOPIC_NAME; PopoverDirective.HIDE_TOPIC_NAME = HIDE_TOPIC_NAME; PopoverDirective.CMD_TOPIC_NAME = CMD_TOPIC_NAME; PopoverDirective.decorators = [ { type: Directive, args: [{ selector: '[phxPopover]' },] }, ]; /** @nocollapse */ PopoverDirective.ctorParameters = function () { return [ { type: ElementRef, }, { type: NeedFocusService, }, { type: ViewContainerRef, }, { type: ComponentFactoryResolver, }, { type: ObservableManager, }, ]; }; PopoverDirective.propDecorators = { "html": [{ type: Input, args: ['phxPopover',] },], "type": [{ type: Input, args: ['componentType',] },], "selector": [{ type: Input, args: ['selector',] },], "delay": [{ type: Input, args: ['delay',] },], "subTopicName": [{ type: Input, args: ['topicName',] },], "autoFocus": [{ type: Input, args: ['autoFocus',] },], "beforePopoverClick": [{ type: Output, args: ['phxBeforeClick',] },], "popoverClick": [{ type: Output, args: ['phxClick',] },], "beforePopoverActive": [{ type: Output, args: ['phxBeforeActive',] },], "popoverActive": [{ type: Output, args: ['phxActive',] },], "beforePopoverInactive": [{ type: Output, args: ['phxBeforeInactive',] },], "popoverInactive": [{ type: Output, args: ['phxInactive',] },], }; return PopoverDirective; }()); export { PopoverDirective }; function PopoverDirective_tsickle_Closure_declarations() { /** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */ PopoverDirective.decorators; /** * @nocollapse * @type {function(): !Array<(null|{type: ?, decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>)})>} */ PopoverDirective.ctorParameters; /** @type {!Object<string,!Array<{type: !Function, args: (undefined|!Array<?>)}>>} */ PopoverDirective.propDecorators; /** @type {?} */ PopoverDirective.SUB_TOPIC_NAME; /** @type {?} */ PopoverDirective.SHOW_TOPIC_NAME; /** @type {?} */ PopoverDirective.HIDE_TOPIC_NAME; /** @type {?} */ PopoverDirective.CMD_TOPIC_NAME; /** @type {?} */ PopoverDirective.prototype.html; /** @type {?} */ PopoverDirective.prototype.type; /** @type {?} */ PopoverDirective.prototype.selector; /** @type {?} */ PopoverDirective.prototype.delay; /** @type {?} */ PopoverDirective.prototype.subTopicName; /** @type {?} */ PopoverDirective.prototype.autoFocus; /** @type {?} */ PopoverDirective.prototype.beforePopoverClick; /** @type {?} */ PopoverDirective.prototype.popoverClick; /** @type {?} */ PopoverDirective.prototype.beforePopoverActive; /** @type {?} */ PopoverDirective.prototype.popoverActive; /** @type {?} */ PopoverDirective.prototype.beforePopoverInactive; /** @type {?} */ PopoverDirective.prototype.popoverInactive; /** @type {?} */ PopoverDirective.prototype.comp; /** @type {?} */ PopoverDirective.prototype.placement; /** @type {?} */ PopoverDirective.prototype.oldType; /** @type {?} */ PopoverDirective.prototype._active; /** @type {?} */ PopoverDirective.prototype.onFocus; /** @type {?} */ PopoverDirective.prototype.onChange; /** @type {?} */ PopoverDirective.prototype.onMouseover; /** @type {?} */ PopoverDirective.prototype.el; /** @type {?} */ PopoverDirective.prototype.needFocusService; /** @type {?} */ PopoverDirective.prototype.target; /** @type {?} */ PopoverDirective.prototype.componentFactoryResolver; /** @type {?} */ PopoverDirective.prototype.observableMgr; /** @type {?} */ PopoverDirective.prototype.showSubjects; /** @type {?} */ PopoverDirective.prototype.hideSubjects; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9wb3Zlci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9jb20ucGhsb3h1aS8iLCJzb3VyY2VzIjpbImxpYi9kaXJlY3RpdmUvUG9wb3Zlci5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQVUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUU3SSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN2RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFJdkQscUJBQU0sY0FBYyxHQUFXLFNBQVMsQ0FBQztBQUN6QyxxQkFBTSxpQkFBaUIsR0FBVyxVQUFVLENBQUM7QUFDN0MscUJBQU0sV0FBVyxHQUFXLE1BQU0sQ0FBQztBQUNuQyxxQkFBTSxXQUFXLEdBQVcsTUFBTSxDQUFDO0FBQ25DLHFCQUFNLFVBQVUsR0FBVyxLQUFLLENBQUM7QUFDakMscUJBQU0sZUFBZSxHQUFXLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQUNoRSxxQkFBTSxlQUFlLEdBQVcsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0FBQ2hFLHFCQUFNLGNBQWMsR0FBVyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7O0lBaUgxRCwwQkFBWSxFQUFjLEVBQUUsZ0JBQWtDLEVBQUUsTUFBd0IsRUFBRSx3QkFBa0QsRUFBRSxhQUFnQztRQUMxSyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ3JCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyx3QkFBd0IsQ0FBQztRQUN6RCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEs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QixnQkFBZ0I7Z0JBRjhCLGdCQUFnQjtnQkFBUSx3QkFBd0I7Z0JBRzlGLGlCQUFpQjs7O3lCQXdCckIsS0FBSyxTQUFDLFlBQVk7eUJBRWxCLEtBQUssU0FBQyxlQUFlOzZCQUVyQixLQUFLLFNBQUMsVUFBVTswQkFFaEIsS0FBSyxTQUFDLE9BQU87aUNBRWIsS0FBSyxTQUFDLFdBQVc7OEJBRWpCLEtBQUssU0FBQyxXQUFXO3VDQUdqQixNQUFNLFNBQUMsZ0JBQWdCO2lDQUV2QixNQUFNLFNBQUMsVUFBVTt3Q0FFakIsTUFBTSxTQUFDLGlCQUFpQjtrQ0FFeEIsTUFBTSxTQUFDLFdBQVc7MENBRWxCLE1BQU0sU0FBQyxtQkFBbUI7b0NBRTFCLE1BQU0sU0FBQyxhQUFhOzsyQkFsRHpCOztTQW9CYSxnQkFBZ0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIElucHV0LCBPdXRwdXQsIE9uSW5pdCwgVmlld0NvbnRhaW5lclJlZiwgVHlwZSwgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzL1N1YmplY3QnO1xuaW1wb3J0IHsgTmVlZEZvY3VzU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2UvTmVlZEZvY3VzU2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IE9ic2VydmFibGVNYW5hZ2VyIH0gZnJvbSAnLi4vc2VydmljZS9PYnNlcnZhYmxlTWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IEV2ZW50VXRpbHMgfSBmcm9tICcuLi9zaGFyZS91dGlscy9FdmVudFV0aWxzJztcblxuZGVjbGFyZSB2YXIgJDogYW55O1xuXG5jb25zdCBTVUJfVE9QSUNfTkFNRTogc3RyaW5nID0gJ3BvcG92ZXInO1xuY29uc3QgVE9QSUNfTkFNRV9QUkVGSVg6IHN0cmluZyA9ICdwb3BvdmVyLic7XG5jb25zdCBTSE9XX1NVRkZJWDogc3RyaW5nID0gJ3Nob3cnO1xuY29uc3QgSElERV9TVUZGSVg6IHN0cmluZyA9ICdoaWRlJztcbmNvbnN0IENNRF9TVUZGSVg6IHN0cmluZyA9ICdjbWQnO1xuY29uc3QgU0hPV19UT1BJQ19OQU1FOiBzdHJpbmcgPSBUT1BJQ19OQU1FX1BSRUZJWCArIFNIT1dfU1VGRklYO1xuY29uc3QgSElERV9UT1BJQ19OQU1FOiBzdHJpbmcgPSBUT1BJQ19OQU1FX1BSRUZJWCArIEhJREVfU1VGRklYO1xuY29uc3QgQ01EX1RPUElDX05BTUU6IHN0cmluZyA9IFRPUElDX05BTUVfUFJFRklYICsgQ01EX1NVRkZJWDtcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbcGh4UG9wb3Zlcl0nXG59KVxuZXhwb3J0IGNsYXNzIFBvcG92ZXJEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVUJfVE9QSUNfTkFNRTogc3RyaW5nID0gU1VCX1RPUElDX05BTUU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTSE9XX1RPUElDX05BTUU6IHN0cmluZyA9IFNIT1dfVE9QSUNfTkFNRTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhJREVfVE9QSUNfTkFNRTogc3RyaW5nID0gSElERV9UT1BJQ19OQU1FO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ01EX1RPUElDX05BTUU6IHN0cmluZyA9IENNRF9UT1BJQ19OQU1FO1xuXG4gICAgQElucHV0KCdwaHhQb3BvdmVyJylcbiAgICBwcml2YXRlIGh0bWw6IHN0cmluZztcbiAgICBASW5wdXQoJ2NvbXBvbmVudFR5cGUnKVxuICAgIHByaXZhdGUgdHlwZT86IFR5cGU8YW55PjtcbiAgICBASW5wdXQoJ3NlbGVjdG9yJylcbiAgICBwcml2YXRlIHNlbGVjdG9yPzogc3RyaW5nO1xuICAgIEBJbnB1dCgnZGVsYXknKVxuICAgIHByaXZhdGUgZGVsYXk6IG51bWJlcjtcbiAgICBASW5wdXQoJ3RvcGljTmFtZScpXG4gICAgcHJpdmF0ZSBzdWJUb3BpY05hbWU6IHN0cmluZztcbiAgICBASW5wdXQoJ2F1dG9Gb2N1cycpXG4gICAgcHJpdmF0ZSBhdXRvRm9jdXM6IGJvb2xlYW47XG5cbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVDbGljaycpXG4gICAgcHJpdmF0ZSBiZWZvcmVQb3BvdmVyQ2xpY2s6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeENsaWNrJylcbiAgICBwcml2YXRlIHBvcG92ZXJDbGljazogRXZlbnRFbWl0dGVyPGFueT47XG4gICAgQE91dHB1dCgncGh4QmVmb3JlQWN0aXZlJylcbiAgICBwcml2YXRlIGJlZm9yZVBvcG92ZXJBY3RpdmU6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEFjdGl2ZScpXG4gICAgcHJpdmF0ZSBwb3BvdmVyQWN0aXZlOiBFdmVudEVtaXR0ZXI8YW55PjtcbiAgICBAT3V0cHV0KCdwaHhCZWZvcmVJbmFjdGl2ZScpXG4gICAgcHJpdmF0ZSBiZWZvcmVQb3BvdmVySW5hY3RpdmU6IEV2ZW50RW1pdHRlcjxhbnk+O1xuICAgIEBPdXRwdXQoJ3BoeEluYWN0aXZlJylcbiAgICBwcml2YXRlIHBvcG92ZXJJbmFjdGl2ZTogRXZlbnRFbWl0dGVyPGFueT47XG5cbiAgICBwcml2YXRlIGNvbXA6IGFueTtcbiAgICBwcml2YXRlIHBsYWNlbWVudDogc3RyaW5nO1xuICAgIHByaXZhdGUgb2xkVHlwZTogVHlwZTxhbnk+O1xuICAgIHByaXZhdGUgX2FjdGl2ZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIG9uRm9jdXM6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogYm9vbGVhbjtcbiAgICBwcml2YXRlIG9uTW91c2VvdmVyOiBib29sZWFuO1xuICAgIHByaXZhdGUgZWw6IEVsZW1lbnRSZWY7XG4gICAgcHJpdmF0ZSBuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlO1xuICAgIHByaXZhdGUgdGFyZ2V0OiBWaWV3Q29udGFpbmVyUmVmO1xuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXI7XG4gICAgcHJpdmF0ZSBvYnNlcnZhYmxlTWdyOiBPYnNlcnZhYmxlTWFuYWdlcjtcbiAgICBwcml2YXRlIHNob3dTdWJqZWN0czogU3ViamVjdDxhbnk+W107XG4gICAgcHJpdmF0ZSBoaWRlU3ViamVjdHM6IFN1YmplY3Q8YW55PltdO1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXRTaG93VG9waWNOYW1lKHN1YlRvcGljTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ViVG9waWNOYW1lID09PSAndW5kZWZpbmVkJyB8fCBzdWJUb3BpY05hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gUG9wb3ZlckRpcmVjdGl2ZS5TSE9XX1RPUElDX05BTUU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lLmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgPSBzdWJUb3BpY05hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBQb3BvdmVyRGlyZWN0aXZlLlNIT1dfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KHN1YlRvcGljTmFtZS5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgKz0gJy4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFRPUElDX05BTUVfUFJFRklYICsgc3ViVG9waWNOYW1lICsgU0hPV19TVUZGSVg7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRIaWRlVG9waWNOYW1lKHN1YlRvcGljTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ViVG9waWNOYW1lID09PSAndW5kZWZpbmVkJyB8fCBzdWJUb3BpY05hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gUG9wb3ZlckRpcmVjdGl2ZS5ISURFX1RPUElDX05BTUU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lLmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgPSBzdWJUb3BpY05hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBQb3BvdmVyRGlyZWN0aXZlLkhJREVfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KHN1YlRvcGljTmFtZS5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgKz0gJy4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFRPUElDX05BTUVfUFJFRklYICsgc3ViVG9waWNOYW1lICsgSElERV9TVUZGSVg7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRDbW