to follow qemu code also fix the jslint errors in MountPointInputPanel and MountPointEdit
Signed-off-by: Dominik Csapak <d.csa...@proxmox.com> --- www/manager6/Makefile | 1 + www/manager6/lxc/MPEdit.js | 395 +++++++++++++++++++++++++++++++++++++++ www/manager6/lxc/ResourceEdit.js | 395 --------------------------------------- 3 files changed, 396 insertions(+), 395 deletions(-) create mode 100644 www/manager6/lxc/MPEdit.js diff --git a/www/manager6/Makefile b/www/manager6/Makefile index 573beb57..05113dda 100644 --- a/www/manager6/Makefile +++ b/www/manager6/Makefile @@ -173,6 +173,7 @@ JSSRC= \ lxc/Snapshot.js \ lxc/ResourceEdit.js \ lxc/MPResize.js \ + lxc/MPEdit.js \ pool/StatusView.js \ pool/Summary.js \ pool/Config.js \ diff --git a/www/manager6/lxc/MPEdit.js b/www/manager6/lxc/MPEdit.js new file mode 100644 index 00000000..1238d086 --- /dev/null +++ b/www/manager6/lxc/MPEdit.js @@ -0,0 +1,395 @@ +Ext.define('PVE.lxc.MountPointInputPanel', { + extend: 'PVE.panel.InputPanel', + alias: 'widget.pveLxcMountPointInputPanel', + + insideWizard: false, + + onlineHelp: 'pct_container_storage', + + unused: false, // ADD usused disk imaged + + vmconfig: {}, // used to select usused disks + + onGetValues: function(values) { + var me = this; + + var confid = me.confid || values.mpsel; + + if (me.unused) { + me.mpdata.file = me.vmconfig[values.unusedId]; + confid = values.mpsel; + } else if (me.isCreate) { + me.mpdata.file = values.storage + ':' + values.disksize; + } + + if (confid !== 'rootfs') { + me.mpdata.mp = values.mp; + } + + if (values.ro) { + me.mpdata.ro = 1; + } else { + delete me.mpdata.ro; + } + + if (values.quota) { + me.mpdata.quota = 1; + } else { + delete me.mpdata.quota; + } + + if (values.acl === 'Default') { + delete me.mpdata.acl; + } else { + me.mpdata.acl = values.acl; + } + + if (values.backup) { + me.mpdata.backup = 1; + } else { + delete me.mpdata.backup; + } + + if (values.noreplicate) { + me.mpdata.replicate = '0'; + } + delete me.mpdata.noreplicate; + + var res = {}; + res[confid] = PVE.Parser.printLxcMountPoint(me.mpdata); + return res; + }, + + setMountPoint: function(mp) { + var me = this; + + me.mpdata = mp; + if (!Ext.isDefined(me.mpdata.acl)) { + me.mpdata.acl = 'Default'; + } + + if (mp.type === 'bind') { + me.quota.setDisabled(true); + me.quota.setValue(false); + me.acl.setDisabled(true); + me.acl.setValue('Default'); + me.hdstoragesel.setDisabled(true); + if (me.confid !== 'rootfs') { + me.backup.setDisabled(true); + } + } + + if (mp.replicate) { // check box reverses the config option + mp.noreplicate = !PVE.Parser.parseBoolean(mp.replicate, 1); + delete mp.replicate; + } + + me.setValues(mp); + }, + + setVMConfig: function(vmconfig) { + var me = this; + + me.vmconfig = vmconfig; + + if (me.mpsel) { + var i; + for (i = 0; i != 8; ++i) { + var name = "mp" + i.toString(); + if (!Ext.isDefined(vmconfig[name])) { + me.mpsel.setValue(name); + break; + } + } + } + + if (me.unusedDisks) { + var disklist = []; + Ext.Object.each(vmconfig, function(key, value) { + if (key.match(/^unused\d+$/)) { + disklist.push([key, value]); + } + }); + me.unusedDisks.store.loadData(disklist); + me.unusedDisks.setValue(me.confid); + } + }, + + setNodename: function(nodename) { + var me = this; + me.hdstoragesel.setNodename(nodename); + me.hdfilesel.setStorage(undefined, nodename); + }, + + initComponent : function() { + var me = this; + + var isroot = me.confid === 'rootfs'; + + me.mpdata = {}; + + me.column1 = []; + + if (!me.confid || me.unused) { + var names = []; + var i; + for (i = 0; i != 8; ++i) { + var name = 'mp' + i.toString(); + names.push([name, name]); + } + me.mpsel = Ext.create('PVE.form.KVComboBox', { + name: 'mpsel', + fieldLabel: gettext('Mount Point'), + matchFieldWidth: false, + allowBlank: false, + comboItems: names, + validator: function(value) { + if (!me.rendered) { + return; + } + if (Ext.isDefined(me.vmconfig[value])) { + return "Mount point is already in use."; + } + /*jslint confusion: true*/ + return true; + }, + listeners: { + change: function(field, value) { + field.validate(); + } + } + }); + me.column1.push(me.mpsel); + } + + // we always have this around, but only visible when creating a new mp + // since this handles per-filesystem capabilities + me.hdstoragesel = Ext.create('PVE.form.StorageSelector', { + name: 'storage', + nodename: me.nodename, + fieldLabel: gettext('Storage'), + storageContent: 'rootdir', + allowBlank: false, + autoSelect: true, + hidden: me.unused || !me.isCreate, + listeners: { + change: function(f, value) { + if (!value) { // initial store loading fires an unwanted 'change' + return; + } + if (me.mpdata.type === 'bind') { + me.quota.setDisabled(true); + me.quota.setValue(false); + me.acl.setDisabled(true); + me.acl.setValue('Default'); + if (!isroot) { + me.backup.setDisabled(true); + } + return; + } + var rec = f.store.getById(value); + if (rec && + (rec.data.type === 'zfs' || + rec.data.type === 'zfspool')) { + me.quota.setDisabled(true); + me.quota.setValue(false); + } else { + me.quota.setDisabled(false); + } + if (me.unused || !me.isCreate) { + return; + } + if (rec.data.type === 'iscsi') { + me.hdfilesel.setStorage(value); + me.hdfilesel.setDisabled(false); + me.hdfilesel.setVisible(true); + me.hdsizesel.setDisabled(true); + me.hdsizesel.setVisible(false); + } else if (rec.data.type === 'lvm' || + rec.data.type === 'lvmthin' || + rec.data.type === 'rbd' || + rec.data.type === 'sheepdog' || + rec.data.type === 'zfs' || + rec.data.type === 'zfspool') { + me.hdfilesel.setDisabled(true); + me.hdfilesel.setVisible(false); + me.hdsizesel.setDisabled(false); + me.hdsizesel.setVisible(true); + } else { + me.hdfilesel.setDisabled(true); + me.hdfilesel.setVisible(false); + me.hdsizesel.setDisabled(false); + me.hdsizesel.setVisible(true); + } + } + } + }); + me.column1.push(me.hdstoragesel); + + if (me.unused) { + me.unusedDisks = Ext.create('PVE.form.KVComboBox', { + name: 'unusedId', + fieldLabel: gettext('Disk image'), + matchFieldWidth: false, + listConfig: { + width: 350 + }, + data: [], + allowBlank: false, + listeners: { + change: function(f, value) { + // make sure our buttons are enabled/disabled when switching + // between images on different storages: + var disk = me.vmconfig[value]; + var storage = disk.split(':')[0]; + me.hdstoragesel.setValue(storage); + } + } + }); + me.column1.push(me.unusedDisks); + } else if (me.isCreate) { + me.hdfilesel = Ext.create('PVE.form.FileSelector', { + name: 'file', + nodename: me.nodename, + storageContent: 'images', + fieldLabel: gettext('Disk image'), + disabled: true, + hidden: true, + allowBlank: false + }); + me.hdsizesel = Ext.createWidget('numberfield', { + name: 'disksize', + minValue: 0.1, + maxValue: 128*1024, + decimalPrecision: 3, + value: '8', + step: 1, + fieldLabel: gettext('Disk size') + ' (GB)', + allowBlank: false + }); + me.column1.push(me.hdfilesel); + me.column1.push(me.hdsizesel); + } else { + me.column1.push({ + xtype: 'textfield', + disabled: true, + submitValue: false, + fieldLabel: gettext('Disk image'), + name: 'file' + }); + } + + me.acl = Ext.createWidget('pveKVComboBox', { + name: 'acl', + fieldLabel: gettext('ACLs'), + comboItems: [['Default', 'Default'], ['1', 'On'], ['0', 'Off']], + value: 'Default', + allowBlank: true + }); + + me.quota = Ext.createWidget('pvecheckbox', { + name: 'quota', + defaultValue: 0, + fieldLabel: gettext('Enable quota') + }); + + me.column2 = [ + me.acl, + me.quota + ]; + + if (!isroot) { + me.column2.splice(1, 0, { + xtype: 'pvecheckbox', + name: 'ro', + defaultValue: 0, + fieldLabel: gettext('Read-only'), + hidden: me.insideWizard + }); + + me.backup = Ext.createWidget('pvecheckbox',{ + xtype: 'pvecheckbox', + name: 'backup', + fieldLabel: gettext('Backup') + }); + if (me.mpdata.type !== 'bind') { + me.column2.push(me.backup); + } + me.column2.push({ + xtype: 'pvecheckbox', + name: 'noreplicate', + fieldLabel: gettext('Skip replication') + }); + me.column2.push({ + xtype: 'textfield', + name: 'mp', + value: '', + emptyText: gettext('/some/path'), + allowBlank: false, + hidden: isroot, + fieldLabel: gettext('Path') + }); + } + + me.callParent(); + } +}); + +Ext.define('PVE.lxc.MountPointEdit', { + extend: 'PVE.window.Edit', + + initComponent : function() { + var me = this; + + var nodename = me.pveSelNode.data.node; + if (!nodename) { + throw "no node name specified"; + } + + var unused = me.confid && me.confid.match(/^unused\d+$/); + + me.isCreate = me.confid ? unused : true; + + var ipanel = Ext.create('PVE.lxc.MountPointInputPanel', { + confid: me.confid, + nodename: nodename, + unused: unused, + isCreate: me.isCreate + }); + + var subject; + if (unused) { + subject = gettext('Unused Disk'); + } else if (me.isCreate) { + subject = gettext('Mount Point'); + } else { + subject = gettext('Mount Point') + ' (' + me.confid + ')'; + } + + Ext.apply(me, { + subject: subject, + items: ipanel + }); + + me.callParent(); + + me.load({ + success: function(response, options) { + ipanel.setVMConfig(response.result.data); + if (me.confid) { + var value = response.result.data[me.confid.toString()]; + var mp = PVE.Parser.parseLxcMountPoint(value); + + if (!mp) { + Ext.Msg.alert(gettext('Error'), 'Unable to parse mount point options'); + me.close(); + return; + } + + ipanel.setMountPoint(mp); + me.isValid(); // trigger validation + } + } + }); + } +}); diff --git a/www/manager6/lxc/ResourceEdit.js b/www/manager6/lxc/ResourceEdit.js index 9efb5116..6bd35e8a 100644 --- a/www/manager6/lxc/ResourceEdit.js +++ b/www/manager6/lxc/ResourceEdit.js @@ -36,65 +36,6 @@ Ext.define('PVE.lxc.CPUEdit', { } }); -Ext.define('PVE.lxc.MountPointEdit', { - extend: 'PVE.window.Edit', - - initComponent : function() { - var me = this; - - var nodename = me.pveSelNode.data.node; - if (!nodename) { - throw "no node name specified"; - } - - var unused = me.confid && me.confid.match(/^unused\d+$/); - - me.isCreate = me.confid ? unused : true; - - var ipanel = Ext.create('PVE.lxc.MountPointInputPanel', { - confid: me.confid, - nodename: nodename, - unused: unused, - isCreate: me.isCreate - }); - - var subject; - if (unused) { - subject = gettext('Unused Disk'); - } else if (me.isCreate) { - subject = gettext('Mount Point'); - } else { - subject = gettext('Mount Point') + ' (' + me.confid + ')'; - } - - Ext.apply(me, { - subject: subject, - items: ipanel - }); - - me.callParent(); - - me.load({ - success: function(response, options) { - ipanel.setVMConfig(response.result.data); - if (me.confid) { - var value = response.result.data[me.confid]; - var mp = PVE.Parser.parseLxcMountPoint(value); - - if (!mp) { - Ext.Msg.alert(gettext('Error'), 'Unable to parse mount point options'); - me.close(); - return; - } - - ipanel.setMountPoint(mp); - me.isValid(); // trigger validation - } - } - }); - } -}); - Ext.define('PVE.lxc.CPUInputPanel', { extend: 'PVE.panel.InputPanel', alias: 'widget.pveLxcCPUInputPanel', @@ -210,339 +151,3 @@ Ext.define('PVE.lxc.MemoryInputPanel', { me.callParent(); } }); - -Ext.define('PVE.lxc.MountPointInputPanel', { - extend: 'PVE.panel.InputPanel', - alias: 'widget.pveLxcMountPointInputPanel', - - insideWizard: false, - - onlineHelp: 'pct_container_storage', - - unused: false, // ADD usused disk imaged - - vmconfig: {}, // used to select usused disks - - onGetValues: function(values) { - var me = this; - - var confid = me.confid || values.mpsel; - - if (me.unused) { - me.mpdata.file = me.vmconfig[values.unusedId]; - confid = values.mpsel; - } else if (me.isCreate) { - me.mpdata.file = values.storage + ':' + values.disksize; - } - - if (confid !== 'rootfs') { - me.mpdata.mp = values.mp; - } - - if (values.ro) { - me.mpdata.ro = 1; - } else { - delete me.mpdata.ro; - } - - if (values.quota) { - me.mpdata.quota = 1; - } else { - delete me.mpdata.quota; - } - - if (values.acl === 'Default') { - delete me.mpdata.acl; - } else { - me.mpdata.acl = values.acl; - } - - if (values.backup) { - me.mpdata.backup = 1; - } else { - delete me.mpdata.backup; - } - - if (values.noreplicate) { - me.mpdata.replicate = '0'; - } - delete me.mpdata.noreplicate; - - var res = {}; - res[confid] = PVE.Parser.printLxcMountPoint(me.mpdata); - return res; - }, - - setMountPoint: function(mp) { - var me = this; - - me.mpdata = mp; - if (!Ext.isDefined(me.mpdata.acl)) { - me.mpdata.acl = 'Default'; - } - - if (mp.type === 'bind') { - me.quota.setDisabled(true); - me.quota.setValue(false); - me.acl.setDisabled(true); - me.acl.setValue('Default'); - me.hdstoragesel.setDisabled(true); - if (me.confid !== 'rootfs') { - me.backup.setDisabled(true); - } - } - - if (mp.replicate) { // check box reverses the config option - mp.noreplicate = !PVE.Parser.parseBoolean(mp.replicate, 1); - delete mp.replicate; - } - - me.setValues(mp); - }, - - setVMConfig: function(vmconfig) { - var me = this; - - me.vmconfig = vmconfig; - - if (me.mpsel) { - var i; - for (i = 0; i != 8; ++i) { - var name = "mp" + i; - if (!Ext.isDefined(vmconfig[name])) { - me.mpsel.setValue(name); - break; - } - } - } - - if (me.unusedDisks) { - var disklist = []; - Ext.Object.each(vmconfig, function(key, value) { - if (key.match(/^unused\d+$/)) { - disklist.push([key, value]); - } - }); - me.unusedDisks.store.loadData(disklist); - me.unusedDisks.setValue(me.confid); - } - }, - - setNodename: function(nodename) { - var me = this; - me.hdstoragesel.setNodename(nodename); - me.hdfilesel.setStorage(undefined, nodename); - }, - - initComponent : function() { - var me = this; - - var isroot = me.confid === 'rootfs'; - - me.mpdata = {}; - - me.column1 = []; - - if (!me.confid || me.unused) { - var names = []; - var i; - for (i = 0; i != 8; ++i) { - var name = 'mp' + i; - names.push([name, name]); - } - me.mpsel = Ext.create('PVE.form.KVComboBox', { - name: 'mpsel', - fieldLabel: gettext('Mount Point'), - matchFieldWidth: false, - allowBlank: false, - comboItems: names, - validator: function(value) { - if (!me.rendered) { - return; - } - if (Ext.isDefined(me.vmconfig[value])) { - return "Mount point is already in use."; - } - return true; - }, - listeners: { - change: function(field, value) { - field.validate(); - } - } - }); - me.column1.push(me.mpsel); - } - - // we always have this around, but only visible when creating a new mp - // since this handles per-filesystem capabilities - me.hdstoragesel = Ext.create('PVE.form.StorageSelector', { - name: 'storage', - nodename: me.nodename, - fieldLabel: gettext('Storage'), - storageContent: 'rootdir', - allowBlank: false, - autoSelect: true, - hidden: me.unused || !me.isCreate, - listeners: { - change: function(f, value) { - if (!value) { // initial store loading fires an unwanted 'change' - return; - } - if (me.mpdata.type === 'bind') { - me.quota.setDisabled(true); - me.quota.setValue(false); - me.acl.setDisabled(true); - me.acl.setValue('Default'); - if (!isroot) { - me.backup.setDisabled(true); - } - return; - } - var rec = f.store.getById(value); - if (rec && - (rec.data.type === 'zfs' || - rec.data.type === 'zfspool')) { - me.quota.setDisabled(true); - me.quota.setValue(false); - } else { - me.quota.setDisabled(false); - } - if (me.unused || !me.isCreate) { - return; - } - if (rec.data.type === 'iscsi') { - me.hdfilesel.setStorage(value); - me.hdfilesel.setDisabled(false); - me.hdfilesel.setVisible(true); - me.hdsizesel.setDisabled(true); - me.hdsizesel.setVisible(false); - } else if (rec.data.type === 'lvm' || - rec.data.type === 'lvmthin' || - rec.data.type === 'rbd' || - rec.data.type === 'sheepdog' || - rec.data.type === 'zfs' || - rec.data.type === 'zfspool') { - me.hdfilesel.setDisabled(true); - me.hdfilesel.setVisible(false); - me.hdsizesel.setDisabled(false); - me.hdsizesel.setVisible(true); - } else { - me.hdfilesel.setDisabled(true); - me.hdfilesel.setVisible(false); - me.hdsizesel.setDisabled(false); - me.hdsizesel.setVisible(true); - } - } - } - }); - me.column1.push(me.hdstoragesel); - - if (me.unused) { - me.unusedDisks = Ext.create('PVE.form.KVComboBox', { - name: 'unusedId', - fieldLabel: gettext('Disk image'), - matchFieldWidth: false, - listConfig: { - width: 350 - }, - data: [], - allowBlank: false, - listeners: { - change: function(f, value) { - // make sure our buttons are enabled/disabled when switching - // between images on different storages: - var disk = me.vmconfig[value]; - var storage = disk.split(':')[0]; - me.hdstoragesel.setValue(storage); - } - } - }); - me.column1.push(me.unusedDisks); - } else if (me.isCreate) { - me.hdfilesel = Ext.create('PVE.form.FileSelector', { - name: 'file', - nodename: me.nodename, - storageContent: 'images', - fieldLabel: gettext('Disk image'), - disabled: true, - hidden: true, - allowBlank: false - }); - me.hdsizesel = Ext.createWidget('numberfield', { - name: 'disksize', - minValue: 0.1, - maxValue: 128*1024, - decimalPrecision: 3, - value: '8', - step: 1, - fieldLabel: gettext('Disk size') + ' (GB)', - allowBlank: false - }); - me.column1.push(me.hdfilesel); - me.column1.push(me.hdsizesel); - } else { - me.column1.push({ - xtype: 'textfield', - disabled: true, - submitValue: false, - fieldLabel: gettext('Disk image'), - name: 'file' - }); - } - - me.acl = Ext.createWidget('pveKVComboBox', { - name: 'acl', - fieldLabel: gettext('ACLs'), - comboItems: [['Default', 'Default'], ['1', 'On'], ['0', 'Off']], - value: 'Default', - allowBlank: true - }); - - me.quota = Ext.createWidget('pvecheckbox', { - name: 'quota', - defaultValue: 0, - fieldLabel: gettext('Enable quota') - }); - - me.column2 = [ - me.acl, - me.quota - ]; - - if (!isroot) { - me.column2.splice(1, 0, { - xtype: 'pvecheckbox', - name: 'ro', - defaultValue: 0, - fieldLabel: gettext('Read-only'), - hidden: me.insideWizard - }); - - me.backup = Ext.createWidget('pvecheckbox',{ - xtype: 'pvecheckbox', - name: 'backup', - fieldLabel: gettext('Backup') - }); - if (me.mpdata.type !== 'bind') { - me.column2.push(me.backup); - } - me.column2.push({ - xtype: 'pvecheckbox', - name: 'noreplicate', - fieldLabel: gettext('Skip replication') - }); - me.column2.push({ - xtype: 'textfield', - name: 'mp', - value: '', - emptyText: gettext('/some/path'), - allowBlank: false, - hidden: isroot, - fieldLabel: gettext('Path') - }); - } - - me.callParent(); - } -}); -- 2.11.0 _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel