UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

254 lines (253 loc) 26.7 kB
/** * @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