[pve-devel] [PATCH manager 5/6] improve tree/grid icons
Dominik Csapak
d.csapak at proxmox.com
Thu Apr 27 12:17:33 CEST 2017
we improve the icons in the tree and the resource grid by
differentiating between cluster online/offline status and no rrd data
when we have no rrd data from a node/storage, instead of showing a
red x (which is scary) even if the node is reachable by corosync (which
confused quite a bit of people, because we show all nodes as online in
the datacenter summary), we show the node/storage with a '?'
this signals that something is wrong with this node, even if we can
reach it via cluster methods
this rewrite of the logic includes a refactoring of the method
of getting the icon, because we want the same icons in the tree and the
grid
Signed-off-by: Dominik Csapak <d.csapak at proxmox.com>
---
www/manager6/Utils.js | 69 ++++++++++++++++++---------------------
www/manager6/tree/ResourceTree.js | 50 ++++++----------------------
2 files changed, 42 insertions(+), 77 deletions(-)
diff --git a/www/manager6/Utils.js b/www/manager6/Utils.js
index d1ada771..cc37e3a2 100644
--- a/www/manager6/Utils.js
+++ b/www/manager6/Utils.js
@@ -998,48 +998,43 @@ Ext.define('PVE.Utils', { utilities: {
return PVE.Utils.render_size(value);
},
- render_resource_type: function(value, metaData, record, rowIndex, colIndex, store) {
-
- var icon = '';
- var gridcls = '';
-
- switch (value) {
- case 'lxc': icon = 'cube';
- gridcls = '-stopped';
- break;
- case 'qemu': icon = 'desktop';
- gridcls = '-stopped';
- break;
- case 'node': icon = 'building';
- gridcls = '-offline';
- break;
- case 'storage': icon = 'database'; break;
- case 'pool': icon = 'tags'; break;
- default: icon = 'file';
- }
-
- if (value === 'lxc' || value === 'qemu') {
- if (record.data.running && record.data.status !== 'paused') {
- gridcls = '-running';
- } else if (record.data.running) {
- gridcls = '-paused';
- }
- if (record.data.template) {
- icon = 'file-o';
- gridcls = '-template-' + value;
- }
- } else if (value === 'node') {
- if (record.data.running) {
- gridcls = '-online';
+ get_object_icon_class: function(grid, type, record) {
+ var cmpCls = ' x-fa-' + (grid?'grid':'tree');
+
+ var objectType = type;
+
+ if (record.id === 'root') {
+ objectType = 'datacenter';
+ cmpCls += '-datacenter';
+ } else if (record.template) {
+ objectType = 'template';
+ cmpCls += '-template-' + type;
+ } else if (type === 'type') {
+ objectType = record.groupbyid;
+ } else {
+ objectType = type;
+ if (record.status) {
+ cmpCls += '-';
+ cmpCls += (record.hastate === 'error') ? 'offline' : record.status;
+ } else if(record.type === 'node') {
+ cmpCls += '-';
+ cmpCls += 'unknown';
}
}
- // overwrite anything else
- if (record.data.hastate === 'error') {
- gridcls = '-offline';
+ var defaults = PVE.tree.ResourceTree.typeDefaults[objectType];
+ if (defaults && defaults.iconCls) {
+ return defaults.iconCls + cmpCls;
}
- var fa = '<i class="fa fa-fw x-fa-grid' + gridcls + ' fa-' + icon + '"></i> ';
+ return '';
+ },
+
+ render_resource_type: function(value, metaData, record, rowIndex, colIndex, store) {
+
+ var cls = PVE.Utils.get_object_icon_class(true,value,record.data);
+
+ var fa = '<i class="fa-fw ' + cls + '"></i> ';
return fa + value;
},
diff --git a/www/manager6/tree/ResourceTree.js b/www/manager6/tree/ResourceTree.js
index 910379ef..e781052f 100644
--- a/www/manager6/tree/ResourceTree.js
+++ b/www/manager6/tree/ResourceTree.js
@@ -8,31 +8,31 @@ Ext.define('PVE.tree.ResourceTree', {
statics: {
typeDefaults: {
node: {
- iconCls: 'fa fa-building x-fa-tree',
+ iconCls: 'fa fa-building',
text: gettext('Nodes')
},
pool: {
- iconCls: 'fa fa-tags fa-dark x-fa-tree',
+ iconCls: 'fa fa-tags fa-dark',
text: gettext('Resource Pool')
},
storage: {
- iconCls: 'fa fa-database fa-dark x-fa-tree',
+ iconCls: 'fa fa-database fa-dark',
text: gettext('Storage')
},
qemu: {
- iconCls: 'fa fa-desktop x-fa-tree',
+ iconCls: 'fa fa-desktop',
text: gettext('Virtual Machine')
},
lxc: {
//iconCls: 'x-tree-node-lxc',
- iconCls: 'fa fa-cube x-fa-tree',
+ iconCls: 'fa fa-cube',
text: gettext('LXC Container')
},
template: {
- iconCls: 'fa fa-file-o fa-dark x-fa-tree-template'
+ iconCls: 'fa fa-file-o fa-dark'
},
datacenter: {
- iconCls: 'fa fa-server x-fa-tree-datacenter'
+ iconCls: 'fa fa-server'
}
}
},
@@ -102,40 +102,10 @@ Ext.define('PVE.tree.ResourceTree', {
setIconCls: function(info) {
var me = this;
- var defaults = PVE.tree.ResourceTree.typeDefaults[info.type];
- if (info.id === 'root') {
- defaults = PVE.tree.ResourceTree.typeDefaults.datacenter;
- } else if (info.type === 'type') {
- defaults = PVE.tree.ResourceTree.typeDefaults[info.groupbyid];
- }
- if (defaults && defaults.iconCls) {
- var iconClsAdd = '';
-
- if (info.running && info.type === 'node') {
- iconClsAdd = '-online';
- } else if (info.running) {
- iconClsAdd = '-running';
- if (info.status === 'paused') {
- iconClsAdd = '-paused';
- }
- } else if (info.type === 'lxc' || info.type === 'qemu') {
- iconClsAdd = '-stopped';
- } else if (info.type === 'node') {
- iconClsAdd = '-offline';
- }
-
- // overwrite any other class
- if (info.hastate === 'error') {
- iconClsAdd = '-offline';
- }
-
- info.iconCls = defaults.iconCls + iconClsAdd;
-
- if (info.template) {
- iconClsAdd = '-template';
- info.iconCls = PVE.tree.ResourceTree.typeDefaults.template.iconCls + '-' + info.type;
- }
+ var cls = PVE.Utils.get_object_icon_class(false, info.type, info);
+ if (cls !== '') {
+ info.iconCls = cls;
}
},
--
2.11.0
More information about the pve-devel
mailing list