com.phloxui
Version:
PhloxUI Ng2+ Framework
307 lines (306 loc) • 33.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
import { AbstractNavMenu } from './AbstractNavMenu';
const /** @type {?} */ SUB_TOPIC_NAME = 'nav-left-layout';
const /** @type {?} */ TOPIC_NAME_PREFIX = 'nav-left-layout.';
const /** @type {?} */ FIXED_CHANGE_SUFFIX = 'fixed';
const /** @type {?} */ TOGGLED_CHANGE_SUFFIX = 'toggled';
const /** @type {?} */ FIXED_CMD_SUFFIX = 'cmd.fixed';
const /** @type {?} */ TOGGLED_CMD_SUFFIX = 'cmd.toggled';
const /** @type {?} */ FIXED_CHANGE_TOPIC_NAME = TOPIC_NAME_PREFIX + FIXED_CHANGE_SUFFIX;
const /** @type {?} */ TOGGLED_CHANGE_TOPIC_NAME = TOPIC_NAME_PREFIX + TOGGLED_CHANGE_SUFFIX;
const /** @type {?} */ FIXED_CMD_TOPIC_NAME = TOPIC_NAME_PREFIX + FIXED_CMD_SUFFIX;
const /** @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
*/
export class AbstractNavLeftLayout extends AbstractNavMenu {
/**
* @param {?} phloxAppService
* @param {?} observableMgr
* @param {?} subTopicName
*/
constructor(phloxAppService, observableMgr, subTopicName) {
super(AbstractNavLeftLayout.SUB_TOPIC_NAME, observableMgr);
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 = [];
}
/**
* @param {?} subTopicName
* @return {?}
*/
static getFixedChangeTopicName(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 {?}
*/
static getToggledChangeTopicName(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 {?}
*/
static getFixedCmdTopicName(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 {?}
*/
static getToggledCmdTopicName(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;
}
/**
* @return {?}
*/
get app() {
if (this.phloxAppService === null || typeof this.phloxAppService === 'undefined') {
return null;
}
return this.phloxAppService.getInstance();
}
/**
* @return {?}
*/
get fixed() {
return this._fixed;
}
/**
* @param {?} newFixed
* @return {?}
*/
set fixed(newFixed) {
let /** @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((obsv, idx) => {
obsv.next(this);
});
}
}
}
/**
* @return {?}
*/
get toggled() {
return this._toggled;
}
/**
* @param {?} newToggled
* @return {?}
*/
set toggled(newToggled) {
let /** @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((obsv, idx) => {
obsv.next(this);
});
}
}
}
/**
* @param {?} fixedChange
* @param {?} toggledChanged
* @param {?} fixedCmd
* @param {?} toggledCmd
* @return {?}
*/
initNavLeftEventTopics(fixedChange, toggledChanged, fixedCmd, toggledCmd) {
// 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, (fixed) => {
if (typeof fixed === 'boolean') {
this.fixed = fixed;
}
});
}
if (toggledCmd !== null && typeof toggledCmd === 'string') {
this.observableMgr.subscribe(toggledCmd, (toggled) => {
if (typeof toggled === 'boolean') {
this.toggled = toggled;
}
});
}
}
/**
* @return {?}
*/
ngOnInit() {
super.ngOnInit();
// 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 {?}
*/
getApplication() {
return this.app;
}
/**
* @return {?}
*/
getSubTopicName() {
return this.subTopicName;
}
/**
* @return {?}
*/
isFixed() {
return this.fixed;
}
/**
* @param {?} fixed
* @return {?}
*/
setFixed(fixed) {
this.fixed = fixed;
}
/**
* @return {?}
*/
isToggled() {
return this.toggled;
}
/**
* @param {?} toggled
* @return {?}
*/
setToggled(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;
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LmpzIiwic291cmNlUm9vdCI6Im5nOi8vY29tLnBobG94dWkvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50L0Fic3RyYWN0TmF2TGVmdExheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBUUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRXBELHVCQUFNLGNBQWMsR0FBVyxpQkFBaUIsQ0FBQztBQUNqRCx1QkFBTSxpQkFBaUIsR0FBVyxrQkFBa0IsQ0FBQztBQUVyRCx1QkFBTSxtQkFBbUIsR0FBVyxPQUFPLENBQUM7QUFDNUMsdUJBQU0scUJBQXFCLEdBQVcsU0FBUyxDQUFDO0FBQ2hELHVCQUFNLGdCQUFnQixHQUFXLFdBQVcsQ0FBQztBQUM3Qyx1QkFBTSxrQkFBa0IsR0FBVyxhQUFhLENBQUM7QUFFakQsdUJBQU0sdUJBQXVCLEdBQVcsaUJBQWlCLEdBQUcsbUJBQW1CLENBQUM7QUFDaEYsdUJBQU0seUJBQXlCLEdBQVcsaUJBQWlCLEdBQUcscUJBQXFCLENBQUM7QUFFcEYsdUJBQU0sb0JBQW9CLEdBQVcsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFDMUUsdUJBQU0sc0JBQXNCLEdBQVcsaUJBQWlCLEdBQUcsa0JBQWtCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQjlFLE1BQU0sNEJBQWlFLFNBQVEsZUFBa0I7Ozs7OztJQXVHN0YsWUFBWSxlQUFnQyxFQUFFLGFBQWdDLEVBQUUsWUFBb0I7UUFDaEcsS0FBSyxDQUFDLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUUzRCxFQUFFLENBQUMsQ0FBQyxlQUFlLEtBQUssSUFBSSxJQUFJLE9BQU8sZUFBZSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7U0FDMUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztR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QyxPQUFnQjtRQUM5QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQzs7O2dEQW5POEIsdUJBQXVCO2tEQUNyQix5QkFBeUI7NkNBQzlCLG9CQUFvQjsrQ0FDbEIsc0JBQXNCO3VDQUM5QixjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcy9TdWJqZWN0JztcblxuaW1wb3J0IHsgUGhsb3hBcHAgfSBmcm9tICcuL1BobG94QXBwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb25Bd2FyZSB9IGZyb20gJy4vSUFwcGxpY2F0aW9uQXdhcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZU1hbmFnZXIgfSBmcm9tICcuLi9zZXJ2aWNlL09ic2VydmFibGVNYW5hZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUGhsb3hBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9QaGxveEFwcFNlcnZpY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBBYnN0cmFjdE5hdkl0ZW0gfSBmcm9tICcuL0Fic3RyYWN0TmF2SXRlbSc7XG5pbXBvcnQgeyBBYnN0cmFjdE5hdk1lbnUgfSBmcm9tICcuL0Fic3RyYWN0TmF2TWVudSc7XG5cbmNvbnN0IFNVQl9UT1BJQ19OQU1FOiBzdHJpbmcgPSAnbmF2LWxlZnQtbGF5b3V0JztcbmNvbnN0IFRPUElDX05BTUVfUFJFRklYOiBzdHJpbmcgPSAnbmF2LWxlZnQtbGF5b3V0Lic7XG5cbmNvbnN0IEZJWEVEX0NIQU5HRV9TVUZGSVg6IHN0cmluZyA9ICdmaXhlZCc7XG5jb25zdCBUT0dHTEVEX0NIQU5HRV9TVUZGSVg6IHN0cmluZyA9ICd0b2dnbGVkJztcbmNvbnN0IEZJWEVEX0NNRF9TVUZGSVg6IHN0cmluZyA9ICdjbWQuZml4ZWQnO1xuY29uc3QgVE9HR0xFRF9DTURfU1VGRklYOiBzdHJpbmcgPSAnY21kLnRvZ2dsZWQnO1xuXG5jb25zdCBGSVhFRF9DSEFOR0VfVE9QSUNfTkFNRTogc3RyaW5nID0gVE9QSUNfTkFNRV9QUkVGSVggKyBGSVhFRF9DSEFOR0VfU1VGRklYO1xuY29uc3QgVE9HR0xFRF9DSEFOR0VfVE9QSUNfTkFNRTogc3RyaW5nID0gVE9QSUNfTkFNRV9QUkVGSVggKyBUT0dHTEVEX0NIQU5HRV9TVUZGSVg7XG5cbmNvbnN0IEZJWEVEX0NNRF9UT1BJQ19OQU1FOiBzdHJpbmcgPSBUT1BJQ19OQU1FX1BSRUZJWCArIEZJWEVEX0NNRF9TVUZGSVg7XG5jb25zdCBUT0dHTEVEX0NNRF9UT1BJQ19OQU1FOiBzdHJpbmcgPSBUT1BJQ19OQU1FX1BSRUZJWCArIFRPR0dMRURfQ01EX1NVRkZJWDtcblxuLyoqXG4gKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAyZW07XCI+XG4gKiBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBsZWZ0IHNpZGUgYmFyIDxjb2RlPm5hdiBtZW51PC9jb2RlPi4gVGhpcyBjbGFzcyBwcm92aWRlcyBtb3JlIGNhcGFiaWxpdGllcyB0aGFuIFtbQWJzdHJhY3ROYXZNZW51XV0gaW4gY2FzZSBvZiB0aGF0IGl0IGNhbiBiZVxuICogc2hvd2VkL2hpZGRlbiBieSBzbGlkaW5nIHRoZSBwYW5lbCBpbi9vdXQgZnJvbSB0aGUgbGVmdCBzaWRlIG9mIHRoZSBzY3JlZW4uIFlvdSBjYW4gc3Vic2NyaWJlIHRvIHRoZSBbW09ic2VydmFibGVNYW5hZ2VyXV0ncyB0b3BpYyBuYW1lXG4gKiA8Y29kZT5uYXYtbGVmdC1sYXlvdXQuW3N1Yi10b3BpYy1uYW1lXS50b2dnbGVkPC9jb2RlPiB0byBsaXN0ZW4gb24gdGhlIGV2ZW50IGVtaXR0ZWQgZnJvbSB0aGlzIGNvbXBvbmVudCB3aGVuIHRoZSBsZWZ0IHBhbmVsIGlzIDxjb2RlPnRvZ2dsZWQ8L2NvZGU+XG4gKiAoc2hvd2VkL2hpZGRlbikuIEZ1dGhlcm1vcmUsIGluc3RlYWQgb2Ygc2xpZGluZyB0aGUgcGFuZWwgaW4vb3V0IGZyb20gdGhlIGxlZnQgc2lkZSBvZiB0aGUgc2NyZWVuLCBpdCBjYW4gYmUgZml4ZWQgYnkgc2V0dGluZyBhIGZsYWcgW1tmaXhlZF1dIHRvIDxjb2RlPnRydWU8L2NvZGU+LlxuICogQnkgc2V0dGluZyBhIGZsYWcgW1tmaXhlZF1dIHRvIDxjb2RlPnRydWU8L2NvZGU+LCB0aGUgbGVmdCBwYW5lbCB3aWxsIGJlIGFsd2F5cyBzaG93biBvbiB0aGUgc2NyZWVuLiBUaGlzIGNvbXBvbmVudCB3aWxsIGF1dG9tYXRpY2FsbHkgcHVibGlzaCBhbiBldmVudCB0b1xuICogdG9waWMgbmFtZSA8Y29kZT5uYXYtbGVmdC1sYXlvdXQuW3N1Yi10b3BpYy1uYW1lXS5maXhlZDwvY29kZT4gd2hlbiB0aGUgZmxhZyBbW2ZpeGVkXV0gaXMgY2hhbmdlZC4gWW91IGNhbiBhbHNvIGNvbnRyb2wgdGhlIDxjb2RlPnRvZ2dsZWQ8L2NvZGU+IGFuZCA8Y29kZT5maXhlZDwvY29kZT5cbiAqIGZsYWcgc2VuZGluZyBhbiBldmVudCBpbnRvIDxjb2RlPmNvbW1hbmQ8L2NvZGU+IHRvcGljIG5hbWUgPGNvZGU+bmF2LWxlZnQtbGF5b3V0LltzdWItdG9waWMtbmFtZV0uY21kLnRvZ2dsZWQ8L2NvZGU+IGFuZCA8Y29kZT5uYXYtbGVmdC1sYXlvdXQuW3N1Yi10b3BpYy1uYW1lXS5jbWQuZml4ZWQ8L2NvZGU+XG4gKiByZXNwZWN0aXZlbHkuXG4gKiA8L3A+XG4gKlxuICogQGF1dGhvciBzaGlvcmluLCB0ZWU0Y3V0ZVxuICogQHNlZSBbW09ic2VydmFibGVNYW5hZ2VyXV1cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0TmF2TGVmdExheW91dDxUIGV4dGVuZHMgQWJzdHJhY3ROYXZJdGVtPiBleHRlbmRzIEFic3RyYWN0TmF2TWVudTxUPiBpbXBsZW1lbnRzIElBcHBsaWNhdGlvbkF3YXJlLCBPbkluaXQge1xuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBGSVhFRF9DSEFOR0VfVE9QSUNfTkFNRTogc3RyaW5nID0gRklYRURfQ0hBTkdFX1RPUElDX05BTUU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBUT0dHTEVEX0NIQU5HRV9UT1BJQ19OQU1FOiBzdHJpbmcgPSBUT0dHTEVEX0NIQU5HRV9UT1BJQ19OQU1FO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgRklYRURfQ01EX1RPUElDX05BTUU6IHN0cmluZyA9IEZJWEVEX0NNRF9UT1BJQ19OQU1FO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgVE9HR0xFRF9DTURfVE9QSUNfTkFNRTogc3RyaW5nID0gVE9HR0xFRF9DTURfVE9QSUNfTkFNRTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNVQl9UT1BJQ19OQU1FOiBzdHJpbmcgPSBTVUJfVE9QSUNfTkFNRTtcblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Rml4ZWRDaGFuZ2VUb3BpY05hbWUoc3ViVG9waWNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSBudWxsIHx8IHR5cGVvZiBzdWJUb3BpY05hbWUgPT09ICd1bmRlZmluZWQnIHx8IHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuRklYRURfQ0hBTkdFX1RPUElDX05BTUU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lLmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgPSBzdWJUb3BpY05hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuRklYRURfQ0hBTkdFX1RPUElDX05BTUU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lLmNoYXJBdChzdWJUb3BpY05hbWUubGVuZ3RoIC0gMSkgIT09ICcuJykge1xuICAgICAgICAgICAgc3ViVG9waWNOYW1lICs9ICcuJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBUT1BJQ19OQU1FX1BSRUZJWCArIHN1YlRvcGljTmFtZSArIEZJWEVEX0NIQU5HRV9TVUZGSVg7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRUb2dnbGVkQ2hhbmdlVG9waWNOYW1lKHN1YlRvcGljTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ViVG9waWNOYW1lID09PSAndW5kZWZpbmVkJyB8fCBzdWJUb3BpY05hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LlRPR0dMRURfQ0hBTkdFX1RPUElDX05BTUU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lLmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgPSBzdWJUb3BpY05hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuVE9HR0xFRF9DSEFOR0VfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KHN1YlRvcGljTmFtZS5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgKz0gJy4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFRPUElDX05BTUVfUFJFRklYICsgc3ViVG9waWNOYW1lICsgVE9HR0xFRF9DSEFOR0VfU1VGRklYO1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZ2V0Rml4ZWRDbWRUb3BpY05hbWUoc3ViVG9waWNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSBudWxsIHx8IHR5cGVvZiBzdWJUb3BpY05hbWUgPT09ICd1bmRlZmluZWQnIHx8IHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuRklYRURfQ01EX1RPUElDX05BTUU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lLmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgPSBzdWJUb3BpY05hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuRklYRURfQ01EX1RPUElDX05BTUU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lLmNoYXJBdChzdWJUb3BpY05hbWUubGVuZ3RoIC0gMSkgIT09ICcuJykge1xuICAgICAgICAgICAgc3ViVG9waWNOYW1lICs9ICcuJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBUT1BJQ19OQU1FX1BSRUZJWCArIHN1YlRvcGljTmFtZSArIEZJWEVEX0NNRF9TVUZGSVg7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRUb2dnbGVkQ21kVG9waWNOYW1lKHN1YlRvcGljTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ViVG9waWNOYW1lID09PSAndW5kZWZpbmVkJyB8fCBzdWJUb3BpY05hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LlRPR0dMRURfQ01EX1RPUElDX05BTUU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lLmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgPSBzdWJUb3BpY05hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdE5hdkxlZnRMYXlvdXQuVE9HR0xFRF9DTURfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KHN1YlRvcGljTmFtZS5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgKz0gJy4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFRPUElDX05BTUVfUFJFRklYICsgc3ViVG9waWNOYW1lICsgVE9HR0xFRF9DTURfU1VGRklYO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2ZpeGVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3RvZ2dsZWQ6IGJvb2xlYW47XG5cbiAgICBwcm90ZWN0ZWQgcGhsb3hBcHBTZXJ2aWNlOiBQaGxveEFwcFNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIGZpeGVkU3ViamVjdHM6IFN1YmplY3Q8YW55PltdO1xuICAgIHByb3RlY3RlZCB0b2dnbGVkU3ViamVjdHM6IFN1YmplY3Q8YW55PltdO1xuICAgIHByb3RlY3RlZCBzdWJUb3BpY05hbWU6IHN0cmluZztcblxuICAgIHByaXZhdGUgZ2V0IGFwcCgpOiBQaGxveEFwcCB7XG4gICAgICAgIGlmICh0aGlzLnBobG94QXBwU2VydmljZSA9PT0gbnVsbCB8fCB0eXBlb2YgdGhpcy5waGxveEFwcFNlcnZpY2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5waGxveEFwcFNlcnZpY2UuZ2V0SW5zdGFuY2UoKTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihwaGxveEFwcFNlcnZpY2U6IFBobG94QXBwU2VydmljZSwgb2JzZXJ2YWJsZU1ncjogT2JzZXJ2YWJsZU1hbmFnZXIsIHN1YlRvcGljTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKEFic3RyYWN0TmF2TGVmdExheW91dC5TVUJfVE9QSUNfTkFNRSwgb2JzZXJ2YWJsZU1ncik7XG5cbiAgICAgICAgaWYgKHBobG94QXBwU2VydmljZSAhPT0gbnVsbCAmJiB0eXBlb2YgcGhsb3hBcHBTZXJ2aWNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5waGxveEFwcFNlcnZpY2UgPSBwaGxveEFwcFNlcnZpY2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vYnNlcnZhYmxlTWdyID0gb2JzZXJ2YWJsZU1ncjtcbiAgICAgICAgdGhpcy5zdWJUb3BpY05hbWUgPSBzdWJUb3BpY05hbWU7XG4gICAgICAgIHRoaXMuZml4ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2dnbGVkID0gZmFsc2U7XG5cbiAgICAgICAgdGhpcy5maXhlZFN1YmplY3RzID0gW107XG4gICAgICAgIHRoaXMudG9nZ2xlZFN1YmplY3RzID0gW107XG4gICAgfVxuXG4gICAgcHVibGljIGdldCBmaXhlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpeGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgZml4ZWQobmV3Rml4ZWQ6IGJvb2xlYW4pIHtcbiAgICAgICAgbGV0IGNoYW5nZTogYm9vbGVhbiA9IHRoaXMuX2ZpeGVkICE9PSBuZXdGaXhlZDtcblxuICAgICAgICB0aGlzLl9maXhlZCA9IG5ld0ZpeGVkO1xuXG4gICAgICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMub25GaXhlZENoYW5nZSh0aGlzLl9maXhlZCk7XG5cbiAgICAgICAgICAgIC8vIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmZpeGVkU3ViamVjdHMpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXhlZFN1YmplY3RzLmZvckVhY2goKG9ic3YsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnN2Lm5leHQodGhpcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0IHRvZ2dsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl90b2dnbGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXQgdG9nZ2xlZChuZXdUb2dnbGVkOiBib29sZWFuKSB7XG4gICAgICAgIGxldCBjaGFuZ2U6IGJvb2xlYW4gPSB0aGlzLl90b2dnbGVkICE9PSBuZXdUb2dnbGVkO1xuXG4gICAgICAgIHRoaXMuX3RvZ2dsZWQgPSBuZXdUb2dnbGVkO1xuXG4gICAgICAgIGlmIChjaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMub25Ub2dnbGVkQ2hhbmdlKHRoaXMuX3RvZ2dsZWQpO1xuXG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnRvZ2dsZWRTdWJqZWN0cykpIHtcbiAgICAgICAgICAgICAgICAvLyBFbWl0IGNoYW5nZSBldmVudFxuICAgICAgICAgICAgICAgIHRoaXMudG9nZ2xlZFN1YmplY3RzLmZvckVhY2goKG9ic3YsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBvYnN2Lm5leHQodGhpcyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXROYXZMZWZ0RXZlbnRUb3BpY3MoZml4ZWRDaGFuZ2U6IHN0cmluZywgdG9nZ2xlZENoYW5nZWQ6IHN0cmluZywgZml4ZWRDbWQ6IHN0cmluZywgdG9nZ2xlZENtZDogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIENyZWF0ZSBjaGFuZ2UgZXZlbnQgb2JzZXJ2YWJsZSB0b3BpY3NcbiAgICAgICAgaWYgKGZpeGVkQ2hhbmdlICE9PSBudWxsICYmIHR5cGVvZiBmaXhlZENoYW5nZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmZpeGVkU3ViamVjdHMucHVzaCh0aGlzLm9ic2VydmFibGVNZ3IuY3JlYXRlU3ViamVjdChmaXhlZENoYW5nZSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2dnbGVkQ2hhbmdlZCAhPT0gbnVsbCAmJiB0eXBlb2YgdG9nZ2xlZENoYW5nZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhpcy50b2dnbGVkU3ViamVjdHMucHVzaCh0aGlzLm9ic2VydmFibGVNZ3IuY3JlYXRlU3ViamVjdCh0b2dnbGVkQ2hhbmdlZCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIG9uIENNRCB0b3BpY3NcbiAgICAgICAgaWYgKGZpeGVkQ21kICE9PSBudWxsICYmIHR5cGVvZiBmaXhlZENtZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLm9ic2VydmFibGVNZ3Iuc3Vic2NyaWJlKGZpeGVkQ21kLCAoZml4ZWQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGZpeGVkID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuZml4ZWQgPSBmaXhlZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0b2dnbGVkQ21kICE9PSBudWxsICYmIHR5cGVvZiB0b2dnbGVkQ21kID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZU1nci5zdWJzY3JpYmUodG9nZ2xlZENtZCwgKHRvZ2dsZWQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIHRvZ2dsZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVkID0gdG9nZ2xlZDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xuXG4gICAgICAgIC8vIEluaXQgc3VwZXIgY2xhc3MgZXZlbnQgdG9waWNzXG4gICAgICAgIHRoaXMuaW5pdE5hdkxlZnRFdmVudFRvcGljcyhcbiAgICAgICAgICAgIEFic3RyYWN0TmF2TGVmdExheW91dC5GSVhFRF9DSEFOR0VfVE9QSUNfTkFNRSxcbiAgICAgICAgICAgIEFic3RyYWN0TmF2TGVmdExheW91dC5UT0dHTEVEX0NIQU5HRV9UT1BJQ19OQU1FLFxuICAgICAgICAgICAgQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LkZJWEVEX0NNRF9UT1BJQ19OQU1FLFxuICAgICAgICAgICAgQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LlRPR0dMRURfQ01EX1RPUElDX05BTUVcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAodGhpcy5zdWJUb3BpY05hbWUgIT09IG51bGwgJiYgdGhpcy5zdWJUb3BpY05hbWUgIT09ICcnIHx8IHR5cGVvZiB0aGlzLnN1YlRvcGljTmFtZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIC8vIEluaXQgc3ViIHRvcGljIGV2ZW50IHRvcGljc1xuICAgICAgICAgICAgdGhpcy5pbml0TmF2TGVmdEV2ZW50VG9waWNzKFxuICAgICAgICAgICAgICAgIEFic3RyYWN0TmF2TGVmdExheW91dC5nZXRGaXhlZENoYW5nZVRvcGljTmFtZSh0aGlzLnN1YlRvcGljTmFtZSksXG4gICAgICAgICAgICAgICAgQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LmdldFRvZ2dsZWRDaGFuZ2VUb3BpY05hbWUodGhpcy5zdWJUb3BpY05hbWUpLFxuICAgICAgICAgICAgICAgIEFic3RyYWN0TmF2TGVmdExheW91dC5nZXRGaXhlZENtZFRvcGljTmFtZSh0aGlzLnN1YlRvcGljTmFtZSksXG4gICAgICAgICAgICAgICAgQWJzdHJhY3ROYXZMZWZ0TGF5b3V0LmdldFRvZ2dsZWRDbWRUb3BpY05hbWUodGhpcy5zdWJUb3BpY05hbWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFwcGxpY2F0aW9uKCk6IFBobG94QXBwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTdWJUb3BpY05hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3ViVG9waWNOYW1lO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0ZpeGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5maXhlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0Rml4ZWQoZml4ZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5maXhlZCA9IGZpeGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc1RvZ2dsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLnRvZ2dsZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIHNldFRvZ2dsZWQodG9nZ2xlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLnRvZ2dsZWQgPSB0b2dnbGVkO1xuICAgIH1cblxuICAgIHB1YmxpYyBhYnN0cmFjdCBvbkZpeGVkQ2hhbmdlKGZpeGVkOiBib29sZWFuKTogdm9pZDtcblxuICAgIHB1YmxpYyBhYnN0cmFjdCBvblRvZ2dsZWRDaGFuZ2UodG9nZ2xlZDogYm9vbGVhbik6IHZvaWQ7XG5cbn1cbiJdfQ==