From 78852bfb86cc544af6aec86cd41a81acc7179ebb Mon Sep 17 00:00:00 2001 From: chouseknecht Date: Tue, 15 Oct 2013 16:10:33 -0400 Subject: [PATCH] Added new help generator to Hosts page. --- awx/ui/static/img/help/help003.png | Bin 0 -> 11632 bytes awx/ui/static/js/app.js | 3 +- awx/ui/static/js/controllers/Hosts.js | 210 ++++++++++---------- awx/ui/static/js/forms/InventoryHosts.js | 11 + awx/ui/static/js/help/InventoryHosts.js | 24 +++ awx/ui/static/js/helpers/Hosts.js | 6 + awx/ui/static/js/lists/InventorySummary.js | 2 +- awx/ui/static/lib/ansible/form-generator.js | 11 +- awx/ui/templates/ui/index.html | 1 + 9 files changed, 159 insertions(+), 109 deletions(-) create mode 100644 awx/ui/static/img/help/help003.png create mode 100644 awx/ui/static/js/help/InventoryHosts.js diff --git a/awx/ui/static/img/help/help003.png b/awx/ui/static/img/help/help003.png new file mode 100644 index 0000000000000000000000000000000000000000..4036e34cc22bfc38334206496d24b9f2dedd5759 GIT binary patch literal 11632 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 literal 0 HcmV?d00001 diff --git a/awx/ui/static/js/app.js b/awx/ui/static/js/app.js index ae2831ac18..cb32841562 100644 --- a/awx/ui/static/js/app.js +++ b/awx/ui/static/js/app.js @@ -76,7 +76,8 @@ angular.module('ansible', [ 'ObjectCountWidget', 'JobsHelper', 'InventoryStatusDefinition', - 'InventorySummaryHelpDefinition' + 'InventorySummaryHelpDefinition', + 'InventoryHostsHelpDefinition' ]) .config(['$routeProvider', function($routeProvider) { $routeProvider. diff --git a/awx/ui/static/js/controllers/Hosts.js b/awx/ui/static/js/controllers/Hosts.js index 1e49b9f966..e6b6b2d8a4 100644 --- a/awx/ui/static/js/controllers/Hosts.js +++ b/awx/ui/static/js/controllers/Hosts.js @@ -13,130 +13,134 @@ function InventoryHosts ($scope, $rootScope, $compile, $location, $log, $routePa GenerateForm, Rest, Alert, ProcessErrors, LoadBreadCrumbs, RelatedSearchInit, RelatedPaginateInit, ReturnToCaller, ClearScope, LookUpInit, Prompt, GetBasePath, HostsList, HostsAdd, HostsEdit, HostsDelete, - HostsReload, LoadSearchTree, EditHostGroups) + HostsReload, LoadSearchTree, EditHostGroups, InventoryHostsHelp, HelpDialog) { - ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior + ClearScope('htmlTemplate'); //Garbage collection. Don't leave behind any listeners/watchers from the prior //scope. - var generator = GenerateForm; - var form = InventoryHostsForm; - var defaultUrl=GetBasePath('inventory'); - var scope = generator.inject(form, {mode: 'edit', related: true, buildTree: true}); - var base = $location.path().replace(/^\//,'').split('/')[0]; - var id = $routeParams.inventory_id; - - scope['inventory_id'] = id; - scope['hostAddHide'] = true; - scope['hostCreateHide'] = true; - scope['hosts'] = null; - scope['helpCount'] = 0; + var generator = GenerateForm; + var form = InventoryHostsForm; + var defaultUrl=GetBasePath('inventory'); + var scope = generator.inject(form, {mode: 'edit', related: true, buildTree: true}); + var base = $location.path().replace(/^\//,'').split('/')[0]; + var id = $routeParams.inventory_id; + + scope['inventory_id'] = id; + scope['hostAddHide'] = true; + scope['hostCreateHide'] = true; + scope['hosts'] = null; + scope['helpCount'] = 0; - if (scope.loadBreadCrumbsRemove) { + if (scope.loadBreadCrumbsRemove) { scope.loadBreadCrumbsRemove(); - } - scope.loadBreadCrumbsRemove = scope.$on('buildAllGroups', function(e, inventory_name) { + } + scope.loadBreadCrumbsRemove = scope.$on('buildAllGroups', function(e, inventory_name) { LoadBreadCrumbs({ path: '/inventories/' + id, title: inventory_name }); }); - // Sets up the search tree and loads All Hosts for the inventory - LoadSearchTree({ scope: scope, inventory_id: scope['inventory_id'] }); - - // Add the selected flag to the hosts set. - //if (scope.relatedHostsRemove) { - // scope.relatedHostsRemove(); - //} - //scope.relatedHostsRemove = scope.$on('relatedhosts', function() { - // scope.toggleAllFlag = false; - // for (var i=0; i < scope.hosts.length; i++) { - // scope.hosts[i].selected = 0; - // } - // }); + // Sets up the search tree and loads All Hosts for the inventory + LoadSearchTree({ scope: scope, inventory_id: scope['inventory_id'] }); - scope.filterHosts = function() { - HostsReload({ scope: scope, inventory_id: scope['inventory_id'], group_id: scope['group_id'] }); - } + + scope.filterHosts = function() { + HostsReload({ scope: scope, inventory_id: scope['inventory_id'], group_id: scope['group_id'] }); + } + + scope.addHost = function() { + HostsList({ scope: scope, "inventory_id": id, group_id: scope.group_id }); + } + + scope.createHost = function() { + HostsAdd({ scope: scope, "inventory_id": id, group_id: scope.group_id }); + } + + scope.editHost = function(host_id, host_name) { + HostsEdit({ scope: scope, "inventory_id": id, group_id: scope.group_id, host_id: host_id, host_name: host_name }); + } + + scope.editGroups = function() { + $location.path('/inventories/' + scope.inventory_id + '/groups'); + } + + scope.editHostGroups = function(host_id) { + EditHostGroups({ inventory_id: id, host_id: host_id }); + } + + scope.deleteHost = function(host_id, host_name) { + HostsDelete({ scope: scope, "inventory_id": id, group_id: scope.group_id, host_id: host_id, host_name: host_name, + request: 'delete' }); + } - scope.addHost = function() { - HostsList({ scope: scope, "inventory_id": id, group_id: scope.group_id }); - } + scope.viewJobs = function(last_job) { + $location.url('/jobs/?id__int=' + last_job ); + } + + scope.allJobs = function(id) { + $location.url('/jobs/?job_host_summaries__host=' + id); + } - scope.createHost = function() { - HostsAdd({ scope: scope, "inventory_id": id, group_id: scope.group_id }); - } + scope.allHostSummaries = function(id, name, inventory_id) { + LoadBreadCrumbs({ path: '/hosts/' + id, title: name, altPath: '/inventories/' + inventory_id + '/hosts', + inventory_id: inventory_id }); + $location.url('/hosts/' + id + '/job_host_summaries/?inventory=' + inventory_id); + } - scope.editHost = function(host_id, host_name) { - HostsEdit({ scope: scope, "inventory_id": id, group_id: scope.group_id, host_id: host_id, host_name: host_name }); - } + scope.viewLastEvents = function(host_id, last_job, host_name, last_job_name) { + // Choose View-> Latest job events + LoadBreadCrumbs({ path: '/jobs/' + last_job, title: last_job_name }); + $location.url('/jobs/' + last_job + '/job_events/?host=' + escape(host_name)); + } - scope.editGroups = function() { - $location.path('/inventories/' + scope.inventory_id + '/groups'); - } + scope.viewLastSummary = function(host_id, last_job, host_name, last_job_name) { + // Choose View-> Latest job events + LoadBreadCrumbs({ path: '/jobs/' + last_job, title: last_job_name }); + $location.url('/jobs/' + last_job + '/job_host_summaries/?host=' + escape(host_name)); + } - scope.editHostGroups = function(host_id) { - EditHostGroups({ inventory_id: id, host_id: host_id }); - } + if (scope.removeShowHelp) { + scope.removeShowHelp(); + } + scope.removeShowHelp = scope.$on('ShowHelp', function() { + // Force display fo help tooltip when no groups exist + $('#hosts-page-help').focus(); + }); - scope.deleteHost = function(host_id, host_name) { - HostsDelete({ scope: scope, "inventory_id": id, group_id: scope.group_id, host_id: host_id, host_name: host_name, - request: 'delete' }); - } - - scope.viewJobs = function(last_job) { - $location.url('/jobs/?id__int=' + last_job ); - } - - scope.allJobs = function(id) { - $location.url('/jobs/?job_host_summaries__host=' + id); - } - - scope.allHostSummaries = function(id, name, inventory_id) { - LoadBreadCrumbs({ path: '/hosts/' + id, title: name, altPath: '/inventories/' + inventory_id + '/hosts', - inventory_id: inventory_id }); - $location.url('/hosts/' + id + '/job_host_summaries/?inventory=' + inventory_id); - } - - scope.viewLastEvents = function(host_id, last_job, host_name, last_job_name) { - // Choose View-> Latest job events - LoadBreadCrumbs({ path: '/jobs/' + last_job, title: last_job_name }); - $location.url('/jobs/' + last_job + '/job_events/?host=' + escape(host_name)); - } - - scope.viewLastSummary = function(host_id, last_job, host_name, last_job_name) { - // Choose View-> Latest job events - LoadBreadCrumbs({ path: '/jobs/' + last_job, title: last_job_name }); - $location.url('/jobs/' + last_job + '/job_host_summaries/?host=' + escape(host_name)); - } - - // Respond to the scope.$emit from awTree directive - if (scope.refreshHostRemove) { - scope.refreshHostRemove(); - } - scope.refreshHostRemove = scope.$on('refreshHost', function(e, group, title) { - scope.groupTitle = title; - scope.group_id = group; - scope.helpCount++; - if (scope.group_id == null) { - scope.groupTitle = 'All Hosts'; - scope.hostAddHide = true; - scope.hostCreateHide = true; - scope.hostDeleteHide = true; - } - else { - scope.hostAddHide = false; - scope.hostCreateHide = false; - scope.hostDeleteHide = false; - } - scope['hostDeleteDisabled'] = true; - scope['hostDeleteDisabledClass'] = 'disabled'; - HostsReload({ scope: scope, inventory_id: scope['inventory_id'], group_id: group }); - }); + scope.showHelp = function() { + // Display help dialog + $('.btn').blur(); //remove focus from the help button and all buttons + //this stops the tooltip from continually displaying + HelpDialog({ defn: InventoryHostsHelp }); + } + // Respond to the scope.$emit from awTree directive + if (scope.refreshHostRemove) { + scope.refreshHostRemove(); + } + scope.refreshHostRemove = scope.$on('refreshHost', function(e, group, title) { + scope.groupTitle = title; + scope.group_id = group; + scope.helpCount++; + if (scope.group_id == null) { + scope.groupTitle = 'All Hosts'; + scope.hostAddHide = true; + scope.hostCreateHide = true; + scope.hostDeleteHide = true; + } + else { + scope.hostAddHide = false; + scope.hostCreateHide = false; + scope.hostDeleteHide = false; + } + scope['hostDeleteDisabled'] = true; + scope['hostDeleteDisabledClass'] = 'disabled'; + HostsReload({ scope: scope, inventory_id: scope['inventory_id'], group_id: group }); + }); } InventoryHosts.$inject = [ '$scope', '$rootScope', '$compile', '$location', '$log', '$routeParams', 'InventoryHostsForm', 'GenerateForm', 'Rest', 'Alert', 'ProcessErrors', 'LoadBreadCrumbs', 'RelatedSearchInit', 'RelatedPaginateInit', 'ReturnToCaller', 'ClearScope', 'LookUpInit', 'Prompt', 'GetBasePath', 'HostsList', 'HostsAdd', 'HostsEdit', 'HostsDelete', - 'HostsReload', 'LoadSearchTree', 'EditHostGroups' + 'HostsReload', 'LoadSearchTree', 'EditHostGroups', 'InventoryHostsHelp', 'HelpDialog' ]; diff --git a/awx/ui/static/js/forms/InventoryHosts.js b/awx/ui/static/js/forms/InventoryHosts.js index e9904491d8..62b89ad048 100644 --- a/awx/ui/static/js/forms/InventoryHosts.js +++ b/awx/ui/static/js/forms/InventoryHosts.js @@ -88,6 +88,17 @@ angular.module('InventoryHostsFormDefinition', []) dataPlacement: 'bottom', 'class': 'btn-xs btn-success', icon: 'icon-plus' + }, + help: { + dataPlacement: 'left', + icon: "icon-question-sign", + mode: 'all', + 'class': 'btn-xs btn-info btn-help', + awToolTip: "

Need help getting started?

" + + "

Click here for help with this page

", + iconSize: 'large', + ngClick: "showHelp()", + id: "hosts-page-help" } }, diff --git a/awx/ui/static/js/help/InventoryHosts.js b/awx/ui/static/js/help/InventoryHosts.js new file mode 100644 index 0000000000..e4adc971ee --- /dev/null +++ b/awx/ui/static/js/help/InventoryHosts.js @@ -0,0 +1,24 @@ +/********************************************* + * Copyright (c) 2013 AnsibleWorks, Inc. + * + * InventoryHosts.js + * Help object for Inventory-> Hosts page. + * + * + */ +angular.module('InventoryHostsHelpDefinition', []) + .value( + 'InventoryHostsHelp', { + story: { + hdr: 'Managing Hosts', + steps: { + step1: { + intro: 'Start by selecting a group:', + img: { src: 'help003.png', maxWidth: 315 , maxHeight: 198 }, + box: "On the group selector, click the name of a group. Hosts contained in the group" + + " will appear on the right.", + height: 500 + } + } + } + }); \ No newline at end of file diff --git a/awx/ui/static/js/helpers/Hosts.js b/awx/ui/static/js/helpers/Hosts.js index 6a26b42aed..b6c9190da9 100644 --- a/awx/ui/static/js/helpers/Hosts.js +++ b/awx/ui/static/js/helpers/Hosts.js @@ -473,6 +473,12 @@ angular.module('HostsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', 'H scope.hosts[i].active_failures = 'success'; } } + + if (group_id == null || group_id == undefined) { + if (!scope.hosts.length) { + scope.$emit('ShowHelp'); + } + } if (postAction) { postAction(); diff --git a/awx/ui/static/js/lists/InventorySummary.js b/awx/ui/static/js/lists/InventorySummary.js index 959ebdbb1b..17d625cc37 100644 --- a/awx/ui/static/js/lists/InventorySummary.js +++ b/awx/ui/static/js/lists/InventorySummary.js @@ -113,7 +113,7 @@ angular.module('InventorySummaryDefinition', []) icon: "icon-question-sign", mode: 'all', 'class': 'btn-xs btn-info btn-help', - awToolTip: "

Need help getting started creating your inventory?

" + + awToolTip: "

Need help getting started creating your inventory?

" + "

Click here for help with this page

", iconSize: 'large', ngClick: "showHelp()", diff --git a/awx/ui/static/lib/ansible/form-generator.js b/awx/ui/static/lib/ansible/form-generator.js index 7d7bc873fb..ee3fa368b0 100644 --- a/awx/ui/static/lib/ansible/form-generator.js +++ b/awx/ui/static/lib/ansible/form-generator.js @@ -1254,6 +1254,7 @@ angular.module('FormGenerator', ['GeneratorHelpers', 'ngCookies']) html += this.breadCrumbs(options, navigation); // Hint text + /* html += "
\n"; html += "\n"; html += "

Hint: Get started building your inventory by adding a group on the " + @@ -1265,6 +1266,7 @@ angular.module('FormGenerator', ['GeneratorHelpers', 'ngCookies']) html += "\n"; html += "

Hint: To add hosts to the inventory, select a group using the Group Selector.

"; html += "
\n"; + */ html += "
\n"; html += "
\n"; @@ -1279,10 +1281,10 @@ angular.module('FormGenerator', ['GeneratorHelpers', 'ngCookies']) html += SearchWidget({ iterator: form.iterator, template: form, mini: true, size: 'col-md-5 col-lg-5'}); html += "
\n" - html += "
\n"; + html += "
\n"; // Add actions(s) for (var action in form.actions) { - html += "\n"; + html += "\n";*/ + html += this.button(form.actions[action], action); } - html += "
\n"; + html += "
\n"; html += "
\n"; html += "
\n"; diff --git a/awx/ui/templates/ui/index.html b/awx/ui/templates/ui/index.html index db1138495e..b953182261 100644 --- a/awx/ui/templates/ui/index.html +++ b/awx/ui/templates/ui/index.html @@ -115,6 +115,7 @@ + {% endif %}