pmg-gui/js/RuleInfo.js
Dietmar Maurer 397006117a rename ActionConfiguration.js to ActionList.js
And use it to edit rules.
2017-03-07 12:37:18 +01:00

277 lines
6.0 KiB
JavaScript

Ext.define('PMG.RuleInfo', {
extend: 'Ext.grid.GridPanel',
alias: 'widget.pmgRuleInfo',
baseurl: undefined,
ruledata: undefined,
emptyText: gettext('Please select a rule.'),
setBaseUrl: function(baseurl) {
var me = this;
me.baseurl = baseurl;
me.reload();
},
reload: function() {
var me = this;
if (!me.baseurl) {
me.setRuleInfo(undefined);
return;
}
Proxmox.Utils.API2Request({
url: me.baseurl + "/config",
method: 'GET',
waitMsgTarget: me,
success: function(response, opts) {
me.setRuleInfo(response.result.data);
},
failure: function (response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
}
});
},
setRuleInfo: function(ruledata) {
var me = this;
me.ruledata = ruledata;
me.down('#addFromButton').setDisabled(me.ruledata === undefined);
me.down('#addToButton').setDisabled(me.ruledata === undefined);
me.down('#addWhenButton').setDisabled(me.ruledata === undefined);
me.down('#addWhatButton').setDisabled(me.ruledata === undefined);
me.down('#addActionButton').setDisabled(me.ruledata === undefined);
if (me.ruledata === undefined) {
me.store.setData([]);
me.down('#ruleinfo').update(me.emtpyText);
me.down('#ruledata').setHidden(true);
} else {
var html = '<b>' + Ext.String.htmlEncode(me.ruledata.name) + '</b>';
html += '<br><br>';
html += 'Priority: ' + me.ruledata.priority + '<br>';
html += 'Direction: ' + PMG.Utils.format_rule_direction(me.ruledata.direction) + '<br>';
html += 'Active: ' + Proxmox.Utils.format_boolean(me.ruledata.active) + '<br>';
var data = [];
Ext.Array.each(['from', 'to', 'when', 'what', 'action'], function(oc) {
var list = ruledata[oc];
if (list === undefined) { return; }
Ext.Array.each(list, function(og) {
data.push({ oclass: oc, name: og.name, id: og.id });
});
});
me.store.setData(data);
me.down('#ruleinfo').update(html);
me.down('#ruledata').setHidden(false);
}
},
initComponent : function() {
var me = this;
me.store = new Ext.data.Store({
fields: [ 'oclass', 'name' ]
});
me.columns = [
{
header: gettext('Type'),
dataIndex: 'oclass',
},
{
header: gettext('name'),
dataIndex: 'name',
flex: 1
}
];
me.selModel = Ext.create('Ext.selection.RowModel', {});
var remove_btn = Ext.createWidget('proxmoxButton', {
text: gettext('Remove'),
disabled: true,
selModel: me.selModel,
confirmMsg: function (rec) {
return Ext.String.format(
gettext('Are you sure you want to remove entry {0}'),
"'" + rec.data.name + "'");
},
handler: function(btn, event, rec) {
console.dir(rec.data);
Proxmox.Utils.API2Request({
url: me.baseurl + '/' + rec.data.oclass + '/'+ rec.data.id,
method: 'DELETE',
waitMsgTarget: me,
callback: function() {
me.reload();
},
failure: function (response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
}
});
}
});
var add_object_group = function(url, ogroupId) {
Proxmox.Utils.API2Request({
url: url,
params: { ogroup: ogroupId },
method: 'POST',
waitMsgTarget: me,
callback: function() {
me.reload();
},
failure: function (response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus);
}
});
};
me.dockedItems = [];
me.dockedItems.push({
xtype: 'toolbar',
dock: 'top',
items: [
{
text: gettext('From'),
disabled: true,
itemId: 'addFromButton',
handler: function() {
var win = Ext.create('PMG.ObjectGroupSelector', {
rulegroup: 'from',
listeners: {
selectObjectGroup: function(view, rec) {
win.destroy();
add_object_group(me.baseurl + '/from', rec.data.id);
}
}
});
win.show();
}
},
{
text: gettext('To'),
disabled: true,
itemId: 'addToButton',
handler: function() {
var win = Ext.create('PMG.ObjectGroupSelector', {
rulegroup: 'to',
listeners: {
selectObjectGroup: function(view, rec) {
win.destroy();
add_object_group(me.baseurl + '/to', rec.data.id);
}
}
});
win.show();
}
},
{
text: gettext('When'),
disabled: true,
itemId: 'addWhenButton',
handler: function() {
var win = Ext.create('PMG.ObjectGroupSelector', {
rulegroup: 'when',
listeners: {
selectObjectGroup: function(view, rec) {
win.destroy();
add_object_group(me.baseurl + '/when', rec.data.id);
}
}
});
win.show();
}
},
{
text: gettext('What'),
disabled: true,
itemId: 'addWhatButton',
handler: function() {
var win = Ext.create('PMG.ObjectGroupSelector', {
rulegroup: 'what',
listeners: {
selectObjectGroup: function(view, rec) {
win.destroy();
add_object_group(me.baseurl + '/what', rec.data.id);
}
}
});
win.show();
}
},
{
text: gettext('Action'),
disabled: true,
itemId: 'addActionButton',
handler: function() {
var win = Ext.create('PMG.ObjectGroupSelector', {
rulegroup: 'action',
listeners: {
selectObjectGroup: function(view, rec) {
win.destroy();
add_object_group(me.baseurl + '/action', rec.data.ogroup);
}
}
});
win.show();
}
},
remove_btn
]
});
me.dockedItems.push({
dock: 'top',
border: 1,
layout: 'anchor',
itemId: 'ruledata',
items: [
{
xtype: 'component',
anchor: '100%',
itemId: 'ruleinfo',
style: { 'white-space': 'pre' },
padding: 10,
html: me.emptyText,
listeners: {
dblclick: {
fn: function(e, t) {
if (me.ruledata === undefined) { return; }
me.fireEvent('dblclickRuleInfo', me, e, t, me.ruledata);
},
element: 'el',
scope: this,
}
}
}
]
});
Ext.apply(me, {
listeners: {
activate: function() { me.reload() }
}
});
me.callParent();
if (me.baseurl) {
me.reload();
}
}
});