diff --git a/app/assets/javascripts/controllers/admin/open_api_clients.js b/app/assets/javascripts/controllers/admin/open_api_clients.js index 7a9ef8187..77e207786 100644 --- a/app/assets/javascripts/controllers/admin/open_api_clients.js +++ b/app/assets/javascripts/controllers/admin/open_api_clients.js @@ -10,9 +10,9 @@ * DS207: Consider shorter variations of null checks * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md */ -Application.Controllers.controller('OpenAPIClientsController', ['$scope', 'clientsPromise', 'growl', 'OpenAPIClient', 'dialogs', '_t', - function ($scope, clientsPromise, growl, OpenAPIClient, dialogs, _t) { - /* PUBLIC SCOPE */ +Application.Controllers.controller('OpenAPIClientsController', ['$scope', 'clientsPromise', 'growl', 'OpenAPIClient', 'dialogs', '_t', 'Member', 'uiTourService', + function ($scope, clientsPromise, growl, OpenAPIClient, dialogs, _t, Member, uiTourService) { + /* PUBLIC SCOPE */ // clients list $scope.clients = clientsPromise; @@ -74,7 +74,7 @@ Application.Controllers.controller('OpenAPIClientsController', ['$scope', 'clien }) ); - return $scope.resetToken = client => + $scope.resetToken = client => dialogs.confirm({ resolve: { object () { @@ -91,6 +91,82 @@ Application.Controllers.controller('OpenAPIClientsController', ['$scope', 'clien return growl.success(_t('app.admin.open_api_clients.access_successfully_revoked')); }) ); + + /** + * Setup the feature-tour for the admin/open_api_clients page. + * This is intended as a contextual help (when pressing F1) + */ + $scope.setupOpenAPITour = function () { + // get the tour defined by the ui-tour directive + const uitour = uiTourService.getTourByName('open-api'); + uitour.createStep({ + selector: 'body', + stepId: 'welcome', + order: 0, + title: _t('app.admin.tour.open_api.welcome.title'), + content: _t('app.admin.tour.open_api.welcome.content'), + placement: 'bottom', + orphan: true + }); + uitour.createStep({ + selector: '.heading .documentation-button', + stepId: 'doc', + order: 1, + title: _t('app.admin.tour.open_api.doc.title'), + content: _t('app.admin.tour.open_api.doc.content'), + placement: 'bottom' + }); + uitour.createStep({ + selector: 'body', + stepId: 'conclusion', + order: 2, + title: _t('app.admin.tour.conclusion.title'), + content: _t('app.admin.tour.conclusion.content'), + placement: 'bottom', + orphan: true + }); + // on tour end, save the status in database + uitour.on('ended', function () { + if (uitour.getStatus() === uitour.Status.ON && $scope.currentUser.profile.tours.indexOf('open-api') < 0) { + Member.completeTour({ id: $scope.currentUser.id }, { tour: 'open-api' }, function (res) { + $scope.currentUser.profile.tours = res.tours; + }); + } + }); + // if the user has never seen the tour, show him now + if ($scope.currentUser.profile.tours.indexOf('open-api') < 0) { + uitour.start(); + } + // start this tour when an user press F1 - this is contextual help + window.addEventListener('keydown', handleF1); + }; + + /* PRIVATE SCOPE */ + + /** + * Kind of constructor: these actions will be realized first when the controller is loaded + */ + const initialize = function () { + // listen the $destroy event of the controller to remove the F1 key binding + $scope.$on('$destroy', function () { + window.removeEventListener('keydown', handleF1); + }); + }; + + /** + * Callback used to trigger the feature tour when the user press the F1 key. + * @param e {KeyboardEvent} + */ + const handleF1 = function (e) { + if (e.key === 'F1') { + e.preventDefault(); + const tour = uiTourService.getTourByName('open-api'); + if (tour) { tour.start(); } + } + }; + + // !!! MUST BE CALLED AT THE END of the controller + return initialize(); } ]); diff --git a/app/assets/javascripts/controllers/admin/project_elements.js b/app/assets/javascripts/controllers/admin/project_elements.js index 6c35bb06b..e7f69bf6e 100644 --- a/app/assets/javascripts/controllers/admin/project_elements.js +++ b/app/assets/javascripts/controllers/admin/project_elements.js @@ -168,8 +168,8 @@ Application.Controllers.controller('ProjectElementsController', ['$scope', '$sta selector: 'body', stepId: 'welcome', order: 0, - title: _t('app.admin.tour.projectElements.welcome.title'), - content: _t('app.admin.tour.projectElements.welcome.content'), + title: _t('app.admin.tour.project_elements.welcome.title'), + content: _t('app.admin.tour.project_elements.welcome.content'), placement: 'bottom', orphan: true }); @@ -177,8 +177,8 @@ Application.Controllers.controller('ProjectElementsController', ['$scope', '$sta selector: '.heading .abuses-button', stepId: 'abuses', order: 1, - title: _t('app.admin.tour.projectElements.abuses.title'), - content: _t('app.admin.tour.projectElements.abuses.content'), + title: _t('app.admin.tour.project_elements.abuses.title'), + content: _t('app.admin.tour.project_elements.abuses.content'), placement: 'bottom' }); uitour.createStep({ diff --git a/app/assets/templates/admin/open_api_clients/index.html.erb b/app/assets/templates/admin/open_api_clients/index.html.erb index 4866d812d..07e9764f7 100644 --- a/app/assets/templates/admin/open_api_clients/index.html.erb +++ b/app/assets/templates/admin/open_api_clients/index.html.erb @@ -13,7 +13,7 @@
-