From 54eff92ea332879cfe5173fc546c43420b34c2bf Mon Sep 17 00:00:00 2001 From: chouseknecht Date: Tue, 6 Aug 2013 14:43:27 -0400 Subject: [PATCH] Fixed a bunch of styling issues appearing in FireFox post Twitter Bootstrap 3RC1 upgrade. --- awx/ui/static/css/ansible-ui.css | 89 ++++++------------- awx/ui/static/js/forms/Groups.js | 3 +- awx/ui/static/js/forms/Hosts.js | 5 +- awx/ui/static/js/forms/Inventories.js | 6 +- awx/ui/static/js/forms/JobTemplates.js | 1 + awx/ui/static/js/forms/Jobs.js | 19 ++-- awx/ui/static/js/forms/Organizations.js | 5 +- awx/ui/static/js/forms/Permissions.js | 1 + awx/ui/static/js/forms/Projects.js | 4 +- awx/ui/static/js/forms/Teams.js | 13 ++- awx/ui/static/js/forms/Users.js | 7 +- awx/ui/static/js/helpers/Groups.js | 10 ++- awx/ui/static/js/lists/Credentials.js | 2 +- awx/ui/static/js/lists/Groups.js | 6 +- awx/ui/static/js/lists/Hosts.js | 6 +- awx/ui/static/js/lists/Inventories.js | 2 +- awx/ui/static/js/lists/JobEvents.js | 6 +- awx/ui/static/js/lists/JobHosts.js | 8 +- awx/ui/static/js/lists/JobTemplates.js | 2 +- awx/ui/static/js/lists/Jobs.js | 6 +- awx/ui/static/js/lists/Organizations.js | 2 +- awx/ui/static/js/lists/Permissions.js | 2 +- awx/ui/static/js/lists/Projects.js | 2 +- awx/ui/static/js/lists/Teams.js | 2 +- awx/ui/static/js/lists/Users.js | 2 +- awx/ui/static/lib/ansible/directives.js | 10 ++- awx/ui/static/lib/ansible/form-generator.js | 29 ++++-- .../static/lib/ansible/generator-helpers.js | 17 ++-- awx/ui/static/lib/ansible/list-generator.js | 52 +++++++---- awx/ui/templates/ui/index.html | 2 +- 30 files changed, 176 insertions(+), 145 deletions(-) diff --git a/awx/ui/static/css/ansible-ui.css b/awx/ui/static/css/ansible-ui.css index d12b1b66f1..8b0c6ba5c9 100644 --- a/awx/ui/static/css/ansible-ui.css +++ b/awx/ui/static/css/ansible-ui.css @@ -16,6 +16,10 @@ padding-top: 100px; } + .tooltip { + z-index: 1050; + } + .text-center { text-align: center !important; } @@ -33,52 +37,21 @@ } .btn .caret { - border-top-color: #787878; + border-top-color: #696969; } -/* Attempt to make button heights consistent. For some reason success, info, etc. are - taller than plain .btn */ - - /* - .btn-success, .btn-danger, .btn-info, .btn-primary, .btn-warning { - padding-top: 1px; - padding-bottom: 2px; + .dropdown-toggle, .btn-default { + background-color: #ccc; + border-color: #ccc; + color: #333; } - .btn { - padding-left: 5px; - padding-right: 5px; - min-width: 28px; + .dropdown-toggle:hover , .btn-default:hover { + background-color: #bbb; + border-color: #bbb; + color: #333; } - .btn-pad { - padding-top: 3px; - padding-bottom: 1px; - } - */ - - /* - .btn-inventory-edit { - padding-top: 2px; - padding-bottom: 1px; - } - - .modal-footer .btn-success, - .modal-footer .btn-danger, - .modal-footer .btn-info, - .modal-footer .btn-primary { - padding-top: 3px; - padding-bottom: 4px; - } - - .modal-footer .btn { - padding-left: 10px; - padding-right: 10px; - } - */ - -/* End btn heights */ - /* Use code-breakable in pop-over text to indent and wrap code segments */ .code-breakable { word-wrap: break-word; @@ -133,7 +106,7 @@ .navbar-brand img { max-width: 260px; } -ß + a:hover { text-decoration: none; } @@ -281,13 +254,6 @@ margin-right: 5px; } - .search-widget .spin { - display: inline-block; - font-size: 18px; - margin-left: 15px; - min-width: 30px; - } - .status-actions { display: inline-block; height: 25px; @@ -301,6 +267,10 @@ font-size: 22px; } + .search-widget { + margin-bottom: 20px; + } + .search-widget label { display:inline-block; vertical-align: middle; @@ -353,7 +323,7 @@ margin-left: 10px; } - #tree-view { + .tree-container { padding: 0; margin: 5px 0 15px 0; } @@ -364,12 +334,6 @@ } /* Display list actions next to search widget */ - .search-widget { - display: inline-block; - vertical-align: bottom; - margin-bottom: 15px; - padding-left: 0; - } .list-actions { display: inline-block; @@ -382,9 +346,8 @@ margin-right: 3px; } - .list-actions .btn-help { - margin-left: 20px; - margin-top: 2px; + .btn-help { + margin-left: 15px; } /* End Display list actions */ @@ -563,23 +526,23 @@ margin-right: 10px; } - #hosts-well { + .hosts-well { padding-top: 5px; } - #hosts-title p { + .hosts-title p { font-size: 12px; } - #hosts-title h4 { + .hosts-title h4 { margin: 5px 0; } - #hosts-well .search-widget { + .hosts-well .search-widget { margin-top: 10px; } - #hosts-well .list-actions { + .hosts-well .list-actions { padding-top: 10px; } diff --git a/awx/ui/static/js/forms/Groups.js b/awx/ui/static/js/forms/Groups.js index 6268761089..d660188d4c 100644 --- a/awx/ui/static/js/forms/Groups.js +++ b/awx/ui/static/js/forms/Groups.js @@ -47,7 +47,7 @@ angular.module('GroupFormDefinition', []) "
---
somevar: somevalue
password: magic
\n" + '

View JSON examples at www.json.org

' + '

View YAML examples at ansibleworks.com

', - dataContainer: '#form-modal' + dataContainer: '#form-modal .modal-content' } }, @@ -62,6 +62,7 @@ angular.module('GroupFormDefinition', []) reset: { ngClick: 'formReset()', label: 'Reset', + 'class': "btn btn-default", icon: 'icon-trash', ngDisabled: true //Disabled when $pristine } diff --git a/awx/ui/static/js/forms/Hosts.js b/awx/ui/static/js/forms/Hosts.js index 7623a1d05c..333c4c857f 100644 --- a/awx/ui/static/js/forms/Hosts.js +++ b/awx/ui/static/js/forms/Hosts.js @@ -31,7 +31,7 @@ angular.module('HostFormDefinition', []) "", dataTitle: 'Host Name', dataPlacement: 'right', - dataContainer: '#form-modal' + dataContainer: '#form-modal .modal-content' }, description: { label: 'Description', @@ -61,7 +61,7 @@ angular.module('HostFormDefinition', []) '

View YAML examples at ansibleworks.com

', dataTitle: 'Host Variables', dataPlacement: 'right', - dataContainer: '#form-modal' + dataContainer: '#form-modal .modal-content' } }, @@ -77,6 +77,7 @@ angular.module('HostFormDefinition', []) ngClick: 'formReset()', label: 'Reset', icon: 'icon-trash', + 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } }, diff --git a/awx/ui/static/js/forms/Inventories.js b/awx/ui/static/js/forms/Inventories.js index c42c14b573..cd33a00cab 100644 --- a/awx/ui/static/js/forms/Inventories.js +++ b/awx/ui/static/js/forms/Inventories.js @@ -76,6 +76,7 @@ angular.module('InventoryFormDefinition', []) '

View YAML examples at ansibleworks.com

', dataTitle: 'Inventory Variables', dataPlacement: 'bottom', + dataContainer: "body", column: 2 } }, @@ -92,6 +93,7 @@ angular.module('InventoryFormDefinition', []) ngClick: 'formReset()', label: 'Reset', icon: 'icon-trash', + 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } }, @@ -116,7 +118,7 @@ angular.module('InventoryFormDefinition', []) label: 'Add Existing', awToolTip: 'Select existing host', ngHide: 'createButtonShow == false', - "class": 'btn btn-pad' + "class": 'btn btn-default' }, create: { ngClick: "createHost()", @@ -154,7 +156,7 @@ angular.module('InventoryFormDefinition', []) icon: 'icon-edit', label: 'Edit', awToolTip: 'Edit host', - 'class': 'btn-inventory-edit' + 'class': 'btn-default' }, "remove": { ngClick: "removeHost(\{\{ host.id \}\}, '\{\{ host.name \}\}')", diff --git a/awx/ui/static/js/forms/JobTemplates.js b/awx/ui/static/js/forms/JobTemplates.js index b5deca2f4f..44aa7ede40 100644 --- a/awx/ui/static/js/forms/JobTemplates.js +++ b/awx/ui/static/js/forms/JobTemplates.js @@ -238,6 +238,7 @@ angular.module('JobTemplateFormDefinition', []) ngClick: 'formReset()', label: 'Reset', icon: 'icon-trash', + 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } }, diff --git a/awx/ui/static/js/forms/Jobs.js b/awx/ui/static/js/forms/Jobs.js index 86d01e012d..d96d373a6e 100644 --- a/awx/ui/static/js/forms/Jobs.js +++ b/awx/ui/static/js/forms/Jobs.js @@ -43,6 +43,7 @@ angular.module('JobFormDefinition', []) " syntax, test environment setup and report problems.

", dataTitle: 'Job Type', dataPlacement: 'right', + dataContainer: 'body', column: 1 }, inventory: { @@ -100,6 +101,7 @@ angular.module('JobFormDefinition', []) disabled: true, awPopOver: "

The number of parallel or simultaneous processes to use while executing the playbook. Provide a value between 0 and 100. " + "A value of zero will use the ansible default setting of 5 parallel processes.

", + dataContainer: 'body', dataTitle: 'Forks', dataPlacement: 'right' }, @@ -113,6 +115,7 @@ angular.module('JobFormDefinition', []) "Multiple patterns can be separated by ; : or ,

For more information and examples see the " + "Selecting Targets section under Inventory and Patterns " + " in the Ansible documentation.

", + dataContainer: 'body', dataTitle: 'Limit', dataPlacement: 'right' }, @@ -126,7 +129,8 @@ angular.module('JobFormDefinition', []) column: 1, awPopOver: "

Control the level of output ansible will produce as the playbook executes.

", dataTitle: 'Verbosity', - dataPlacement: 'right' + dataPlacement: 'right', + dataContainer: 'body' }, variables: { label: 'Extra Variables', @@ -143,6 +147,7 @@ angular.module('JobFormDefinition', []) "YAML:
\n" + "
---
somevar: somevalue
password: magic
\n", dataTitle: 'Extra Variables', + dataContainer: 'body', dataPlacement: 'left' }, job_tags: { @@ -161,6 +166,7 @@ angular.module('JobFormDefinition', []) "in the Job Tags field:<\p>\n" + "
configuration,packages
\n", dataTitle: "Job Tags", + dataContainer: 'body', dataPlacement: "left" }, allow_callbacks: { @@ -183,7 +189,7 @@ angular.module('JobFormDefinition', []) "in one of your defined inventories, the request will be denied.

" + "

Successful requests will result in an entry on the Jobs tab, where the results and history can be viewed.

", detailPlacement: 'left', - dataContainer: '#jobs', + dataContainer: 'body', dataTitle: 'Callback URL' }, callback_url: { @@ -203,7 +209,7 @@ angular.module('JobFormDefinition', []) "in one of your defined inventories, the request will be denied.

" + "

Successful requests will result in an entry on the Jobs tab, where the results and history can be viewed.

", detailPlacement: 'left', - dataContainer: '#jobs', + dataContainer: 'body', dataTitle: 'Callback URL' }, host_config_key: { @@ -217,7 +223,7 @@ angular.module('JobFormDefinition', []) "

curl --data \"host_config_key=5a8ec154832b780b9bdef1061764ae5a\" " + "http://your.server.com:999/api/v1/job_templates/1/callback/

\n", detailPlacement: 'left', - dataContainer: '#jobs' + dataContainer: 'body' } }, @@ -233,6 +239,7 @@ angular.module('JobFormDefinition', []) ngClick: 'formReset()', label: 'Reset', icon: 'icon-remove', + 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } }, @@ -282,7 +289,7 @@ angular.module('JobFormDefinition', []) label: 'Hosts', icon: 'icon-th-large', ngClick: "jobSummary()", - "class": 'btn btn-small', + "class": 'btn btn-default btn-small', awToolTip: 'View host summary', mode: 'all' }, @@ -290,7 +297,7 @@ angular.module('JobFormDefinition', []) label: 'Events', icon: 'icon-list-ul', ngClick: "jobEvents()", - "class": 'btn btn-small', + "class": 'btn btn-default btn-small', awToolTip: 'Edit job events', mode: 'all' } diff --git a/awx/ui/static/js/forms/Organizations.js b/awx/ui/static/js/forms/Organizations.js index d749820e13..e0cc15b405 100644 --- a/awx/ui/static/js/forms/Organizations.js +++ b/awx/ui/static/js/forms/Organizations.js @@ -43,6 +43,7 @@ angular.module('OrganizationFormDefinition', []) ngClick: 'formReset()', label: 'Reset', icon: 'icon-trash', + 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } }, @@ -82,6 +83,7 @@ angular.module('OrganizationFormDefinition', []) label: 'Edit', ngClick: "edit('users', \{\{ user.id \}\}, '\{\{ user.username \}\}')", icon: 'icon-edit', + 'class': 'btn btn-default', awToolTip: 'Edit user' }, "delete": { @@ -125,7 +127,8 @@ angular.module('OrganizationFormDefinition', []) label: 'Edit', ngClick: "edit('users', \{\{ admin.id \}\}, '\{\{ admin.username \}\}')", icon: 'icon-edit', - awToolTip: 'Edit administrator' + awToolTip: 'Edit administrator', + 'class': 'btn btn-default' }, "delete": { label: 'Delete', diff --git a/awx/ui/static/js/forms/Permissions.js b/awx/ui/static/js/forms/Permissions.js index 1e9f3677ab..0fe40d6c99 100644 --- a/awx/ui/static/js/forms/Permissions.js +++ b/awx/ui/static/js/forms/Permissions.js @@ -98,6 +98,7 @@ angular.module('PermissionFormDefinition', []) ngClick: 'formReset()', label: 'Reset', icon: 'icon-trash', + 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } }, diff --git a/awx/ui/static/js/forms/Projects.js b/awx/ui/static/js/forms/Projects.js index ebdad0a37c..14017ce166 100644 --- a/awx/ui/static/js/forms/Projects.js +++ b/awx/ui/static/js/forms/Projects.js @@ -83,6 +83,7 @@ angular.module('ProjectFormDefinition', []) ngClick: 'formReset()', label: 'Reset', icon: 'icon-trash', + 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } }, @@ -118,7 +119,8 @@ angular.module('ProjectFormDefinition', []) label: 'Edit', ngClick: "edit('organizations', \{\{ organization.id \}\}, '\{\{ organization.name \}\}')", icon: 'icon-edit', - awToolTip: 'Edit the organization' + awToolTip: 'Edit the organization', + 'class': 'btn btn-default' }, "delete": { label: 'Delete', diff --git a/awx/ui/static/js/forms/Teams.js b/awx/ui/static/js/forms/Teams.js index 75281904ea..79bf981c1a 100644 --- a/awx/ui/static/js/forms/Teams.js +++ b/awx/ui/static/js/forms/Teams.js @@ -57,6 +57,7 @@ angular.module('TeamFormDefinition', []) ngClick: 'formReset()', label: 'Reset', icon: 'icon-trash', + 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } }, @@ -93,7 +94,8 @@ angular.module('TeamFormDefinition', []) label: 'Edit', ngClick: "edit('credentials', \{\{ credential.id \}\}, '\{\{ credential.name \}\}')", icon: 'icon-edit', - awToolTip: 'Modify the credential' + awToolTip: 'Modify the credential', + 'class': 'btn btn-default' }, "delete": { label: 'Delete', @@ -148,7 +150,8 @@ angular.module('TeamFormDefinition', []) label: 'Edit', ngClick: "edit('permissions', \{\{ permission.id \}\}, '\{\{ permission.name \}\}')", icon: 'icon-edit', - awToolTip: 'Edit the permission' + awToolTip: 'Edit the permission', + 'class': 'btn btn-default' }, "delete": { @@ -191,7 +194,8 @@ angular.module('TeamFormDefinition', []) label: 'Edit', ngClick: "edit('projects', \{\{ project.id \}\}, '\{\{ project.name \}\}')", icon: 'icon-edit', - awToolTip: 'Modify the project' + awToolTip: 'Modify the project', + 'class': 'btn btn-default' }, "delete": { label: 'Delete', @@ -236,7 +240,8 @@ angular.module('TeamFormDefinition', []) label: 'Edit', ngClick: "edit('users', \{\{ user.id \}\}, '\{\{ user.username \}\}')", icon: 'icon-edit', - awToolTip: 'Edit user' + awToolTip: 'Edit user', + 'class': 'btn btn-default' }, "delete": { label: 'Delete', diff --git a/awx/ui/static/js/forms/Users.js b/awx/ui/static/js/forms/Users.js index 3626826a67..2611f00134 100644 --- a/awx/ui/static/js/forms/Users.js +++ b/awx/ui/static/js/forms/Users.js @@ -98,6 +98,7 @@ angular.module('UserFormDefinition', []) ngClick: 'formReset()', label: 'Reset', icon: 'icon-trash', + 'class': 'btn btn-default', ngDisabled: true //Disabled when $pristine } }, @@ -134,7 +135,8 @@ angular.module('UserFormDefinition', []) label: 'Edit', ngClick: "edit('credentials', \{\{ credential.id \}\}, '\{\{ credential.name \}\}')", icon: 'icon-edit', - awToolTip: 'Edit the credential' + awToolTip: 'Edit the credential', + 'class': 'btn btn-default' }, "delete": { label: 'Delete', @@ -191,7 +193,8 @@ angular.module('UserFormDefinition', []) label: 'Edit', ngClick: "edit('permissions', \{\{ permission.id \}\}, '\{\{ permission.name \}\}')", icon: 'icon-edit', - awToolTip: 'Edit the permission' + awToolTip: 'Edit the permission', + 'class': 'btn btn-default' }, "delete": { diff --git a/awx/ui/static/js/helpers/Groups.js b/awx/ui/static/js/helpers/Groups.js index e22ed9e653..2d9d097275 100644 --- a/awx/ui/static/js/helpers/Groups.js +++ b/awx/ui/static/js/helpers/Groups.js @@ -72,7 +72,7 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', ' }); scope.createGroup = function() { - $('#form-modal').modal('hide'); + $('#form-modal').modal('hide'); GroupsAdd({ inventory_id: inventory_id, group_id: group_id }); } @@ -101,6 +101,14 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', ' scope.formModalCancelShow = true; scope.parseType = 'yaml'; ParseTypeChange(scope); + + $('#form-modal').on('hidden.bs.modal', function() { + var me = $(this); + $('.modal-backdrop').each(function(index) { + $(this).remove(); + }); + me.unbind('hidden.bs.modal'); + }); $('#form-modal .btn-none').removeClass('btn-none').addClass('btn-success'); diff --git a/awx/ui/static/js/lists/Credentials.js b/awx/ui/static/js/lists/Credentials.js index 1708f551ee..14ad2169a8 100644 --- a/awx/ui/static/js/lists/Credentials.js +++ b/awx/ui/static/js/lists/Credentials.js @@ -59,7 +59,7 @@ angular.module('CredentialsListDefinition', []) ngClick: "editCredential(\{\{ credential.id \}\})", icon: 'icon-edit', label: 'Edit', - "class": 'btn-mini', + "class": 'btn-mini btn-default', awToolTip: 'View/Edit credential' }, diff --git a/awx/ui/static/js/lists/Groups.js b/awx/ui/static/js/lists/Groups.js index 5b5e51d972..7b76f4d02f 100644 --- a/awx/ui/static/js/lists/Groups.js +++ b/awx/ui/static/js/lists/Groups.js @@ -41,10 +41,10 @@ angular.module('GroupListDefinition', []) "or to the selected parent group by clicking the Select button. You can also create a new group by clicking the " + "Create New Group button.", dataPlacement: 'left', - dataContainer: "#form-modal", + dataContainer: '#form-modal .modal-content', icon: "icon-question-sign", mode: 'all', - 'class': 'btn-mini btn-info', + 'class': 'btn-mini btn-info btn-help', awToolTip: 'Click for help', dataTitle: 'Adding Groups', id: 'group-help-button', @@ -57,7 +57,7 @@ angular.module('GroupListDefinition', []) label: 'Edit', ngClick: "editGroup(\{\{ group.id \}\})", icon: 'icon-edit', - "class": 'btn-mini', + "class": 'btn-mini btn-default', awToolTip: 'View/Edit group' }, diff --git a/awx/ui/static/js/lists/Hosts.js b/awx/ui/static/js/lists/Hosts.js index 5508c05484..df78cc9df5 100644 --- a/awx/ui/static/js/lists/Hosts.js +++ b/awx/ui/static/js/lists/Hosts.js @@ -32,10 +32,10 @@ angular.module('HostListDefinition', []) help: { awPopOver: "Select hosts by clicking on each host you wish to add. Add the selected hosts to the group by clicking the Select button.", dataPlacement: 'left', - dataContainer: "#form-modal", + dataContainer: '#form-modal .modal-content', icon: "icon-question-sign", mode: 'all', - 'class': 'btn-mini btn-info', + 'class': 'btn-mini btn-info btn-help', awToolTip: 'Click for help', dataTitle: 'Selecting Hosts', iconSize: 'large', @@ -48,7 +48,7 @@ angular.module('HostListDefinition', []) label: 'Edit', ngClick: "editHost(\{\{ host.id \}\})", icon: 'icon-edit', - "class": 'btn-mini', + "class": 'btn-mini btn-default', awToolTip: 'View/Edit host' }, diff --git a/awx/ui/static/js/lists/Inventories.js b/awx/ui/static/js/lists/Inventories.js index b93bb340ac..5d4b35051e 100644 --- a/awx/ui/static/js/lists/Inventories.js +++ b/awx/ui/static/js/lists/Inventories.js @@ -64,7 +64,7 @@ angular.module('InventoriesListDefinition', []) label: 'Edit', ngClick: "editInventory(\{\{ inventory.id \}\})", icon: 'icon-edit', - "class": 'btn-mini', + "class": 'btn-mini btn-default', awToolTip: 'View/Edit inventory' }, diff --git a/awx/ui/static/js/lists/JobEvents.js b/awx/ui/static/js/lists/JobEvents.js index beb60543f8..ea2a8bebd3 100644 --- a/awx/ui/static/js/lists/JobEvents.js +++ b/awx/ui/static/js/lists/JobEvents.js @@ -70,7 +70,7 @@ angular.module('JobEventsListDefinition', []) label: 'Details', ngClick: "jobDetails()", icon: 'icon-zoom-in', - "class": 'btn btn-mini', + "class": 'btn btn-default btn-mini', awToolTip: 'Edit job details', mode: 'all' }, @@ -78,7 +78,7 @@ angular.module('JobEventsListDefinition', []) label: 'Hosts', icon: 'icon-th-large', ngClick: "jobSummary()", - "class": 'btn btn-mini', + "class": 'btn btn-default btn-mini', awToolTip: 'View host summary', mode: 'all' } @@ -89,7 +89,7 @@ angular.module('JobEventsListDefinition', []) label: 'View', ngClick: "viewJobEvent(\{\{ jobevent.id \}\})", icon: 'icon-zoom-in', - "class": 'btn-mini', + "class": 'btn-default btn-mini', awToolTip: 'View event details' } } diff --git a/awx/ui/static/js/lists/JobHosts.js b/awx/ui/static/js/lists/JobHosts.js index 06441edbfb..28b28e9ff5 100644 --- a/awx/ui/static/js/lists/JobHosts.js +++ b/awx/ui/static/js/lists/JobHosts.js @@ -68,7 +68,7 @@ angular.module('JobHostDefinition', []) label: 'Details', icon: 'icon-edit', ngClick: "jobDetails()", - "class": 'btn btn-mini', + "class": 'btn btn-default btn-mini', awToolTip: 'Edit job details', mode: 'all' }, @@ -76,7 +76,7 @@ angular.module('JobHostDefinition', []) label: 'Events', icon: 'icon-list-ul', ngClick: "jobEvents()", - "class": 'btn btn-mini', + "class": 'btn btn-default btn-mini', awToolTip: 'View job events', mode: 'all' }, @@ -94,8 +94,8 @@ angular.module('JobHostDefinition', []) 'class': 'btn-info btn-mini btn-help', awToolTip: 'Click for help', dataTitle: 'Job Host Summary', - iconSize: 'large', - id: 'jobhost-help-button' + id: 'jobhost-help-button', + iconSize: 'large' } }, diff --git a/awx/ui/static/js/lists/JobTemplates.js b/awx/ui/static/js/lists/JobTemplates.js index 93bd7ca36c..3b1d4a4121 100644 --- a/awx/ui/static/js/lists/JobTemplates.js +++ b/awx/ui/static/js/lists/JobTemplates.js @@ -46,7 +46,7 @@ angular.module('JobTemplatesListDefinition', []) ngClick: "editJobTemplate(\{\{ job_template.id \}\})", icon: 'icon-edit', awToolTip: 'Edit template', - "class": 'btn-mini' + "class": 'btn-default btn-mini' }, submit: { label: 'Launch', diff --git a/awx/ui/static/js/lists/Jobs.js b/awx/ui/static/js/lists/Jobs.js index 0843a41341..6b771938a9 100644 --- a/awx/ui/static/js/lists/Jobs.js +++ b/awx/ui/static/js/lists/Jobs.js @@ -70,7 +70,7 @@ angular.module('JobsListDefinition', []) label: 'Hosts', icon: 'icon-th-large', ngClick: "viewSummary(\{{ job.id \}\}, '\{\{ job.name \}\}')", - "class": 'btn btn-mini', + "class": 'btn btn-default btn-mini', awToolTip: 'View host summary', ngDisabled: "job.status == 'new'" }, @@ -79,7 +79,7 @@ angular.module('JobsListDefinition', []) icon: 'icon-list-ul', mode: 'all', ngClick: "viewEvents(\{{ job.id \}\}, '\{\{ job.name \}\}')", - "class": 'btn btn-mini', + "class": 'btn btn-default btn-mini', awToolTip: 'View events', ngDisabled: "job.status == 'new'" }, @@ -87,7 +87,7 @@ angular.module('JobsListDefinition', []) label: 'Details', icon: 'icon-zoom-in', ngClick: "editJob(\{\{ job.id \}\}, '\{\{ job.name \}\}')", - "class": 'btn btn-mini', + "class": 'btn btn-default btn-mini', awToolTip: 'View job details' }, rerun: { diff --git a/awx/ui/static/js/lists/Organizations.js b/awx/ui/static/js/lists/Organizations.js index 1d72d36984..4a63f2cdee 100644 --- a/awx/ui/static/js/lists/Organizations.js +++ b/awx/ui/static/js/lists/Organizations.js @@ -43,7 +43,7 @@ angular.module('OrganizationListDefinition', []) label: 'Edit', ngClick: "editOrganization(\{\{ organization.id \}\})", icon: 'icon-edit', - "class": 'btn-mini', + "class": 'btn-mini btn-default', awToolTip: 'View/Edit organization' }, diff --git a/awx/ui/static/js/lists/Permissions.js b/awx/ui/static/js/lists/Permissions.js index 36935c3bb1..d4b4783213 100644 --- a/awx/ui/static/js/lists/Permissions.js +++ b/awx/ui/static/js/lists/Permissions.js @@ -57,7 +57,7 @@ angular.module('PermissionListDefinition', []) label: 'Edit', ngClick: "editPermission(\{\{ permission.id \}\})", icon: 'icon-edit', - "class": 'btn-mini', + "class": 'btn-mini btn-default', awToolTip: 'View/Edit permission' }, diff --git a/awx/ui/static/js/lists/Projects.js b/awx/ui/static/js/lists/Projects.js index a52e4c53e7..f08084e2bf 100644 --- a/awx/ui/static/js/lists/Projects.js +++ b/awx/ui/static/js/lists/Projects.js @@ -45,7 +45,7 @@ angular.module('ProjectsListDefinition', []) label: 'Edit', ngClick: "editProject(\{\{ project.id \}\})", icon: 'icon-edit', - "class": 'btn-mini', + "class": 'btn-mini btn-default', awToolTip: 'View/edit project' }, diff --git a/awx/ui/static/js/lists/Teams.js b/awx/ui/static/js/lists/Teams.js index b1d3b58bf0..5bf19dd612 100644 --- a/awx/ui/static/js/lists/Teams.js +++ b/awx/ui/static/js/lists/Teams.js @@ -50,7 +50,7 @@ angular.module('TeamsListDefinition', []) label: 'Edit', ngClick: "editTeam(\{\{ team.id \}\})", icon: 'icon-edit', - "class": 'btn-mini', + "class": 'btn-mini btn-default', awToolTip: 'View/Edit team' }, diff --git a/awx/ui/static/js/lists/Users.js b/awx/ui/static/js/lists/Users.js index 2f40477c57..3130ce4e32 100644 --- a/awx/ui/static/js/lists/Users.js +++ b/awx/ui/static/js/lists/Users.js @@ -50,7 +50,7 @@ angular.module('UserListDefinition', []) label: 'Edit', ngClick: "editUser(\{\{ user.id \}\})", icon: 'icon-edit', - "class": 'btn-mini', + "class": 'btn-mini btn-default', awToolTip: 'View/Edit user' }, diff --git a/awx/ui/static/lib/ansible/directives.js b/awx/ui/static/lib/ansible/directives.js index d99819b468..95f3510114 100644 --- a/awx/ui/static/lib/ansible/directives.js +++ b/awx/ui/static/lib/ansible/directives.js @@ -187,7 +187,15 @@ angular.module('AWDirectives', ['RestServices']) return function(scope, element, attrs) { var delay = (attrs.delay != undefined && attrs.delay != null) ? attrs.delay : $AnsibleConfig.tooltip_delay; var placement = (attrs.placement != undefined && attrs.placement != null) ? attrs.placement : 'left'; - $(element).tooltip({ placement: placement, delay: delay, title: attrs.awToolTip }); + $(element).on('hidden.bs.tooltip', function( ) { + // TB3RC1 is leaving behind tooltip
elements. This will remove them + // after a tooltip fades away. If not, they lay overtop of other elements and + // honk up the page. + $('.tooltip').each(function(index) { + $(this).remove(); + }); + }); + $(element).tooltip({ placement: placement, delay: delay, title: attrs.awToolTip, container: 'body' }); } }) diff --git a/awx/ui/static/lib/ansible/form-generator.js b/awx/ui/static/lib/ansible/form-generator.js index 061fdb0999..de50650319 100644 --- a/awx/ui/static/lib/ansible/form-generator.js +++ b/awx/ui/static/lib/ansible/form-generator.js @@ -69,6 +69,11 @@ angular.module('FormGenerator', ['GeneratorHelpers', 'ngCookies']) this.applyDefaults(); } + // Remove any lingering tooltip
elements + $('.tooltip').each( function(index) { + $(this).remove(); + }); + if (options.modal) { this.scope.formHeader = (options.mode == 'add') ? form.addTitle : form.editTitle; //Default title for default modal this.scope.formModalInfo = false //Disable info button for default modal @@ -338,7 +343,7 @@ angular.module('FormGenerator', ['GeneratorHelpers', 'ngCookies']) } if (field.clear) { - html += "\n"; if (field.ask) { html += "\n
\n"; } @@ -564,7 +569,7 @@ angular.module('FormGenerator', ['GeneratorHelpers', 'ngCookies']) html += "class=\"" + getFieldWidth() + "\">\n"; html += "
\n"; html += "\n"; - html += "\n"; + html += "\n"; html += "\n"; html += ""; html += "
"; - html += ""; html += ""; html += "
\n"; - html += "
\n"; + html += "
\n"; html += "
"; html += "