com.phloxui
Version:
PhloxUI Ng2+ Framework
254 lines (253 loc) • 26.7 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes} checked by tsc
*/
const /** @type {?} */ SUB_TOPIC_NAME = 'side-slide-panel';
const /** @type {?} */ TOPIC_NAME_PREFIX = 'side-slide-panel.';
const /** @type {?} */ SHOW_SUFFIX = 'show';
const /** @type {?} */ HIDE_SUFFIX = 'hide';
const /** @type {?} */ CMD_SUFFIX = 'cmd';
const /** @type {?} */ SHOW_TOPIC_NAME = TOPIC_NAME_PREFIX + SHOW_SUFFIX;
const /** @type {?} */ HIDE_TOPIC_NAME = TOPIC_NAME_PREFIX + HIDE_SUFFIX;
const /** @type {?} */ CMD_TOPIC_NAME = TOPIC_NAME_PREFIX + CMD_SUFFIX;
/**
* <p style="text-indent: 2em;">
* An abstract base class for side slide panel component. This class will automatically publish <code>hide</code> and <code>
* show</code> events to [[ObservableManager]] on topic name <code>side-slide-panel.[sub-topic-name].show</code> and <code>
* side-slide-panel.[sub-topic-name].hide</code> respectively. You can also control the show/hide state of this component
* via [[ObservableManager]] by publishing <code>boolean</code> to <code>side-slide-panel.[sub-topic-name].cmd</code> topic.
* This class provides the default implementation for method [[onLostFocus]] to automatically hide this component when focus lost.
* </p>
*
* @author shiorin, tee4cute
* @see [[ObservableManager]]
* @see [[INeedFocus]]
* @abstract
*/
export class AbstractSideSlidePanel {
/**
* @param {?} phloxAppService
* @param {?} observableMgr
* @param {?} needFocusService
* @param {?} subTopicName
*/
constructor(phloxAppService, observableMgr, needFocusService, subTopicName) {
if (phloxAppService !== null && typeof phloxAppService !== 'undefined') {
this.phloxAppService = phloxAppService;
}
this.observableMgr = observableMgr;
this.needFocusService = needFocusService;
this.active = false;
this.subTopicName = subTopicName;
this.showSubjects = [];
this.hideSubjects = [];
}
/**
* @param {?} subTopicName
* @return {?}
*/
static getShowTopicName(subTopicName) {
if (subTopicName === null || typeof subTopicName === 'undefined' || subTopicName === '') {
return AbstractSideSlidePanel.SHOW_TOPIC_NAME;
}
if (subTopicName.charAt(0) === '.') {
subTopicName = subTopicName.substring(1);
}
if (subTopicName === '') {
return AbstractSideSlidePanel.SHOW_TOPIC_NAME;
}
if (subTopicName.charAt(subTopicName.length - 1) !== '.') {
subTopicName += '.';
}
return TOPIC_NAME_PREFIX + subTopicName + SHOW_SUFFIX;
}
/**
* @param {?} subTopicName
* @return {?}
*/
static getHideTopicName(subTopicName) {
if (subTopicName === null || typeof subTopicName === 'undefined' || subTopicName === '') {
return AbstractSideSlidePanel.HIDE_TOPIC_NAME;
}
if (subTopicName.charAt(0) === '.') {
subTopicName = subTopicName.substring(1);
}
if (subTopicName === '') {
return AbstractSideSlidePanel.HIDE_TOPIC_NAME;
}
if (subTopicName.charAt(subTopicName.length - 1) !== '.') {
subTopicName += '.';
}
return TOPIC_NAME_PREFIX + subTopicName + HIDE_SUFFIX;
}
/**
* @param {?} subTopicName
* @return {?}
*/
static getCmdTopicName(subTopicName) {
if (subTopicName === null || typeof subTopicName === 'undefined' || subTopicName === '') {
return AbstractSideSlidePanel.CMD_TOPIC_NAME;
}
if (subTopicName.charAt(0) === '.') {
subTopicName = subTopicName.substring(1);
}
if (subTopicName === '') {
return AbstractSideSlidePanel.CMD_TOPIC_NAME;
}
if (subTopicName.charAt(subTopicName.length - 1) !== '.') {
subTopicName += '.';
}
return TOPIC_NAME_PREFIX + subTopicName + CMD_SUFFIX;
}
/**
* @return {?}
*/
get app() {
if (this.phloxAppService === null || typeof this.phloxAppService === 'undefined') {
return null;
}
return this.phloxAppService.getInstance();
}
/**
* @param {?} showTopic
* @param {?} hideTopic
* @param {?} showCmdTopic
* @return {?}
*/
initSideSlideEventTopics(showTopic, hideTopic, showCmdTopic) {
// 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, (show) => {
if (typeof show === 'boolean') {
this.active = show;
}
});
}
}
/**
* @return {?}
*/
ngOnInit() {
// Init super class event topics
this.initSideSlideEventTopics(AbstractSideSlidePanel.SHOW_TOPIC_NAME, AbstractSideSlidePanel.HIDE_TOPIC_NAME, AbstractSideSlidePanel.CMD_TOPIC_NAME);
if (this.subTopicName !== null && this.subTopicName !== '' || typeof this.subTopicName !== 'undefined') {
// Init sub topic event topics
this.initSideSlideEventTopics(AbstractSideSlidePanel.getShowTopicName(this.subTopicName), AbstractSideSlidePanel.getHideTopicName(this.subTopicName), AbstractSideSlidePanel.getCmdTopicName(this.subTopicName));
}
}
/**
* @return {?}
*/
getApplication() {
return this.app;
}
/**
* <p style="text-indent: 1em;">
* Show this component. This method also publishes an event to topic <code>side-slide-panel.[sub-topic-name].show</code>.
* </p>
* @return {?}
*/
show() {
this.active = true;
if (Array.isArray(this.showSubjects)) {
// Emit change event
this.showSubjects.forEach((obsv, idx) => {
obsv.next(this);
});
}
}
/**
* <p style="text-indent: 1em;">
* Hide this component. This method also publishes an event to topic <code>side-slide-panel.[sub-topic-name].hide</code>.
* </p>
* @return {?}
*/
hide() {
this.active = false;
if (Array.isArray(this.hideSubjects)) {
// Emit change event
this.hideSubjects.forEach((obsv, idx) => {
obsv.next(this);
});
}
}
/**
* <p style="text-indent: 1em;">
* Toggle show/hide this component. This method also publishes an event to topic <code>side-slide-panel.[sub-topic-name].show</code>
* and <code>side-slide-panel.[sub-topic-name].hide</code> when the component is shown or hidden respectively.
* </p>
* @param {?} event
* @return {?}
*/
onToggle(event) {
if (this.active) {
this.hide();
this.needFocusService.resetFocusingComponent();
}
else {
this.show();
this.needFocusService.setFocusingComponent(this);
}
}
/**
* @param {?} event
* @return {?}
*/
onFocus(event) {
}
/**
* @param {?} event
* @return {?}
*/
onLostFocus(event) {
this.hide();
}
/**
* @return {?}
*/
isActive() {
return this.active;
}
/**
* @return {?}
*/
getSubTopicName() {
return this.subTopicName;
}
}
AbstractSideSlidePanel.SUB_TOPIC_NAME = SUB_TOPIC_NAME;
AbstractSideSlidePanel.SHOW_TOPIC_NAME = SHOW_TOPIC_NAME;
AbstractSideSlidePanel.HIDE_TOPIC_NAME = HIDE_TOPIC_NAME;
AbstractSideSlidePanel.CMD_TOPIC_NAME = CMD_TOPIC_NAME;
function AbstractSideSlidePanel_tsickle_Closure_declarations() {
/** @type {?} */
AbstractSideSlidePanel.SUB_TOPIC_NAME;
/** @type {?} */
AbstractSideSlidePanel.SHOW_TOPIC_NAME;
/** @type {?} */
AbstractSideSlidePanel.HIDE_TOPIC_NAME;
/** @type {?} */
AbstractSideSlidePanel.CMD_TOPIC_NAME;
/** @type {?} */
AbstractSideSlidePanel.prototype.phloxAppService;
/** @type {?} */
AbstractSideSlidePanel.prototype.observableMgr;
/** @type {?} */
AbstractSideSlidePanel.prototype.needFocusService;
/** @type {?} */
AbstractSideSlidePanel.prototype.active;
/** @type {?} */
AbstractSideSlidePanel.prototype.subTopicName;
/** @type {?} */
AbstractSideSlidePanel.prototype.showSubjects;
/** @type {?} */
AbstractSideSlidePanel.prototype.hideSubjects;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RTaWRlU2xpZGVQYW5lbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9BYnN0cmFjdFNpZGVTbGlkZVBhbmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFRQSx1QkFBTSxjQUFjLEdBQVcsa0JBQWtCLENBQUM7QUFDbEQsdUJBQU0saUJBQWlCLEdBQVcsbUJBQW1CLENBQUM7QUFDdEQsdUJBQU0sV0FBVyxHQUFXLE1BQU0sQ0FBQztBQUNuQyx1QkFBTSxXQUFXLEdBQVcsTUFBTSxDQUFDO0FBQ25DLHVCQUFNLFVBQVUsR0FBVyxLQUFLLENBQUM7QUFDakMsdUJBQU0sZUFBZSxHQUFXLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQUNoRSx1QkFBTSxlQUFlLEdBQVcsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0FBQ2hFLHVCQUFNLGNBQWMsR0FBVyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7OztBQWU5RCxNQUFNOzs7Ozs7O0lBa0ZGLFlBQVksZUFBZ0MsRUFBRSxhQUFnQyxFQUFFLGdCQUFrQyxFQUFFLFlBQW9CO1FBQ3BJLEVBQUUsQ0FBQyxDQUFDLGVBQWUsS0FBSyxJQUFJLElBQUksT0FBTyxlQUFlLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQztZQUNyRSxJQUFJLENBQUMsZUFBZSxHQUFHLGVBQWUsQ0FBQztTQUMxQztRQUNELElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO1FBQ25DLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztRQUNqQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztLQUMxQjs7Ozs7SUFyRk0sTUFBTSxD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QUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUNkLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1NBQ2xEO1FBQUMsSUFBSSxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDcEQ7Ozs7OztJQUdFLE9BQU8sQ0FBQyxLQUFVOzs7Ozs7SUFJbEIsV0FBVyxDQUFDLEtBQVU7UUFDekIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDOzs7OztJQUdULFFBQVE7UUFDYixNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7Ozs7SUFHZCxlQUFlO1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDOzs7d0NBbE1xQixjQUFjO3lDQUNiLGVBQWU7eUNBQ2YsZUFBZTt3Q0FDaEIsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMvU3ViamVjdCc7XG5cbmltcG9ydCB7IFBobG94QXBwIH0gZnJvbSAnLi9QaGxveEFwcC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSUFwcGxpY2F0aW9uQXdhcmUgfSBmcm9tICcuL0lBcHBsaWNhdGlvbkF3YXJlJztcbmltcG9ydCB7IE9ic2VydmFibGVNYW5hZ2VyLCBQaGxveEFwcFNlcnZpY2UsIE5lZWRGb2N1c1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlL3NlcnZpY2VzJztcbmltcG9ydCB7IElOZWVkRm9jdXMgfSBmcm9tICcuLi9jb21wb25lbnQvY29tcG9uZW50cyc7XG5cbmNvbnN0IFNVQl9UT1BJQ19OQU1FOiBzdHJpbmcgPSAnc2lkZS1zbGlkZS1wYW5lbCc7XG5jb25zdCBUT1BJQ19OQU1FX1BSRUZJWDogc3RyaW5nID0gJ3NpZGUtc2xpZGUtcGFuZWwuJztcbmNvbnN0IFNIT1dfU1VGRklYOiBzdHJpbmcgPSAnc2hvdyc7XG5jb25zdCBISURFX1NVRkZJWDogc3RyaW5nID0gJ2hpZGUnO1xuY29uc3QgQ01EX1NVRkZJWDogc3RyaW5nID0gJ2NtZCc7XG5jb25zdCBTSE9XX1RPUElDX05BTUU6IHN0cmluZyA9IFRPUElDX05BTUVfUFJFRklYICsgU0hPV19TVUZGSVg7XG5jb25zdCBISURFX1RPUElDX05BTUU6IHN0cmluZyA9IFRPUElDX05BTUVfUFJFRklYICsgSElERV9TVUZGSVg7XG5jb25zdCBDTURfVE9QSUNfTkFNRTogc3RyaW5nID0gVE9QSUNfTkFNRV9QUkVGSVggKyBDTURfU1VGRklYO1xuXG4vKipcbiAqIDxwIHN0eWxlPVwidGV4dC1pbmRlbnQ6IDJlbTtcIj5cbiAqIEFuIGFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIHNpZGUgc2xpZGUgcGFuZWwgY29tcG9uZW50LiBUaGlzIGNsYXNzIHdpbGwgYXV0b21hdGljYWxseSBwdWJsaXNoIDxjb2RlPmhpZGU8L2NvZGU+IGFuZCA8Y29kZT5cbiAqIHNob3c8L2NvZGU+IGV2ZW50cyB0byBbW09ic2VydmFibGVNYW5hZ2VyXV0gb24gdG9waWMgbmFtZSA8Y29kZT5zaWRlLXNsaWRlLXBhbmVsLltzdWItdG9waWMtbmFtZV0uc2hvdzwvY29kZT4gYW5kIDxjb2RlPlxuICogc2lkZS1zbGlkZS1wYW5lbC5bc3ViLXRvcGljLW5hbWVdLmhpZGU8L2NvZGU+IHJlc3BlY3RpdmVseS4gWW91IGNhbiBhbHNvIGNvbnRyb2wgdGhlIHNob3cvaGlkZSBzdGF0ZSBvZiB0aGlzIGNvbXBvbmVudFxuICogdmlhIFtbT2JzZXJ2YWJsZU1hbmFnZXJdXSBieSBwdWJsaXNoaW5nIDxjb2RlPmJvb2xlYW48L2NvZGU+IHRvIDxjb2RlPnNpZGUtc2xpZGUtcGFuZWwuW3N1Yi10b3BpYy1uYW1lXS5jbWQ8L2NvZGU+IHRvcGljLlxuICogVGhpcyBjbGFzcyBwcm92aWRlcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgbWV0aG9kIFtbb25Mb3N0Rm9jdXNdXSB0byBhdXRvbWF0aWNhbGx5IGhpZGUgdGhpcyBjb21wb25lbnQgd2hlbiBmb2N1cyBsb3N0LlxuICogPC9wPlxuICpcbiAqIEBhdXRob3Igc2hpb3JpbiwgdGVlNGN1dGVcbiAqIEBzZWUgW1tPYnNlcnZhYmxlTWFuYWdlcl1dXG4gKiBAc2VlIFtbSU5lZWRGb2N1c11dXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsIGltcGxlbWVudHMgSUFwcGxpY2F0aW9uQXdhcmUsIE9uSW5pdCwgSU5lZWRGb2N1cyB7XG5cbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNVQl9UT1BJQ19OQU1FOiBzdHJpbmcgPSBTVUJfVE9QSUNfTkFNRTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFNIT1dfVE9QSUNfTkFNRTogc3RyaW5nID0gU0hPV19UT1BJQ19OQU1FO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgSElERV9UT1BJQ19OQU1FOiBzdHJpbmcgPSBISURFX1RPUElDX05BTUU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBDTURfVE9QSUNfTkFNRTogc3RyaW5nID0gQ01EX1RPUElDX05BTUU7XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldFNob3dUb3BpY05hbWUoc3ViVG9waWNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSBudWxsIHx8IHR5cGVvZiBzdWJUb3BpY05hbWUgPT09ICd1bmRlZmluZWQnIHx8IHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsLlNIT1dfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KDApID09PSAnLicpIHtcbiAgICAgICAgICAgIHN1YlRvcGljTmFtZSA9IHN1YlRvcGljTmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0U2lkZVNsaWRlUGFuZWwuU0hPV19UT1BJQ19OQU1FO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZS5jaGFyQXQoc3ViVG9waWNOYW1lLmxlbmd0aCAtIDEpICE9PSAnLicpIHtcbiAgICAgICAgICAgIHN1YlRvcGljTmFtZSArPSAnLic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gVE9QSUNfTkFNRV9QUkVGSVggKyBzdWJUb3BpY05hbWUgKyBTSE9XX1NVRkZJWDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEhpZGVUb3BpY05hbWUoc3ViVG9waWNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSBudWxsIHx8IHR5cGVvZiBzdWJUb3BpY05hbWUgPT09ICd1bmRlZmluZWQnIHx8IHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsLkhJREVfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KDApID09PSAnLicpIHtcbiAgICAgICAgICAgIHN1YlRvcGljTmFtZSA9IHN1YlRvcGljTmFtZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0U2lkZVNsaWRlUGFuZWwuSElERV9UT1BJQ19OQU1FO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZS5jaGFyQXQoc3ViVG9waWNOYW1lLmxlbmd0aCAtIDEpICE9PSAnLicpIHtcbiAgICAgICAgICAgIHN1YlRvcGljTmFtZSArPSAnLic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gVE9QSUNfTkFNRV9QUkVGSVggKyBzdWJUb3BpY05hbWUgKyBISURFX1NVRkZJWDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldENtZFRvcGljTmFtZShzdWJUb3BpY05hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUgPT09IG51bGwgfHwgdHlwZW9mIHN1YlRvcGljTmFtZSA9PT0gJ3VuZGVmaW5lZCcgfHwgc3ViVG9waWNOYW1lID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIEFic3RyYWN0U2lkZVNsaWRlUGFuZWwuQ01EX1RPUElDX05BTUU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lLmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgPSBzdWJUb3BpY05hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsLkNNRF9UT1BJQ19OQU1FO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZS5jaGFyQXQoc3ViVG9waWNOYW1lLmxlbmd0aCAtIDEpICE9PSAnLicpIHtcbiAgICAgICAgICAgIHN1YlRvcGljTmFtZSArPSAnLic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gVE9QSUNfTkFNRV9QUkVGSVggKyBzdWJUb3BpY05hbWUgKyBDTURfU1VGRklYO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBwaGxveEFwcFNlcnZpY2U6IFBobG94QXBwU2VydmljZTtcbiAgICBwcm90ZWN0ZWQgb2JzZXJ2YWJsZU1ncjogT2JzZXJ2YWJsZU1hbmFnZXI7XG4gICAgcHJvdGVjdGVkIG5lZWRGb2N1c1NlcnZpY2U6IE5lZWRGb2N1c1NlcnZpY2U7XG4gICAgcHJvdGVjdGVkIGFjdGl2ZTogYm9vbGVhbjtcbiAgICBwcm90ZWN0ZWQgc3ViVG9waWNOYW1lOiBzdHJpbmc7XG4gICAgcHJvdGVjdGVkIHNob3dTdWJqZWN0czogU3ViamVjdDxhbnk+W107XG4gICAgcHJvdGVjdGVkIGhpZGVTdWJqZWN0czogU3ViamVjdDxhbnk+W107XG5cbiAgICBwcml2YXRlIGdldCBhcHAoKTogUGhsb3hBcHAge1xuICAgICAgICBpZiAodGhpcy5waGxveEFwcFNlcnZpY2UgPT09IG51bGwgfHwgdHlwZW9mIHRoaXMucGhsb3hBcHBTZXJ2aWNlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGhsb3hBcHBTZXJ2aWNlLmdldEluc3RhbmNlKCk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocGhsb3hBcHBTZXJ2aWNlOiBQaGxveEFwcFNlcnZpY2UsIG9ic2VydmFibGVNZ3I6IE9ic2VydmFibGVNYW5hZ2VyLCBuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlLCBzdWJUb3BpY05hbWU6IHN0cmluZykge1xuICAgICAgICBpZiAocGhsb3hBcHBTZXJ2aWNlICE9PSBudWxsICYmIHR5cGVvZiBwaGxveEFwcFNlcnZpY2UgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICB0aGlzLnBobG94QXBwU2VydmljZSA9IHBobG94QXBwU2VydmljZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9ic2VydmFibGVNZ3IgPSBvYnNlcnZhYmxlTWdyO1xuICAgICAgICB0aGlzLm5lZWRGb2N1c1NlcnZpY2UgPSBuZWVkRm9jdXNTZXJ2aWNlO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN1YlRvcGljTmFtZSA9IHN1YlRvcGljTmFtZTtcbiAgICAgICAgdGhpcy5zaG93U3ViamVjdHMgPSBbXTtcbiAgICAgICAgdGhpcy5oaWRlU3ViamVjdHMgPSBbXTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTaWRlU2xpZGVFdmVudFRvcGljcyhzaG93VG9waWM6IHN0cmluZywgaGlkZVRvcGljOiBzdHJpbmcsIHNob3dDbWRUb3BpYzogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIC8vIENyZWF0ZSBjaGFuZ2UgZXZlbnQgb2JzZXJ2YWJsZSB0b3BpY3NcbiAgICAgICAgaWYgKHNob3dUb3BpYyAhPT0gbnVsbCAmJiB0eXBlb2Ygc2hvd1RvcGljID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuc2hvd1N1YmplY3RzLnB1c2godGhpcy5vYnNlcnZhYmxlTWdyLmNyZWF0ZVN1YmplY3Qoc2hvd1RvcGljKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhpZGVUb3BpYyAhPT0gbnVsbCAmJiB0eXBlb2YgaGlkZVRvcGljID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMuaGlkZVN1YmplY3RzLnB1c2godGhpcy5vYnNlcnZhYmxlTWdyLmNyZWF0ZVN1YmplY3QoaGlkZVRvcGljKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTdWJzY3JpYmUgb24gQ01EIHRvcGljc1xuICAgICAgICBpZiAoc2hvd0NtZFRvcGljICE9PSBudWxsICYmIHR5cGVvZiBzaG93Q21kVG9waWMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhpcy5vYnNlcnZhYmxlTWdyLnN1YnNjcmliZShzaG93Q21kVG9waWMsIChzaG93OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBzaG93ID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aXZlID0gc2hvdztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICAvLyBJbml0IHN1cGVyIGNsYXNzIGV2ZW50IHRvcGljc1xuICAgICAgICB0aGlzLmluaXRTaWRlU2xpZGVFdmVudFRvcGljcyhcbiAgICAgICAgICAgIEFic3RyYWN0U2lkZVNsaWRlUGFuZWwuU0hPV19UT1BJQ19OQU1FLFxuICAgICAgICAgICAgQWJzdHJhY3RTaWRlU2xpZGVQYW5lbC5ISURFX1RPUElDX05BTUUsXG4gICAgICAgICAgICBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsLkNNRF9UT1BJQ19OQU1FXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMuc3ViVG9waWNOYW1lICE9PSBudWxsICYmIHRoaXMuc3ViVG9waWNOYW1lICE9PSAnJyB8fCB0eXBlb2YgdGhpcy5zdWJUb3BpY05hbWUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAvLyBJbml0IHN1YiB0b3BpYyBldmVudCB0b3BpY3NcbiAgICAgICAgICAgIHRoaXMuaW5pdFNpZGVTbGlkZUV2ZW50VG9waWNzKFxuICAgICAgICAgICAgICAgIEFic3RyYWN0U2lkZVNsaWRlUGFuZWwuZ2V0U2hvd1RvcGljTmFtZSh0aGlzLnN1YlRvcGljTmFtZSksXG4gICAgICAgICAgICAgICAgQWJzdHJhY3RTaWRlU2xpZGVQYW5lbC5nZXRIaWRlVG9waWNOYW1lKHRoaXMuc3ViVG9waWNOYW1lKSxcbiAgICAgICAgICAgICAgICBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsLmdldENtZFRvcGljTmFtZSh0aGlzLnN1YlRvcGljTmFtZSlcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXBwbGljYXRpb24oKTogUGhsb3hBcHAge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogPHAgc3R5bGU9XCJ0ZXh0LWluZGVudDogMWVtO1wiPlxuICAgICAqIFNob3cgdGhpcyBjb21wb25lbnQuIFRoaXMgbWV0aG9kIGFsc28gcHVibGlzaGVzIGFuIGV2ZW50IHRvIHRvcGljIDxjb2RlPnNpZGUtc2xpZGUtcGFuZWwuW3N1Yi10b3BpYy1uYW1lXS5zaG93PC9jb2RlPi5cbiAgICAgKiA8L3A+XG4gICAgICovXG4gICAgcHVibGljIHNob3coKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnNob3dTdWJqZWN0cykpIHtcbiAgICAgICAgICAgIC8vIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICAgICAgICB0aGlzLnNob3dTdWJqZWN0cy5mb3JFYWNoKChvYnN2LCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICBvYnN2Lm5leHQodGhpcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDxwIHN0eWxlPVwidGV4dC1pbmRlbnQ6IDFlbTtcIj5cbiAgICAgKiBIaWRlIHRoaXMgY29tcG9uZW50LiBUaGlzIG1ldGhvZCBhbHNvIHB1Ymxpc2hlcyBhbiBldmVudCB0byB0b3BpYyA8Y29kZT5zaWRlLXNsaWRlLXBhbmVsLltzdWItdG9waWMtbmFtZV0uaGlkZTwvY29kZT4uXG4gICAgICogPC9wPlxuICAgICAqL1xuICAgIHB1YmxpYyBoaWRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXMuaGlkZVN1YmplY3RzKSkge1xuICAgICAgICAgICAgLy8gRW1pdCBjaGFuZ2UgZXZlbnRcbiAgICAgICAgICAgIHRoaXMuaGlkZVN1YmplY3RzLmZvckVhY2goKG9ic3YsIGlkeCkgPT4ge1xuICAgICAgICAgICAgICAgIG9ic3YubmV4dCh0aGlzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogPHAgc3R5bGU9XCJ0ZXh0LWluZGVudDogMWVtO1wiPlxuICAgICAqIFRvZ2dsZSBzaG93L2hpZGUgdGhpcyBjb21wb25lbnQuICBUaGlzIG1ldGhvZCBhbHNvIHB1Ymxpc2hlcyBhbiBldmVudCB0byB0b3BpYyA8Y29kZT5zaWRlLXNsaWRlLXBhbmVsLltzdWItdG9waWMtbmFtZV0uc2hvdzwvY29kZT5cbiAgICAgKiBhbmQgPGNvZGU+c2lkZS1zbGlkZS1wYW5lbC5bc3ViLXRvcGljLW5hbWVdLmhpZGU8L2NvZGU+IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBzaG93biBvciBoaWRkZW4gcmVzcGVjdGl2ZWx5LlxuICAgICAqIDwvcD5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25Ub2dnbGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYWN0aXZlKSB7XG4gICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIHRoaXMubmVlZEZvY3VzU2VydmljZS5yZXNldEZvY3VzaW5nQ29tcG9uZW50KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3coKTtcbiAgICAgICAgICAgIHRoaXMubmVlZEZvY3VzU2VydmljZS5zZXRGb2N1c2luZ0NvbXBvbmVudCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkZvY3VzKGV2ZW50OiBhbnkpOiB2b2lkIHtcblxuICAgIH1cblxuICAgIHB1YmxpYyBvbkxvc3RGb2N1cyhldmVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0U3ViVG9waWNOYW1lKCk6IHN0cmluZyB7XG4gICAgICByZXR1cm4gdGhpcy5zdWJUb3BpY05hbWU7XG4gICAgfVxufVxuIl19