Inventory refactor: lists now uniformly set tool tips placement to 'top'. Fixed an ugly scope bug when using modals that call LookupInit. The callbacks inside search were being left in the inventory scope and fired everytime the host view refreshed. Added a cleanup method in search to remove its callbacks. Calling the cleanup method on modal close fixes.

This commit is contained in:
Chris Houseknecht
2014-01-13 20:55:28 +00:00
parent 6d205213db
commit afb151bf29
19 changed files with 117 additions and 85 deletions

View File

@@ -450,7 +450,7 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
var inventory_id = params.inventory_id; var inventory_id = params.inventory_id;
var group_id = (params.group_id !== undefined) ? params.group_id : null; var group_id = (params.group_id !== undefined) ? params.group_id : null;
var inventory_scope = params.scope; var parent_scope = params.scope;
// Inject dynamic view // Inject dynamic view
var defaultUrl = (group_id !== null) ? GetBasePath('groups') + group_id + '/children/' : var defaultUrl = (group_id !== null) ? GetBasePath('groups') + group_id + '/children/' :
@@ -460,14 +460,14 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
var scope = generator.inject(form, { mode: 'add', modal: true, related: false, show_modal: false }); var scope = generator.inject(form, { mode: 'add', modal: true, related: false, show_modal: false });
var groupCreated = false; var groupCreated = false;
$('#form-modal .btn-none').removeClass('btn-none').addClass('btn-success');
scope.formModalActionLabel = 'Save'; scope.formModalActionLabel = 'Save';
scope.formModalCancelShow = true; scope.formModalCancelShow = true;
scope.parseType = 'yaml'; scope.parseType = 'yaml';
scope.source = null; scope.source = null;
ParseTypeChange(scope); ParseTypeChange(scope);
$('#form-modal .btn-none').removeClass('btn-none').addClass('btn-success');
generator.reset(); generator.reset();
var master={}; var master={};
@@ -475,24 +475,28 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
scope.removeAddTreeRefreshed(); scope.removeAddTreeRefreshed();
} }
scope.removeAddTreeRefreshed = scope.$on('GroupTreeRefreshed', function(e) { scope.removeAddTreeRefreshed = scope.$on('GroupTreeRefreshed', function(e) {
$rootScope.formModalHeader = null;
$rootScope.formModalCancleShow= null;
$rootScope.formModalActionLabel = null;
Wait('stop'); Wait('stop');
$('#form-modal').modal('hide'); $('#form-modal').modal('hide');
scope.removeAddTreeRefreshed(); scope.removeAddTreeRefreshed();
}); });
if (scope.removeSaveComplete) { if (scope.removeSaveComplete) {
scope.removeSaveComplete(); scope.removeSaveComplete();
} }
scope.removeSaveComplete = scope.$on('SaveComplete', function(e, group_id, error) { scope.removeSaveComplete = scope.$on('SaveComplete', function(e, group_id, error) {
if (!error) { if (!error) {
scope.searchCleanup();
scope.formModalActionDisabled = false; scope.formModalActionDisabled = false;
scope.showGroupHelp = false; //get rid of the Hint scope.showGroupHelp = false; //get rid of the Hint
BuildTree({ scope: inventory_scope, inventory_id: inventory_id, refresh: true, new_group_id: group_id }); BuildTree({ scope: parent_scope, inventory_id: inventory_id, refresh: true, new_group_id: group_id });
} }
}); });
if (scope.removeFormSaveSuccess) { if (scope.removeFormSaveSuccess) {
scope.removeFormSaveSuccess(); scope.removeFormSaveSuccess();
} }
scope.removeFormSaveSuccess = scope.$on('formSaveSuccess', function(e, group_id, url) { scope.removeFormSaveSuccess = scope.$on('formSaveSuccess', function(e, group_id, url) {
@@ -575,6 +579,12 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
} }
}); });
// Cancel
scope.cancelModal = function() {
if (scope.searchCleanup) {
scope.searchCleanup();
}
}
// Save // Save
scope.formModalAction = function() { scope.formModalAction = function() {
@@ -637,12 +647,6 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
}); });
} }
// Cancel
scope.formReset = function() {
// Defaults
generator.reset();
};
var choicesReady = 0; var choicesReady = 0;
if (scope.removeChoicesReady) { if (scope.removeChoicesReady) {
@@ -699,7 +703,6 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
var form = GroupForm; var form = GroupForm;
var defaultUrl = GetBasePath('groups') + group_id + '/'; var defaultUrl = GetBasePath('groups') + group_id + '/';
var master = {}; var master = {};
var relatedSets = {};
// Load the modal form // Load the modal form
var scope = generator.inject(form, { mode: 'edit', modal: true, related: false, show_modal: false }); var scope = generator.inject(form, { mode: 'edit', modal: true, related: false, show_modal: false });
@@ -726,10 +729,6 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
scope.groupLoadedRemove(); scope.groupLoadedRemove();
} }
scope.groupLoadedRemove = scope.$on('groupLoaded', function() { scope.groupLoadedRemove = scope.$on('groupLoaded', function() {
for (var set in relatedSets) {
scope.search(relatedSets[set].iterator);
}
if (scope.variable_url) { if (scope.variable_url) {
// get group variables // get group variables
Rest.setUrl(scope.variable_url); Rest.setUrl(scope.variable_url);
@@ -871,12 +870,6 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
master[fld] = scope[fld]; master[fld] = scope[fld];
} }
} }
var related = data.related;
for (var set in form.related) {
if (related[set]) {
relatedSets[set] = { url: related[set], iterator: form.related[set].iterator };
}
}
scope.variable_url = data.related.variable_data; scope.variable_url = data.related.variable_data;
scope.source_url = data.related.inventory_source; scope.source_url = data.related.inventory_source;
$('#form-modal').modal('show'); $('#form-modal').modal('show');
@@ -926,6 +919,7 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
} }
scope.removeSaveComplete = scope.$on('SaveComplete', function(e, error) { scope.removeSaveComplete = scope.$on('SaveComplete', function(e, error) {
if (!error) { if (!error) {
// Update the view with any changes
UpdateGroup({ UpdateGroup({
scope: parent_scope, scope: parent_scope,
group_id: group_id, group_id: group_id,
@@ -935,6 +929,8 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
has_inventory_sources: (scope.source) ? true : false has_inventory_sources: (scope.source) ? true : false
} }
}); });
//Clean up
scope.searchCleanup();
scope.formModalActionDisabled = false; scope.formModalActionDisabled = false;
scope.showGroupHelp = false; //get rid of the Hint scope.showGroupHelp = false; //get rid of the Hint
Wait('stop'); Wait('stop');
@@ -1025,6 +1021,13 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
} }
}); });
// Cancel
scope.cancelModal = function() {
if (scope.searchCleanup) {
scope.searchCleanup();
}
}
// Save // Save
scope.formModalAction = function() { scope.formModalAction = function() {
Wait('start'); Wait('start');
@@ -1121,16 +1124,6 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', '
}); });
} }
// Cancel
scope.formReset = function() {
generator.reset();
for (var fld in master) {
scope[fld] = master[fld];
}
scope.parseType = 'yaml';
$('#s2id_group_source_regions').select2('data', master['source_regions']);
}
} }
}]) }])

View File

@@ -38,6 +38,7 @@ angular.module('HostsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', 'H
SearchInit({ scope: scope, set: 'hosts', list: InventoryHosts, url: url }); SearchInit({ scope: scope, set: 'hosts', list: InventoryHosts, url: url });
PaginateInit({ scope: scope, list: InventoryHosts, url: url }); PaginateInit({ scope: scope, list: InventoryHosts, url: url });
console.log('before call to hosts search')
scope.search(InventoryHosts.iterator); scope.search(InventoryHosts.iterator);
} }
}]) }])

View File

@@ -27,11 +27,11 @@ angular.module('LookUpHelper', [ 'RestServices', 'Utilities', 'SearchHelper', 'P
var defaultUrl; var defaultUrl;
if (params.url) { if (params.url) {
// pass in a url value to override the default // pass in a url value to override the default
defaultUrl = params.url; defaultUrl = params.url;
} }
else { else {
defaultUrl = (list.name == 'inventories') ? GetBasePath('inventory') : GetBasePath(list.name); defaultUrl = (list.name == 'inventories') ? GetBasePath('inventory') : GetBasePath(list.name);
} }
// Show pop-up // Show pop-up
@@ -67,15 +67,15 @@ angular.module('LookUpHelper', [ 'RestServices', 'Utilities', 'SearchHelper', 'P
found = true; found = true;
scope[field] = listScope[list.name][i].id; scope[field] = listScope[list.name][i].id;
if (scope[form.name + '_form'] && form.fields[field] && form.fields[field].sourceModel) { if (scope[form.name + '_form'] && form.fields[field] && form.fields[field].sourceModel) {
scope[form.fields[field].sourceModel + '_' + form.fields[field].sourceField] = scope[form.fields[field].sourceModel + '_' + form.fields[field].sourceField] =
listScope[list.name][i][form.fields[field].sourceField]; listScope[list.name][i][form.fields[field].sourceField];
if (scope[form.name + '_form'][form.fields[field].sourceModel + '_' + form.fields[field].sourceField]) { if (scope[form.name + '_form'][form.fields[field].sourceModel + '_' + form.fields[field].sourceField]) {
scope[form.name + '_form'][form.fields[field].sourceModel + '_' + form.fields[field].sourceField] scope[form.name + '_form'][form.fields[field].sourceModel + '_' + form.fields[field].sourceField]
.$setValidity('awlookup',true); .$setValidity('awlookup',true);
} }
} }
if (scope[form.name + '_form']) { if (scope[form.name + '_form']) {
scope[form.name + '_form'].$setDirty(); scope[form.name + '_form'].$setDirty();
} }
listGenerator.hide(); listGenerator.hide();
} }
@@ -94,12 +94,12 @@ angular.module('LookUpHelper', [ 'RestServices', 'Utilities', 'SearchHelper', 'P
listScope['toggle_' + list.iterator] = function(id) { listScope['toggle_' + list.iterator] = function(id) {
for (var i=0; i < scope[list.name].length; i++) { for (var i=0; i < scope[list.name].length; i++) {
if (listScope[list.name][i]['id'] == id) { if (listScope[list.name][i]['id'] == id) {
listScope[list.name][i]['checked'] = '1'; listScope[list.name][i]['checked'] = '1';
listScope[list.name][i]['success_class'] = 'success'; listScope[list.name][i]['success_class'] = 'success';
} }
else { else {
listScope[list.name][i]['checked'] = '0'; listScope[list.name][i]['checked'] = '0';
listScope[list.name][i]['success_class'] = ''; listScope[list.name][i]['success_class'] = '';
} }
} }
} }
@@ -114,10 +114,10 @@ angular.module('LookUpHelper', [ 'RestServices', 'Utilities', 'SearchHelper', 'P
listScope.lookupPostRefreshRemove = scope.$on('PostRefresh', function() { listScope.lookupPostRefreshRemove = scope.$on('PostRefresh', function() {
for (var fld in list.fields) { for (var fld in list.fields) {
if (list.fields[fld].type && list.fields[fld].type == 'date') { if (list.fields[fld].type && list.fields[fld].type == 'date') {
//convert dates to our standard format //convert dates to our standard format
for (var i=0; i < scope[list.name].length; i++) { for (var i=0; i < scope[list.name].length; i++) {
scope[list.name][i][fld] = FormatDate(new Date(scope[list.name][i][fld])); scope[list.name][i][fld] = FormatDate(new Date(scope[list.name][i][fld]));
} }
} }
} }
// List generator creates the form, resetting it and losing the previously selected value. // List generator creates the form, resetting it and losing the previously selected value.

View File

@@ -22,7 +22,8 @@ angular.module('RefreshHelper', ['RestServices', 'Utilities'])
var set = params.set; var set = params.set;
var iterator = params.iterator; var iterator = params.iterator;
var url = params.url; var url = params.url;
console.log('Inside refresh');
console.log(url);
scope.current_url = url; scope.current_url = url;
Rest.setUrl(url); Rest.setUrl(url);
Rest.get() Rest.get()

View File

@@ -525,5 +525,15 @@ angular.module('SearchHelper', ['RestServices', 'Utilities', 'RefreshHelper'])
scope.search(list.iterator); scope.search(list.iterator);
} }
// Call after modal dialogs to remove any lingering callbacks
scope.searchCleanup = function() {
console.log('search cleanup!');
scope.removeDoSearch();
scope.removeFoundObject();
scope.removeResultWarning();
scope.removePrepareSearch();
scope.removePrepareSearch2();
}
} }
}]); }]);

View File

@@ -59,7 +59,8 @@ angular.module('CloudCredentialsListDefinition', [])
icon: 'fa-edit', icon: 'fa-edit',
label: 'Edit', label: 'Edit',
"class": 'btn-sm', "class": 'btn-sm',
awToolTip: 'View/Edit credential' awToolTip: 'View/Edit credential',
dataPlacement: 'top'
}, },
"delete": { "delete": {
@@ -67,7 +68,8 @@ angular.module('CloudCredentialsListDefinition', [])
icon: 'fa-trash-o', icon: 'fa-trash-o',
label: 'Delete', label: 'Delete',
"class": 'btn-sm', "class": 'btn-sm',
awToolTip: 'Delete credential' awToolTip: 'Delete credential',
dataPlacement: 'top'
} }
} }
}); });

View File

@@ -73,7 +73,8 @@ angular.module('CredentialsListDefinition', [])
icon: 'fa-edit', icon: 'fa-edit',
label: 'Edit', label: 'Edit',
"class": 'btn-sm', "class": 'btn-sm',
awToolTip: 'View/Edit credential' awToolTip: 'View/Edit credential',
dataPlacement: 'top'
}, },
"delete": { "delete": {
@@ -81,7 +82,8 @@ angular.module('CredentialsListDefinition', [])
icon: 'fa-trash', icon: 'fa-trash',
label: 'Delete', label: 'Delete',
"class": 'btn-sm', "class": 'btn-sm',
awToolTip: 'Delete credential' awToolTip: 'Delete credential',
dataPlacement: 'top'
} }
} }
}); });

View File

@@ -44,7 +44,8 @@ angular.module('GroupListDefinition', [])
ngClick: "editGroup(\{\{ group.id \}\})", ngClick: "editGroup(\{\{ group.id \}\})",
icon: 'icon-edit', icon: 'icon-edit',
"class": 'btn-xs', "class": 'btn-xs',
awToolTip: 'View/Edit group' awToolTip: 'View/Edit group',
dataPlacement: 'top'
}, },
"delete": { "delete": {
@@ -52,7 +53,8 @@ angular.module('GroupListDefinition', [])
ngClick: "deleteGroup(\{\{ group.id \}\},'\{\{ group.name \}\}')", ngClick: "deleteGroup(\{\{ group.id \}\},'\{\{ group.name \}\}')",
icon: 'icon-trash', icon: 'icon-trash',
"class": 'btn-xs', "class": 'btn-xs',
awToolTip: 'Delete group' awToolTip: 'Delete group',
dataPlacement: 'top'
} }
} }
}); });

View File

@@ -44,7 +44,8 @@ angular.module('HostListDefinition', [])
ngClick: "editHost(\{\{ host.id \}\})", ngClick: "editHost(\{\{ host.id \}\})",
icon: 'icon-edit', icon: 'icon-edit',
"class": 'btn-xs', "class": 'btn-xs',
awToolTip: 'View/Edit host' awToolTip: 'View/Edit host',
dataPlacement: 'top'
}, },
"delete": { "delete": {
@@ -52,7 +53,8 @@ angular.module('HostListDefinition', [])
ngClick: "deleteHost(\{\{ host.id \}\},'\{\{ host.name \}\}')", ngClick: "deleteHost(\{\{ host.id \}\},'\{\{ host.name \}\}')",
icon: 'icon-trash', icon: 'icon-trash',
"class": 'btn-xs', "class": 'btn-xs',
awToolTip: 'Delete host' awToolTip: 'Delete host',
dataPlacement: 'top'
} }
} }
}); });

View File

@@ -101,14 +101,16 @@ angular.module('InventoriesListDefinition', [])
ngClick: "editInventory(\{\{ inventory.id \}\})", ngClick: "editInventory(\{\{ inventory.id \}\})",
icon: 'icon-edit', icon: 'icon-edit',
"class": 'btn-xs btn-default', "class": 'btn-xs btn-default',
awToolTip: 'Edit inventory' awToolTip: 'Edit inventory',
dataPlacement: 'top'
}, },
"delete": { "delete": {
label: 'Delete', label: 'Delete',
ngClick: "deleteInventory(\{\{ inventory.id \}\},'\{\{ inventory.name \}\}')", ngClick: "deleteInventory(\{\{ inventory.id \}\},'\{\{ inventory.name \}\}')",
icon: 'icon-trash', icon: 'icon-trash',
"class": 'btn-xs btn-danger', "class": 'btn-xs btn-danger',
awToolTip: 'Delete inventory' awToolTip: 'Delete inventory',
dataPlacement: 'top'
}, },
dropdown: { dropdown: {
type: 'DropDown', type: 'DropDown',

View File

@@ -100,13 +100,12 @@ angular.module('InventoryHostsDefinition', [])
awToolTip: "Create a new host" awToolTip: "Create a new host"
}, },
stream: { stream: {
mode: 'all',
ngClick: "showActivity()", ngClick: "showActivity()",
awToolTip: "View Activity Stream", awToolTip: "View Activity Stream",
mode: 'all',
ngShow: "user_is_superuser" ngShow: "user_is_superuser"
}, },
help: { help: {
dataPlacement: 'top',
mode: 'all', mode: 'all',
awToolTip: awToolTip:
//"<div style=\"text-align:left;\"><img src=\"/static/img/cow.png\" style=\"width:50px; height:56px; float:left; padding-right:5px;\">" + //"<div style=\"text-align:left;\"><img src=\"/static/img/cow.png\" style=\"width:50px; height:56px; float:left; padding-right:5px;\">" +

View File

@@ -50,7 +50,8 @@ angular.module('JobTemplatesListDefinition', [])
ngClick: "editJobTemplate(\{\{ job_template.id \}\})", ngClick: "editJobTemplate(\{\{ job_template.id \}\})",
icon: 'icon-edit', icon: 'icon-edit',
awToolTip: 'Edit template', awToolTip: 'Edit template',
"class": 'btn-default btn-xs' "class": 'btn-default btn-xs',
dataPlacement: 'top'
}, },
submit: { submit: {
label: 'Launch', label: 'Launch',
@@ -58,14 +59,16 @@ angular.module('JobTemplatesListDefinition', [])
mode: 'all', mode: 'all',
"class": 'btn-xs btn-success', "class": 'btn-xs btn-success',
ngClick: 'submitJob(\{\{ job_template.id \}\})', ngClick: 'submitJob(\{\{ job_template.id \}\})',
awToolTip: 'Start a job using this template' awToolTip: 'Start a job using this template',
dataPlacement: 'top'
}, },
"delete": { "delete": {
label: 'Delete', label: 'Delete',
ngClick: "deleteJobTemplate(\{\{ job_template.id \}\},'\{\{ job_template.name \}\}')", ngClick: "deleteJobTemplate(\{\{ job_template.id \}\},'\{\{ job_template.name \}\}')",
icon: 'icon-trash', icon: 'icon-trash',
"class": 'btn-danger btn-xs', "class": 'btn-danger btn-xs',
awToolTip: 'Delete template' awToolTip: 'Delete template',
dataPlacement: 'top'
} }
} }
}); });

View File

@@ -89,7 +89,8 @@ angular.module('JobsListDefinition', [])
mode: 'all', mode: 'all',
ngClick: "submitJob(\{\{ job.id \}\}, '\{\{ job.summary_fields.job_template.name \}\}' )", ngClick: "submitJob(\{\{ job.id \}\}, '\{\{ job.summary_fields.job_template.name \}\}' )",
'class': 'btn-success btn-xs', 'class': 'btn-success btn-xs',
awToolTip: 'Relaunch the job template, running it again from scratch' awToolTip: 'Relaunch the job template, running it again from scratch',
dataPlacement: 'top'
}, },
cancel: { cancel: {
label: 'Cancel', label: 'Cancel',
@@ -98,7 +99,8 @@ angular.module('JobsListDefinition', [])
ngClick: 'deleteJob(\{\{ job.id \}\})', ngClick: 'deleteJob(\{\{ job.id \}\})',
"class": 'btn-danger btn-xs delete-btn', "class": 'btn-danger btn-xs delete-btn',
awToolTip: 'Cancel a running or pending job', awToolTip: 'Cancel a running or pending job',
ngShow: "job.status == 'pending' || job.status == 'running' || job.status == 'waiting'" ngShow: "job.status == 'pending' || job.status == 'running' || job.status == 'waiting'",
dataPlacement: 'top'
}, },
"delete": { "delete": {
label: 'Delete', label: 'Delete',
@@ -107,7 +109,8 @@ angular.module('JobsListDefinition', [])
ngClick: 'deleteJob(\{\{ job.id \}\})', ngClick: 'deleteJob(\{\{ job.id \}\})',
"class": 'btn-danger btn-xs delete-btn', "class": 'btn-danger btn-xs delete-btn',
awToolTip: 'Remove the selected job from the database', awToolTip: 'Remove the selected job from the database',
ngShow: "job.status != 'pending' && job.status != 'running' && job.status != 'waiting'" ngShow: "job.status != 'pending' && job.status != 'running' && job.status != 'waiting'",
dataPlacement: 'top'
}, },
dropdown: { dropdown: {
type: 'DropDown', type: 'DropDown',

View File

@@ -47,7 +47,8 @@ angular.module('OrganizationListDefinition', [])
ngClick: "editOrganization(\{\{ organization.id \}\})", ngClick: "editOrganization(\{\{ organization.id \}\})",
icon: 'icon-edit', icon: 'icon-edit',
"class": 'btn-xs btn-default', "class": 'btn-xs btn-default',
awToolTip: 'View/Edit organization' awToolTip: 'View/Edit organization',
dataPlacement: 'top'
}, },
"delete": { "delete": {
@@ -55,7 +56,8 @@ angular.module('OrganizationListDefinition', [])
ngClick: "deleteOrganization(\{\{ organization.id \}\},'\{\{ organization.name \}\}')", ngClick: "deleteOrganization(\{\{ organization.id \}\},'\{\{ organization.name \}\}')",
icon: 'icon-trash', icon: 'icon-trash',
"class": 'btn-xs btn-danger', "class": 'btn-xs btn-danger',
awToolTip: 'Delete organization' awToolTip: 'Delete organization',
dataPlacement: 'top'
} }
} }
}); });

View File

@@ -62,7 +62,8 @@ angular.module('PermissionListDefinition', [])
ngClick: "editPermission(\{\{ permission.id \}\})", ngClick: "editPermission(\{\{ permission.id \}\})",
icon: 'icon-edit', icon: 'icon-edit',
"class": 'btn-xs btn-default', "class": 'btn-xs btn-default',
awToolTip: 'View/Edit permission' awToolTip: 'View/Edit permission',
dataPlacement: 'top'
}, },
"delete": { "delete": {
@@ -71,7 +72,8 @@ angular.module('PermissionListDefinition', [])
icon: 'icon-trash', icon: 'icon-trash',
"class": 'btn-xs btn-danger', "class": 'btn-xs btn-danger',
awToolTip: 'Delete permission', awToolTip: 'Delete permission',
ngShow: 'PermissionAddAllowed' ngShow: 'PermissionAddAllowed',
dataPlacement: 'top'
} }
} }
}); });

View File

@@ -95,7 +95,8 @@ angular.module('ProjectsListDefinition', [])
ngClick: "editProject(\{\{ project.id \}\})", ngClick: "editProject(\{\{ project.id \}\})",
icon: 'icon-edit', icon: 'icon-edit',
"class": 'btn-xs btn-default', "class": 'btn-xs btn-default',
awToolTip: 'View/edit project properties' awToolTip: 'View/edit project properties',
dataPlacement: 'top'
}, },
scm_update: { scm_update: {
label: 'Update', label: 'Update',
@@ -103,7 +104,8 @@ angular.module('ProjectsListDefinition', [])
"class": 'btn-xs btn-success', "class": 'btn-xs btn-success',
ngClick: 'SCMUpdate(\{\{ project.id \}\})', ngClick: 'SCMUpdate(\{\{ project.id \}\})',
awToolTip: "\{\{ project.scm_update_tooltip \}\}", awToolTip: "\{\{ project.scm_update_tooltip \}\}",
ngClass: "project.scm_type_class" ngClass: "project.scm_type_class",
dataPlacement: 'top'
}, },
cancel: { cancel: {
label: 'Cancel', label: 'Cancel',
@@ -111,7 +113,8 @@ angular.module('ProjectsListDefinition', [])
ngClick: "cancelUpdate(\{\{ project.id \}\}, '\{\{ project.name \}\}')", ngClick: "cancelUpdate(\{\{ project.id \}\}, '\{\{ project.name \}\}')",
"class": 'btn-danger btn-xs delete-btn', "class": 'btn-danger btn-xs delete-btn',
awToolTip: 'Cancel a running SCM update process', awToolTip: 'Cancel a running SCM update process',
ngShow: "project.status == 'updating'" ngShow: "project.status == 'updating'",
dataPlacement: 'top'
}, },
"delete": { "delete": {
label: 'Delete', label: 'Delete',
@@ -119,7 +122,8 @@ angular.module('ProjectsListDefinition', [])
icon: 'icon-trash', icon: 'icon-trash',
"class": 'btn-danger btn-xs delete-btn', "class": 'btn-danger btn-xs delete-btn',
awToolTip: 'Permanently remove project from the database', awToolTip: 'Permanently remove project from the database',
ngShow: "project.status !== 'updating'" ngShow: "project.status !== 'updating'",
dataPlacement: 'top'
} }
} }
}); });

View File

@@ -54,7 +54,8 @@ angular.module('TeamsListDefinition', [])
ngClick: "editTeam(\{\{ team.id \}\})", ngClick: "editTeam(\{\{ team.id \}\})",
icon: 'icon-edit', icon: 'icon-edit',
"class": 'btn-xs btn-default', "class": 'btn-xs btn-default',
awToolTip: 'View/Edit team' awToolTip: 'View/Edit team',
dataPlacement: 'top'
}, },
"delete": { "delete": {
@@ -62,7 +63,8 @@ angular.module('TeamsListDefinition', [])
ngClick: "deleteTeam(\{\{ team.id \}\},'\{\{ team.name \}\}')", ngClick: "deleteTeam(\{\{ team.id \}\},'\{\{ team.name \}\}')",
icon: 'icon-trash', icon: 'icon-trash',
"class": 'btn-xs btn-danger', "class": 'btn-xs btn-danger',
awToolTip: 'Delete team' awToolTip: 'Delete team',
dataPlacement: 'top'
} }
} }
}); });

View File

@@ -56,7 +56,8 @@ angular.module('UserListDefinition', [])
ngClick: "editUser(\{\{ user.id \}\})", ngClick: "editUser(\{\{ user.id \}\})",
icon: 'icon-edit', icon: 'icon-edit',
"class": 'btn-xs btn-default', "class": 'btn-xs btn-default',
awToolTip: 'View/Edit user' awToolTip: 'View/Edit user',
dataPlacement: 'top'
}, },
"delete": { "delete": {
@@ -64,7 +65,8 @@ angular.module('UserListDefinition', [])
ngClick: "deleteUser(\{\{ user.id \}\},'\{\{ user.username \}\}')", ngClick: "deleteUser(\{\{ user.id \}\},'\{\{ user.username \}\}')",
icon: 'icon-trash', icon: 'icon-trash',
"class": 'btn-xs btn-danger', "class": 'btn-xs btn-danger',
awToolTip: 'Delete user' awToolTip: 'Delete user',
dataPlacement: 'top'
} }
} }
}); });

View File

@@ -252,7 +252,7 @@
<div class="modal-footer"> <div class="modal-footer">
<button ng-show="formModalInfo !== undefined && formModalInfo != ''" ng-click="formModalInfoAction()" <button ng-show="formModalInfo !== undefined && formModalInfo != ''" ng-click="formModalInfoAction()"
class="btn btn-sm pull-left"><i class="fa fa-search-plus"></i> <span ng-bind="formModalInfo"></span></button> class="btn btn-sm pull-left"><i class="fa fa-search-plus"></i> <span ng-bind="formModalInfo"></span></button>
<a href="#" ng-show="formModalCancelShow" data-target="#form-modal" data-dismiss="modal" id="form_cancel_btn" class="btn btn-default">Cancel</a> <a href="#" ng-show="formModalCancelShow" data-target="#form-modal" ng-click="cancelModal()" data-dismiss="modal" id="form_cancel_btn" class="btn btn-default">Cancel</a>
<a href="" ng-bind="formModalActionLabel" ng-click="formModalAction()" ng-disabled="formModalActionDisabled" id="form_ok_btn" class="btn btn-primary"></a> <a href="" ng-bind="formModalActionLabel" ng-click="formModalAction()" ng-disabled="formModalActionDisabled" id="form_ok_btn" class="btn btn-primary"></a>
</div> </div>
</div><!-- modal-content --> </div><!-- modal-content -->