UNPKG

com.phloxui

Version:

PhloxUI Ng2+ Framework

315 lines (314 loc) 28.9 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ var /** @type {?} */ SUB_TOPIC_NAME = 'side-slide-panel'; var /** @type {?} */ TOPIC_NAME_PREFIX = 'side-slide-panel.'; var /** @type {?} */ SHOW_SUFFIX = 'show'; var /** @type {?} */ HIDE_SUFFIX = 'hide'; var /** @type {?} */ CMD_SUFFIX = 'cmd'; var /** @type {?} */ SHOW_TOPIC_NAME = TOPIC_NAME_PREFIX + SHOW_SUFFIX; var /** @type {?} */ HIDE_TOPIC_NAME = TOPIC_NAME_PREFIX + HIDE_SUFFIX; var /** @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 */ var AbstractSideSlidePanel = /** @class */ (function () { function AbstractSideSlidePanel(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 {?} */ AbstractSideSlidePanel.getShowTopicName = /** * @param {?} subTopicName * @return {?} */ function (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 {?} */ AbstractSideSlidePanel.getHideTopicName = /** * @param {?} subTopicName * @return {?} */ function (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 {?} */ AbstractSideSlidePanel.getCmdTopicName = /** * @param {?} subTopicName * @return {?} */ function (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; }; Object.defineProperty(AbstractSideSlidePanel.prototype, "app", { get: /** * @return {?} */ function () { if (this.phloxAppService === null || typeof this.phloxAppService === 'undefined') { return null; } return this.phloxAppService.getInstance(); }, enumerable: true, configurable: true }); /** * @param {?} showTopic * @param {?} hideTopic * @param {?} showCmdTopic * @return {?} */ AbstractSideSlidePanel.prototype.initSideSlideEventTopics = /** * @param {?} showTopic * @param {?} hideTopic * @param {?} showCmdTopic * @return {?} */ function (showTopic, hideTopic, showCmdTopic) { var _this = this; // 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, function (show) { if (typeof show === 'boolean') { _this.active = show; } }); } }; /** * @return {?} */ AbstractSideSlidePanel.prototype.ngOnInit = /** * @return {?} */ function () { // 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 {?} */ AbstractSideSlidePanel.prototype.getApplication = /** * @return {?} */ function () { 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 {?} */ AbstractSideSlidePanel.prototype.show = /** * <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 {?} */ function () { var _this = this; this.active = true; if (Array.isArray(this.showSubjects)) { // Emit change event this.showSubjects.forEach(function (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 {?} */ AbstractSideSlidePanel.prototype.hide = /** * <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 {?} */ function () { var _this = this; this.active = false; if (Array.isArray(this.hideSubjects)) { // Emit change event this.hideSubjects.forEach(function (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 {?} */ AbstractSideSlidePanel.prototype.onToggle = /** * <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 {?} */ function (event) { if (this.active) { this.hide(); this.needFocusService.resetFocusingComponent(); } else { this.show(); this.needFocusService.setFocusingComponent(this); } }; /** * @param {?} event * @return {?} */ AbstractSideSlidePanel.prototype.onFocus = /** * @param {?} event * @return {?} */ function (event) { }; /** * @param {?} event * @return {?} */ AbstractSideSlidePanel.prototype.onLostFocus = /** * @param {?} event * @return {?} */ function (event) { this.hide(); }; /** * @return {?} */ AbstractSideSlidePanel.prototype.isActive = /** * @return {?} */ function () { return this.active; }; /** * @return {?} */ AbstractSideSlidePanel.prototype.getSubTopicName = /** * @return {?} */ function () { 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; return AbstractSideSlidePanel; }()); export { AbstractSideSlidePanel }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWJzdHJhY3RTaWRlU2xpZGVQYW5lbC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL2NvbS5waGxveHVpLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudC9BYnN0cmFjdFNpZGVTbGlkZVBhbmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFRQSxxQkFBTSxjQUFjLEdBQVcsa0JBQWtCLENBQUM7QUFDbEQscUJBQU0saUJBQWlCLEdBQVcsbUJBQW1CLENBQUM7QUFDdEQscUJBQU0sV0FBVyxHQUFXLE1BQU0sQ0FBQztBQUNuQyxxQkFBTSxXQUFXLEdBQVcsTUFBTSxDQUFDO0FBQ25DLHFCQUFNLFVBQVUsR0FBVyxLQUFLLENBQUM7QUFDakMscUJBQU0sZUFBZSxHQUFXLGlCQUFpQixHQUFHLFdBQVcsQ0FBQztBQUNoRSxxQkFBTSxlQUFlLEdBQVcsaUJBQWlCLEdBQUcsV0FBVyxDQUFDO0FBQ2hFLHFCQUFNLGNBQWMsR0FBVyxpQkFBaUIsR0FBRyxVQUFVLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7SUFpRzFELGdDQUFZLGVBQWdDLEVBQUUsYUFBZ0MsRUFBRSxnQkFBa0MsRUFBRSxZQUFvQjtRQUNwSSxFQUFFLENBQUMsQ0FBQyxlQUFlLEtBQUssSUFBSSxJQUFJLE9BQU8sZUFBZSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUM7WUFDckUsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7U0FDMUM7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsZ0JBQWdCLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUM7UUFDakMsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7S0FDMUI7Ozs7O0lBckZhLHVDQUFnQjs7OztjQUFDLFlBQW9C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QUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osSUFBSSxDQUFDLGdCQUFnQixDQUFDLHNCQUFzQixFQUFFLENBQUM7U0FDbEQ7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNwRDs7Ozs7O0lBR0Usd0NBQU87Ozs7Y0FBQyxLQUFVOzs7Ozs7SUFJbEIsNENBQVc7Ozs7Y0FBQyxLQUFVO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQzs7Ozs7SUFHVCx5Q0FBUTs7OztRQUNiLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7OztJQUdkLGdEQUFlOzs7O1FBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDOzs0Q0FsTXFCLGNBQWM7NkNBQ2IsZUFBZTs2Q0FDZixlQUFlOzRDQUNoQixjQUFjO2lDQW5DbEU7O1NBOEJzQixzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzL1N1YmplY3QnO1xuXG5pbXBvcnQgeyBQaGxveEFwcCB9IGZyb20gJy4vUGhsb3hBcHAuY29tcG9uZW50JztcbmltcG9ydCB7IElBcHBsaWNhdGlvbkF3YXJlIH0gZnJvbSAnLi9JQXBwbGljYXRpb25Bd2FyZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlTWFuYWdlciwgUGhsb3hBcHBTZXJ2aWNlLCBOZWVkRm9jdXNTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZS9zZXJ2aWNlcyc7XG5pbXBvcnQgeyBJTmVlZEZvY3VzIH0gZnJvbSAnLi4vY29tcG9uZW50L2NvbXBvbmVudHMnO1xuXG5jb25zdCBTVUJfVE9QSUNfTkFNRTogc3RyaW5nID0gJ3NpZGUtc2xpZGUtcGFuZWwnO1xuY29uc3QgVE9QSUNfTkFNRV9QUkVGSVg6IHN0cmluZyA9ICdzaWRlLXNsaWRlLXBhbmVsLic7XG5jb25zdCBTSE9XX1NVRkZJWDogc3RyaW5nID0gJ3Nob3cnO1xuY29uc3QgSElERV9TVUZGSVg6IHN0cmluZyA9ICdoaWRlJztcbmNvbnN0IENNRF9TVUZGSVg6IHN0cmluZyA9ICdjbWQnO1xuY29uc3QgU0hPV19UT1BJQ19OQU1FOiBzdHJpbmcgPSBUT1BJQ19OQU1FX1BSRUZJWCArIFNIT1dfU1VGRklYO1xuY29uc3QgSElERV9UT1BJQ19OQU1FOiBzdHJpbmcgPSBUT1BJQ19OQU1FX1BSRUZJWCArIEhJREVfU1VGRklYO1xuY29uc3QgQ01EX1RPUElDX05BTUU6IHN0cmluZyA9IFRPUElDX05BTUVfUFJFRklYICsgQ01EX1NVRkZJWDtcblxuLyoqXG4gKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAyZW07XCI+XG4gKiBBbiBhYnN0cmFjdCBiYXNlIGNsYXNzIGZvciBzaWRlIHNsaWRlIHBhbmVsIGNvbXBvbmVudC4gVGhpcyBjbGFzcyB3aWxsIGF1dG9tYXRpY2FsbHkgcHVibGlzaCA8Y29kZT5oaWRlPC9jb2RlPiBhbmQgPGNvZGU+XG4gKiBzaG93PC9jb2RlPiBldmVudHMgdG8gW1tPYnNlcnZhYmxlTWFuYWdlcl1dIG9uIHRvcGljIG5hbWUgPGNvZGU+c2lkZS1zbGlkZS1wYW5lbC5bc3ViLXRvcGljLW5hbWVdLnNob3c8L2NvZGU+IGFuZCA8Y29kZT5cbiAqIHNpZGUtc2xpZGUtcGFuZWwuW3N1Yi10b3BpYy1uYW1lXS5oaWRlPC9jb2RlPiByZXNwZWN0aXZlbHkuIFlvdSBjYW4gYWxzbyBjb250cm9sIHRoZSBzaG93L2hpZGUgc3RhdGUgb2YgdGhpcyBjb21wb25lbnRcbiAqIHZpYSBbW09ic2VydmFibGVNYW5hZ2VyXV0gYnkgcHVibGlzaGluZyA8Y29kZT5ib29sZWFuPC9jb2RlPiB0byA8Y29kZT5zaWRlLXNsaWRlLXBhbmVsLltzdWItdG9waWMtbmFtZV0uY21kPC9jb2RlPiB0b3BpYy5cbiAqIFRoaXMgY2xhc3MgcHJvdmlkZXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gZm9yIG1ldGhvZCBbW29uTG9zdEZvY3VzXV0gdG8gYXV0b21hdGljYWxseSBoaWRlIHRoaXMgY29tcG9uZW50IHdoZW4gZm9jdXMgbG9zdC5cbiAqIDwvcD5cbiAqXG4gKiBAYXV0aG9yIHNoaW9yaW4sIHRlZTRjdXRlXG4gKiBAc2VlIFtbT2JzZXJ2YWJsZU1hbmFnZXJdXVxuICogQHNlZSBbW0lOZWVkRm9jdXNdXVxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RTaWRlU2xpZGVQYW5lbCBpbXBsZW1lbnRzIElBcHBsaWNhdGlvbkF3YXJlLCBPbkluaXQsIElOZWVkRm9jdXMge1xuXG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTVUJfVE9QSUNfTkFNRTogc3RyaW5nID0gU1VCX1RPUElDX05BTUU7XG4gICAgcHVibGljIHN0YXRpYyByZWFkb25seSBTSE9XX1RPUElDX05BTUU6IHN0cmluZyA9IFNIT1dfVE9QSUNfTkFNRTtcbiAgICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IEhJREVfVE9QSUNfTkFNRTogc3RyaW5nID0gSElERV9UT1BJQ19OQU1FO1xuICAgIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgQ01EX1RPUElDX05BTUU6IHN0cmluZyA9IENNRF9UT1BJQ19OQU1FO1xuXG4gICAgcHVibGljIHN0YXRpYyBnZXRTaG93VG9waWNOYW1lKHN1YlRvcGljTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ViVG9waWNOYW1lID09PSAndW5kZWZpbmVkJyB8fCBzdWJUb3BpY05hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gQWJzdHJhY3RTaWRlU2xpZGVQYW5lbC5TSE9XX1RPUElDX05BTUU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lLmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgPSBzdWJUb3BpY05hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsLlNIT1dfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KHN1YlRvcGljTmFtZS5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgKz0gJy4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFRPUElDX05BTUVfUFJFRklYICsgc3ViVG9waWNOYW1lICsgU0hPV19TVUZGSVg7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRIaWRlVG9waWNOYW1lKHN1YlRvcGljTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gbnVsbCB8fCB0eXBlb2Ygc3ViVG9waWNOYW1lID09PSAndW5kZWZpbmVkJyB8fCBzdWJUb3BpY05hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gQWJzdHJhY3RTaWRlU2xpZGVQYW5lbC5ISURFX1RPUElDX05BTUU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3ViVG9waWNOYW1lLmNoYXJBdCgwKSA9PT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgPSBzdWJUb3BpY05hbWUuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsLkhJREVfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KHN1YlRvcGljTmFtZS5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgKz0gJy4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFRPUElDX05BTUVfUFJFRklYICsgc3ViVG9waWNOYW1lICsgSElERV9TVUZGSVg7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXRpYyBnZXRDbWRUb3BpY05hbWUoc3ViVG9waWNOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBpZiAoc3ViVG9waWNOYW1lID09PSBudWxsIHx8IHR5cGVvZiBzdWJUb3BpY05hbWUgPT09ICd1bmRlZmluZWQnIHx8IHN1YlRvcGljTmFtZSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsLkNNRF9UT1BJQ19OQU1FO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN1YlRvcGljTmFtZS5jaGFyQXQoMCkgPT09ICcuJykge1xuICAgICAgICAgICAgc3ViVG9waWNOYW1lID0gc3ViVG9waWNOYW1lLnN1YnN0cmluZygxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gQWJzdHJhY3RTaWRlU2xpZGVQYW5lbC5DTURfVE9QSUNfTkFNRTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdWJUb3BpY05hbWUuY2hhckF0KHN1YlRvcGljTmFtZS5sZW5ndGggLSAxKSAhPT0gJy4nKSB7XG4gICAgICAgICAgICBzdWJUb3BpY05hbWUgKz0gJy4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFRPUElDX05BTUVfUFJFRklYICsgc3ViVG9waWNOYW1lICsgQ01EX1NVRkZJWDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgcGhsb3hBcHBTZXJ2aWNlOiBQaGxveEFwcFNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIG9ic2VydmFibGVNZ3I6IE9ic2VydmFibGVNYW5hZ2VyO1xuICAgIHByb3RlY3RlZCBuZWVkRm9jdXNTZXJ2aWNlOiBOZWVkRm9jdXNTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBhY3RpdmU6IGJvb2xlYW47XG4gICAgcHJvdGVjdGVkIHN1YlRvcGljTmFtZTogc3RyaW5nO1xuICAgIHByb3RlY3RlZCBzaG93U3ViamVjdHM6IFN1YmplY3Q8YW55PltdO1xuICAgIHByb3RlY3RlZCBoaWRlU3ViamVjdHM6IFN1YmplY3Q8YW55PltdO1xuXG4gICAgcHJpdmF0ZSBnZXQgYXBwKCk6IFBobG94QXBwIHtcbiAgICAgICAgaWYgKHRoaXMucGhsb3hBcHBTZXJ2aWNlID09PSBudWxsIHx8IHR5cGVvZiB0aGlzLnBobG94QXBwU2VydmljZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBobG94QXBwU2VydmljZS5nZXRJbnN0YW5jZSgpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKHBobG94QXBwU2VydmljZTogUGhsb3hBcHBTZXJ2aWNlLCBvYnNlcnZhYmxlTWdyOiBPYnNlcnZhYmxlTWFuYWdlciwgbmVlZEZvY3VzU2VydmljZTogTmVlZEZvY3VzU2VydmljZSwgc3ViVG9waWNOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHBobG94QXBwU2VydmljZSAhPT0gbnVsbCAmJiB0eXBlb2YgcGhsb3hBcHBTZXJ2aWNlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5waGxveEFwcFNlcnZpY2UgPSBwaGxveEFwcFNlcnZpY2U7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vYnNlcnZhYmxlTWdyID0gb2JzZXJ2YWJsZU1ncjtcbiAgICAgICAgdGhpcy5uZWVkRm9jdXNTZXJ2aWNlID0gbmVlZEZvY3VzU2VydmljZTtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdWJUb3BpY05hbWUgPSBzdWJUb3BpY05hbWU7XG4gICAgICAgIHRoaXMuc2hvd1N1YmplY3RzID0gW107XG4gICAgICAgIHRoaXMuaGlkZVN1YmplY3RzID0gW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2lkZVNsaWRlRXZlbnRUb3BpY3Moc2hvd1RvcGljOiBzdHJpbmcsIGhpZGVUb3BpYzogc3RyaW5nLCBzaG93Q21kVG9waWM6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICAvLyBDcmVhdGUgY2hhbmdlIGV2ZW50IG9ic2VydmFibGUgdG9waWNzXG4gICAgICAgIGlmIChzaG93VG9waWMgIT09IG51bGwgJiYgdHlwZW9mIHNob3dUb3BpYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLnNob3dTdWJqZWN0cy5wdXNoKHRoaXMub2JzZXJ2YWJsZU1nci5jcmVhdGVTdWJqZWN0KHNob3dUb3BpYykpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoaWRlVG9waWMgIT09IG51bGwgJiYgdHlwZW9mIGhpZGVUb3BpYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB0aGlzLmhpZGVTdWJqZWN0cy5wdXNoKHRoaXMub2JzZXJ2YWJsZU1nci5jcmVhdGVTdWJqZWN0KGhpZGVUb3BpYykpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gU3Vic2NyaWJlIG9uIENNRCB0b3BpY3NcbiAgICAgICAgaWYgKHNob3dDbWRUb3BpYyAhPT0gbnVsbCAmJiB0eXBlb2Ygc2hvd0NtZFRvcGljID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZU1nci5zdWJzY3JpYmUoc2hvd0NtZFRvcGljLCAoc2hvdzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmICh0eXBlb2Ygc2hvdyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IHNob3c7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gSW5pdCBzdXBlciBjbGFzcyBldmVudCB0b3BpY3NcbiAgICAgICAgdGhpcy5pbml0U2lkZVNsaWRlRXZlbnRUb3BpY3MoXG4gICAgICAgICAgICBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsLlNIT1dfVE9QSUNfTkFNRSxcbiAgICAgICAgICAgIEFic3RyYWN0U2lkZVNsaWRlUGFuZWwuSElERV9UT1BJQ19OQU1FLFxuICAgICAgICAgICAgQWJzdHJhY3RTaWRlU2xpZGVQYW5lbC5DTURfVE9QSUNfTkFNRVxuICAgICAgICApO1xuXG4gICAgICAgIGlmICh0aGlzLnN1YlRvcGljTmFtZSAhPT0gbnVsbCAmJiB0aGlzLnN1YlRvcGljTmFtZSAhPT0gJycgfHwgdHlwZW9mIHRoaXMuc3ViVG9waWNOYW1lICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgLy8gSW5pdCBzdWIgdG9waWMgZXZlbnQgdG9waWNzXG4gICAgICAgICAgICB0aGlzLmluaXRTaWRlU2xpZGVFdmVudFRvcGljcyhcbiAgICAgICAgICAgICAgICBBYnN0cmFjdFNpZGVTbGlkZVBhbmVsLmdldFNob3dUb3BpY05hbWUodGhpcy5zdWJUb3BpY05hbWUpLFxuICAgICAgICAgICAgICAgIEFic3RyYWN0U2lkZVNsaWRlUGFuZWwuZ2V0SGlkZVRvcGljTmFtZSh0aGlzLnN1YlRvcGljTmFtZSksXG4gICAgICAgICAgICAgICAgQWJzdHJhY3RTaWRlU2xpZGVQYW5lbC5nZXRDbWRUb3BpY05hbWUodGhpcy5zdWJUb3BpY05hbWUpXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFwcGxpY2F0aW9uKCk6IFBobG94QXBwIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDxwIHN0eWxlPVwidGV4dC1pbmRlbnQ6IDFlbTtcIj5cbiAgICAgKiBTaG93IHRoaXMgY29tcG9uZW50LiBUaGlzIG1ldGhvZCBhbHNvIHB1Ymxpc2hlcyBhbiBldmVudCB0byB0b3BpYyA8Y29kZT5zaWRlLXNsaWRlLXBhbmVsLltzdWItdG9waWMtbmFtZV0uc2hvdzwvY29kZT4uXG4gICAgICogPC9wPlxuICAgICAqL1xuICAgIHB1YmxpYyBzaG93KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpcy5zaG93U3ViamVjdHMpKSB7XG4gICAgICAgICAgICAvLyBFbWl0IGNoYW5nZSBldmVudFxuICAgICAgICAgICAgdGhpcy5zaG93U3ViamVjdHMuZm9yRWFjaCgob2JzdiwgaWR4KSA9PiB7XG4gICAgICAgICAgICAgICAgb2Jzdi5uZXh0KHRoaXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiA8cCBzdHlsZT1cInRleHQtaW5kZW50OiAxZW07XCI+XG4gICAgICogSGlkZSB0aGlzIGNvbXBvbmVudC4gVGhpcyBtZXRob2QgYWxzbyBwdWJsaXNoZXMgYW4gZXZlbnQgdG8gdG9waWMgPGNvZGU+c2lkZS1zbGlkZS1wYW5lbC5bc3ViLXRvcGljLW5hbWVdLmhpZGU8L2NvZGU+LlxuICAgICAqIDwvcD5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGlkZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzLmhpZGVTdWJqZWN0cykpIHtcbiAgICAgICAgICAgIC8vIEVtaXQgY2hhbmdlIGV2ZW50XG4gICAgICAgICAgICB0aGlzLmhpZGVTdWJqZWN0cy5mb3JFYWNoKChvYnN2LCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICBvYnN2Lm5leHQodGhpcyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIDxwIHN0eWxlPVwidGV4dC1pbmRlbnQ6IDFlbTtcIj5cbiAgICAgKiBUb2dnbGUgc2hvdy9oaWRlIHRoaXMgY29tcG9uZW50LiAgVGhpcyBtZXRob2QgYWxzbyBwdWJsaXNoZXMgYW4gZXZlbnQgdG8gdG9waWMgPGNvZGU+c2lkZS1zbGlkZS1wYW5lbC5bc3ViLXRvcGljLW5hbWVdLnNob3c8L2NvZGU+XG4gICAgICogYW5kIDxjb2RlPnNpZGUtc2xpZGUtcGFuZWwuW3N1Yi10b3BpYy1uYW1lXS5oaWRlPC9jb2RlPiB3aGVuIHRoZSBjb21wb25lbnQgaXMgc2hvd24gb3IgaGlkZGVuIHJlc3BlY3RpdmVseS5cbiAgICAgKiA8L3A+XG4gICAgICovXG4gICAgcHVibGljIG9uVG9nZ2xlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgICAgICB0aGlzLm5lZWRGb2N1c1NlcnZpY2UucmVzZXRGb2N1c2luZ0NvbXBvbmVudCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgICAgICB0aGlzLm5lZWRGb2N1c1NlcnZpY2Uuc2V0Rm9jdXNpbmdDb21wb25lbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Gb2N1cyhldmVudDogYW55KTogdm9pZCB7XG5cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Mb3N0Rm9jdXMoZXZlbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgaXNBY3RpdmUoKTogYm9vbGVhbiB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmU7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFN1YlRvcGljTmFtZSgpOiBzdHJpbmcge1xuICAgICAgcmV0dXJuIHRoaXMuc3ViVG9waWNOYW1lO1xuICAgIH1cbn1cbiJdfQ==