adds the pending button for Resources, Options and DNS screens. Signed-off-by: Oguz Bektas <o.bek...@proxmox.com> ---
v1 -> v2: * fix typo * use 'datachanged' to track the status of the buttons, however: for some reason it takes a while to refresh the status of the button, also same on the qemu side so this is likely a problem somewhere else. it also doesn't work correctly on the DNS.js file (doesn't refresh at all), but i can't figure out why, some feedback would be appreciated. www/manager6/lxc/DNS.js | 43 ++++++++++++++++++++++-- www/manager6/lxc/Options.js | 62 +++++++++++++++++++++++++++++++++-- www/manager6/lxc/Resources.js | 31 +++++++++++++++++- 3 files changed, 131 insertions(+), 5 deletions(-) diff --git a/www/manager6/lxc/DNS.js b/www/manager6/lxc/DNS.js index 89e2c694..d7f29209 100644 --- a/www/manager6/lxc/DNS.js +++ b/www/manager6/lxc/DNS.js @@ -213,6 +213,38 @@ Ext.define('PVE.lxc.DNS', { handler: run_editor }); + var revert_btn = new Proxmox.button.Button({ + text: gettext('Revert'), + disabled: true, + handler: function() { + var sm = me.getSelectionModel(); + var rec = sm.getSelection()[0]; + if (!rec) { + return; + } + + var rowdef = me.rows[rec.data.key] || {}; + var keys = rowdef.multiKey || [ rec.data.key ]; + var revert = keys.join(','); + + Proxmox.Utils.API2Request({ + url: '/api2/extjs/' + baseurl, + waitMsgTarget: me, + method: 'PUT', + params: { + 'revert': revert + }, + callback: function() { + me.reload(); + }, + failure: function (response, opts) { + Ext.Msg.alert('Error',response.htmlStatus); + } + }); + } + }); + + var set_button_status = function() { var sm = me.getSelectionModel(); var rec = sm.getSelection()[0]; @@ -221,8 +253,11 @@ Ext.define('PVE.lxc.DNS', { edit_btn.disable(); return; } - var rowdef = rows[rec.data.key]; + var key = rec.data.key; + var rowdef = rows[key]; + var pending = rec.data['delete'] || me.hasPendingChanges(key); edit_btn.setDisabled(!rowdef.editor); + revert_btn.setDisabled(!pending); }; Ext.apply(me, { @@ -230,7 +265,7 @@ Ext.define('PVE.lxc.DNS', { selModel: sm, cwidth1: 150, run_editor: run_editor, - tbar: [ edit_btn ], + tbar: [ edit_btn, revert_btn ], rows: rows, editorConfig: { url: "/api2/extjs/" + baseurl @@ -243,5 +278,9 @@ Ext.define('PVE.lxc.DNS', { }); me.callParent(); + + me.mon(me.rstore, 'datachanged', function() { + set_button_status(); + }); } }); diff --git a/www/manager6/lxc/Options.js b/www/manager6/lxc/Options.js index 5e1e0222..f1a82902 100644 --- a/www/manager6/lxc/Options.js +++ b/www/manager6/lxc/Options.js @@ -161,17 +161,67 @@ Ext.define('PVE.lxc.Options', { handler: function() { me.run_editor(); } }); + var revert_btn = new Proxmox.button.Button({ + text: gettext('Revert'), + disabled: true, + handler: function() { + var sm = me.getSelectionModel(); + var rec = sm.getSelection()[0]; + if (!rec) { + return; + } + + var rowdef = me.rows[rec.data.key] || {}; + var keys = rowdef.multiKey || [ rec.data.key ]; + var revert = keys.join(','); + + Proxmox.Utils.API2Request({ + url: '/api2/extjs/' + baseurl, + waitMsgTarget: me, + method: 'PUT', + params: { + 'revert': revert + }, + callback: function() { + me.reload(); + }, + failure: function (response, opts) { + Ext.Msg.alert('Error',response.htmlStatus); + } + }); + } + }); + + var set_button_status = function() { + var sm = me.getSelectionModel(); + var rec = sm.getSelection()[0]; + + if (!rec) { + edit_btn.disable(); + return; + } + + var key = rec.data.key; + var pending = rec.data['delete'] || me.hasPendingChanges(key); + var rowdef = rows[key]; + + edit_btn.setDisabled(!rowdef.editor); + revert_btn.setDisabled(!pending); + }; + + Ext.apply(me, { url: "/api2/json/nodes/" + nodename + "/lxc/" + vmid + "/pending", selModel: sm, interval: 5000, - tbar: [ edit_btn ], + tbar: [ edit_btn, revert_btn ], rows: rows, editorConfig: { url: '/api2/extjs/' + baseurl }, listeners: { - itemdblclick: me.run_editor + itemdblclick: me.run_editor, + selectionchange: set_button_status } }); @@ -181,6 +231,14 @@ Ext.define('PVE.lxc.Options', { me.on('destroy', me.rstore.stopUpdate); me.on('deactivate', me.rstore.stopUpdate); + // FIXME: for some reason, it takes a while for this to refresh and update + // the button state. + // this also happens in qemu side, so it's likely something we need to + // fix somewhere else. + me.mon(me.rstore, 'datachanged', function() { + set_button_status(); + }); + } }); diff --git a/www/manager6/lxc/Resources.js b/www/manager6/lxc/Resources.js index 8b924a49..73533ba8 100644 --- a/www/manager6/lxc/Resources.js +++ b/www/manager6/lxc/Resources.js @@ -215,6 +215,31 @@ Ext.define('PVE.lxc.RessourceView', { handler: run_move }); + var revert_btn = new Proxmox.button.Button({ + text: gettext('Revert'), + selModel: me.selModel, + disabled: true, + handler: function(b, e, rec) { + var rowdef = me.rows[rec.data.key] || {}; + var keys = rowdef.multiKey || [ rec.data.key ]; + var revert = keys.join(','); + Proxmox.Utils.API2Request({ + url: '/api2/extjs/' + baseurl, + waitMsgTarget: me, + method: 'PUT', + params: { + 'revert': revert + }, + callback: function() { + me.rstore.load(); + }, + failure: function (response, opts) { + Ext.Msg.alert('Error',response.htmlStatus); + } + }); + } + }); + var set_button_status = function() { var rec = me.selModel.getSelection()[0]; @@ -222,12 +247,14 @@ Ext.define('PVE.lxc.RessourceView', { edit_btn.disable(); remove_btn.disable(); resize_btn.disable(); + revert_btn.disable(); return; } var key = rec.data.key; var value = rec.data.value; var rowdef = rows[key]; + var pending = rec.data['delete'] || me.hasPendingChanges(key); var isDisk = (rowdef.tdCls == 'pve-itype-icon-storage'); var noedit = rec.data['delete'] || !rowdef.editor; @@ -242,6 +269,7 @@ Ext.define('PVE.lxc.RessourceView', { remove_btn.setDisabled(!isDisk || rec.data.key === 'rootfs' || !diskCap); resize_btn.setDisabled(!isDisk || !diskCap); move_btn.setDisabled(!isDisk || !diskCap); + revert_btn.setDisabled(!pending); }; @@ -299,7 +327,8 @@ Ext.define('PVE.lxc.RessourceView', { edit_btn, remove_btn, resize_btn, - move_btn + move_btn, + revert_btn ], rows: rows, sorterFn: sorterFn, -- 2.20.1 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel