]> git.proxmox.com Git - pve-manager.git/commitdiff
use ComboGrid from proxmox-widget-toolkit
authorDominik Csapak <d.csapak@proxmox.com>
Mon, 15 Jan 2018 14:17:50 +0000 (15:17 +0100)
committerDominik Csapak <d.csapak@proxmox.com>
Thu, 25 Jan 2018 12:36:37 +0000 (13:36 +0100)
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
Reviewed-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
19 files changed:
www/manager6/Makefile
www/manager6/ceph/OSD.js
www/manager6/form/BridgeSelector.js
www/manager6/form/ComboGrid.js [deleted file]
www/manager6/form/FileSelector.js
www/manager6/form/GroupSelector.js
www/manager6/form/IPProtocolSelector.js
www/manager6/form/IPRefSelector.js
www/manager6/form/NodeSelector.js
www/manager6/form/PoolSelector.js
www/manager6/form/RoleSelector.js
www/manager6/form/SecurityGroupSelector.js
www/manager6/form/SnapshotSelector.js
www/manager6/form/StorageSelector.js
www/manager6/form/USBSelector.js
www/manager6/form/UserSelector.js
www/manager6/form/VMSelector.js
www/manager6/grid/FirewallRules.js
www/manager6/ha/GroupSelector.js

index 6f5b72ca4a009f7f281c1e5f6a6d55dbf99c4ac6..6a5b8252a3f7679642d841c2f542a228e69d46b1 100644 (file)
@@ -31,7 +31,6 @@ JSSRC=                                                        \
        form/TextField.js                               \
        form/IntegerField.js                            \
        form/RRDTypeSelector.js                         \
-       form/ComboGrid.js                               \
        form/KVComboBox.js                              \
        form/Boolean.js                                 \
        form/CompressionSelector.js                     \
index cb358eabbc6565642fae398cb2cde8afb24043e7..ed14767246c42cb6febd80b10953937bdfe4057b 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.CephDiskSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.pveCephDiskSelector'],
 
     diskType: 'journal_disks',
index bd07c206c502332dbfba887be7f2a8b7494bb959..2c5ca281d1a2f6bf3b90caa27df0b6af28b08363 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.BridgeSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.PVE.form.BridgeSelector'],
 
     bridgeType: 'any_bridge', // bridge, OVSBridge or any_bridge
diff --git a/www/manager6/form/ComboGrid.js b/www/manager6/form/ComboGrid.js
deleted file mode 100644 (file)
index ee58c29..0000000
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
- * ComboGrid component: a ComboBox where the dropdown menu (the
- * "Picker") is a Grid with Rows and Columns expects a listConfig
- * object with a columns property roughly based on the GridPicker from
- * https://www.sencha.com/forum/showthread.php?299909
- *
-*/
-
-Ext.define('PVE.form.ComboGrid', {
-    extend: 'Ext.form.field.ComboBox',
-    alias: ['widget.PVE.form.ComboGrid'],
-
-    // this value is used as default value after load()
-    preferredValue: undefined,
-
-    // hack: allow to select empty value
-    // seems extjs does not allow that when 'editable == false'
-    onKeyUp: function(e, t) {
-        var me = this;
-        var key = e.getKey();
-
-        if (!me.editable && me.allowBlank && !me.multiSelect &&
-           (key == e.BACKSPACE || key == e.DELETE)) {
-           me.setValue('');
-       }
-
-        me.callParent(arguments);
-    },
-
-    // needed to trigger onKeyUp etc.
-    enableKeyEvents: true,
-
-    editable: false,
-
-    // override ExtJS method
-    // if the field has multiSelect enabled, the store is not loaded, and
-    // the displayfield == valuefield, it saves the rawvalue as an array
-    // but the getRawValue method is only defined in the textfield class
-    // (which has not to deal with arrays) an returns the string in the
-    // field (not an array)
-    //
-    // so if we have multiselect enabled, return the rawValue (which
-    // should be an array) and else we do callParent so
-    // it should not impact any other use of the class
-    getRawValue: function() {
-       var me = this;
-       if (me.multiSelect) {
-           return me.rawValue;
-       } else {
-           return me.callParent();
-       }
-    },
-
-// override ExtJS protected method
-    onBindStore: function(store, initial) {
-        var me = this,
-            picker = me.picker,
-            extraKeySpec,
-            valueCollectionConfig;
-
-        // We're being bound, not unbound...
-        if (store) {
-            // If store was created from a 2 dimensional array with generated field names 'field1' and 'field2'
-            if (store.autoCreated) {
-                me.queryMode = 'local';
-                me.valueField = me.displayField = 'field1';
-                if (!store.expanded) {
-                    me.displayField = 'field2';
-                }
-
-                // displayTpl config will need regenerating with the autogenerated displayField name 'field1'
-                me.setDisplayTpl(null);
-            }
-            if (!Ext.isDefined(me.valueField)) {
-                me.valueField = me.displayField;
-            }
-
-            // Add a byValue index to the store so that we can efficiently look up records by the value field
-            // when setValue passes string value(s).
-            // The two indices (Ext.util.CollectionKeys) are configured unique: false, so that if duplicate keys
-            // are found, they are all returned by the get call.
-            // This is so that findByText and findByValue are able to return the *FIRST* matching value. By default,
-            // if unique is true, CollectionKey keeps the *last* matching value.
-            extraKeySpec = {
-                byValue: {
-                    rootProperty: 'data',
-                    unique: false
-                }
-            };
-            extraKeySpec.byValue.property = me.valueField;
-            store.setExtraKeys(extraKeySpec);
-
-            if (me.displayField === me.valueField) {
-                store.byText = store.byValue;
-            } else {
-                extraKeySpec.byText = {
-                    rootProperty: 'data',
-                    unique: false
-                };
-                extraKeySpec.byText.property = me.displayField;
-                store.setExtraKeys(extraKeySpec);
-            }
-
-            // We hold a collection of the values which have been selected, keyed by this field's valueField.
-            // This collection also functions as the selected items collection for the BoundList's selection model
-            valueCollectionConfig = {
-                rootProperty: 'data',
-                extraKeys: {
-                    byInternalId: {
-                        property: 'internalId'
-                    },
-                    byValue: {
-                        property: me.valueField,
-                        rootProperty: 'data'
-                    }
-                },
-                // Whenever this collection is changed by anyone, whether by this field adding to it,
-                // or the BoundList operating, we must refresh our value.
-                listeners: {
-                    beginupdate: me.onValueCollectionBeginUpdate,
-                    endupdate: me.onValueCollectionEndUpdate,
-                    scope: me
-                }
-            };
-
-            // This becomes our collection of selected records for the Field.
-            me.valueCollection = new Ext.util.Collection(valueCollectionConfig);
-
-            // We use the selected Collection as our value collection and the basis
-            // for rendering the tag list.
-
-            //pve override: since the picker is represented by a grid panel,
-            // we changed here the selection to RowModel
-            me.pickerSelectionModel = new Ext.selection.RowModel({
-                mode: me.multiSelect ? 'SIMPLE' : 'SINGLE',
-                // There are situations when a row is selected on mousedown but then the mouse is dragged to another row
-                // and released.  In these situations, the event target for the click event won't be the row where the mouse
-                // was released but the boundview.  The view will then determine that it should fire a container click, and
-                // the DataViewModel will then deselect all prior selections. Setting `deselectOnContainerClick` here will
-                // prevent the model from deselecting.
-                deselectOnContainerClick: false,
-                enableInitialSelection: false,
-                pruneRemoved: false,
-                selected: me.valueCollection,
-                store: store,
-                listeners: {
-                    scope: me,
-                    lastselectedchanged: me.updateBindSelection
-                }
-            });
-
-            if (!initial) {
-                me.resetToDefault();
-            }
-
-            if (picker) {
-                picker.setSelectionModel(me.pickerSelectionModel);
-                if (picker.getStore() !== store) {
-                    picker.bindStore(store);
-                }
-            }
-        }
-    },
-
-    // copied from ComboBox
-    createPicker: function() {
-        var me = this;
-        var picker;
-
-        var pickerCfg = Ext.apply({
-                // pve overrides: display a grid for selection
-                xtype: 'gridpanel',
-                id: me.pickerId,
-                pickerField: me,
-                floating: true,
-                hidden: true,
-                store: me.store,
-                displayField: me.displayField,
-                preserveScrollOnRefresh: true,
-                pageSize: me.pageSize,
-                tpl: me.tpl,
-                selModel: me.pickerSelectionModel,
-                focusOnToFront: false
-            }, me.listConfig, me.defaultListConfig);
-
-        picker = me.picker || Ext.widget(pickerCfg);
-
-        if (picker.getStore() !== me.store) {
-            picker.bindStore(me.store);
-        }
-
-        if (me.pageSize) {
-            picker.pagingToolbar.on('beforechange', me.onPageChange, me);
-        }
-
-        // pve overrides: pass missing method in gridPanel to its view
-        picker.refresh = function() {
-            picker.getSelectionModel().select(me.valueCollection.getRange());
-            picker.getView().refresh();
-        };
-        picker.getNodeByRecord = function() {
-            picker.getView().getNodeByRecord(arguments);
-        };
-
-        // We limit the height of the picker to fit in the space above
-        // or below this field unless the picker has its own ideas about that.
-        if (!picker.initialConfig.maxHeight) {
-            picker.on({
-                beforeshow: me.onBeforePickerShow,
-                scope: me
-            });
-        }
-        picker.getSelectionModel().on({
-            beforeselect: me.onBeforeSelect,
-            beforedeselect: me.onBeforeDeselect,
-            focuschange: me.onFocusChange,
-            selectionChange: function (sm, selectedRecords) {
-                var me = this;
-                if (selectedRecords.length) {
-                    me.setValue(selectedRecords);
-                    me.fireEvent('select', me, selectedRecords);
-                }
-            },
-            scope: me
-        });
-
-       // hack for extjs6
-       // when the clicked item is the same as the previously selected,
-       // it does not select the item
-       // instead we hide the picker
-       if (!me.multiSelect) {
-           picker.on('itemclick', function (sm,record) {
-               if (picker.getSelection()[0] === record) {
-                   picker.hide();
-               }
-           });
-       }
-
-       // when our store is not yet loaded, we increase
-       // the height of the gridpanel, so that we can see
-       // the loading mask
-       //
-       // we save the minheight to reset it after the load
-       picker.on('show', function() {
-           if (me.enableLoadMask) {
-               me.savedMinHeight = picker.getMinHeight();
-               picker.setMinHeight(100);
-           }
-       });
-
-        picker.getNavigationModel().navigateOnSpace = false;
-
-        return picker;
-    },
-
-    initComponent: function() {
-       var me = this;
-
-       Ext.apply(me, {
-           queryMode: 'local',
-           matchFieldWidth: false
-       });
-
-       Ext.applyIf(me, { value: ''}); // hack: avoid ExtJS validate() bug
-
-       Ext.applyIf(me.listConfig, { width: 400 });
-
-        me.callParent();
-
-        // Create the picker at an early stage, so it is available to store the previous selection
-        if (!me.picker) {
-            me.createPicker();
-        }
-
-       if (me.editable) {
-           // The trigger.picker causes first a focus event on the field then
-           // toggles the selection picker. Thus skip expanding in this case,
-           // else our focus listner expands and the picker.trigger then
-           // collapses it directly afterwards.
-           Ext.override(me.triggers.picker, {
-               onMouseDown : function (e) {
-                   // copied "should we focus" check from Ext.form.trigger.Trigger
-                   if (e.pointerType !== 'touch' && !this.field.owns(Ext.Element.getActiveElement())) {
-                       me.skip_expand_on_focus = true;
-                   }
-                   this.callParent(arguments);
-               }
-           });
-
-           me.on("focus", function(me) {
-               if (!me.isExpanded && !me.skip_expand_on_focus) {
-                   me.expand();
-               }
-               me.skip_expand_on_focus = false;
-           });
-       }
-
-       me.mon(me.store, 'beforeload', function() {
-           if (!me.isDisabled()) {
-               me.enableLoadMask = true;
-           }
-       });
-
-       // hack: autoSelect does not work
-       me.mon(me.store, 'load', function(store, r, success, o) {
-           if (success) {
-               me.clearInvalid();
-
-               if (me.enableLoadMask) {
-                   delete me.enableLoadMask;
-
-                   // if the picker exists,
-                   // we reset its minheight to the saved var/0
-                   // we have to update the layout, otherwise the height
-                   // gets not recalculated
-                   if (me.picker) {
-                       me.picker.setMinHeight(me.savedMinHeight || 0);
-                       delete me.savedMinHeight;
-                       me.picker.updateLayout();
-                   }
-               }
-
-               var def = me.getValue() || me.preferredValue;
-               if (def) {
-                   me.setValue(def, true); // sync with grid
-               }
-               var found = false;
-               if (def) {
-                   if (Ext.isArray(def)) {
-                       Ext.Array.each(def, function(v) {
-                           if (store.findRecord(me.valueField, v)) {
-                               found = true;
-                               return false; // break
-                           }
-                       });
-                   } else {
-                       found = store.findRecord(me.valueField, def);
-                   }
-               }
-
-               if (!found) {
-                   var rec = me.store.first();
-                   if (me.autoSelect && rec && rec.data) {
-                       def = rec.data[me.valueField];
-                       me.setValue(def, true);
-                   } else {
-                       me.setValue(me.editable ? def : '', true);
-                   }
-               }
-           }
-       });
-    }
-});
index fefe84702d16c5f688385012c1dfe78d00d79b45..5f1e3dde912d78f73ce48bb268cd1d311ddfa6d7 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.FileSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: 'widget.pveFileSelector',
 
     editable: true,
index 2db8e5af4b2d7acbe95f3e8347c7c044cab43080..4aba4d654b25d90fd2ebd7c74fbc1eea209e2ecd 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.GroupSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.pveGroupSelector'],
 
     allowBlank: false,
index af166fc239bf737b93a283d2cba6d93adac54c7b..5a53b12504ab6e14ac98d6fcc6e2e96dcae3c3e6 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.IPProtocolSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.pveIPProtocolSelector'],
     valueField: 'p',
     displayField: 'p',
index 728f5f7e2ec74be9cc9bc7adc62d2a107c2c70fe..bb7cb5b8b9ff58710a08126eae6bb9a19917a0eb 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.IPRefSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.pveIPRefSelector'],
 
     base_url: undefined,
index 6fcced3719748efade7964831f745b0185c8711d..386593b6a0ceb883df539f32a2ebbb1884c8a879 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.NodeSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.pveNodeSelector'],
 
     // invalidate nodes which are offline
index 4e7b2f3f71f7229da3ad344bb76a3090e569f9d6..fea56b8ec7ee0a767b30db5099f53c0f0f929ce1 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.PoolSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.pvePoolSelector'],
 
     allowBlank: false,
index acef5f904f23213b02ae0dd8d240ac55cfe5d5a6..ba91b24c55c2f6ea0aab9a7042cf737f952bac38 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.RoleSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.pveRoleSelector'],
 
     allowBlank: false,
index b805c291dca9bdf8cfe36df40a9d2e813733cdb1..8f946af7dcfb4b0b44d939f830339b636b5b75d5 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.SecurityGroupsSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.pveSecurityGroupsSelector'],
 
     valueField: 'group',
index ea7d460e0ffa0931a49736fa30a44379270b7565..8ccec0dde1dee9c975c5d82bdf42d90562e19815 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.SnapshotSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.PVE.form.SnapshotSelector'],
 
     valueField: 'name',
index 184869d1ecf096b44e9d4ec31391b10e7f5718dd..bc0e6896d4ba2b566b09f57ed934ee0c28594d00 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.StorageSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: 'widget.pveStorageSelector',
 
     allowBlank: false,
index bc09b8d64714cf36bde76bcd9b469d31fab6550b..a8a8da52696d93fb12ec5bc91b813f30d21546ab 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.USBSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.pveUSBSelector'],
     allowBlank: false,
     autoSelect: false,
index c131b22406d28bf0a11553bd4f7e313c65218a0b..ef95d899e911526477854421878d02390d3e7534 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.UserSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.pveUserSelector'],
     allowBlank: false,
     autoSelect: false,
index 2856f3ff43a0698b3210dc918476dc6cc582e2f3..c3375fb45828dd529f51ad5c5040a5a716e35d27 100644 (file)
@@ -215,7 +215,7 @@ Ext.define('PVE.form.VMSelector', {
 
 
 Ext.define('PVE.form.VMComboSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: 'widget.vmComboSelector',
 
     valueField: 'vmid',
index 2cd79ab7d6bd6b498f3148b4ac0a4d31dd07d4b6..5adf7e80ea8113d8f51de38ad14c067817e46985 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.form.FWMacroSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: 'widget.pveFWMacroSelector',
     allowBlank: true,
     autoSelect: false,
index 74877398ccd9e3eddbe8fcd35eac662be553d8fa..3c2f23d87101f3473c36ea035c00b25febeb67f4 100644 (file)
@@ -1,5 +1,5 @@
 Ext.define('PVE.ha.GroupSelector', {
-    extend: 'PVE.form.ComboGrid',
+    extend: 'Proxmox.form.ComboGrid',
     alias: ['widget.pveHAGroupSelector'],
 
     value: [],