com.phloxui
Version:
PhloxUI Ng2+ Framework
368 lines (367 loc) • 35.8 kB
JavaScript
/**
* @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