ui: add TaskButton in header

opens a grid with the running tasks and a shortcut the the node tasks

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
This commit is contained in:
Dominik Csapak 2020-07-09 13:38:21 +02:00 committed by Dietmar Maurer
parent cc83c13660
commit a3970d6c1e
5 changed files with 118 additions and 0 deletions

View File

@ -224,6 +224,10 @@ Ext.define('PBS.MainView', {
href: '/docs/index.html', href: '/docs/index.html',
margin: '0 5 0 0', margin: '0 5 0 0',
}, },
{
xtype: 'pbsTaskButton',
margin: '0 5 0 0',
},
{ {
reference: 'logoutButton', reference: 'logoutButton',
xtype: 'button', xtype: 'button',

View File

@ -9,6 +9,7 @@ JSSRC= \
form/RemoteSelector.js \ form/RemoteSelector.js \
form/DataStoreSelector.js \ form/DataStoreSelector.js \
data/RunningTasksStore.js \ data/RunningTasksStore.js \
button/TaskButton.js \
config/UserView.js \ config/UserView.js \
config/RemoteView.js \ config/RemoteView.js \
config/ACLView.js \ config/ACLView.js \

92
www/button/TaskButton.js Normal file
View File

@ -0,0 +1,92 @@
Ext.define('PBS.TaskButton', {
extend: 'Ext.button.Button',
alias: 'widget.pbsTaskButton',
config: {
badgeText: '0',
badgeCls: '',
},
iconCls: 'fa fa-list',
userCls: 'pmx-has-badge',
text: gettext('Tasks'),
setText: function(value) {
let me = this;
me.realText = value;
let badgeText = me.getBadgeText();
let badgeCls = me.getBadgeCls();
let text = `${value} <span class="pmx-button-badge ${badgeCls}">${badgeText}</span>`;
return me.callParent([text]);
},
getText: function() {
let me = this;
return me.realText;
},
setBadgeText: function(value) {
let me = this;
me.badgeText = value.toString();
return me.setText(me.getText());
},
setBadgeCls: function(value) {
let me = this;
let res = me.callParent([value]);
let badgeText = me.getBadgeText();
me.setBadgeText(badgeText);
return res;
},
handler: function() {
let me = this;
if (me.grid.isVisible()) {
me.grid.setVisible(false);
} else {
me.grid.showBy(me, 'tr-br');
}
},
initComponent: function() {
let me = this;
me.grid = Ext.create({
xtype: 'pbsRunningTasks',
title: '',
hideHeaders: false,
floating: true,
width: 600,
bbar: [
'->',
{
xtype: 'button',
text: gettext('Show All Tasks'),
handler: function() {
var mainview = me.up('mainview');
mainview.getController().redirectTo('pbsServerAdministration:tasks');
me.grid.hide();
},
},
],
listeners: {
'taskopened': function() {
me.grid.hide();
},
},
});
me.callParent();
me.mon(me.grid.getStore().rstore, 'load', function(store, records, success) {
if (!success) return;
let count = records.length;
let text = count > 9 ? '9+' : count.toString();
let cls = count > 0 ? 'active': '';
me.setBadgeText(text);
me.setBadgeCls(cls);
});
},
});

View File

@ -190,3 +190,22 @@ p.logs {
visibility: hidden; visibility: hidden;
width: 5px; width: 5px;
} }
.pmx-has-badge .x-btn-inner {
padding: 0 0 0 5px;
min-width: 24px;
}
.pmx-button-badge {
display: inline-block;
font-weight: bold;
border-radius: 20px;
background-color: #AAA;
padding: 2px 3px;
min-width: 24px;
line-height: 1em;
}
.pmx-button-badge.active {
background-color: #F00;
}

View File

@ -18,6 +18,8 @@ Ext.define('PBS.RunningTasks', {
upid: record.data.upid, upid: record.data.upid,
endtime: record.data.endtime, endtime: record.data.endtime,
}).show(); }).show();
view.fireEvent('taskopened', view, record.data.upid);
}, },
openTaskItemDblClick: function(grid, record) { openTaskItemDblClick: function(grid, record) {