From 99c1e4ab0cc08e77d54f92a6ef03ee6328333fc3 Mon Sep 17 00:00:00 2001 From: "boyan.tonchev" Date: Wed, 28 Feb 2024 17:13:57 +0200 Subject: [PATCH] Clear user guide plugins implementation. --- src/js/angular/guides/guide-utils.js | 4 +- .../steps/complex/class-hierarchy/plugin.js | 3 +- .../complex/enable-autocomplete/plugin.js | 1 + .../complex/execute-sparql-query/plugin.js | 88 ++++++------- .../steps/complex/import-rdf-file/plugin.js | 28 ++--- .../guides/steps/complex/main-menu/plugin.js | 24 ++-- .../steps/complex/select-repository/plugin.js | 13 +- .../steps/complex/table-graph/plugin.js | 117 +++++++----------- .../steps/complex/visual-graph/plugin.js | 77 +++++------- 9 files changed, 147 insertions(+), 208 deletions(-) diff --git a/src/js/angular/guides/guide-utils.js b/src/js/angular/guides/guide-utils.js index 154ea3ef3..215b56e1e 100644 --- a/src/js/angular/guides/guide-utils.js +++ b/src/js/angular/guides/guide-utils.js @@ -4,7 +4,9 @@ const GuideUtils = (function () { const clickOnElement = function (elementSelector) { return () => waitFor(elementSelector) - .then((element) => element.click()); + .then((element) => { + element.click(); + }); }; const clickOnGuideElement = function (elementSelector, postSelector) { diff --git a/src/js/angular/guides/steps/complex/class-hierarchy/plugin.js b/src/js/angular/guides/steps/complex/class-hierarchy/plugin.js index 5d06c9739..94a44e47c 100644 --- a/src/js/angular/guides/steps/complex/class-hierarchy/plugin.js +++ b/src/js/angular/guides/steps/complex/class-hierarchy/plugin.js @@ -1,4 +1,4 @@ -const reloadAndOpenInfoPanel = (services, clasInstanceSelector, resolve, reject) => { +const reloadAndOpenInfoPanel = (services, clasInstanceSelector) => { services.$location.path('/hierarchy').search({}); return services.GuideUtils.waitFor(clasInstanceSelector, 3) .then(() => { @@ -110,6 +110,7 @@ PluginRegistry.add('guide.step', [ if (!GuideUtils.isVisible(closeButtonSelector)) { return reloadAndOpenInfoPanel({$location, $route, GuideUtils}, clasInstanceSelector); } + return Promise.resolve(); } }, options) diff --git a/src/js/angular/guides/steps/complex/enable-autocomplete/plugin.js b/src/js/angular/guides/steps/complex/enable-autocomplete/plugin.js index 1ed135d31..bc0951162 100644 --- a/src/js/angular/guides/steps/complex/enable-autocomplete/plugin.js +++ b/src/js/angular/guides/steps/complex/enable-autocomplete/plugin.js @@ -22,6 +22,7 @@ PluginRegistry.add('guide.step', [ class: 'enable-autocomplete-checkbox-guide-dialog', // Disable default behavior of service when element is clicked. advanceOn: undefined, + beforeShowPromise: () => GuideUtils.deferredShow(500)(), show: (guide) => () => { // Added listener to the element. $(autocompleteCheckboxSelector) diff --git a/src/js/angular/guides/steps/complex/execute-sparql-query/plugin.js b/src/js/angular/guides/steps/complex/execute-sparql-query/plugin.js index f8d8c0c5b..6b4604b55 100644 --- a/src/js/angular/guides/steps/complex/execute-sparql-query/plugin.js +++ b/src/js/angular/guides/steps/complex/execute-sparql-query/plugin.js @@ -52,46 +52,37 @@ PluginRegistry.add('guide.step', [ services.toastr.error(services.$translate.instant('guide.unexpected.error.message')); throw error; }), - onNextValidate: () => { - return YasguiComponentDirectiveUtil.getOntotextYasguiElementAsync(SPARQL_DIRECTIVE_SELECTOR) - .then((yasgui) => yasgui.getQuery().then((query) => ({yasgui, queryFromEditor: query}))) - .then(({yasgui, queryFromEditor}) => { - const editorQuery = GuideUtils.removeWhiteSpaces(queryFromEditor); - const stepQuery = GuideUtils.removeWhiteSpaces(query); - if (editorQuery !== stepQuery) { - if (editorQuery === 'select*where{?s?p?o.}limit100' || overwriteQuery) { - // The query is the default query OR we previously overwrote it => we can overwrite it - yasgui.setQuery(query); - } else { - GuideUtils.noNextErrorToast(toastr, $translate, $interpolate, - 'guide.step_plugin.execute-sparql-query.query-not-same.error', options); - return false; - } + onNextValidate: () => YasguiComponentDirectiveUtil.getOntotextYasguiElementAsync(SPARQL_DIRECTIVE_SELECTOR) + .then((yasgui) => yasgui.getQuery().then((query) => ({yasgui, queryFromEditor: query}))) + .then(({yasgui, queryFromEditor}) => { + const editorQuery = GuideUtils.removeWhiteSpaces(queryFromEditor); + const stepQuery = GuideUtils.removeWhiteSpaces(query); + if (editorQuery !== stepQuery) { + if (editorQuery === 'select*where{?s?p?o.}limit100' || overwriteQuery) { + // The query is the default query OR we previously overwrote it => we can overwrite it + yasgui.setQuery(query); + } else { + GuideUtils.noNextErrorToast(toastr, $translate, $interpolate, + 'guide.step_plugin.execute-sparql-query.query-not-same.error', options); + return false; } - overwriteQuery = true; - return true; - }); - }, - initPreviousStep: () => new Promise((resolve, reject) => { + } + overwriteQuery = true; + return true; + }), + initPreviousStep: () => { if (index === 0) { - YasguiComponentDirectiveUtil.setQuery(SPARQL_DIRECTIVE_SELECTOR, defaultQuery) - .then(() => resolve()); - } else { - const haveToReload = '/sparql' !== $location.url(); + return YasguiComponentDirectiveUtil.setQuery(SPARQL_DIRECTIVE_SELECTOR, defaultQuery); + } - if (haveToReload) { - $location.path('/sparql').search({}); - } - GuideUtils.waitFor(GuideUtils.CSS_SELECTORS.SPARQL_EDITOR_SELECTOR) - .then(() => { - YasguiComponentDirectiveUtil.executeSparqlQuery("#query-editor", query) - .then(() => { - resolve(); - }) - .catch((error) => reject(error)); - }); + const haveToReload = '/sparql' !== $location.url(); + if (haveToReload) { + $location.path('/sparql').search({}); } - }), + + return GuideUtils.waitFor(GuideUtils.CSS_SELECTORS.SPARQL_EDITOR_SELECTOR) + .then(() => YasguiComponentDirectiveUtil.executeSparqlQuery("#query-editor", query)); + }, scrollToHandler: GuideUtils.scrollToTop, extraContent: queryDef.queryExtraContent, onScope: (scope) => { @@ -113,22 +104,19 @@ PluginRegistry.add('guide.step', [ }), scrollToHandler: GuideUtils.scrollToTop, canBePaused: false, - initPreviousStep: (services, stepId) => new Promise((resolve, reject) => { + initPreviousStep: (services, stepId) => { const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); - previousStep.options.initPreviousStep(services, previousStep.options.id) + return previousStep.options.initPreviousStep(services, previousStep.options.id) .then(() => { const currentStepId = services.ShepherdService.getCurrentStepId(); // Skip expanding of node if last step is "visual-graph-expand" if (currentStepId === stepId) { - resolve(); - } else { - YasguiComponentDirectiveUtil.executeSparqlQuery("#query-editor", query) - .then(() => resolve()) - .catch((error) => reject(error)); + return Promise.resolve(); } - }) - .catch((error) => reject(error)); - }) + + return YasguiComponentDirectiveUtil.executeSparqlQuery("#query-editor", query); + }); + } }, options) }); steps.push({ @@ -149,11 +137,11 @@ PluginRegistry.add('guide.step', [ return GuideUtils.waitFor(GuideUtils.CSS_SELECTORS.SPARQL_EDITOR_SELECTOR) .then(() => GuideUtils.deferredShow(500)()) .then(() => YasguiComponentDirectiveUtil.executeSparqlQuery("#query-editor", query)); - } else { - const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); - return previousStep.options.initPreviousStep(services, previousStep.options.id) - .then(() => YasguiComponentDirectiveUtil.setQuery(SPARQL_DIRECTIVE_SELECTOR, query)); } + + const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); + return previousStep.options.initPreviousStep(services, previousStep.options.id) + .then(() => YasguiComponentDirectiveUtil.setQuery(SPARQL_DIRECTIVE_SELECTOR, query)); } }, options) }); diff --git a/src/js/angular/guides/steps/complex/import-rdf-file/plugin.js b/src/js/angular/guides/steps/complex/import-rdf-file/plugin.js index ead1bf869..041b605b7 100644 --- a/src/js/angular/guides/steps/complex/import-rdf-file/plugin.js +++ b/src/js/angular/guides/steps/complex/import-rdf-file/plugin.js @@ -58,9 +58,9 @@ PluginRegistry.add('guide.step', [ GuideUtils.noNextErrorToast(toastr, $translate, $interpolate, 'guide.step_plugin.import_rdf_file.file-must-be-uploaded', options); return Promise.resolve(false); - } else { - return Promise.resolve(true); } + + return Promise.resolve(true); } }, options) }, @@ -86,19 +86,12 @@ PluginRegistry.add('guide.step', [ GuideUtils.clickOnGuideElement('import-settings-cancel-button')() .then(() => resolve()); }), - beforeShowPromise: () => new Promise(function (resolve, reject) { - services.GuideUtils.deferredShow(300)() - .then(() => { - services.GuideUtils.waitFor(importSettingsButtonSelector, 3) - .then(() => { - resolve(); - }) - .catch((error) => { - services.toastr.error(services.$translate.instant('guide.unexpected.error.message')); - reject(error); - }); - }); - }), + beforeShowPromise: () => services.GuideUtils.deferredShow(300)() + .then(() => services.GuideUtils.waitFor(importSettingsButtonSelector, 3) + .catch((error) => { + services.toastr.error(services.$translate.instant('guide.unexpected.error.message')); + return Promise.reject(error); + })), onNextClick: () => GuideUtils.clickOnGuideElement('import-settings-import-button')(), canBePaused: false }, options) @@ -110,10 +103,7 @@ PluginRegistry.add('guide.step', [ url: '/import', elementSelector: GuideUtils.getGuideElementSelector('import-status-info'), class: 'import-status-info-guide-dialog', - onPreviousClick: () => new Promise(function (resolve) { - GuideUtils.clickOnGuideElement('import-file-' + options.resourceFile)() - .then(() => resolve()); - }) + onPreviousClick: () => GuideUtils.clickOnGuideElement('import-file-' + options.resourceFile)() }, options) } ]); diff --git a/src/js/angular/guides/steps/complex/main-menu/plugin.js b/src/js/angular/guides/steps/complex/main-menu/plugin.js index 1e6a6fb45..76f0e5014 100644 --- a/src/js/angular/guides/steps/complex/main-menu/plugin.js +++ b/src/js/angular/guides/steps/complex/main-menu/plugin.js @@ -115,16 +115,14 @@ PluginRegistry.add('guide.step', [ guide.next(); } }), - initPreviousStep: (services, stepId) => new Promise((resolve, reject) => { + initPreviousStep: (services, stepId) => { const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); if (previousStep) { - previousStep.options.initPreviousStep(services, previousStep.options.id) - .then(() => resolve()) - .catch((error) => reject(error)); - } else { - resolve(); + return previousStep.options.initPreviousStep(services, previousStep.options.id); } - }) + + return Promise.resolve(); + } }, options) }); @@ -146,16 +144,14 @@ PluginRegistry.add('guide.step', [ return true; }, onNextClick: (guide) => GuideUtils.clickOnGuideElement(submenuSelector, ' a')().then(() => guide.next()), - initPreviousStep: (services, stepId) => new Promise((resolve, reject) => { + initPreviousStep: (services, stepId) => { const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); if (previousStep) { - previousStep.options.initPreviousStep(services, previousStep.options.id) - .then(() => resolve()) - .catch((error) => reject(error)); - } else { - resolve(); + return previousStep.options.initPreviousStep(services, previousStep.options.id); } - }) + + return Promise.resolve(); + } }, options) }); } diff --git a/src/js/angular/guides/steps/complex/select-repository/plugin.js b/src/js/angular/guides/steps/complex/select-repository/plugin.js index 87c25ffc8..b2837bd80 100644 --- a/src/js/angular/guides/steps/complex/select-repository/plugin.js +++ b/src/js/angular/guides/steps/complex/select-repository/plugin.js @@ -32,14 +32,11 @@ PluginRegistry.add('guide.step', [ }, class: 'repository-select-button-guide-dialog', advanceOn: undefined, - beforeShowPromise: () => new Promise(function (resolve, reject) { - services.GuideUtils.waitFor(getRepositoryElementSelector(services, options), 1) - .then(() => resolve()) - .catch((error) => { - services.toastr.error(services.$translate.instant('guide.unexpected.error.message')); - reject(error); - }); - }), + beforeShowPromise: () => services.GuideUtils.waitFor(getRepositoryElementSelector(services, options), 1) + .catch((error) => { + services.toastr.error(services.$translate.instant('guide.unexpected.error.message')); + throw (error); + }), show: (guide) => () => { $('#repositorySelectDropdown').addClass('autoCloseOff'); // Added listener to the element. diff --git a/src/js/angular/guides/steps/complex/table-graph/plugin.js b/src/js/angular/guides/steps/complex/table-graph/plugin.js index 8d213c8f3..f3a557a39 100644 --- a/src/js/angular/guides/steps/complex/table-graph/plugin.js +++ b/src/js/angular/guides/steps/complex/table-graph/plugin.js @@ -21,21 +21,14 @@ PluginRegistry.add('guide.step', [ .then(() => $(step.elementSelector).trigger('click')) .then(() => guide.next()); }, - initPreviousStep: (services, stepId) => new Promise((resolve, reject) => { + initPreviousStep: (services, stepId) => { const currentStepId = services.ShepherdService.getCurrentStepId(); if (currentStepId === stepId) { - resolve(); - } else { - const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); - previousStep.options.initPreviousStep(services, previousStep.options.id) - .then(() => { - resolve(); - }) - .catch((error) => { - reject(error); - }); + return Promise.resolve(); } - }) + const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); + return previousStep.options.initPreviousStep(services, previousStep.options.id); + } }, options) }, { guideBlockName: 'read-only-element', @@ -45,29 +38,20 @@ PluginRegistry.add('guide.step', [ elementSelector: GuideUtils.CSS_SELECTORS.SPARQL_RESULTS_ROWS_SELECTOR, class: 'table-graph-overview-guide-dialog', placement: 'top', - beforeShowPromise: () => new Promise((resolve) => { - GuideUtils.waitFor(`.resource-info a.source-link[href="${options.iri}"]`, 3) - .then(() => { - GuideUtils.waitFor(GuideUtils.CSS_SELECTORS.SPARQL_RESULTS_ROWS_SELECTOR, 3) - .then(() => resolve()); - }); - }), - initPreviousStep: (services, stepId) => new Promise((resolve, reject) => { + beforeShowPromise: () => GuideUtils.waitFor(`.resource-info a.source-link[href="${options.iri}"]`, 3) + .then(() => GuideUtils.waitFor(GuideUtils.CSS_SELECTORS.SPARQL_RESULTS_ROWS_SELECTOR, 3)), + initPreviousStep: (services, stepId) => { const currentStepId = services.ShepherdService.getCurrentStepId(); if (currentStepId === stepId) { - GuideUtils.defaultInitPreviousStep(services, stepId).then(() => resolve()).catch((error) => reject(error)); - } else { - const url = `/resource?uri=${options.iri}&role=subject`; - if (url !== decodeURIComponent($location.url())) { - $location.path('/resource').search({uri: options.iri, role: 'subject'}); - GuideUtils.waitFor(`.resource-info a.source-link[href="${options.iri}"]`, 3) - .then(() => resolve()) - .catch((error) => reject(error)); - } else { - resolve(); - } + return GuideUtils.defaultInitPreviousStep(services, stepId); } - }) + const url = `/resource?uri=${options.iri}&role=subject`; + if (url !== decodeURIComponent($location.url())) { + $location.path('/resource').search({uri: options.iri, role: 'subject'}); + return GuideUtils.waitFor(`.resource-info a.source-link[href="${options.iri}"]`, 3); + } + return Promise.resolve(); + } }, options) } ]; @@ -88,28 +72,27 @@ PluginRegistry.add('guide.step', [ .then(() => $(step.elementSelector).trigger('click')) .then(() => guide.next()); }, - initPreviousStep: (services, stepId) => new Promise((resolve, reject) => { + initPreviousStep: (services, stepId) => { const linkUrl = `/resource?uri=${subStep.iri}&role=subject`; const tableGraphLinkUrl = `/resource?uri=${options.iri}&role=subject`; const url = decodeURIComponent($location.url()); const currentStepId = services.ShepherdService.getCurrentStepId(); - if (currentStepId === stepId && tableGraphLinkUrl === url) { // this case is first link in the sequence before click the link, so we have to resolve it. - resolve(); - } else if (linkUrl === url) { + return Promise.resolve(); + } + + if (linkUrl === url) { // this case is first link in the sequence after click the link, so we have to call previous step. - GuideUtils.defaultInitPreviousStep(services, stepId).then(() => resolve()).catch((error) => reject(error)); - } else { - // this case is from second link we have to reload - $location.url(linkUrl); - $route.reload(); - GuideUtils.waitFor(GuideUtils.CSS_SELECTORS.SPARQL_RESULTS_ROWS_SELECTOR) - .then(() => resolve()) - .catch((error) => reject(error)); + return GuideUtils.defaultInitPreviousStep(services, stepId); } - }) + + // this case is from second link we have to reload + $location.url(linkUrl); + $route.reload(); + return GuideUtils.waitFor(GuideUtils.CSS_SELECTORS.SPARQL_RESULTS_ROWS_SELECTOR); + } }, angular.extend({}, options, subStep)) }); break; @@ -125,28 +108,23 @@ PluginRegistry.add('guide.step', [ .then(() => $(step.elementSelector).trigger('click')) .then(() => guide.next()); }, - initPreviousStep: (services, stepId) => new Promise((resolve, reject) => { + initPreviousStep: (services, stepId) => { const currentStepId = services.ShepherdService.getCurrentStepId(); if (currentStepId === stepId) { - resolve(); - } else { - const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); - previousStep.options.initPreviousStep(services, previousStep.options.id) - .then(() => { - let url = $location.url(); - url = url.substring(0, url.indexOf('role=') + 5); - url += subStep.role; - $location.url(url); - $route.reload(); - GuideUtils.waitFor(GuideUtils.CSS_SELECTORS.SPARQL_RESULTS_ROWS_SELECTOR) - .then(() => resolve()) - .catch((error) => reject(error)); - }) - .catch((error) => { - reject(error); - }); + return Promise.resolve(); } - }) + + const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); + return previousStep.options.initPreviousStep(services, previousStep.options.id) + .then(() => { + let url = $location.url(); + url = url.substring(0, url.indexOf('role=') + 5); + url += subStep.role; + $location.url(url); + $route.reload(); + return GuideUtils.waitFor(GuideUtils.CSS_SELECTORS.SPARQL_RESULTS_ROWS_SELECTOR); + }); + } }, angular.extend({}, options, subStep)) }); break; @@ -161,15 +139,14 @@ PluginRegistry.add('guide.step', [ GuideUtils.waitFor(step.elementSelector, 3) .then(() => $(step.elementSelector).trigger('click')); }, - initPreviousStep: (services, stepId) => new Promise((resolve, reject) => { + initPreviousStep: (services, stepId) => { const currentStepId = services.ShepherdService.getCurrentStepId(); - if (currentStepId === stepId) { - resolve(); - } else { - GuideUtils.defaultInitPreviousStep(services, stepId).then(() => resolve()).catch((error) => reject(error)); + return Promise.resolve(); } - }) + + return GuideUtils.defaultInitPreviousStep(services, stepId); + } }, angular.extend({}, options, subStep)) }); steps.push({ diff --git a/src/js/angular/guides/steps/complex/visual-graph/plugin.js b/src/js/angular/guides/steps/complex/visual-graph/plugin.js index b0c78cb04..bbf52725d 100644 --- a/src/js/angular/guides/steps/complex/visual-graph/plugin.js +++ b/src/js/angular/guides/steps/complex/visual-graph/plugin.js @@ -50,29 +50,24 @@ PluginRegistry.add('guide.step', [ url: '/graphs-visualizations', elementSelector: '.graph-visualization', placement: 'left', - onPreviousClick: () => new Promise(function (resolve, reject) { + onPreviousClick: () => { $location.url('/graphs-visualizations'); // the page have to be reloaded because the "Search RDF resource..." input have to be visible, due to implementation $route.reload(); const searchInputSelector = GuideUtils.getGuideElementSelector('graphVisualisationSearchInputNotConfigured', ' input'); - GuideUtils.waitFor(searchInputSelector, 3) + return GuideUtils.waitFor(searchInputSelector, 3) .then(() => { GuideUtils.validateTextInput(searchInputSelector, options.easyGraphInputText); - resolve(); - }) - .catch((error) => reject(error)); - }), - initPreviousStep: () => new Promise(function (resolve, reject) { + }); + }, + initPreviousStep: () => { const url = '/graphs-visualizations?uri=' + options.iri; if (url !== decodeURIComponent($location.url())) { $location.path('/graphs-visualizations').search({uri: options.iri}); - GuideUtils.waitFor(`.node-wrapper[id^="${options.iri}"] circle`, 3) - .then(() => resolve()) - .catch((error) => reject(error)); - } else { - resolve(); + return GuideUtils.waitFor(`.node-wrapper[id^="${options.iri}"] circle`, 3); } - }), + return Promise.resolve(); + }, canBePaused: false, forceReload: true }, options) @@ -127,35 +122,30 @@ PluginRegistry.add('guide.step', [ // Remove the "dblclick" listener of element. It is important when step is hided. $(elementSelector).off('dblclick.onNodeDbClicked'); }, - beforeShowPromise: () => new Promise(function (resolve, reject) { + beforeShowPromise: () => { $route.reload(); - GuideUtils.deferredShow(50)() + return GuideUtils.deferredShow(50)() .then(() => { - GuideUtils.awaitAlphaDropD3(elementSelector, $rootScope)() - .then(() => resolve()) - .catch((error) => reject(error)); + GuideUtils.awaitAlphaDropD3(elementSelector, $rootScope)(); }); - }), - initPreviousStep: (services, stepId) => new Promise(function (resolve, reject) { + }, + initPreviousStep: (services, stepId) => { const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); - previousStep.options.initPreviousStep(services, previousStep.id) + return previousStep.options.initPreviousStep(services, previousStep.id) .then(() => { const currentStepId = services.ShepherdService.getCurrentStepId(); // Skip expanding of node if last step is "visual-graph-expand" if (currentStepId === stepId) { - resolve(); - } else { - GuideUtils.graphVizExpandNode(elementSelector); - GuideUtils.deferredShow(50)() - .then(() => { - GuideUtils.awaitAlphaDropD3(null, $rootScope)() - .then(() => resolve()) - .catch((error) => reject(error)); - }); + return Promise.resolve; } - }) - .catch((error) => reject(error)); - }) + + GuideUtils.graphVizExpandNode(elementSelector); + return GuideUtils.deferredShow(50)() + .then(() => { + return GuideUtils.awaitAlphaDropD3(null, $rootScope)(); + }); + }); + } }, options) } ]; @@ -281,13 +271,12 @@ PluginRegistry.add('guide.step', [ selector: closeButtonSelector, event: 'click' }, - beforeShowPromise: () => new Promise(function (resolve) { + beforeShowPromise: () => { // We have to be sure that node info sidebar is open. It is needed when this step is loaded when next step "Previous" // button is clicked. GuideUtils.graphVizShowNodeInfo(elementSelector); - GuideUtils.deferredShow(500)() - .then(() => resolve()); - }), + return GuideUtils.deferredShow(500)(); + }, onNextClick: () => GuideUtils.waitFor(closeButtonSelector, 3).then(() => $(closeButtonSelector).trigger('click')) }, options) }); @@ -338,16 +327,14 @@ PluginRegistry.add('guide.step', [ show: disableAllNodes, hide: enableAllNodes, beforeShowPromise: GuideUtils.awaitAlphaDropD3(elementSelector, $rootScope), - initPreviousStep: (services, stepId) => new Promise((resolve, reject) => { + initPreviousStep: (services, stepId) => { if (GuideUtils.isVisible(elementSelector)) { - resolve(); - } else { - const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); - previousStep.options.initPreviousStep(services, previousStep.id) - .then(() => resolve()) - .catch((error) => reject(error)); + return Promise.resolve(); } - }) + + const previousStep = services.ShepherdService.getPreviousStepFromHistory(stepId); + return previousStep.options.initPreviousStep(services, previousStep.id); + } }, options) } ];