UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

368 lines (367 loc) 35.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { AbstractNavMenu } from './AbstractNavMenu'; var /** @type {?} */ SUB_TOPIC_NAME = 'nav-left-layout'; var /** @type {?} */ TOPIC_NAME_PREFIX = 'nav-left-layout.'; var /** @type {?} */ FIXED_CHANGE_SUFFIX = 'fixed'; var /** @type {?} */ TOGGLED_CHANGE_SUFFIX = 'toggled'; var /** @type {?} */ FIXED_CMD_SUFFIX = 'cmd.fixed'; var /** @type {?} */ TOGGLED_CMD_SUFFIX = 'cmd.toggled'; var /** @type {?} */ FIXED_CHANGE_TOPIC_NAME = TOPIC_NAME_PREFIX + FIXED_CHANGE_SUFFIX; var /** @type {?} */ TOGGLED_CHANGE_TOPIC_NAME = TOPIC_NAME_PREFIX + TOGGLED_CHANGE_SUFFIX; var /** @type {?} */ FIXED_CMD_TOPIC_NAME = TOPIC_NAME_PREFIX + FIXED_CMD_SUFFIX; var /** @type {?} */ TOGGLED_CMD_TOPIC_NAME = TOPIC_NAME_PREFIX + TOGGLED_CMD_SUFFIX; // unsupported: template constraints. /** * <p style="text-indent: 2em;"> * An abstract base class for left side bar <code>nav menu</code>. This class provides more capabilities than [[AbstractNavMenu]] in case of that it can be * showed/hidden by sliding the panel in/out from the left side of the screen. You can subscribe to the [[ObservableManager]]'s topic name * <code>nav-left-layout.[sub-topic-name].toggled</code> to listen on the event emitted from this component when the left panel is <code>toggled</code> * (showed/hidden). Futhermore, instead of sliding the panel in/out from the left side of the screen, it can be fixed by setting a flag [[fixed]] to <code>true</code>. * By setting a flag [[fixed]] to <code>true</code>, the left panel will be always shown on the screen. This component will automatically publish an event to * topic name <code>nav-left-layout.[sub-topic-name].fixed</code> when the flag [[fixed]] is changed. You can also control the <code>toggled</code> and <code>fixed</code> * flag sending an event into <code>command</code> topic name <code>nav-left-layout.[sub-topic-name].cmd.toggled</code> and <code>nav-left-layout.[sub-topic-name].cmd.fixed</code> * respectively. * </p> * * @author shiorin, tee4cute * @see [[ObservableManager]] * @abstract * @template T */ var AbstractNavLeftLayout = /** @class */ (function (_super) { tslib_1.__extends(AbstractNavLeftLayout, _super); function AbstractNavLeftLayout(phloxAppService, observableMgr, subTopicName) { var _this = _super.call(this, AbstractNavLeftLayout.SUB_TOPIC_NAME, observableMgr) || this; if (phloxAppService !== null && typeof phloxAppService !== 'undefined') { _this.phloxAppService = phloxAppService; } _this.observableMgr = observableMgr; _this.subTopicName = subTopicName; _this.fixed = false; _this.toggled = false; _this.fixedSubjects = []; _this.toggledSubjects = []; return _this; } /** * @param {?} subTopicName * @return {?} */ AbstractNavLeftLayout.getFixedChangeTopicName = /** * @param {?} subTopicName * @return {?} */ function (subTopicName) { if (subTopicName === null || typeof subTopicName === 'undefined' || subTopicName === '') { return AbstractNavLeftLayout.FIXED_CHANGE_TOPIC_NAME; } if (subTopicName.charAt(0) === '.') { subTopicName = subTopicName.substring(1); } if (subTopicName === '') { return AbstractNavLeftLayout.FIXED_CHANGE_TOPIC_NAME; } if (subTopicName.charAt(subTopicName.length - 1) !== '.') { subTopicName += '.'; } return TOPIC_NAME_PREFIX + subTopicName + FIXED_CHANGE_SUFFIX; }; /** * @param {?} subTopicName * @return {?} */ AbstractNavLeftLayout.getToggledChangeTopicName = /** * @param {?} subTopicName * @return {?} */ function (subTopicName) { if (subTopicName === null || typeof subTopicName === 'undefined' || subTopicName === '') { return AbstractNavLeftLayout.TOGGLED_CHANGE_TOPIC_NAME; } if (subTopicName.charAt(0) === '.') { subTopicName = subTopicName.substring(1); } if (subTopicName === '') { return AbstractNavLeftLayout.TOGGLED_CHANGE_TOPIC_NAME; } if (subTopicName.charAt(subTopicName.length - 1) !== '.') { subTopicName += '.'; } return TOPIC_NAME_PREFIX + subTopicName + TOGGLED_CHANGE_SUFFIX; }; /** * @param {?} subTopicName * @return {?} */ AbstractNavLeftLayout.getFixedCmdTopicName = /** * @param {?} subTopicName * @return {?} */ function (subTopicName) { if (subTopicName === null || typeof subTopicName === 'undefined' || subTopicName === '') { return AbstractNavLeftLayout.FIXED_CMD_TOPIC_NAME; } if (subTopicName.charAt(0) === '.') { subTopicName = subTopicName.substring(1); } if (subTopicName === '') { return AbstractNavLeftLayout.FIXED_CMD_TOPIC_NAME; } if (subTopicName.charAt(subTopicName.length - 1) !== '.') { subTopicName += '.'; } return TOPIC_NAME_PREFIX + subTopicName + FIXED_CMD_SUFFIX; }; /** * @param {?} subTopicName * @return {?} */ AbstractNavLeftLayout.getToggledCmdTopicName = /** * @param {?} subTopicName * @return {?} */ function (subTopicName) { if (subTopicName === null || typeof subTopicName === 'undefined' || subTopicName === '') { return AbstractNavLeftLayout.TOGGLED_CMD_TOPIC_NAME; } if (subTopicName.charAt(0) === '.') { subTopicName = subTopicName.substring(1); } if (subTopicName === '') { return AbstractNavLeftLayout.TOGGLED_CMD_TOPIC_NAME; } if (subTopicName.charAt(subTopicName.length - 1) !== '.') { subTopicName += '.'; } return TOPIC_NAME_PREFIX + subTopicName + TOGGLED_CMD_SUFFIX; }; Object.defineProperty(AbstractNavLeftLayout.prototype, "app", { get: /** * @return {?} */ function () { if (this.phloxAppService === null || typeof this.phloxAppService === 'undefined') { return null; } return this.phloxAppService.getInstance(); }, enumerable: true, configurable: true }); Object.defineProperty(AbstractNavLeftLayout.prototype, "fixed", { get: /** * @return {?} */ function () { return this._fixed; }, set: /** * @param {?} newFixed * @return {?} */ function (newFixed) { var _this = this; var /** @type {?} */ change = this._fixed !== newFixed; this._fixed = newFixed; if (change) { this.onFixedChange(this._fixed); // Emit change event if (Array.isArray(this.fixedSubjects)) { this.fixedSubjects.forEach(function (obsv, idx) { obsv.next(_this); }); } } }, enumerable: true, configurable: true }); Object.defineProperty(AbstractNavLeftLayout.prototype, "toggled", { get: /** * @return {?} */ function () { return this._toggled; }, set: /** * @param {?} newToggled * @return {?} */ function (newToggled) { var _this = this; var /** @type {?} */ change = this._toggled !== newToggled; this._toggled = newToggled; if (change) { this.onToggledChange(this._toggled); if (Array.isArray(this.toggledSubjects)) { // Emit change event this.toggledSubjects.forEach(function (obsv, idx) { obsv.next(_this); }); } } }, enumerable: true, configurable: true }); /** * @param {?} fixedChange * @param {?} toggledChanged * @param {?} fixedCmd * @param {?} toggledCmd * @return {?} */ AbstractNavLeftLayout.prototype.initNavLeftEventTopics = /** * @param {?} fixedChange * @param {?} toggledChanged * @param {?} fixedCmd * @param {?} toggledCmd * @return {?} */ function (fixedChange, toggledChanged, fixedCmd, toggledCmd) { var _this = this; // Create change event observable topics if (fixedChange !== null && typeof fixedChange === 'string') { this.fixedSubjects.push(this.observableMgr.createSubject(fixedChange)); } if (toggledChanged !== null && typeof toggledChanged === 'string') { this.toggledSubjects.push(this.observableMgr.createSubject(toggledChanged)); } // Subscribe on CMD topics if (fixedCmd !== null && typeof fixedCmd === 'string') { this.observableMgr.subscribe(fixedCmd, function (fixed) { if (typeof fixed === 'boolean') { _this.fixed = fixed; } }); } if (toggledCmd !== null && typeof toggledCmd === 'string') { this.observableMgr.subscribe(toggledCmd, function (toggled) { if (typeof toggled === 'boolean') { _this.toggled = toggled; } }); } }; /** * @return {?} */ AbstractNavLeftLayout.prototype.ngOnInit = /** * @return {?} */ function () { _super.prototype.ngOnInit.call(this); // Init super class event topics this.initNavLeftEventTopics(AbstractNavLeftLayout.FIXED_CHANGE_TOPIC_NAME, AbstractNavLeftLayout.TOGGLED_CHANGE_TOPIC_NAME, AbstractNavLeftLayout.FIXED_CMD_TOPIC_NAME, AbstractNavLeftLayout.TOGGLED_CMD_TOPIC_NAME); if (this.subTopicName !== null && this.subTopicName !== '' || typeof this.subTopicName !== 'undefined') { // Init sub topic event topics this.initNavLeftEventTopics(AbstractNavLeftLayout.getFixedChangeTopicName(this.subTopicName), AbstractNavLeftLayout.getToggledChangeTopicName(this.subTopicName), AbstractNavLeftLayout.getFixedCmdTopicName(this.subTopicName), AbstractNavLeftLayout.getToggledCmdTopicName(this.subTopicName)); } }; /** * @return {?} */ AbstractNavLeftLayout.prototype.getApplication = /** * @return {?} */ function () { return this.app; }; /** * @return {?} */ AbstractNavLeftLayout.prototype.getSubTopicName = /** * @return {?} */ function () { return this.subTopicName; }; /** * @return {?} */ AbstractNavLeftLayout.prototype.isFixed = /** * @return {?} */ function () { return this.fixed; }; /** * @param {?} fixed * @return {?} */ AbstractNavLeftLayout.prototype.setFixed = /** * @param {?} fixed * @return {?} */ function (fixed) { this.fixed = fixed; }; /** * @return {?} */ AbstractNavLeftLayout.prototype.isToggled = /** * @return {?} */ function () { return this.toggled; }; /** * @param {?} toggled * @return {?} */ AbstractNavLeftLayout.prototype.setToggled = /** * @param {?} toggled * @return {?} */ function (toggled) { this.toggled = toggled; }; AbstractNavLeftLayout.FIXED_CHANGE_TOPIC_NAME = FIXED_CHANGE_TOPIC_NAME; AbstractNavLeftLayout.TOGGLED_CHANGE_TOPIC_NAME = TOGGLED_CHANGE_TOPIC_NAME; AbstractNavLeftLayout.FIXED_CMD_TOPIC_NAME = FIXED_CMD_TOPIC_NAME; AbstractNavLeftLayout.TOGGLED_CMD_TOPIC_NAME = TOGGLED_CMD_TOPIC_NAME; AbstractNavLeftLayout.SUB_TOPIC_NAME = SUB_TOPIC_NAME; return AbstractNavLeftLayout; }(AbstractNavMenu)); export { AbstractNavLeftLayout }; function AbstractNavLeftLayout_tsickle_Closure_declarations() { /** @type {?} */ AbstractNavLeftLayout.FIXED_CHANGE_TOPIC_NAME; /** @type {?} */ AbstractNavLeftLayout.TOGGLED_CHANGE_TOPIC_NAME; /** @type {?} */ AbstractNavLeftLayout.FIXED_CMD_TOPIC_NAME; /** @type {?} */ AbstractNavLeftLayout.TOGGLED_CMD_TOPIC_NAME; /** @type {?} */ AbstractNavLeftLayout.SUB_TOPIC_NAME; /** @type {?} */ AbstractNavLeftLayout.prototype._fixed; /** @type {?} */ AbstractNavLeftLayout.prototype._toggled; /** @type {?} */ AbstractNavLeftLayout.prototype.phloxAppService; /** @type {?} */ AbstractNavLeftLayout.prototype.fixedSubjects; /** @type {?} */ AbstractNavLeftLayout.prototype.toggledSubjects; /** @type {?} */ AbstractNavLeftLayout.prototype.subTopicName; /** * @abstract * @param {?} fixed * @return {?} */ AbstractNavLeftLayout.prototype.onFixedChange = function (fixed) { }; /** * @abstract * @param {?} toggled * @return {?} */ AbstractNavLeftLayout.prototype.onToggledChange = function (toggled) { }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L0Fic3RyYWN0TmF2TGVmdExheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRCxxQkFBTSxjQUFjLEdBQVcsaUJBQWlCLENBQUM7QUFDakQscUJBQU0saUJBQWlCLEdBQVcsa0JBQWtCLENBQUM7QUFFckQscUJBQU0sbUJBQW1CLEdBQVcsT0FBTyxDQUFDO0FBQzVDLHFCQUFNLHFCQUFxQixHQUFXLFNBQVMsQ0FBQztBQUNoRCxxQkFBTSxnQkFBZ0IsR0FBVyxXQUFXLENBQUM7QUFDN0MscUJBQU0sa0JBQWtCLEdBQVcsYUFBYSxDQUFDO0FBRWpELHFCQUFNLHVCQUF1QixHQUFXLGlCQUFpQixHQUFHLG1CQUFtQixDQUFDO0FBQ2hGLHFCQUFNLHlCQUF5QixHQUFXLGlCQUFpQixHQUFHLHFCQUFxQixDQUFDO0FBRXBGLHFCQUFNLG9CQUFvQixHQUFXLGlCQUFpQixHQUFHLGdCQUFnQixDQUFDO0FBQzFFLHFCQUFNLHNCQUFzQixHQUFXLGlCQUFpQixHQUFHLGtCQUFrQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQWlCQyxpREFBa0I7SUF1RzdGLCtCQUFZLGVBQWdDLEVBQUUsYUFBZ0MsRUFBRSxZQUFvQjtRQUFwRyxZQUNJLGtCQUFNLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsU0FZN0Q7UUFWRyxFQUFFLENBQUMsQ0FBQyxlQUFlLEtBQUssSUFBSSxJQUFJLE9BQU8sZUFBZSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDckUsS0FBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7U0FDMUM7UUFDRCxLQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxLQUFJLENBQUMsWUFB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b0RBbk84Qix1QkFBdUI7c0RBQ3JCLHlCQUF5QjtpREFDOUIsb0JBQW9CO21EQUNsQixzQkFBc0I7MkNBQzlCLGNBQWM7Z0NBN0NsRTtFQXVDK0UsZUFBZTtTQUF4RSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzL1N1YmplY3QnO1xuXG5pbXBvcnQgeyBQaGxveEFwcCB9IGZyb20gJy4vUGhsb3hBcHAuY29tcG9uZW50JztcbmltcG9ydCB7IElBcHBsaWNhdGlvbkF3YXJlIH0gZnJvbSAnLi9JQXBwbGljYXRpb25Bd2FyZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlTWFuYWdlciB9IGZyb20gJy4uL3NlcnZpY2UvT2JzZXJ2YWJsZU1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQaGxveEFwcFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL1BobG94QXBwU2VydmljZS5zZXJ2aWNlJztcbmltcG9ydCB7IEFic3RyYWN0TmF2SXRlbSB9IGZyb20gJy4vQWJzdHJhY3ROYXZJdGVtJztcbmltcG9ydCB7IEFic3RyYWN0TmF2TWVudSB9IGZyb20gJy4vQWJzdHJhY3ROYXZNZW51JztcblxuY29uc3QgU1VCX1RPUElDX05BTUU6IHN0cmluZyA9ICduYXYtbGVmdC1sYXlvdXQnO1xuY29uc3QgVE9QSUNfTkFNRV9QUkVGSVg6IHN0cmluZyA9ICduYXYtbGVmdC1sYXlvdXQuJztcblxuY29uc3QgRklYRURfQ0hBTkdFX1NVRkZJWDogc3RyaW5nID0gJ2ZpeGVkJztcbmNvbnN0IFRPR0dMRURfQ0hBTkdFX1NVRkZJWDogc3RyaW5nID0gJ3RvZ2dsZWQnO1xuY29uc3QgRklYRURfQ01EX1NVRkZJWDogc3RyaW5nID0gJ2NtZC5maXhlZCc7XG5jb25zdCBUT0dHTEVEX0NNRF9TVUZGSVg6IHN0cmluZyA9ICdjbWQudG9nZ2xlZCc7XG5cbmNvbnN0IEZJWEVEX0NIQU5HRV9UT1BJQ19OQU1FOiBzdHJpbmcgPSBUT1BJQ19OQU1FX1BSRUZJWCArIEZJWEVEX0NIQU5HRV9TVUZGSVg7XG5jb25zdCBUT0dHTEVEX0NIQU5HRV9UT1BJQ19OQU1FOiBzdHJpbmcgPSBUT1BJQ19OQU1FX1BSRUZJWCArIFRPR0dMRURfQ0hBTkdFX1NVRkZJWDtcblxuY29uc3QgRklYRURfQ01EX1RPUElDX05BTUU6IHN0cmluZyA9IFRPUElDX05BTUVfUFJFRklYICsgRklYRURfQ01EX1NVRkZJWDtcbmNvbnN0IFRPR0dMRURfQ01EX1RPUElDX05BTUU6IHN0cmluZyA9IFRPUElDX05BTUVfUFJFRklYICsgVE9HR0xFRF9DTURfU1VGRklYO1xuXG4vKipcbiAqIDxwIHN0eWxlPVwidGV4dC1pbmRlbnQ6IDJlbTtcIj5cbiAqIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGxlZnQgc2lkZSBiYXIgPGNvZGU+bmF2IG1lbnU8L2NvZGU+LiBUaGlzIGNsYXNzIHByb3ZpZGVzIG1vcmUgY2FwYWJpbGl0aWVzIHRoYW4gW1tBYnN0cmFjdE5hdk1lbnVdXSBpbiBjYXNlIG9mIHRoYXQgaXQgY2FuIGJlXG4gKiBzaG93ZWQvaGlkZGVuIGJ5IHNsaWRpbmcgdGhlIHBhbmVsIGluL291dCBmcm9tIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHNjcmVlbi4gWW91IGNhbiBzdWJzY3JpYmUgdG8gdGhlIFtbT2JzZXJ2YWJsZU1hbmFnZXJdXSdzIHRvcGljIG5hbWVcbiAqIDxjb2RlPm5hdi1sZWZ0LWxheW91dC5bc3ViLXRvcGljLW5hbWVdLnRvZ2dsZWQ8L2NvZGU+IHRvIGxpc3RlbiBvbiB0aGUgZXZlbnQgZW1pdHRlZCBmcm9tIHRoaXMgY29tcG9uZW50IHdoZW4gdGhlIGxlZnQgcGFuZWwgaXMgPGNvZGU+dG9nZ2xlZDwvY29kZT5cbiAqIChzaG93ZWQvaGlkZGVuKS4gRnV0aGVybW9yZSwgaW5zdGVhZCBvZiBzbGlkaW5nIHRoZSBwYW5lbCBpbi9vdXQgZnJvbSB0aGUgbGVmdCBzaWRlIG9mIHRoZSBzY3JlZW4sIGl0IGNhbiBiZSBmaXhlZCBieSBzZXR0aW5nIGEgZmxhZyBbW2ZpeGVkXV0gdG8gPGNvZGU+dHJ1ZTwvY29kZT4uXG4gKiBCeSBzZXR0aW5nIGEgZmxhZyBbW2ZpeGVkXV0gdG8gPGNvZGU+dHJ1ZTwvY29kZT4sIHRoZSBsZWZ0IHBhbmVsIHdpbGwgYmUgYWx3YXlzIHNob3duIG9uIHRoZSBzY3JlZW4uIFRoaXMgY29tcG9uZW50IHdpbGwgYXV0b21hdGljYWxseSBwdWJsaXNoIGFuIGV2ZW50IHRvXG4gKiB0b3BpYyBuYW1lIDxjb2RlPm5hdi1sZWZ0LWxheW91dC5bc3ViLXRvcGljLW5hbWVdLmZpeGVkPC9jb2RlPiB3aGVuIHRoZSBmbGFnIFtbZml4ZWRdXSBpcyBjaGFuZ2VkLiBZb3UgY2FuIGFsc28gY29udHJvbCB0aGUgPGNvZGU+dG9nZ2xlZDwvY29kZT4gYW5kIDxjb2RlPmZpeGVkPC9jb2RlPlxuICogZmxhZyBzZW5kaW5nIGFuIGV2ZW50IGludG8gPGNvZGU+Y29tbWFuZDwvY29kZT4gdG9waWMgbmFtZSA8Y29kZT5uYXYtbGVmdC1sYXlvdXQuW3N1Yi10b3BpYy1uYW1lXS5jbWQudG9nZ2xlZDwvY29kZT4gYW5kIDxjb2RlPm5hdi1sZWZ0LWxheW91dC5bc3ViLXRvcGljLW5hbWVdLmNtZC5maXhlZDwvY29kZT5cbiAqIHJlc3BlY3RpdmVseS5cbiAqIDwvcD5cbiAqXG4gKiBAYXV0aG9yIHNoaW9yaW4sIHRlZTRjdXRlXG4gKiBAc2VlIFtbT2JzZXJ2YWJsZU1hbmFnZXJdXVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3ROYXZMZWZ0TGF5b3V0PFQgZXh0ZW5kcyBBYnN0cmFjdE5hdkl0ZW0+IGV4dGVuZHMgQWJzdHJhY3ROYXZNZW51PFQ+IGltcGxlbWVudHMgSUFwcGxpY2F0aW9uQXdhcmUsIE9uSW5pdCB7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEZJWEVEX0NIQU5HRV9UT1BJQ19OQU1FOiBzdHJpbmcgPSBGSVhFRF9DSEFOR0VfVE9QSUNfTkFNRTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFRPR0dMRURfQ0hBTkdFX1RPUElDX05BTUU6IHN0cmluZyA9IFRPR0dMRURfQ0hBTkdFX1RPUElDX05BTUU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSVhFRF9DTURfVE9QSUNfTkFNRTogc3RyaW5nID0gRklYRURfQ01EX1RPUElDX05BTUU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBUT0dHTEVEX0NNRF9UT1BJQ19OQU1FOiBzdHJpbmcgPSBUT0dHTEVEX0NNRF9UT1BJQ19OQU1FO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgU1VCX1RPUElDX05BTUU6IHN0cmluZyA9IFNVQl9UT1BJQ19OQU1FO1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXRGaXhlZENoYW5nZVRvcGljTmFtZShzdWJUb3BpY05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUgPT09IG51bGwgfHwgdHlwZW9mIHN1YlRvcGljTmFtZSA9PT0gJ3VuZGVmaW5lZCcgfHwgc3ViVG9waWNOYW1lID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0TmF2TGVmdExheW91dC5GSVhFRF9DSEFOR0VfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KDApID09PSAnLicpIHtcbiAgICAgICAgICAgIHN1YlRvcGljTmFtZSA9IHN1YlRvcGljTmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0TmF2TGVmdExheW91dC5GSVhFRF9DSEFOR0VfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KHN1YlRvcGljTmFtZS5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgKz0gJy4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFRPUElDX05BTUVfUFJFRklYICsgc3ViVG9waWNOYW1lICsgRklYRURfQ0hBTkdFX1NVRkZJWDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFRvZ2dsZWRDaGFuZ2VUb3BpY05hbWUoc3ViVG9waWNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSBudWxsIHx8IHR5cGVvZiBzdWJUb3BpY05hbWUgPT09ICd1bmRlZmluZWQnIHx8IHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuVE9HR0xFRF9DSEFOR0VfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KDApID09PSAnLicpIHtcbiAgICAgICAgICAgIHN1YlRvcGljTmFtZSA9IHN1YlRvcGljTmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0TmF2TGVmdExheW91dC5UT0dHTEVEX0NIQU5HRV9UT1BJQ19OQU1FO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZS5jaGFyQXQoc3ViVG9waWNOYW1lLmxlbmd0aCAtIDEpICE9PSAnLicpIHtcbiAgICAgICAgICAgIHN1YlRvcGljTmFtZSArPSAnLic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gVE9QSUNfTkFNRV9QUkVGSVggKyBzdWJUb3BpY05hbWUgKyBUT0dHTEVEX0NIQU5HRV9TVUZGSVg7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRGaXhlZENtZFRvcGljTmFtZShzdWJUb3BpY05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUgPT09IG51bGwgfHwgdHlwZW9mIHN1YlRvcGljTmFtZSA9PT0gJ3VuZGVmaW5lZCcgfHwgc3ViVG9waWNOYW1lID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0TmF2TGVmdExheW91dC5GSVhFRF9DTURfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KDApID09PSAnLicpIHtcbiAgICAgICAgICAgIHN1YlRvcGljTmFtZSA9IHN1YlRvcGljTmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0TmF2TGVmdExheW91dC5GSVhFRF9DTURfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KHN1YlRvcGljTmFtZS5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgKz0gJy4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFRPUElDX05BTUVfUFJFRklYICsgc3ViVG9waWNOYW1lICsgRklYRURfQ01EX1NVRkZJWDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFRvZ2dsZWRDbWRUb3BpY05hbWUoc3ViVG9waWNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSBudWxsIHx8IHR5cGVvZiBzdWJUb3BpY05hbWUgPT09ICd1bmRlZmluZWQnIHx8IHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuVE9HR0xFRF9DTURfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KDApID09PSAnLicpIHtcbiAgICAgICAgICAgIHN1YlRvcGljTmFtZSA9IHN1YlRvcGljTmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0TmF2TGVmdExheW91dC5UT0dHTEVEX0NNRF9UT1BJQ19OQU1FO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZS5jaGFyQXQoc3ViVG9waWNOYW1lLmxlbmd0aCAtIDEpICE9PSAnLicpIHtcbiAgICAgICAgICAgIHN1YlRvcGljTmFtZSArPSAnLic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gVE9QSUNfTkFNRV9QUkVGSVggKyBzdWJUb3BpY05hbWUgKyBUT0dHTEVEX0NNRF9TVUZGSVg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZml4ZWQ6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBfdG9nZ2xlZDogYm9vbGVhbjtcblxuICAgIHByb3RlY3RlZCBwaGxveEFwcFNlcnZpY2U6IFBobG94QXBwU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgZml4ZWRTdWJqZWN0czogU3ViamVjdDxhbnk+W107XG4gICAgcHJvdGVjdGVkIHRvZ2dsZWRTdWJqZWN0czogU3ViamVjdDxhbnk+W107XG4gICAgcHJvdGVjdGVkIHN1YlRvcGljTmFtZTogc3RyaW5nO1xuXG4gICAgcHJpdmF0ZSBnZXQgYXBwKCk6IFBobG94QXBwIHtcbiAgICAgICAgaWYgKHRoaXMucGhsb3hBcHBTZXJ2aWNlID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLnBobG94QXBwU2VydmljZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBobG94QXBwU2VydmljZS5nZXRJbnN0YW5jZSgpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHBobG94QXBwU2VydmljZTogUGhsb3hBcHBTZXJ2aWNlLCBvYnNlcnZhYmxlTWdyOiBPYnNlcnZhYmxlTWFuYWdlciwgc3ViVG9waWNOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LlNVQl9UT1BJQ19OQU1FLCBvYnNlcnZhYmxlTWdyKTtcblxuICAgICAgICBpZiAocGhsb3hBcHBTZXJ2aWNlICE9PSBudWxsICYmIHR5cGVvZiBwaGxveEFwcFNlcnZpY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnBobG94QXBwU2VydmljZSA9IHBobG94QXBwU2VydmljZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9ic2VydmFibGVNZ3IgPSBvYnNlcnZhYmxlTWdyO1xuICAgICAgICB0aGlzLnN1YlRvcGljTmFtZSA9IHN1YlRvcGljTmFtZTtcbiAgICAgICAgdGhpcy5maXhlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvZ2dsZWQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLmZpeGVkU3ViamVjdHMgPSBbXTtcbiAgICAgICAgdGhpcy50b2dnbGVkU3ViamVjdHMgPSBbXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IGZpeGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZml4ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCBmaXhlZChuZXdGaXhlZDogYm9vbGVhbikge1xuICAgICAgICBsZXQgY2hhbmdlOiBib29sZWFuID0gdGhpcy5fZml4ZWQgIT09IG5ld0ZpeGVkO1xuXG4gICAgICAgIHRoaXMuX2ZpeGVkID0gbmV3Rml4ZWQ7XG5cbiAgICAgICAgaWYgKGNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5vbkZpeGVkQ2hhbmdlKHRoaXMuX2ZpeGVkKTtcblxuICAgICAgICAgICAgLy8gRW1pdCBjaGFuZ2UgZXZlbnRcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuZml4ZWRTdWJqZWN0cykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmZpeGVkU3ViamVjdHMuZm9yRWFjaCgob2JzdiwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic3YubmV4dCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgdG9nZ2xlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3RvZ2dsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldCB0b2dnbGVkKG5ld1RvZ2dsZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGNoYW5nZTogYm9vbGVhbiA9IHRoaXMuX3RvZ2dsZWQgIT09IG5ld1RvZ2dsZWQ7XG5cbiAgICAgICAgdGhpcy5fdG9nZ2xlZCA9IG5ld1RvZ2dsZWQ7XG5cbiAgICAgICAgaWYgKGNoYW5nZSkge1xuICAgICAgICAgICAgdGhpcy5vblRvZ2dsZWRDaGFuZ2UodGhpcy5fdG9nZ2xlZCk7XG5cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMudG9nZ2xlZFN1YmplY3RzKSkge1xuICAgICAgICAgICAgICAgIC8vIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVkU3ViamVjdHMuZm9yRWFjaCgob2JzdiwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIG9ic3YubmV4dCh0aGlzKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdE5hdkxlZnRFdmVudFRvcGljcyhmaXhlZENoYW5nZTogc3RyaW5nLCB0b2dnbGVkQ2hhbmdlZDogc3RyaW5nLCBmaXhlZENtZDogc3RyaW5nLCB0b2dnbGVkQ21kOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgLy8gQ3JlYXRlIGNoYW5nZSBldmVudCBvYnNlcnZhYmxlIHRvcGljc1xuICAgICAgICBpZiAoZml4ZWRDaGFuZ2UgIT09IG51bGwgJiYgdHlwZW9mIGZpeGVkQ2hhbmdlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuZml4ZWRTdWJqZWN0cy5wdXNoKHRoaXMub2JzZXJ2YWJsZU1nci5jcmVhdGVTdWJqZWN0KGZpeGVkQ2hhbmdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvZ2dsZWRDaGFuZ2VkICE9PSBudWxsICYmIHR5cGVvZiB0b2dnbGVkQ2hhbmdlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLnRvZ2dsZWRTdWJqZWN0cy5wdXNoKHRoaXMub2JzZXJ2YWJsZU1nci5jcmVhdGVTdWJqZWN0KHRvZ2dsZWRDaGFuZ2VkKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdWJzY3JpYmUgb24gQ01EIHRvcGljc1xuICAgICAgICBpZiAoZml4ZWRDbWQgIT09IG51bGwgJiYgdHlwZW9mIGZpeGVkQ21kID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZU1nci5zdWJzY3JpYmUoZml4ZWRDbWQsIChmaXhlZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgZml4ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5maXhlZCA9IGZpeGVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRvZ2dsZWRDbWQgIT09IG51bGwgJiYgdHlwZW9mIHRvZ2dsZWRDbWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhpcy5vYnNlcnZhYmxlTWdyLnN1YnNjcmliZSh0b2dnbGVkQ21kLCAodG9nZ2xlZDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2YgdG9nZ2xlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZWQgPSB0b2dnbGVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgLy8gSW5pdCBzdXBlciBjbGFzcyBldmVudCB0b3BpY3NcbiAgICAgICAgdGhpcy5pbml0TmF2TGVmdEV2ZW50VG9waWNzKFxuICAgICAgICAgICAgQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LkZJWEVEX0NIQU5HRV9UT1BJQ19OQU1FLFxuICAgICAgICAgICAgQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LlRPR0dMRURfQ0hBTkdFX1RPUElDX05BTUUsXG4gICAgICAgICAgICBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuRklYRURfQ01EX1RPUElDX05BTUUsXG4gICAgICAgICAgICBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuVE9HR0xFRF9DTURfVE9QSUNfTkFNRVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLnN1YlRvcGljTmFtZSAhPT0gbnVsbCAmJiB0aGlzLnN1YlRvcGljTmFtZSAhPT0gJycgfHwgdHlwZW9mIHRoaXMuc3ViVG9waWNOYW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gSW5pdCBzdWIgdG9waWMgZXZlbnQgdG9waWNzXG4gICAgICAgICAgICB0aGlzLmluaXROYXZMZWZ0RXZlbnRUb3BpY3MoXG4gICAgICAgICAgICAgICAgQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LmdldEZpeGVkQ2hhbmdlVG9waWNOYW1lKHRoaXMuc3ViVG9waWNOYW1lKSxcbiAgICAgICAgICAgICAgICBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuZ2V0VG9nZ2xlZENoYW5nZVRvcGljTmFtZSh0aGlzLnN1YlRvcGljTmFtZSksXG4gICAgICAgICAgICAgICAgQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LmdldEZpeGVkQ21kVG9waWNOYW1lKHRoaXMuc3ViVG9waWNOYW1lKSxcbiAgICAgICAgICAgICAgICBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuZ2V0VG9nZ2xlZENtZFRvcGljTmFtZSh0aGlzLnN1YlRvcGljTmFtZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXBwbGljYXRpb24oKTogUGhsb3hBcHAge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN1YlRvcGljTmFtZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5zdWJUb3BpY05hbWU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRml4ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpeGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRGaXhlZChmaXhlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLmZpeGVkID0gZml4ZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGlzVG9nZ2xlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9nZ2xlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0VG9nZ2xlZCh0b2dnbGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMudG9nZ2xlZCA9IHRvZ2dsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGFic3RyYWN0IG9uRml4ZWRDaGFuZ2UoZml4ZWQ6IGJvb2xlYW4pOiB2b2lkO1xuXG4gICAgcHVibGljIGFic3RyYWN0IG9uVG9nZ2xlZENoYW5nZSh0b2dnbGVkOiBib29sZWFuKTogdm9pZDtcblxufVxuIl19