[pve-devel] [PATCH manager 3/3] ui: add storage plugin base class
Dominik Csapak
d.csapak at proxmox.com
Tue Mar 27 11:05:01 CEST 2018
a few comments inline, other wise looks good, thanks :)
On 03/26/2018 08:18 AM, Thomas Lamprecht wrote:
> This removes *a lot* of code duplication.
>
> I add a base class for the storage edit window and for its containing
> input panel, they implement the shared stuff. Especially the window
> was mostly a 1:1 copy...
>
> I look hard for a way to split up this patch, but I did not really
> found one which would not generate a lot of work for no value added
> (value being 'revertability' and better git history here).
> nd actually not too much happens, the same thing happens just over
> and over again.
> Thus, I've thrown in the dynamic creation of the storage add menu
> items here too.
>
> I remove all storage specific Edit windows, they where all just >95%
> duplicates of each other.
> Special functionallity, i.e. some data deletion/transforming before
> submitting gets done with onGetValues.
>
> For the RBD external vs PVE plugin I just added a minimal child class
> to RBD which only tells it'S parent that it is the pve one, this is
> nice for the mapping and should be easy to understand when reading
> the code.
>
> Tried to test an add and an edit of all visible storage plugins,
> seems to be OK now.
>
> The only "problematic" things is that I used ECMAScript6 feature, an
> arrow function for an higher order function generator in the
> addMenuItems assembly. jshint does not likes that at all...
> But honestyl I'd look for a more capable (h/l)inter and go for the
> cool ES6 features than vice versa :)
>
> Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
> ---
> www/manager6/Makefile | 1 +
> www/manager6/dc/StorageView.js | 192 +++++++---------------------------
> www/manager6/storage/Base.js | 105 +++++++++++++++++++
> www/manager6/storage/CIFSEdit.js | 89 +---------------
> www/manager6/storage/DirEdit.js | 94 +----------------
> www/manager6/storage/GlusterFsEdit.js | 90 +---------------
> www/manager6/storage/IScsiEdit.js | 92 ++--------------
> www/manager6/storage/LVMEdit.js | 93 +---------------
> www/manager6/storage/LvmThinEdit.js | 96 +----------------
> www/manager6/storage/NFSEdit.js | 82 +--------------
> www/manager6/storage/RBDEdit.js | 99 ++----------------
> www/manager6/storage/SheepdogEdit.js | 87 +--------------
> www/manager6/storage/ZFSEdit.js | 87 ++-------------
> www/manager6/storage/ZFSPoolEdit.js | 95 +----------------
> 14 files changed, 179 insertions(+), 1123 deletions(-)
> create mode 100644 www/manager6/storage/Base.js
>
> diff --git a/www/manager6/Makefile b/www/manager6/Makefile
> index ac9f6481..a01880f7 100644
> --- a/www/manager6/Makefile
> +++ b/www/manager6/Makefile
> @@ -148,6 +148,7 @@ JSSRC= \
> pool/StatusView.js \
> pool/Summary.js \
> pool/Config.js \
> + storage/Base.js \
> storage/ContentView.js \
> storage/StatusView.js \
> storage/Summary.js \
> diff --git a/www/manager6/dc/StorageView.js b/www/manager6/dc/StorageView.js
> index ba6faafb..5ca6476e 100644
> --- a/www/manager6/dc/StorageView.js
> +++ b/www/manager6/dc/StorageView.js
> @@ -1,4 +1,3 @@
> -
> Ext.define('PVE.dc.StorageView', {
> extend: 'Ext.grid.GridPanel',
>
> @@ -9,6 +8,23 @@ Ext.define('PVE.dc.StorageView', {
> stateful: true,
> stateId: 'grid-dc-storage',
>
> + createStorageEditWindow: function(type, sid) {
> + var schema = PVE.Utils.storageSchema[type];
> + if (!schema || !schema.ipanel) {
> + throw "no editor registered for storage type: " + type;
> + }
> +
> + Ext.create('PVE.storage.BaseEdit', {
> + paneltype: 'PVE.storage.' + schema.ipanel,
> + type: type,
> + storageId: sid,
> + autoShow: true,
> + listeners: {
> + destroy: this.reloadStore
> + }
> + });
> + },
> +
> initComponent : function() {
> var me = this;
>
> @@ -35,41 +51,14 @@ Ext.define('PVE.dc.StorageView', {
> if (!rec) {
> return;
> }
> - var type = rec.data.type;
> + var type = rec.data.type,
> + sid = rec.data.storage;
>
> - var editor;
> - if (type === 'dir') {
> - editor = 'PVE.storage.DirEdit';
> - } else if (type === 'nfs') {
> - editor = 'PVE.storage.NFSEdit';
> - } else if (type === 'cifs') {
> - editor = 'PVE.storage.CIFSEdit';
> - } else if (type === 'glusterfs') {
> - editor = 'PVE.storage.GlusterFsEdit';
> - } else if (type === 'lvm') {
> - editor = 'PVE.storage.LVMEdit';
> - } else if (type === 'lvmthin') {
> - editor = 'PVE.storage.LvmThinEdit';
> - } else if (type === 'iscsi') {
> - editor = 'PVE.storage.IScsiEdit';
> - } else if (type === 'rbd') {
> - editor = 'PVE.storage.RBDEdit';
> - } else if (type === 'sheepdog') {
> - editor = 'PVE.storage.SheepdogEdit';
> - } else if (type === 'zfs') {
> - editor = 'PVE.storage.ZFSEdit';
> - } else if (type === 'zfspool') {
> - editor = 'PVE.storage.ZFSPoolEdit';
> - } else {
> - return;
> + if (type === 'rbd' && !rec.data.monhost) {
> + type = 'pveceph';
> }
> - var win = Ext.create(editor, {
> - storageId: rec.data.storage,
> - pveceph: !rec.data.monhost
> - });
>
> - win.show();
> - win.on('destroy', reload);
> + me.createStorageEditWindow(type, sid);
> };
>
> var edit_btn = new Proxmox.button.Button({
> @@ -82,13 +71,26 @@ Ext.define('PVE.dc.StorageView', {
> var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
> selModel: sm,
> baseurl: '/storage/',
> - callback: function() {
> - reload();
> - }
> + callback: reload
> });
>
> + var addHandleGenerator = type => function() { me.createStorageEditWindow(type); }
the arrow function breaks ie11 compatibility
while this is debatable, i would rather not do this in a minor version
(also jslint complains)
> + var addMenuItems = [];
> + for (var type in PVE.Utils.storageSchema) {
jslint complains about two things here:
the var declaration inside the brackets,
and the missing: hasOwnProperty check
> + var storage = PVE.Utils.storageSchema[type];
> + if (storage.hideAdd) {
> + continue;
> + }
> + addMenuItems.push({
> + text: PVE.Utils.format_storage_type(type),
> + iconCls: 'fa fa-fw fa-' + storage.faIcon,
> + handler: addHandleGenerator(type)
> + });
> + }
> +
> Ext.apply(me, {
> store: store,
> + reloadStore: reload,
> selModel: sm,
> viewConfig: {
> trackOver: false
> @@ -97,123 +99,7 @@ Ext.define('PVE.dc.StorageView', {
> {
> text: gettext('Add'),
> menu: new Ext.menu.Menu({
> - items: [
> - {
> - text: PVE.Utils.format_storage_type('dir'),
> - iconCls: 'fa fa-fw fa-folder',
> - handler: function() {
> - var win = Ext.create('PVE.storage.DirEdit', {});
> - win.on('destroy', reload);
> - win.show();
> - }
> -
> - },
> - {
> - text: PVE.Utils.format_storage_type('lvm'),
> - iconCls: 'fa fa-fw fa-folder',
> - handler: function() {
> - var win = Ext.create('PVE.storage.LVMEdit', {});
> - win.on('destroy', reload);
> - win.show();
> - }
> - },
> - {
> - text: PVE.Utils.format_storage_type('lvmthin'),
> - iconCls: 'fa fa-fw fa-folder',
> - handler: function() {
> - var win = Ext.create('PVE.storage.LvmThinEdit', {});
> - win.on('destroy', reload);
> - win.show();
> - }
> - },
> - {
> - text: PVE.Utils.format_storage_type('nfs'),
> - iconCls: 'fa fa-fw fa-building',
> - handler: function() {
> - var win = Ext.create('PVE.storage.NFSEdit', {});
> - win.on('destroy', reload);
> - win.show();
> - }
> - },
> - {
> - text: PVE.Utils.format_storage_type('cifs'),
> - iconCls: 'fa fa-fw fa-building',
> - handler: function() {
> - var win = Ext.create('PVE.storage.CIFSEdit', {});
> - win.on('destroy', reload);
> - win.show();
> - }
> - },
> - {
> - text: PVE.Utils.format_storage_type('iscsi'),
> - iconCls: 'fa fa-fw fa-building',
> - handler: function() {
> - var win = Ext.create('PVE.storage.IScsiEdit', {});
> - win.on('destroy', reload);
> - win.show();
> - }
> - },
> - {
> - text: PVE.Utils.format_storage_type('glusterfs'),
> - iconCls: 'fa fa-fw fa-building',
> - handler: function() {
> - var win = Ext.create('PVE.storage.GlusterFsEdit', {});
> - win.on('destroy', reload);
> - win.show();
> - }
> - },
> - {
> - text: PVE.Utils.format_storage_type('pveceph'),
> - iconCls: 'fa fa-fw fa-building',
> - handler: function() {
> - var win = Ext.create('PVE.storage.RBDEdit', {
> - pveceph: 1
> - });
> - win.on('destroy', reload);
> - win.show();
> - }
> - },
> - {
> - text: PVE.Utils.format_storage_type('rbd_ext'),
> - iconCls: 'fa fa-fw fa-building',
> - handler: function() {
> - var win = Ext.create('PVE.storage.RBDEdit', {});
> - win.on('destroy', reload);
> - win.show();
> - }
> - },
> - {
> - text: PVE.Utils.format_storage_type('zfs'),
> - iconCls: 'fa fa-fw fa-building',
> - handler: function() {
> - var win = Ext.create('PVE.storage.ZFSEdit', {});
> - win.on('destroy', reload);
> - win.show();
> - }
> - },
> - {
> - text: PVE.Utils.format_storage_type('zfspool'),
> - iconCls: 'fa fa-fw fa-folder',
> - handler: function() {
> - var win = Ext.create('PVE.storage.ZFSPoolEdit', {});
> - win.on('destroy', reload);
> - win.show();
> - }
> - }
> -
> -/* the following type are conidered unstable
> - * so we do not enable that on the GUI for now
> - {
> - text: PVE.Utils.format_storage_type('sheepdog'),
> - iconCls: 'fa fa-fw fa-building',
> - handler: function() {
> - var win = Ext.create('PVE.storage.SheepdogEdit', {});
> - win.on('destroy', reload);
> - win.show();
> - }
> - }
> -*/
> - ]
> + items: addMenuItems
> })
> },
> remove_btn,
> diff --git a/www/manager6/storage/Base.js b/www/manager6/storage/Base.js
> new file mode 100644
> index 00000000..71d7b5bb
> --- /dev/null
> +++ b/www/manager6/storage/Base.js
> @@ -0,0 +1,105 @@
> +Ext.define('PVE.panel.StorageBase', {
> + extend: 'Proxmox.panel.InputPanel',
> + controller: 'storageEdit',
> +
> + type: '',
> +
> + onGetValues: function(values) {
> + var me = this;
> +
> + if (me.isCreate) {
> + values.type = me.type;
> + } else {
> + delete values.storage;
> + }
> +
> + values.disable = values.enable ? 0 : 1;
> + delete values.enable;
> +
> + return values;
> + },
> +
> + initComponent : function() {
> + var me = this;
> +
> + me.column1.unshift({
> + xtype: me.isCreate ? 'textfield' : 'displayfield',
> + name: 'storage',
> + value: me.storageId || '',
> + fieldLabel: 'ID',
> + vtype: 'StorageId',
> + allowBlank: false
> + });
> +
> + me.column2.unshift(
> + {
> + xtype: 'pveNodeSelector',
> + name: 'nodes',
> + disabled: me.storageId === 'local',
> + fieldLabel: gettext('Nodes'),
> + emptyText: gettext('All') + ' (' + gettext('No restrictions') +')',
> + multiSelect: true,
> + autoSelect: false
> + },
> + {
> + xtype: 'proxmoxcheckbox',
> + name: 'enable',
> + checked: true,
> + uncheckedValue: 0,
> + fieldLabel: gettext('Enable')
> + }
> + );
> +
> + me.callParent();
> + }
> +});
> +
> +Ext.define('PVE.storage.BaseEdit', {
> + extend: 'Proxmox.window.Edit',
> +
> + initComponent : function() {
> + var me = this;
> +
> + me.isCreate = !me.storageId;
> +
> + if (me.isCreate) {
> + me.url = '/api2/extjs/storage';
> + me.method = 'POST';
> + } else {
> + me.url = '/api2/extjs/storage/' + me.storageId;
> + me.method = 'PUT';
> + }
> +
> + var ipanel = Ext.create(me.paneltype, {
> + type: me.type,
> + isCreate: me.isCreate,
> + storageId: me.storageId
> + });
> +
> + Ext.apply(me, {
> + subject: PVE.Utils.format_storage_type(me.type),
> + isAdd: true,
> + items: [ ipanel ]
> + });
> +
> + me.callParent();
> +
> + if (!me.isCreate) {
> + me.load({
> + success: function(response, options) {
> + var values = response.result.data;
> + var ctypes = values.content || '';
> +
> + values.content = ctypes.split(',');
> +
> + if (values.nodes) {
> + values.nodes = values.nodes.split(',');
> + }
> + values.enable = values.disable ? 0 : 1;
> +
> + ipanel.setValues(values);
> + }
> + });
> + }
> + }
> +});
> diff --git a/www/manager6/storage/CIFSEdit.js b/www/manager6/storage/CIFSEdit.js
> index 83f5c664..f75745b4 100644
> --- a/www/manager6/storage/CIFSEdit.js
> +++ b/www/manager6/storage/CIFSEdit.js
> @@ -86,24 +86,9 @@ Ext.define('PVE.storage.CIFSScan', {
> });
>
> Ext.define('PVE.storage.CIFSInputPanel', {
> - extend: 'Proxmox.panel.InputPanel',
> + extend: 'PVE.panel.StorageBase',
> controller: 'storageEdit',
since this inherits the controller from the storagBase panel, we
actually do not need to define this again
>
> - onGetValues: function(values) {
> - var me = this;
> -
> - if (me.isCreate) {
> - values.type = 'cifs';
> - } else {
> - delete values.storage;
> - }
> -
> - values.disable = values.enable ? 0 : 1;
> - delete values.enable;
> -
> - return values;
> - },
> -
> initComponent : function() {
> var me = this;
>
> @@ -126,14 +111,6 @@ Ext.define('PVE.storage.CIFSInputPanel', {
> });
>
> me.column1 = [
> - {
> - xtype: me.isCreate ? 'textfield' : 'displayfield',
> - name: 'storage',
> - value: me.storageId || '',
> - fieldLabel: 'ID',
> - vtype: 'StorageId',
> - allowBlank: false
> - },
> {
> xtype: me.isCreate ? 'textfield' : 'displayfield',
> name: 'server',
> @@ -189,22 +166,6 @@ Ext.define('PVE.storage.CIFSInputPanel', {
> ];
>
> me.column2 = [
> - {
> - xtype: 'pveNodeSelector',
> - name: 'nodes',
> - fieldLabel: gettext('Nodes'),
> - emptyText: gettext('All') + ' (' +
> - gettext('No restrictions') +')',
> - multiSelect: true,
> - autoSelect: false
> - },
> - {
> - xtype: 'proxmoxcheckbox',
> - name: 'enable',
> - checked: true,
> - uncheckedValue: 0,
> - fieldLabel: gettext('Enable')
> - },
> {
> xtype: 'proxmoxintegerfield',
> fieldLabel: gettext('Max Backups'),
> @@ -237,51 +198,3 @@ Ext.define('PVE.storage.CIFSInputPanel', {
> me.callParent();
> }
> });
> -
> -Ext.define('PVE.storage.CIFSEdit', {
> - extend: 'Proxmox.window.Edit',
> -
> - initComponent : function() {
> - var me = this;
> -
> - me.isCreate = !me.storageId;
> -
> - if (me.isCreate) {
> - me.url = '/api2/extjs/storage';
> - me.method = 'POST';
> - } else {
> - me.url = '/api2/extjs/storage/' + me.storageId;
> - me.method = 'PUT';
> - }
> -
> - var ipanel = Ext.create('PVE.storage.CIFSInputPanel', {
> - isCreate: me.isCreate,
> - storageId: me.storageId
> - });
> -
> - Ext.apply(me, {
> - subject: 'CIFS',
> - isAdd: true,
> - items: [ ipanel ]
> - });
> -
> - me.callParent();
> -
> - if (!me.isCreate) {
> - me.load({
> - success: function(response, options) {
> - var values = response.result.data;
> - var ctypes = values.content || '';
> -
> - values.content = ctypes.split(',');
> -
> - if (values.nodes) {
> - values.nodes = values.nodes.split(',');
> - }
> - values.enable = values.disable ? 0 : 1;
> - ipanel.setValues(values);
> - }
> - });
> - }
> - }
> -});
> diff --git a/www/manager6/storage/DirEdit.js b/www/manager6/storage/DirEdit.js
> index f17a3689..fd02f13f 100644
> --- a/www/manager6/storage/DirEdit.js
> +++ b/www/manager6/storage/DirEdit.js
> @@ -1,35 +1,11 @@
> Ext.define('PVE.storage.DirInputPanel', {
> - extend: 'Proxmox.panel.InputPanel',
> + extend: 'PVE.panel.StorageBase',
> controller: 'storageEdit',
>
> - onGetValues: function(values) {
> - var me = this;
> -
> - if (me.isCreate) {
> - values.type = 'dir';
> - } else {
> - delete values.storage;
> - }
> -
> - values.disable = values.enable ? 0 : 1;
> - delete values.enable;
> -
> - return values;
> - },
> -
> initComponent : function() {
> var me = this;
>
> -
> me.column1 = [
> - {
> - xtype: me.isCreate ? 'textfield' : 'displayfield',
> - name: 'storage',
> - value: me.storageId || '',
> - fieldLabel: 'ID',
> - vtype: 'StorageId',
> - allowBlank: false
> - },
> {
> xtype: me.isCreate ? 'textfield' : 'displayfield',
> name: 'path',
> @@ -48,13 +24,6 @@ Ext.define('PVE.storage.DirInputPanel', {
> ];
>
> me.column2 = [
> - {
> - xtype: 'proxmoxcheckbox',
> - name: 'enable',
> - checked: true,
> - uncheckedValue: 0,
> - fieldLabel: gettext('Enable')
> - },
> {
> xtype: 'proxmoxcheckbox',
> name: 'shared',
> @@ -74,67 +43,6 @@ Ext.define('PVE.storage.DirInputPanel', {
> }
> ];
>
> - if (me.isCreate || me.storageId !== 'local') {
> - me.column2.unshift({
> - xtype: 'pveNodeSelector',
> - name: 'nodes',
> - fieldLabel: gettext('Nodes'),
> - emptyText: gettext('All') + ' (' +
> - gettext('No restrictions') +')',
> - multiSelect: true,
> - autoSelect: false
> - });
> - }
> -
> me.callParent();
> }
> });
> -
> -Ext.define('PVE.storage.DirEdit', {
> - extend: 'Proxmox.window.Edit',
> -
> - initComponent : function() {
> - var me = this;
> -
> - me.isCreate = !me.storageId;
> -
> - if (me.isCreate) {
> - me.url = '/api2/extjs/storage';
> - me.method = 'POST';
> - } else {
> - me.url = '/api2/extjs/storage/' + me.storageId;
> - me.method = 'PUT';
> - }
> -
> - var ipanel = Ext.create('PVE.storage.DirInputPanel', {
> - isCreate: me.isCreate,
> - storageId: me.storageId
> - });
> -
> - Ext.apply(me, {
> - subject: PVE.Utils.format_storage_type('dir'),
> - isAdd: true,
> - items: [ ipanel ]
> - });
> -
> - me.callParent();
> -
> - if (!me.isCreate) {
> - me.load({
> - success: function(response, options) {
> - var values = response.result.data;
> - var ctypes = values.content || '';
> -
> - values.content = ctypes.split(',');
> -
> - if (values.nodes) {
> - values.nodes = values.nodes.split(',');
> - }
> - values.enable = values.disable ? 0 : 1;
> -
> - ipanel.setValues(values);
> - }
> - });
> - }
> - }
> -});
> diff --git a/www/manager6/storage/GlusterFsEdit.js b/www/manager6/storage/GlusterFsEdit.js
> index 11ff3223..f02bc6e8 100644
> --- a/www/manager6/storage/GlusterFsEdit.js
> +++ b/www/manager6/storage/GlusterFsEdit.js
> @@ -58,37 +58,13 @@ Ext.define('PVE.storage.GlusterFsScan', {
> });
>
> Ext.define('PVE.storage.GlusterFsInputPanel', {
> - extend: 'Proxmox.panel.InputPanel',
> + extend: 'PVE.panel.StorageBase',
> controller: 'storageEdit',
>
> - onGetValues: function(values) {
> - var me = this;
> -
> - if (me.isCreate) {
> - values.type = 'glusterfs';
> - } else {
> - delete values.storage;
> - }
> -
> - values.disable = values.enable ? 0 : 1;
> - delete values.enable;
> -
> - return values;
> - },
> -
> initComponent : function() {
> var me = this;
>
> -
> me.column1 = [
> - {
> - xtype: me.isCreate ? 'textfield' : 'displayfield',
> - name: 'storage',
> - value: me.storageId || '',
> - fieldLabel: 'ID',
> - vtype: 'StorageId',
> - allowBlank: false
> - },
> {
> xtype: me.isCreate ? 'textfield' : 'displayfield',
> name: 'server',
> @@ -131,22 +107,6 @@ Ext.define('PVE.storage.GlusterFsInputPanel', {
> ];
>
> me.column2 = [
> - {
> - xtype: 'pveNodeSelector',
> - name: 'nodes',
> - fieldLabel: gettext('Nodes'),
> - emptyText: gettext('All') + ' (' +
> - gettext('No restrictions') +')',
> - multiSelect: true,
> - autoSelect: false
> - },
> - {
> - xtype: 'proxmoxcheckbox',
> - name: 'enable',
> - checked: true,
> - uncheckedValue: 0,
> - fieldLabel: gettext('Enable')
> - },
> {
> xtype: 'proxmoxintegerfield',
> fieldLabel: gettext('Max Backups'),
> @@ -163,51 +123,3 @@ Ext.define('PVE.storage.GlusterFsInputPanel', {
> me.callParent();
> }
> });
> -
> -Ext.define('PVE.storage.GlusterFsEdit', {
> - extend: 'Proxmox.window.Edit',
> -
> - initComponent : function() {
> - var me = this;
> -
> - me.isCreate = !me.storageId;
> -
> - if (me.isCreate) {
> - me.url = '/api2/extjs/storage';
> - me.method = 'POST';
> - } else {
> - me.url = '/api2/extjs/storage/' + me.storageId;
> - me.method = 'PUT';
> - }
> -
> - var ipanel = Ext.create('PVE.storage.GlusterFsInputPanel', {
> - isCreate: me.isCreate,
> - storageId: me.storageId
> - });
> -
> - Ext.apply(me, {
> - subject: PVE.Utils.format_storage_type('glusterfs'),
> - isAdd: true,
> - items: [ ipanel ]
> - });
> -
> - me.callParent();
> -
> - if (!me.isCreate) {
> - me.load({
> - success: function(response, options) {
> - var values = response.result.data;
> - var ctypes = values.content || '';
> -
> - values.content = ctypes.split(',');
> -
> - if (values.nodes) {
> - values.nodes = values.nodes.split(',');
> - }
> - values.enable = values.disable ? 0 : 1;
> - ipanel.setValues(values);
> - }
> - });
> - }
> - }
> -});
> diff --git a/www/manager6/storage/IScsiEdit.js b/www/manager6/storage/IScsiEdit.js
> index b673bc3a..c7e8ecaf 100644
> --- a/www/manager6/storage/IScsiEdit.js
> +++ b/www/manager6/storage/IScsiEdit.js
> @@ -57,39 +57,26 @@ Ext.define('PVE.storage.IScsiScan', {
> });
>
> Ext.define('PVE.storage.IScsiInputPanel', {
> - extend: 'Proxmox.panel.InputPanel',
> + extend: 'PVE.panel.StorageBase',
>
> onGetValues: function(values) {
> var me = this;
>
> - if (me.isCreate) {
> - values.type = 'iscsi';
> - } else {
> - delete values.storage;
> - }
> -
> values.content = values.luns ? 'images' : 'none';
> delete values.luns;
>
> - values.disable = values.enable ? 0 : 1;
> - delete values.enable;
> + me.callParent([values]);
> + },
>
> - return values;
> + setValues: function(values) {
> + values.luns = (values.content === 'images') ? true : false;
> + this.callParent();
> },
>
> initComponent : function() {
> var me = this;
>
> -
> me.column1 = [
> - {
> - xtype: me.isCreate ? 'textfield' : 'displayfield',
> - name: 'storage',
> - value: me.storageId || '',
> - fieldLabel: 'ID',
> - vtype: 'StorageId',
> - allowBlank: false
> - },
> {
> xtype: me.isCreate ? 'textfield' : 'displayfield',
> name: 'portal',
> @@ -117,22 +104,6 @@ Ext.define('PVE.storage.IScsiInputPanel', {
> ];
>
> me.column2 = [
> - {
> - xtype: 'pveNodeSelector',
> - name: 'nodes',
> - fieldLabel: gettext('Nodes'),
> - emptyText: gettext('All') + ' (' +
> - gettext('No restrictions') +')',
> - multiSelect: true,
> - autoSelect: false
> - },
> - {
> - xtype: 'proxmoxcheckbox',
> - name: 'enable',
> - checked: true,
> - uncheckedValue: 0,
> - fieldLabel: gettext('Enable')
> - },
> {
> xtype: 'checkbox',
> name: 'luns',
> @@ -144,54 +115,3 @@ Ext.define('PVE.storage.IScsiInputPanel', {
> me.callParent();
> }
> });
> -
> -Ext.define('PVE.storage.IScsiEdit', {
> - extend: 'Proxmox.window.Edit',
> -
> - initComponent : function() {
> - var me = this;
> -
> - me.isCreate = !me.storageId;
> -
> - if (me.isCreate) {
> - me.url = '/api2/extjs/storage';
> - me.method = 'POST';
> - } else {
> - me.url = '/api2/extjs/storage/' + me.storageId;
> - me.method = 'PUT';
> - }
> -
> - var ipanel = Ext.create('PVE.storage.IScsiInputPanel', {
> - isCreate: me.isCreate,
> - storageId: me.storageId
> - });
> -
> - Ext.apply(me, {
> - subject: PVE.Utils.format_storage_type('iscsi'),
> - isAdd: true,
> - items: [ ipanel ]
> - });
> -
> - me.callParent();
> -
> - if (!me.isCreate) {
> - me.load({
> - success: function(response, options) {
> - var values = response.result.data;
> - var ctypes = values.content || '';
> -
> - if (values.storage === 'local') {
> - values.content = ctypes.split(',');
> - }
> - if (values.nodes) {
> - values.nodes = values.nodes.split(',');
> - }
> - values.enable = values.disable ? 0 : 1;
> - values.luns = (values.content === 'images') ? true : false;
> -
> - ipanel.setValues(values);
> - }
> - });
> - }
> - }
> -});
> diff --git a/www/manager6/storage/LVMEdit.js b/www/manager6/storage/LVMEdit.js
> index b822d226..af79c527 100644
> --- a/www/manager6/storage/LVMEdit.js
> +++ b/www/manager6/storage/LVMEdit.js
> @@ -84,37 +84,12 @@ Ext.define('PVE.storage.BaseStorageSelector', {
> });
>
> Ext.define('PVE.storage.LVMInputPanel', {
> - extend: 'Proxmox.panel.InputPanel',
> -
> - onGetValues: function(values) {
> - var me = this;
> -
> - if (me.isCreate) {
> - values.type = 'lvm';
> - } else {
> - delete values.storage;
> - }
> -
> - values.disable = values.enable ? 0 : 1;
> - delete values.enable;
> -
> - return values;
> - },
> + extend: 'PVE.panel.StorageBase',
since this now inherits the controller, we have to fix
the storageEdit controller to ignore if the maxfiles
field does not exist, else we get an error on
changing the contents field
>
> initComponent : function() {
> var me = this;
>
> - me.column1 = [
> - {
> - xtype: me.isCreate ? 'textfield' : 'displayfield',
> - name: 'storage',
> - value: me.storageId || '',
> - fieldLabel: 'ID',
> - vtype: 'StorageId',
> - submitValue: !!me.isCreate,
> - allowBlank: false
> - }
> - ];
> + me.column1 = [];
>
> var vgnameField = Ext.createWidget(me.isCreate ? 'textfield' : 'displayfield', {
> name: 'vgname',
> @@ -191,22 +166,6 @@ Ext.define('PVE.storage.LVMInputPanel', {
> /*jslint confusion: false*/
>
> me.column2 = [
> - {
> - xtype: 'pveNodeSelector',
> - name: 'nodes',
> - fieldLabel: gettext('Nodes'),
> - emptyText: gettext('All') + ' (' +
> - gettext('No restrictions') +')',
> - multiSelect: true,
> - autoSelect: false
> - },
> - {
> - xtype: 'proxmoxcheckbox',
> - name: 'enable',
> - checked: true,
> - uncheckedValue: 0,
> - fieldLabel: gettext('Enable')
> - },
> {
> xtype: 'proxmoxcheckbox',
> name: 'shared',
> @@ -218,51 +177,3 @@ Ext.define('PVE.storage.LVMInputPanel', {
> me.callParent();
> }
> });
> -
> -Ext.define('PVE.storage.LVMEdit', {
> - extend: 'Proxmox.window.Edit',
> -
> - initComponent : function() {
> - var me = this;
> -
> - me.isCreate = !me.storageId;
> -
> - if (me.isCreate) {
> - me.url = '/api2/extjs/storage';
> - me.method = 'POST';
> - } else {
> - me.url = '/api2/extjs/storage/' + me.storageId;
> - me.method = 'PUT';
> - }
> -
> - var ipanel = Ext.create('PVE.storage.LVMInputPanel', {
> - isCreate: me.isCreate,
> - storageId: me.storageId
> - });
> -
> - Ext.apply(me, {
> - subject: PVE.Utils.format_storage_type('lvm'),
> - isAdd: true,
> - items: [ ipanel ]
> - });
> -
> - me.callParent();
> -
> - if (!me.isCreate) {
> - me.load({
> - success: function(response, options) {
> - var values = response.result.data;
> - var ctypes = values.content || '';
> -
> - values.content = ctypes.split(',');
> -
> - if (values.nodes) {
> - values.nodes = values.nodes.split(',');
> - }
> - values.enable = values.disable ? 0 : 1;
> - ipanel.setValues(values);
> - }
> - });
> - }
> - }
> -});
> diff --git a/www/manager6/storage/LvmThinEdit.js b/www/manager6/storage/LvmThinEdit.js
> index bb9a4f1e..6ec51ed8 100644
> --- a/www/manager6/storage/LvmThinEdit.js
> +++ b/www/manager6/storage/LvmThinEdit.js
> @@ -92,37 +92,12 @@ Ext.define('PVE.storage.BaseVGSelector', {
> });
>
> Ext.define('PVE.storage.LvmThinInputPanel', {
> - extend: 'Proxmox.panel.InputPanel',
> -
> - onGetValues: function(values) {
> - var me = this;
> -
> - if (me.isCreate) {
> - values.type = 'lvmthin';
> - } else {
> - delete values.storage;
> - }
> -
> - values.disable = values.enable ? 0 : 1;
> - delete values.enable;
> -
> - return values;
> - },
> + extend: 'PVE.panel.StorageBase',
>
> initComponent : function() {
> var me = this;
>
> - me.column1 = [
> - {
> - xtype: me.isCreate ? 'textfield' : 'displayfield',
> - name: 'storage',
> - value: me.storageId || '',
> - fieldLabel: 'ID',
> - vtype: 'StorageId',
> - submitValue: !!me.isCreate,
> - allowBlank: false
> - }
> - ];
> + me.column1 = [];
>
> var vgnameField = Ext.createWidget(me.isCreate ? 'textfield' : 'displayfield', {
> name: 'vgname',
> @@ -184,73 +159,8 @@ Ext.define('PVE.storage.LvmThinInputPanel', {
> });
> /*jslint confusion: false*/
>
> - me.column2 = [
> - {
> - xtype: 'pveNodeSelector',
> - name: 'nodes',
> - fieldLabel: gettext('Nodes'),
> - emptyText: gettext('All') + ' (' +
> - gettext('No restrictions') +')',
> - multiSelect: true,
> - autoSelect: false
> - },
> - {
> - xtype: 'proxmoxcheckbox',
> - name: 'enable',
> - checked: true,
> - uncheckedValue: 0,
> - fieldLabel: gettext('Enable')
> - }
> - ];
> + me.column2 = [];
>
> me.callParent();
> }
> });
> -
> -Ext.define('PVE.storage.LvmThinEdit', {
> - extend: 'Proxmox.window.Edit',
> -
> - initComponent : function() {
> - var me = this;
> -
> - me.isCreate = !me.storageId;
> -
> - if (me.isCreate) {
> - me.url = '/api2/extjs/storage';
> - me.method = 'POST';
> - } else {
> - me.url = '/api2/extjs/storage/' + me.storageId;
> - me.method = 'PUT';
> - }
> -
> - var ipanel = Ext.create('PVE.storage.LvmThinInputPanel', {
> - isCreate: me.isCreate,
> - storageId: me.storageId
> - });
> -
> - Ext.apply(me, {
> - subject: PVE.Utils.format_storage_type('lvmthin'),
> - isAdd: true,
> - items: [ ipanel ]
> - });
> -
> - me.callParent();
> -
> - if (!me.isCreate) {
> - me.load({
> - success: function(response, options) {
> - var values = response.result.data;
> - var ctypes = values.content || '';
> -
> - values.content = ctypes.split(',');
> -
> - if (values.nodes) {
> - values.nodes = values.nodes.split(',');
> - }
> - values.enable = values.disable ? 0 : 1;
> - ipanel.setValues(values);
> - }
> - });
> - }
> - }
> -});
> diff --git a/www/manager6/storage/NFSEdit.js b/www/manager6/storage/NFSEdit.js
> index b230ec34..bbcaf1cc 100644
> --- a/www/manager6/storage/NFSEdit.js
> +++ b/www/manager6/storage/NFSEdit.js
> @@ -58,25 +58,19 @@ Ext.define('PVE.storage.NFSScan', {
> });
>
> Ext.define('PVE.storage.NFSInputPanel', {
> - extend: 'Proxmox.panel.InputPanel',
> + extend: 'PVE.panel.StorageBase',
> controller: 'storageEdit',
>
> onGetValues: function(values) {
> var me = this;
>
> if (me.isCreate) {
> - values.type = 'nfs';
> // hack: for now we always create nvf v3
> // fixme: make this configurable
> values.options = 'vers=3';
> - } else {
> - delete values.storage;
> }
>
> - values.disable = values.enable ? 0 : 1;
> - delete values.enable;
> -
> - return values;
> + return me.callParent([values]);
> },
>
> initComponent : function() {
> @@ -84,14 +78,6 @@ Ext.define('PVE.storage.NFSInputPanel', {
>
>
> me.column1 = [
> - {
> - xtype: me.isCreate ? 'textfield' : 'displayfield',
> - name: 'storage',
> - value: me.storageId || '',
> - fieldLabel: 'ID',
> - vtype: 'StorageId',
> - allowBlank: false
> - },
> {
> xtype: me.isCreate ? 'textfield' : 'displayfield',
> name: 'server',
> @@ -126,22 +112,6 @@ Ext.define('PVE.storage.NFSInputPanel', {
> ];
>
> me.column2 = [
> - {
> - xtype: 'pveNodeSelector',
> - name: 'nodes',
> - fieldLabel: gettext('Nodes'),
> - emptyText: gettext('All') + ' (' +
> - gettext('No restrictions') +')',
> - multiSelect: true,
> - autoSelect: false
> - },
> - {
> - xtype: 'proxmoxcheckbox',
> - name: 'enable',
> - checked: true,
> - uncheckedValue: 0,
> - fieldLabel: gettext('Enable')
> - },
> {
> xtype: 'proxmoxintegerfield',
> fieldLabel: gettext('Max Backups'),
> @@ -158,51 +128,3 @@ Ext.define('PVE.storage.NFSInputPanel', {
> me.callParent();
> }
> });
> -
> -Ext.define('PVE.storage.NFSEdit', {
> - extend: 'Proxmox.window.Edit',
> -
> - initComponent : function() {
> - var me = this;
> -
> - me.isCreate = !me.storageId;
> -
> - if (me.isCreate) {
> - me.url = '/api2/extjs/storage';
> - me.method = 'POST';
> - } else {
> - me.url = '/api2/extjs/storage/' + me.storageId;
> - me.method = 'PUT';
> - }
> -
> - var ipanel = Ext.create('PVE.storage.NFSInputPanel', {
> - isCreate: me.isCreate,
> - storageId: me.storageId
> - });
> -
> - Ext.apply(me, {
> - subject: 'NFS',
> - isAdd: true,
> - items: [ ipanel ]
> - });
> -
> - me.callParent();
> -
> - if (!me.isCreate) {
> - me.load({
> - success: function(response, options) {
> - var values = response.result.data;
> - var ctypes = values.content || '';
> -
> - values.content = ctypes.split(',');
> -
> - if (values.nodes) {
> - values.nodes = values.nodes.split(',');
> - }
> - values.enable = values.disable ? 0 : 1;
> - ipanel.setValues(values);
> - }
> - });
> - }
> - }
> -});
> diff --git a/www/manager6/storage/RBDEdit.js b/www/manager6/storage/RBDEdit.js
> index 1e46f9ee..d26a6ac3 100644
> --- a/www/manager6/storage/RBDEdit.js
> +++ b/www/manager6/storage/RBDEdit.js
> @@ -1,20 +1,5 @@
> Ext.define('PVE.storage.RBDInputPanel', {
> - extend: 'Proxmox.panel.InputPanel',
> -
> - onGetValues: function(values) {
> - var me = this;
> -
> - if (me.isCreate) {
> - values.type = 'rbd';
> - } else {
> - delete values.storage;
> - }
> -
> - values.disable = values.enable ? 0 : 1;
> - delete values.enable;
> -
> - return values;
> - },
> + extend: 'PVE.panel.StorageBase',
>
> initComponent : function() {
> var me = this;
> @@ -22,17 +7,9 @@ Ext.define('PVE.storage.RBDInputPanel', {
> if (!me.nodename) {
> me.nodename = 'localhost';
> }
> + me.type = 'rbd';
>
> - me.column1 = [
> - {
> - xtype: me.isCreate ? 'textfield' : 'displayfield',
> - name: 'storage',
> - value: me.storageId || '',
> - fieldLabel: 'ID',
> - vtype: 'StorageId',
> - allowBlank: false
> - }
> - ];
> + me.column1 = [];
>
> if (me.pveceph) {
> me.column1.push(
> @@ -75,13 +52,6 @@ Ext.define('PVE.storage.RBDInputPanel', {
> // while before it was a string
> /*jslint confusion: true*/
> me.column2 = [
> - {
> - xtype: 'proxmoxcheckbox',
> - name: 'enable',
> - checked: true,
> - uncheckedValue: 0,
> - fieldLabel: gettext('Enable')
> - },
> {
> xtype: 'pveContentTypeSelector',
> cts: ['images', 'rootdir'],
> @@ -100,69 +70,12 @@ Ext.define('PVE.storage.RBDInputPanel', {
> ];
> /*jslint confusion: false*/
>
> - if (me.isCreate) {
> - me.column2.unshift({
> - xtype: 'pveNodeSelector',
> - name: 'nodes',
> - fieldLabel: gettext('Nodes'),
> - emptyText: gettext('All') + ' (' +
> - gettext('No restrictions') +')',
> - multiSelect: true,
> - autoSelect: false
> - });
> - }
> -
> me.callParent();
> }
> });
>
> -Ext.define('PVE.storage.RBDEdit', {
> - extend: 'Proxmox.window.Edit',
> -
> - initComponent : function() {
> - var me = this;
> -
> - me.isCreate = !me.storageId;
> -
> - if (me.isCreate) {
> - me.url = '/api2/extjs/storage';
> - me.method = 'POST';
> - } else {
> - me.url = '/api2/extjs/storage/' + me.storageId;
> - me.method = 'PUT';
> - }
> -
> - var ipanel = Ext.create('PVE.storage.RBDInputPanel', {
> - isCreate: me.isCreate,
> - storageId: me.storageId,
> - nodename: me.nodename,
> - pveceph: me.pveceph
> - });
> -
> - Ext.apply(me, {
> - subject: PVE.Utils.format_storage_type(me.pveceph?'pveceph':'rbd'),
> - isAdd: true,
> - items: [ ipanel ]
> - });
> +Ext.define('PVE.storage.PVERBDInputPanel', {
> + extend: 'PVE.storage.RBDInputPanel',
>
> - me.callParent();
> -
> - if (!me.isCreate) {
> - me.load({
> - success: function(response, options) {
> - var values = response.result.data;
> -
> - var ctypes = values.content || '';
> -
> - values.content = ctypes.split(',');
> -
> - if (values.nodes) {
> - values.nodes = values.nodes.split(',');
> - }
> - values.enable = values.disable ? 0 : 1;
> - ipanel.setValues(values);
> - }
> - });
> - }
> - }
> + pveceph: 1
> });
> diff --git a/www/manager6/storage/SheepdogEdit.js b/www/manager6/storage/SheepdogEdit.js
> index 90d87337..aae837d8 100644
> --- a/www/manager6/storage/SheepdogEdit.js
> +++ b/www/manager6/storage/SheepdogEdit.js
> @@ -1,36 +1,20 @@
> Ext.define('PVE.storage.SheepdogInputPanel', {
> - extend: 'Proxmox.panel.InputPanel',
> + extend: 'PVE.panel.StorageBase',
>
> onGetValues: function(values) {
> var me = this;
>
> if (me.isCreate) {
> - values.type = 'sheepdog';
> values.content = 'images';
> -
> - } else {
> - delete values.storage;
> }
>
> - values.disable = values.enable ? 0 : 1;
> - delete values.enable;
> -
> - return values;
> + return me.callParent([values]);
> },
>
> initComponent : function() {
> var me = this;
>
> -
> me.column1 = [
> - {
> - xtype: me.isCreate ? 'textfield' : 'displayfield',
> - name: 'storage',
> - value: me.storageId || '',
> - fieldLabel: 'ID',
> - vtype: 'StorageId',
> - allowBlank: false
> - },
> {
> xtype: me.isCreate ? 'textfield' : 'displayfield',
> name: 'portal',
> @@ -39,73 +23,8 @@ Ext.define('PVE.storage.SheepdogInputPanel', {
> allowBlank: false
> }
> ];
> -
> - me.column2 = [
> - {
> - xtype: 'proxmoxcheckbox',
> - name: 'enable',
> - checked: true,
> - uncheckedValue: 0,
> - fieldLabel: gettext('Enable')
> - }
> - ];
> -
> - if (me.isCreate || me.storageId !== 'local') {
> - me.column2.unshift({
> - xtype: 'pveNodeSelector',
> - name: 'nodes',
> - fieldLabel: gettext('Nodes'),
> - emptyText: gettext('All') + ' (' +
> - gettext('No restrictions') +')',
> - multiSelect: true,
> - autoSelect: false
> - });
> - }
> + me.column2 = [];
>
> me.callParent();
> }
> });
> -
> -Ext.define('PVE.storage.SheepdogEdit', {
> - extend: 'Proxmox.window.Edit',
> -
> - initComponent : function() {
> - var me = this;
> -
> - me.isCreate = !me.storageId;
> -
> - if (me.isCreate) {
> - me.url = '/api2/extjs/storage';
> - me.method = 'POST';
> - } else {
> - me.url = '/api2/extjs/storage/' + me.storageId;
> - me.method = 'PUT';
> - }
> -
> - var ipanel = Ext.create('PVE.storage.SheepdogInputPanel', {
> - isCreate: me.isCreate,
> - storageId: me.storageId
> - });
> -
> - Ext.apply(me, {
> - subject: PVE.Utils.format_storage_type('sheepdog'),
> - isAdd: true,
> - items: [ ipanel ]
> - });
> -
> - me.callParent();
> -
> - if (!me.isCreate) {
> - me.load({
> - success: function(response, options) {
> - var values = response.result.data;
> - if (values.nodes) {
> - values.nodes = values.nodes.split(',');
> - }
> - values.enable = values.disable ? 0 : 1;
> - ipanel.setValues(values);
> - }
> - });
> - }
> - }
> -});
> diff --git a/www/manager6/storage/ZFSEdit.js b/www/manager6/storage/ZFSEdit.js
> index ac85b359..3906be76 100644
> --- a/www/manager6/storage/ZFSEdit.js
> +++ b/www/manager6/storage/ZFSEdit.js
> @@ -1,37 +1,28 @@
> Ext.define('PVE.storage.ZFSInputPanel', {
> - extend: 'Proxmox.panel.InputPanel',
> + extend: 'PVE.panel.StorageBase',
>
> onGetValues: function(values) {
> var me = this;
>
> if (me.isCreate) {
> - values.type = 'zfs';
> values.content = 'images';
> - } else {
> - delete values.storage;
> }
>
> - values.disable = values.enable ? 0 : 1;
> - delete values.enable;
> -
> values.nowritecache = values.writecache ? 0 : 1;
> delete values.writecache;
>
> - return values;
> + return me.callParent([values]);
> + },
> +
> + setValues: function diff(values) {
> + values.writecache = values.nowritecache ? 0 : 1;
> + this.callParent([values]);
> },
>
> initComponent : function() {
> var me = this;
>
> me.column1 = [
> - {
> - xtype: me.isCreate ? 'textfield' : 'displayfield',
> - name: 'storage',
> - value: me.storageId || '',
> - fieldLabel: 'ID',
> - vtype: 'StorageId',
> - allowBlank: false
> - },
> {
> xtype: me.isCreate ? 'textfield' : 'displayfield',
> name: 'portal',
> @@ -70,13 +61,6 @@ Ext.define('PVE.storage.ZFSInputPanel', {
> ];
>
> me.column2 = [
> - {
> - xtype: 'proxmoxcheckbox',
> - name: 'enable',
> - checked: true,
> - uncheckedValue: 0,
> - fieldLabel: gettext('Enable')
> - },
> {
> xtype: me.isCreate ? 'pveiScsiProviderSelector' : 'displayfield',
> name: 'iscsiprovider',
> @@ -107,63 +91,6 @@ Ext.define('PVE.storage.ZFSInputPanel', {
> }
> ];
>
> - if (me.isCreate || me.storageId !== 'local') {
> - me.column2.unshift({
> - xtype: 'pveNodeSelector',
> - name: 'nodes',
> - fieldLabel: gettext('Nodes'),
> - emptyText: gettext('All') + ' (' +
> - gettext('No restrictions') +')',
> - multiSelect: true,
> - autoSelect: false
> - });
> - }
> -
> me.callParent();
> }
> });
> -
> -Ext.define('PVE.storage.ZFSEdit', {
> - extend: 'Proxmox.window.Edit',
> -
> - initComponent : function() {
> - var me = this;
> -
> - me.isCreate = !me.storageId;
> -
> - if (me.isCreate) {
> - me.url = '/api2/extjs/storage';
> - me.method = 'POST';
> - } else {
> - me.url = '/api2/extjs/storage/' + me.storageId;
> - me.method = 'PUT';
> - }
> -
> - var ipanel = Ext.create('PVE.storage.ZFSInputPanel', {
> - isCreate: me.isCreate,
> - storageId: me.storageId
> - });
> -
> - Ext.apply(me, {
> - subject: 'ZFS Storage',
> - isAdd: true,
> - items: [ ipanel ]
> - });
> -
> - me.callParent();
> -
> - if (!me.isCreate) {
> - me.load({
> - success: function(response, options) {
> - var values = response.result.data;
> - if (values.nodes) {
> - values.nodes = values.nodes.split(',');
> - }
> - values.enable = values.disable ? 0 : 1;
> - values.writecache = values.nowritecache ? 0 : 1;
> - ipanel.setValues(values);
> - }
> - });
> - }
> - }
> -});
> diff --git a/www/manager6/storage/ZFSPoolEdit.js b/www/manager6/storage/ZFSPoolEdit.js
> index 56ed0f84..69d03817 100644
> --- a/www/manager6/storage/ZFSPoolEdit.js
> +++ b/www/manager6/storage/ZFSPoolEdit.js
> @@ -35,36 +35,12 @@ Ext.define('PVE.storage.ZFSPoolSelector', {
> });
>
> Ext.define('PVE.storage.ZFSPoolInputPanel', {
> - extend: 'Proxmox.panel.InputPanel',
> -
> - onGetValues: function(values) {
> - var me = this;
> -
> - if (me.isCreate) {
> - values.type = 'zfspool';
> - } else {
> - delete values.storage;
> - }
> -
> - values.disable = values.enable ? 0 : 1;
> - delete values.enable;
> -
> - return values;
> - },
> + extend: 'PVE.panel.StorageBase',
>
> initComponent : function() {
> var me = this;
>
> - me.column1 = [
> - {
> - xtype: me.isCreate ? 'textfield' : 'displayfield',
> - name: 'storage',
> - value: me.storageId || '',
> - fieldLabel: 'ID',
> - vtype: 'StorageId',
> - allowBlank: false
> - }
> - ];
> + me.column1 = [];
>
> if (me.isCreate) {
> me.column1.push(Ext.create('PVE.storage.ZFSPoolSelector', {
> @@ -95,13 +71,6 @@ Ext.define('PVE.storage.ZFSPoolInputPanel', {
> });
> /*jslint confusion: false*/
> me.column2 = [
> - {
> - xtype: 'proxmoxcheckbox',
> - name: 'enable',
> - checked: true,
> - uncheckedValue: 0,
> - fieldLabel: gettext('Enable')
> - },
> {
> xtype: 'proxmoxcheckbox',
> name: 'sparse',
> @@ -118,66 +87,6 @@ Ext.define('PVE.storage.ZFSPoolInputPanel', {
> }
> ];
>
> - if (me.isCreate || me.storageId !== 'local') {
> - me.column2.unshift({
> - xtype: 'pveNodeSelector',
> - name: 'nodes',
> - fieldLabel: gettext('Nodes'),
> - emptyText: gettext('All') + ' (' +
> - gettext('No restrictions') +')',
> - multiSelect: true,
> - autoSelect: false
> - });
> - }
> -
> me.callParent();
> }
> });
> -
> -Ext.define('PVE.storage.ZFSPoolEdit', {
> - extend: 'Proxmox.window.Edit',
> -
> - initComponent : function() {
> - var me = this;
> -
> - me.isCreate = !me.storageId;
> -
> - if (me.isCreate) {
> - me.url = '/api2/extjs/storage';
> - me.method = 'POST';
> - } else {
> - me.url = '/api2/extjs/storage/' + me.storageId;
> - me.method = 'PUT';
> - }
> -
> - var ipanel = Ext.create('PVE.storage.ZFSPoolInputPanel', {
> - isCreate: me.isCreate,
> - storageId: me.storageId
> - });
> -
> - Ext.apply(me, {
> - subject: PVE.Utils.format_storage_type('zfspool'),
> - isAdd: true,
> - items: [ ipanel ]
> - });
> -
> - me.callParent();
> -
> - if (!me.isCreate) {
> - me.load({
> - success: function(response, options) {
> - var values = response.result.data;
> - var ctypes = values.content || '';
> -
> - values.content = ctypes.split(',');
> -
> - if (values.nodes) {
> - values.nodes = values.nodes.split(',');
> - }
> - values.enable = values.disable ? 0 : 1;
> - ipanel.setValues(values);
> - }
> - });
> - }
> - }
> -});
>
More information about the pve-devel
mailing list