mirror of
https://github.com/ansible/awx.git
synced 2026-07-03 04:18:02 -02:30
Start of inventory re-write
This commit is contained in:
@@ -50,7 +50,7 @@ angular.module('CloudCredentialsListDefinition', [])
|
||||
label: 'Create New',
|
||||
mode: 'all', // One of: edit, select, all
|
||||
ngClick: 'addCredential()',
|
||||
"class": 'btn-success btn-xs',
|
||||
"class": 'btn-sm',
|
||||
awToolTip: 'Create a new credential'
|
||||
}
|
||||
},
|
||||
@@ -60,7 +60,7 @@ angular.module('CloudCredentialsListDefinition', [])
|
||||
ngClick: "editCredential(\{\{ credential.id \}\})",
|
||||
icon: 'icon-edit',
|
||||
label: 'Edit',
|
||||
"class": 'btn-xs btn-default',
|
||||
"class": 'btn-sm',
|
||||
awToolTip: 'View/Edit credential'
|
||||
},
|
||||
|
||||
@@ -68,7 +68,7 @@ angular.module('CloudCredentialsListDefinition', [])
|
||||
ngClick: "deleteCredential(\{\{ credential.id \}\},'\{\{ credential.name \}\}')",
|
||||
icon: 'icon-trash',
|
||||
label: 'Delete',
|
||||
"class": 'btn-xs btn-danger',
|
||||
"class": 'btn-sm',
|
||||
awToolTip: 'Delete credential'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -59,11 +59,11 @@ angular.module('CredentialsListDefinition', [])
|
||||
label: 'Create New',
|
||||
mode: 'all', // One of: edit, select, all
|
||||
ngClick: 'addCredential()',
|
||||
"class": 'btn-success btn-xs',
|
||||
"class": 'btn-sm',
|
||||
awToolTip: 'Create a new credential'
|
||||
},
|
||||
stream: {
|
||||
'class': "btn-primary btn-xs activity-btn",
|
||||
'class': "btn-sm activity-btn",
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
dataPlacement: "top",
|
||||
@@ -79,7 +79,7 @@ angular.module('CredentialsListDefinition', [])
|
||||
ngClick: "editCredential(\{\{ credential.id \}\})",
|
||||
icon: 'icon-edit',
|
||||
label: 'Edit',
|
||||
"class": 'btn-xs btn-default',
|
||||
"class": 'btn-sm',
|
||||
awToolTip: 'View/Edit credential'
|
||||
},
|
||||
|
||||
@@ -87,7 +87,7 @@ angular.module('CredentialsListDefinition', [])
|
||||
ngClick: "deleteCredential(\{\{ credential.id \}\},'\{\{ credential.name \}\}')",
|
||||
icon: 'icon-trash',
|
||||
label: 'Delete',
|
||||
"class": 'btn-xs btn-danger',
|
||||
"class": 'btn-sm',
|
||||
awToolTip: 'Delete credential'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,7 @@ angular.module('GroupListDefinition', [])
|
||||
dataContainer: '#form-modal .modal-content',
|
||||
icon: "icon-question-sign",
|
||||
mode: 'all',
|
||||
'class': 'btn-xs btn-info btn-help pull-right',
|
||||
'class': 'btn-xs btn-help pull-right',
|
||||
awToolTip: 'Click for help',
|
||||
dataTitle: 'Adding Groups',
|
||||
iconSize: 'large'
|
||||
@@ -47,7 +47,7 @@ angular.module('GroupListDefinition', [])
|
||||
label: 'Edit',
|
||||
ngClick: "editGroup(\{\{ group.id \}\})",
|
||||
icon: 'icon-edit',
|
||||
"class": 'btn-xs btn-default',
|
||||
"class": 'btn-xs',
|
||||
awToolTip: 'View/Edit group'
|
||||
},
|
||||
|
||||
@@ -55,7 +55,7 @@ angular.module('GroupListDefinition', [])
|
||||
label: 'Delete',
|
||||
ngClick: "deleteGroup(\{\{ group.id \}\},'\{\{ group.name \}\}')",
|
||||
icon: 'icon-trash',
|
||||
"class": 'btn-xs btn-danger',
|
||||
"class": 'btn-xs',
|
||||
awToolTip: 'Delete group'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -111,7 +111,7 @@ angular.module('HomeGroupListDefinition', [])
|
||||
|
||||
actions: {
|
||||
stream: {
|
||||
'class': "btn-primary btn-xs activity-btn",
|
||||
'class': "btn-xs activity-btn",
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
dataPlacement: "top",
|
||||
|
||||
@@ -82,7 +82,7 @@ angular.module('HomeHostListDefinition', [])
|
||||
|
||||
actions: {
|
||||
stream: {
|
||||
'class': "btn-primary btn-xs activity-btn",
|
||||
'class': "btn-xs activity-btn",
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
dataPlacement: "top",
|
||||
|
||||
@@ -47,7 +47,7 @@ angular.module('HostListDefinition', [])
|
||||
label: 'Edit',
|
||||
ngClick: "editHost(\{\{ host.id \}\})",
|
||||
icon: 'icon-edit',
|
||||
"class": 'btn-xs btn-default',
|
||||
"class": 'btn-xs',
|
||||
awToolTip: 'View/Edit host'
|
||||
},
|
||||
|
||||
@@ -55,7 +55,7 @@ angular.module('HostListDefinition', [])
|
||||
label: 'Delete',
|
||||
ngClick: "deleteHost(\{\{ host.id \}\},'\{\{ host.name \}\}')",
|
||||
icon: 'icon-trash',
|
||||
"class": 'btn-xs btn-danger',
|
||||
"class": 'btn-xs',
|
||||
awToolTip: 'Delete host'
|
||||
}
|
||||
}
|
||||
|
||||
@@ -82,28 +82,39 @@ angular.module('InventoriesListDefinition', [])
|
||||
|
||||
actions: {
|
||||
add: {
|
||||
label: 'Create New',
|
||||
label: 'Add',
|
||||
icon: 'icon-plus',
|
||||
mode: 'all', // One of: edit, select, all
|
||||
ngClick: 'addInventory()',
|
||||
"class": 'btn-xs btn-success',
|
||||
awToolTip: 'Create a new inventory'
|
||||
},
|
||||
stream: {
|
||||
'class': "btn-primary btn-xs activity-btn",
|
||||
label: 'Activity',
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
dataPlacement: "top",
|
||||
icon: "icon-comments-alt",
|
||||
mode: 'all',
|
||||
iconSize: 'large',
|
||||
ngShow: "user_is_superuser"
|
||||
}
|
||||
},
|
||||
|
||||
fieldActions: {
|
||||
|
||||
dropdown: {
|
||||
edit: {
|
||||
label: 'Edit',
|
||||
ngClick: "editInventory(\{\{ inventory.id \}\})",
|
||||
icon: 'icon-edit',
|
||||
"class": 'btn-xs btn-default',
|
||||
awToolTip: 'Edit inventory'
|
||||
},
|
||||
"delete": {
|
||||
label: 'Delete',
|
||||
ngClick: "deleteInventory(\{\{ inventory.id \}\},'\{\{ inventory.name \}\}')",
|
||||
icon: 'icon-trash',
|
||||
"class": 'btn-xs btn-danger',
|
||||
awToolTip: 'Delete inventory'
|
||||
},
|
||||
dropdown: {
|
||||
type: 'DropDown',
|
||||
label: 'Jobs',
|
||||
icon: 'icon-zoom-in',
|
||||
@@ -112,24 +123,6 @@ angular.module('InventoriesListDefinition', [])
|
||||
{ ngClick: 'viewJobs(\{\{ inventory.id \}\})', label: 'All' },
|
||||
{ ngClick: "viewFailedJobs(\{\{ inventory.id \}\})", label: 'Failed' }
|
||||
]
|
||||
},
|
||||
edit: {
|
||||
type: 'DropDown',
|
||||
label: 'Edit',
|
||||
icon: 'icon-edit',
|
||||
'class': 'btn-default btn-xs',
|
||||
options: [
|
||||
{ ngClick: "editInventory(\{\{ inventory.id \}\})", label: 'Properties' },
|
||||
{ ngClick: "editHosts(\{\{ inventory.id \}\})", label: 'Hosts' },
|
||||
{ ngClick: "editGroups(\{\{ inventory.id \}\})", label: 'Groups' }
|
||||
]
|
||||
},
|
||||
"delete": {
|
||||
label: 'Delete',
|
||||
ngClick: "deleteInventory(\{\{ inventory.id \}\},'\{\{ inventory.name \}\}')",
|
||||
icon: 'icon-trash',
|
||||
"class": 'btn-xs btn-danger',
|
||||
awToolTip: 'Delete inventory'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
186
awx/ui/static/js/lists/InventoryGroups.js
Normal file
186
awx/ui/static/js/lists/InventoryGroups.js
Normal file
@@ -0,0 +1,186 @@
|
||||
/*********************************************
|
||||
* Copyright (c) 2013 AnsibleWorks, Inc.
|
||||
*
|
||||
* InventorySummary.js
|
||||
*
|
||||
* Summary of groups contained within an inventory
|
||||
*
|
||||
*/
|
||||
angular.module('InventoryGroupsDefinition', [])
|
||||
.value(
|
||||
'InventoryGroups', {
|
||||
|
||||
name: 'groups',
|
||||
iterator: 'group',
|
||||
editTitle: '{{ inventory_name | capitalize }}',
|
||||
showTitle: false,
|
||||
well: true,
|
||||
index: false,
|
||||
hover: true,
|
||||
hasChildren: true,
|
||||
class: 'table-condensed',
|
||||
|
||||
fields: {
|
||||
name: {
|
||||
key: true,
|
||||
label: 'name',
|
||||
ngClick: "\{\{ 'GroupsEdit(' + group.id + ')' \}\}",
|
||||
//ngClass: "\{\{ 'level' + group.level \}\}",
|
||||
hasChildren: true
|
||||
},
|
||||
status: {
|
||||
label: 'Sync Status',
|
||||
ngClick: "viewUpdateStatus(\{\{ group.id \}\})",
|
||||
searchType: 'select',
|
||||
badgeIcon: "\{\{ 'icon-cloud-' + group.status_badge_class \}\}",
|
||||
badgeToolTip: "\{\{ group.status_badge_tooltip \}\}",
|
||||
awToolTip: "\{\{ group.status_badge_tooltip \}\}",
|
||||
dataPlacement: 'top',
|
||||
badgeTipPlacement: 'top',
|
||||
badgePlacement: 'left',
|
||||
searchOptions: [
|
||||
{ name: "failed", value: "failed" },
|
||||
{ name: "never", value: "never updated" },
|
||||
{ name: "n/a", value: "none" },
|
||||
{ name: "successful", value: "successful" },
|
||||
{ name: "updating", value: "updating" }],
|
||||
sourceModel: 'inventory_source',
|
||||
sourceField: 'status'
|
||||
},
|
||||
failed_hosts: {
|
||||
label: 'Failed Hosts',
|
||||
ngHref: "\{\{ group.failed_hosts_link \}\}",
|
||||
badgeIcon: "\{\{ 'icon-failures-' + group.failed_hosts_class \}\}",
|
||||
badgeNgHref: "\{\{ group.failed_hosts_link \}\}",
|
||||
badgePlacement: 'left',
|
||||
badgeToolTip: "\{\{ group.failed_hosts_tip \}\}",
|
||||
badgeTipPlacement: 'top',
|
||||
awToolTip: "\{\{ group.failed_hosts_tip \}\}",
|
||||
dataPlacement: "top",
|
||||
searchable: false,
|
||||
excludeModal: true,
|
||||
sortField: "hosts_with_active_failures"
|
||||
},
|
||||
source: {
|
||||
label: 'Source',
|
||||
searchType: 'select',
|
||||
searchOptions: [
|
||||
{ name: "ec2", value: "ec2" },
|
||||
{ name: "none", value: "" },
|
||||
{ name: "rax", value: "rax" }],
|
||||
sourceModel: 'inventory_source',
|
||||
sourceField: 'source',
|
||||
searchOnly: true
|
||||
},
|
||||
has_external_source: {
|
||||
label: 'Has external source?',
|
||||
searchType: 'in',
|
||||
searchValue: 'ec2,rax',
|
||||
searchOnly: true,
|
||||
sourceModel: 'inventory_source',
|
||||
sourceField: 'source'
|
||||
},
|
||||
has_active_failures: {
|
||||
label: 'Has failed hosts?',
|
||||
searchSingleValue: true,
|
||||
searchType: 'boolean',
|
||||
searchValue: 'true',
|
||||
searchOnly: true
|
||||
},
|
||||
last_update_failed: {
|
||||
label: 'Update failed?',
|
||||
searchType: 'select',
|
||||
searchSingleValue: true,
|
||||
searchValue: 'failed',
|
||||
searchOnly: true,
|
||||
sourceModel: 'inventory_source',
|
||||
sourceField: 'status'
|
||||
}
|
||||
},
|
||||
|
||||
actions: {
|
||||
create: {
|
||||
label: 'Add',
|
||||
mode: 'all',
|
||||
icon: 'icon-plus',
|
||||
'class': "btn-sm",
|
||||
ngClick: "createGroup()",
|
||||
ngHide: "groupCreateHide",
|
||||
ngDisabled: 'grpBtnDisabled',
|
||||
awToolTip: "Create a new top-level group",
|
||||
dataPlacement: 'top',
|
||||
iconSize: 'large'
|
||||
},
|
||||
refresh: {
|
||||
label: 'Refresh',
|
||||
dataPlacement: 'top',
|
||||
icon: "icon-refresh",
|
||||
mode: 'all',
|
||||
'class': 'btn-sm',
|
||||
awToolTip: "Refresh the page",
|
||||
ngClick: "refresh()",
|
||||
iconSize: 'large'
|
||||
},
|
||||
stream: {
|
||||
label: 'Activity',
|
||||
'class': "btn-sm activity-btn",
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
dataPlacement: "top",
|
||||
icon: "icon-comments-alt",
|
||||
mode: 'all',
|
||||
iconSize: 'large',
|
||||
ngShow: "user_is_superuser"
|
||||
},
|
||||
help: {
|
||||
label: 'Help',
|
||||
dataPlacement: 'top',
|
||||
icon: "icon-question-sign",
|
||||
mode: 'all',
|
||||
'class': 'btn-sm btn-help',
|
||||
awToolTip:
|
||||
//"<div style=\"text-align:left;\"><img src=\"/static/img/cow.png\" style=\"width:50px; height:56px; float:left; padding-right:5px;\">" +
|
||||
//"<p>Need help getting started creating your inventory?</p><p>Click here for help.</p></div>",
|
||||
"<div style=\"text-align:left;\"><p>Need help getting started creating your inventory?</p><p>Click here for help.</p></div>",
|
||||
iconSize: 'large',
|
||||
ngClick: "showHelp()",
|
||||
id: "inventory-summary-help"
|
||||
}
|
||||
},
|
||||
|
||||
fieldActions: {
|
||||
group_update: {
|
||||
label: 'Update',
|
||||
icon: 'icon-cloud-download',
|
||||
"class": 'btn-xs btn-primary',
|
||||
ngClick: 'updateGroup(\{\{ group.id \}\})',
|
||||
awToolTip: "\{\{ group.update_tooltip \}\}",
|
||||
ngClass: "group.update_class",
|
||||
awToolTip: "Start inventory sync"
|
||||
},
|
||||
cancel: {
|
||||
label: 'Cancel',
|
||||
icon: 'icon-minus-sign',
|
||||
ngClick: "cancelUpdate(\{\{ group.id \}\}, '\{\{ group.name \}\}')",
|
||||
"class": 'btn-xs btn-primary',
|
||||
awToolTip: "\{\{ group.cancel_tooltip \}\}",
|
||||
ngClass: "group.cancel_class",
|
||||
ngShow: "group.status == 'running' || group.status == 'pending'"
|
||||
},
|
||||
edit: {
|
||||
label: 'Edit',
|
||||
ngClick: "editGroup(\{\{ group.id \}\})",
|
||||
icon: 'icon-edit',
|
||||
"class": 'btn-xs btn-primary',
|
||||
awToolTip: 'Edit group'
|
||||
},
|
||||
"delete": {
|
||||
label: 'Delete',
|
||||
ngClick: "deleteGroup(\{\{ group.id \}\},'\{\{ group.name \}\}')",
|
||||
icon: 'icon-trash',
|
||||
"class": 'btn-xs btn-primary',
|
||||
awToolTip: 'Delete group'
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@@ -89,7 +89,7 @@ angular.module('JobEventsListDefinition', [])
|
||||
dataPlacement: 'top',
|
||||
icon: "icon-refresh",
|
||||
mode: 'all',
|
||||
'class': 'btn-xs btn-primary',
|
||||
'class': 'btn-xs',
|
||||
awToolTip: "Refresh the page",
|
||||
ngClick: "refresh()",
|
||||
iconSize: 'large'
|
||||
|
||||
@@ -113,7 +113,7 @@ angular.module('JobHostDefinition', [])
|
||||
dataContainer: "body",
|
||||
icon: "icon-question-sign",
|
||||
mode: 'all',
|
||||
'class': 'btn-info btn-xs btn-help',
|
||||
'class': 'btn-xs btn-help',
|
||||
awToolTip: 'Click for help',
|
||||
dataTitle: 'Job Host Summary',
|
||||
id: 'jobhost-help-button',
|
||||
@@ -123,7 +123,7 @@ angular.module('JobHostDefinition', [])
|
||||
dataPlacement: 'top',
|
||||
icon: "icon-refresh",
|
||||
mode: 'all',
|
||||
'class': 'btn-xs btn-primary',
|
||||
'class': 'btn-xs',
|
||||
awToolTip: "Refresh the page",
|
||||
ngClick: "refresh()",
|
||||
iconSize: 'large',
|
||||
|
||||
@@ -34,12 +34,12 @@ angular.module('JobTemplatesListDefinition', [])
|
||||
icon: 'icon-plus',
|
||||
mode: 'all', // One of: edit, select, all
|
||||
ngClick: 'addJobTemplate()',
|
||||
"class": 'btn-success btn-xs',
|
||||
"class": 'btn-xs',
|
||||
basePaths: ['job_templates'],
|
||||
awToolTip: 'Create a new template'
|
||||
},
|
||||
stream: {
|
||||
'class': "btn-primary btn-xs activity-btn",
|
||||
'class': "btn-xs activity-btn",
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
dataPlacement: "top",
|
||||
|
||||
@@ -79,7 +79,7 @@ angular.module('JobsListDefinition', [])
|
||||
dataPlacement: 'top',
|
||||
icon: "icon-refresh",
|
||||
mode: 'all',
|
||||
'class': 'btn-xs btn-primary',
|
||||
'class': 'btn-xs',
|
||||
awToolTip: "Refresh the page",
|
||||
ngClick: "refresh()",
|
||||
iconSize: 'large'
|
||||
|
||||
@@ -33,11 +33,11 @@ angular.module('OrganizationListDefinition', [])
|
||||
icon: 'icon-plus',
|
||||
mode: 'all', // One of: edit, select, all
|
||||
ngClick: 'addOrganization()',
|
||||
"class": 'btn-success btn-xs',
|
||||
"class": 'btn-xs',
|
||||
awToolTip: 'Create a new organization'
|
||||
},
|
||||
stream: {
|
||||
'class': "btn-primary btn-xs activity-btn",
|
||||
'class': "btn-xs activity-btn",
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
dataPlacement: "top",
|
||||
|
||||
@@ -47,12 +47,12 @@ angular.module('PermissionListDefinition', [])
|
||||
label: 'Create New',
|
||||
mode: 'all', // One of: edit, select, all
|
||||
ngClick: 'addPermission()',
|
||||
"class": 'btn-success btn-xs',
|
||||
"class": 'btn-xs',
|
||||
awToolTip: 'Add a new permission',
|
||||
ngShow: 'PermissionAddAllowed'
|
||||
},
|
||||
stream: {
|
||||
'class': "btn-primary btn-xs activity-btn",
|
||||
'class': "btn-xs activity-btn",
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
dataPlacement: "top",
|
||||
|
||||
@@ -61,7 +61,7 @@ angular.module('ProjectsListDefinition', [])
|
||||
icon: 'icon-plus',
|
||||
mode: 'all', // One of: edit, select, all
|
||||
ngClick: 'addProject()',
|
||||
"class": 'btn-success btn-xs',
|
||||
"class": 'btn-xs',
|
||||
awToolTip: 'Create a new project'
|
||||
},
|
||||
help: {
|
||||
@@ -77,7 +77,7 @@ angular.module('ProjectsListDefinition', [])
|
||||
dataContainer: 'body',
|
||||
icon: "icon-question-sign",
|
||||
mode: 'all',
|
||||
'class': 'btn-xs btn-info btn-help',
|
||||
'class': 'btn-xs btn-help',
|
||||
awToolTip: 'Click for help',
|
||||
awTipPlacement: 'top',
|
||||
dataTitle: 'Project Status',
|
||||
@@ -87,13 +87,13 @@ angular.module('ProjectsListDefinition', [])
|
||||
dataPlacement: 'top',
|
||||
icon: "icon-refresh",
|
||||
mode: 'all',
|
||||
'class': 'btn-xs btn-primary',
|
||||
'class': 'btn-xs',
|
||||
awToolTip: "Refresh the page",
|
||||
ngClick: "refresh()",
|
||||
iconSize: 'large'
|
||||
},
|
||||
stream: {
|
||||
'class': "btn-primary btn-xs activity-btn",
|
||||
'class': "btn-xs activity-btn",
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
dataPlacement: "top",
|
||||
|
||||
@@ -208,7 +208,7 @@ angular.module('StreamListDefinition', [])
|
||||
dataPlacement: 'top',
|
||||
icon: "icon-refresh",
|
||||
mode: 'all',
|
||||
'class': 'btn-xs btn-primary',
|
||||
'class': 'btn-xs',
|
||||
awToolTip: "Refresh the page",
|
||||
ngClick: "refreshStream()",
|
||||
iconSize: 'large'
|
||||
@@ -217,7 +217,7 @@ angular.module('StreamListDefinition', [])
|
||||
dataPlacement: 'top',
|
||||
icon: "icon-arrow-left",
|
||||
mode: 'all',
|
||||
'class': 'btn-xs btn-primary',
|
||||
'class': 'btn-xs',
|
||||
awToolTip: "Close Activity Stream view",
|
||||
ngClick: "closeStream()",
|
||||
iconSize: 'large'
|
||||
|
||||
@@ -40,11 +40,11 @@ angular.module('TeamsListDefinition', [])
|
||||
icon: 'icon-plus',
|
||||
mode: 'all', // One of: edit, select, all
|
||||
ngClick: 'addTeam()',
|
||||
"class": 'btn-xs btn-success',
|
||||
"class": 'btn-xs',
|
||||
awToolTip: 'Create a new team'
|
||||
},
|
||||
stream: {
|
||||
'class': "btn-primary btn-xs activity-btn",
|
||||
'class': "btn-xs activity-btn",
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
dataPlacement: "top",
|
||||
|
||||
@@ -40,11 +40,11 @@ angular.module('UserListDefinition', [])
|
||||
mode: 'all', // One of: edit, select, all
|
||||
ngClick: 'addUser()',
|
||||
basePaths: ['organizations','users'], // base path must be in list, or action not available
|
||||
"class": 'btn-success btn-xs',
|
||||
"class": 'btn-xs',
|
||||
awToolTip: 'Create a new user'
|
||||
},
|
||||
stream: {
|
||||
'class': "btn-primary btn-xs activity-btn",
|
||||
'class': "btn-xs activity-btn",
|
||||
ngClick: "showActivity()",
|
||||
awToolTip: "View Activity Stream",
|
||||
dataPlacement: "top",
|
||||
|
||||
Reference in New Issue
Block a user