From f5e17f156a33c964238ec2e224f033f52d12f15c Mon Sep 17 00:00:00 2001 From: Fabian Ebner Date: Fri, 13 Nov 2020 14:16:27 +0100 Subject: [PATCH] create ImageView and use it for VM and CT images The enableFn's that were responsible for switching between the image remove button and the standard remove button are not needed anymore. Signed-off-by: Fabian Ebner --- www/manager6/Makefile | 1 + www/manager6/storage/Browser.js | 4 +- www/manager6/storage/ContentView.js | 64 ++---------------------- www/manager6/storage/ImageView.js | 76 +++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 63 deletions(-) create mode 100644 www/manager6/storage/ImageView.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index be1f1888..6111a9ce 100644 --- a/www/manager6/Makefile +++ b/www/manager6/Makefile @@ -242,6 +242,7 @@ JSSRC= \ storage/ContentView.js \ storage/DirEdit.js \ storage/GlusterFsEdit.js \ + storage/ImageView.js \ storage/IScsiEdit.js \ storage/LVMEdit.js \ storage/LvmThinEdit.js \ diff --git a/www/manager6/storage/Browser.js b/www/manager6/storage/Browser.js index 53d8828c..c815ad03 100644 --- a/www/manager6/storage/Browser.js +++ b/www/manager6/storage/Browser.js @@ -59,7 +59,7 @@ Ext.define('PVE.storage.Browser', { } if (contents.includes('images')) { items.push({ - xtype: 'pveStorageContentView', + xtype: 'pveStorageImageView', title: gettext('Disk Images'), iconCls: 'fa fa-hdd-o', itemId: 'contentImages', @@ -82,7 +82,7 @@ Ext.define('PVE.storage.Browser', { } if (contents.includes('rootdir')) { items.push({ - xtype: 'pveStorageContentView', + xtype: 'pveStorageImageView', title: gettext('Container Data'), iconCls: 'fa fa-hdd-o', itemId: 'contentRootdir', diff --git a/www/manager6/storage/ContentView.js b/www/manager6/storage/ContentView.js index 8da2db7e..f3174e2e 100644 --- a/www/manager6/storage/ContentView.js +++ b/www/manager6/storage/ContentView.js @@ -269,83 +269,25 @@ Ext.define('PVE.storage.ContentView', { } }); - var imageRemoveButton; var removeButton = Ext.create('Proxmox.button.StdRemoveButton',{ selModel: sm, delay: 5, - enableFn: function(rec) { - if (rec && rec.data.content !== 'images' && - rec.data.content !== 'rootdir') { - imageRemoveButton.setVisible(false); - removeButton.setVisible(true); - return true; - } - return false; - }, callback: function() { reload(); }, baseurl: baseurl + '/' }); - imageRemoveButton = Ext.create('Proxmox.button.Button',{ - selModel: sm, - hidden: true, - text: gettext('Remove'), - enableFn: function(rec) { - if (rec && (rec.data.content === 'images' || - rec.data.content === 'rootdir')) { - removeButton.setVisible(false); - imageRemoveButton.setVisible(true); - return true; - } - return false; - }, - handler: function(btn, event, rec) { - var url = baseurl + '/' + rec.data.volid; - var vmid = rec.data.vmid; - - var store = PVE.data.ResourceStore; - - if (vmid && store.findVMID(vmid)) { - var guest_node = store.guestNode(vmid); - var storage_path = 'storage/' + nodename + '/' + storage; - - // allow to delete local backed images if a VMID exists on another node. - if (store.storageIsShared(storage_path) || guest_node == nodename) { - var msg = Ext.String.format( - gettext("Cannot remove image, a guest with VMID '{0}' exists!"), vmid); - msg += '
' + gettext("You can delete the image from the guest's hardware pane"); - - Ext.Msg.show({ - title: gettext('Cannot remove disk image.'), - icon: Ext.Msg.ERROR, - msg: msg - }); - return; - } - } - var win = Ext.create('PVE.window.SafeDestroy', { - title: Ext.String.format(gettext("Destroy '{0}'"), rec.data.volid), - showProgress: true, - url: url, - item: { type: 'Image', id: vmid } - }).show(); - win.on('destroy', function() { - reload(); - }); - } - }); - if (!me.tbar) { me.tbar = []; } if (me.useUploadButton) { me.tbar.push(uploadButton); } + if (!me.useCustomRemoveButton) { + me.tbar.push(removeButton); + } me.tbar.push( - removeButton, - imageRemoveButton, '->', gettext('Search') + ':', ' ', { diff --git a/www/manager6/storage/ImageView.js b/www/manager6/storage/ImageView.js new file mode 100644 index 00000000..97dae567 --- /dev/null +++ b/www/manager6/storage/ImageView.js @@ -0,0 +1,76 @@ +Ext.define('PVE.storage.ImageView', { + extend: 'PVE.storage.ContentView', + + alias: 'widget.pveStorageImageView', + + initComponent: function() { + var me = this; + + var nodename = me.nodename = me.pveSelNode.data.node; + if (!me.nodename) { + throw "no node name specified"; + } + + var storage = me.storage = me.pveSelNode.data.storage; + if (!me.storage) { + throw "no storage ID specified"; + } + + if (!me.content || (me.content !== 'images' && me.content !== 'rootdir')) { + throw "content needs to be either 'images' or 'rootdir'"; + } + + var sm = me.sm = Ext.create('Ext.selection.RowModel', {}); + + var reload = function() { + me.store.load(); + } + + me.tbar = [ + { + xtype: 'proxmoxButton', + selModel: sm, + text: gettext('Remove'), + disabled: true, + handler: function(btn, event, rec) { + var url = "/nodes/" + nodename + "/storage/" + storage + + "/content" + '/' + rec.data.volid; + var vmid = rec.data.vmid; + + var store = PVE.data.ResourceStore; + + if (vmid && store.findVMID(vmid)) { + var guest_node = store.guestNode(vmid); + var storage_path = 'storage/' + nodename + '/' + storage; + + // allow to delete local backed images if a VMID exists on another node. + if (store.storageIsShared(storage_path) || guest_node == nodename) { + var msg = Ext.String.format( + gettext("Cannot remove image, a guest with VMID '{0}' exists!"), vmid); + msg += '
' + gettext("You can delete the image from the guest's hardware pane"); + + Ext.Msg.show({ + title: gettext('Cannot remove disk image.'), + icon: Ext.Msg.ERROR, + msg: msg + }); + return; + } + } + var win = Ext.create('PVE.window.SafeDestroy', { + title: Ext.String.format(gettext("Destroy '{0}'"), rec.data.volid), + showProgress: true, + url: url, + item: { type: 'Image', id: vmid } + }).show(); + win.on('destroy', function() { + reload(); + }); + } + }, + ]; + me.useCustomRemoveButton = true; + + me.callParent(); + }, +});