]> git.proxmox.com Git - pve-manager.git/blobdiff - www/manager6/window/Settings.js
ui: restore: improve warning for restoring container with same ID
[pve-manager.git] / www / manager6 / window / Settings.js
index 910389ec45f5ab9e6dccb7b25d6d063edcd37560..5cf7a70f8aa63387cff9ca56639099e266131253 100644 (file)
@@ -12,21 +12,18 @@ Ext.define('PVE.window.Settings', {
        {
            xtype: 'proxmoxHelpButton',
            onlineHelp: 'gui_my_settings',
-           hidden: false
+           hidden: false,
        },
        '->',
        {
            text: gettext('Close'),
            handler: function() {
                this.up('window').close();
-           }
-       }
+           },
+       },
     ],
 
-    layout: {
-       type: 'hbox',
-       align: 'top'
-    },
+    layout: 'hbox',
 
     controller: {
        xclass: 'Ext.app.ViewController',
@@ -36,11 +33,14 @@ Ext.define('PVE.window.Settings', {
            var sp = Ext.state.Manager.getProvider();
 
            var username = sp.get('login-username') || Proxmox.Utils.noneText;
-           me.lookupReference('savedUserName').setValue(username);
-           var vncMode = sp.get('novnc-scaling');
-           if (vncMode !== undefined) {
-               me.lookupReference('noVNCScalingGroup').setValue(vncMode);
-           }
+           me.lookupReference('savedUserName').setValue(Ext.String.htmlEncode(username));
+           var vncMode = sp.get('novnc-scaling') || 'auto';
+           me.lookupReference('noVNCScalingGroup').setValue({ noVNCScalingField: vncMode });
+
+           let summarycolumns = sp.get('summarycolumns', 'auto');
+           me.lookup('summarycolumns').setValue(summarycolumns);
+
+           me.lookup('guestNotesCollapse').setValue(sp.get('guest-notes-collapse', 'never'));
 
            var settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
            settings.forEach(function(setting) {
@@ -54,29 +54,20 @@ Ext.define('PVE.window.Settings', {
        },
 
        set_button_status: function() {
-           var me = this;
+           let me = this;
+           let form = me.lookup('xtermform');
 
-           var form = me.lookup('xtermform');
-           var valid = form.isValid();
-           var dirty = form.isDirty();
-
-           var hasvalues = false;
-           var values = form.getValues();
-           Ext.Object.eachValue(values, function(value) {
-               if (value) {
-                   hasvalues = true;
-                   return false;
-               }
-           });
+           let valid = form.isValid(), dirty = form.isDirty();
+           let hasValues = Object.values(form.getValues()).some(v => !!v);
 
            me.lookup('xtermsave').setDisabled(!dirty || !valid);
-           me.lookup('xtermreset').setDisabled(!hasvalues);
+           me.lookup('xtermreset').setDisabled(!hasValues);
        },
 
        control: {
            '#xtermjs form': {
                dirtychange: 'set_button_status',
-               validitychange: 'set_button_status'
+               validitychange: 'set_button_status',
            },
            '#xtermjs button': {
                click: function(button) {
@@ -98,110 +89,101 @@ Ext.define('PVE.window.Settings', {
                        field.resetOriginalValue();
                    });
                    me.set_button_status();
-               }
+               },
            },
            'button[name=reset]': {
-               click: function () {
-                   var blacklist = ['GuiCap', 'login-username', 'dash-storages'];
-                   var sp = Ext.state.Manager.getProvider();
-                   var state;
-                   for (state in sp.state) {
-                       if (sp.state.hasOwnProperty(state)) {
-                           if (blacklist.indexOf(state) !== -1) {
-                               continue;
-                           }
-
+               click: function() {
+                   let blacklist = ['GuiCap', 'login-username', 'dash-storages'];
+                   let sp = Ext.state.Manager.getProvider();
+                   for (const state of Object.keys(sp.state)) {
+                       if (!blacklist.includes(state)) {
                            sp.clear(state);
                        }
                    }
-
                    window.location.reload();
-               }
+               },
            },
            'button[name=clear-username]': {
-               click: function () {
-                   var me = this;
-                   var usernamefield = me.lookupReference('savedUserName');
-                   var sp = Ext.state.Manager.getProvider();
-
-                   usernamefield.setValue(Proxmox.Utils.noneText);
-                   sp.clear('login-username');
-               }
+               click: function() {
+                   let me = this;
+                   me.lookupReference('savedUserName').setValue(Proxmox.Utils.noneText);
+                   Ext.state.Manager.getProvider().clear('login-username');
+               },
            },
            'grid[reference=dashboard-storages]': {
                selectionchange: function(grid, selected) {
                    var me = this;
                    var sp = Ext.state.Manager.getProvider();
 
-                   // saves the selected storageids as
-                   // "id1,id2,id3,..."
-                   // or clears the variable
+                   // saves the selected storageids as "id1,id2,id3,..." or clears the variable
                    if (selected.length > 0) {
-                       sp.set('dash-storages',
-                           Ext.Array.pluck(selected, 'id').join(','));
+                       sp.set('dash-storages', Ext.Array.pluck(selected, 'id').join(','));
                    } else {
                        sp.clear('dash-storages');
                    }
                },
                afterrender: function(grid) {
-                   var me = grid;
-                   var sp = Ext.state.Manager.getProvider();
-                   var store = me.getStore();
-                   var items = [];
-                   me.suspendEvent('selectionchange');
-                   var storages = sp.get('dash-storages') || '';
-                   storages.split(',').forEach(function(storage){
-                       // we have to get the records
-                       // to be able to select them
-                       if (storage !== '') {
-                           var item = store.getById(storage);
+                   let store = grid.getStore();
+                   let storages = Ext.state.Manager.getProvider().get('dash-storages') || '';
+
+                   let items = [];
+                   storages.split(',').forEach(storage => {
+                       if (storage !== '') { // we have to get the records to be able to select them
+                           let item = store.getById(storage);
                            if (item) {
                                items.push(item);
                            }
                        }
                    });
-                   me.getSelectionModel().select(items);
-                   me.resumeEvent('selectionchange');
-               }
-           }
-       }
+                   grid.suspendEvent('selectionchange');
+                   grid.getSelectionModel().select(items);
+                   grid.resumeEvent('selectionchange');
+               },
+           },
+           'field[reference=summarycolumns]': {
+               change: (el, newValue) => Ext.state.Manager.getProvider().set('summarycolumns', newValue),
+           },
+           'field[reference=guestNotesCollapse]': {
+               change: (e, v) => Ext.state.Manager.getProvider().set('guest-notes-collapse', v),
+           },
+       },
     },
 
     items: [{
        xtype: 'fieldset',
-       width: '50%',
+       flex: 1,
        title: gettext('Webinterface Settings'),
        margin: '5',
        layout: {
            type: 'vbox',
-           align: 'left'
+           align: 'left',
        },
        defaults: {
            width: '100%',
-           margin: '0 0 10 0'
+           margin: '0 0 10 0',
        },
        items: [
            {
                xtype: 'displayfield',
                fieldLabel: gettext('Dashboard Storages'),
                labelAlign: 'left',
-               labelWidth: '50%'
+               labelWidth: '50%',
            },
            {
                xtype: 'grid',
                maxHeight: 150,
                reference: 'dashboard-storages',
                selModel: {
-                   selType: 'checkboxmodel'
+                   selType: 'checkboxmodel',
                },
                columns: [{
                    header: gettext('Name'),
                    dataIndex: 'storage',
-                   flex: 1
-               },{
+                   flex: 1,
+               }, {
                    header: gettext('Node'),
                    dataIndex: 'node',
-                   flex: 1
+                   flex: 1,
                }],
                store: {
                    type: 'diff',
@@ -209,27 +191,27 @@ Ext.define('PVE.window.Settings', {
                    rstore: PVE.data.ResourceStore,
                    filters: [{
                        property: 'type',
-                       value: 'storage'
+                       value: 'storage',
                    }],
-                   sorters: [ 'node','storage']
-               }
+                   sorters: ['node', 'storage'],
+               },
            },
            {
                xtype: 'box',
-               autoEl: { tag: 'hr'}
+               autoEl: { tag: 'hr' },
            },
            {
                xtype: 'container',
-               layout:  'hbox',
+               layout: 'hbox',
                items: [
                    {
                        xtype: 'displayfield',
                        fieldLabel: gettext('Saved User Name') + ':',
-                       labelWidth: '150',
+                       labelWidth: 150,
                        stateId: 'login-username',
                        reference: 'savedUserName',
                        flex: 1,
-                       value: ''
+                       value: '',
                    },
                    {
                        xtype: 'button',
@@ -237,11 +219,11 @@ Ext.define('PVE.window.Settings', {
                        text: gettext('Reset'),
                        name: 'clear-username',
                    },
-               ]
+               ],
            },
            {
                xtype: 'box',
-               autoEl: { tag: 'hr'}
+               autoEl: { tag: 'hr' },
            },
            {
                xtype: 'container',
@@ -259,21 +241,51 @@ Ext.define('PVE.window.Settings', {
                        tooltip: gettext('Reset all layout changes (for example, column widths)'),
                        name: 'reset',
                    },
-               ]
+               ],
            },
-       ]
-    },{
+           {
+               xtype: 'box',
+               autoEl: { tag: 'hr' },
+           },
+           {
+               xtype: 'proxmoxKVComboBox',
+               fieldLabel: gettext('Summary columns') + ':',
+               labelWidth: 150,
+               stateId: 'summarycolumns',
+               reference: 'summarycolumns',
+               comboItems: [
+                   ['auto', 'auto'],
+                   ['1', '1'],
+                   ['2', '2'],
+                   ['3', '3'],
+               ],
+           },
+           {
+               xtype: 'proxmoxKVComboBox',
+               fieldLabel: gettext('Guest Notes') + ':',
+               labelWidth: 150,
+               stateId: 'guest-notes-collapse',
+               reference: 'guestNotesCollapse',
+               comboItems: [
+                   ['never', 'Show by default'],
+                   ['always', 'Collapse by default'],
+                   ['auto', 'auto (Collapse if empty)'],
+               ],
+           },
+       ],
+    },
+    {
        xtype: 'container',
        layout: 'vbox',
-       width: '50%',
+       flex: 1,
        margin: '5',
        defaults: {
            width: '100%',
            // right margin ensures that the right border of the fieldsets
            // is shown
-           margin: '0 2 10 0'
+           margin: '0 2 10 0',
        },
-       items:[
+       items: [
            {
                xtype: 'fieldset',
                itemId: 'xtermjs',
@@ -284,7 +296,7 @@ Ext.define('PVE.window.Settings', {
                    border: false,
                    layout: {
                        type: 'vbox',
-                       algin: 'left'
+                       algin: 'left',
                    },
                    defaults: {
                        width: '100%',
@@ -296,7 +308,7 @@ Ext.define('PVE.window.Settings', {
                            name: 'fontFamily',
                            reference: 'fontFamily',
                            emptyText: Proxmox.Utils.defaultText,
-                           fieldLabel: gettext('Font-Family')
+                           fieldLabel: gettext('Font-Family'),
                        },
                        {
                            xtype: 'proxmoxintegerfield',
@@ -304,14 +316,14 @@ Ext.define('PVE.window.Settings', {
                            name: 'fontSize',
                            reference: 'fontSize',
                            minValue: 1,
-                           fieldLabel: gettext('Font-Size')
+                           fieldLabel: gettext('Font-Size'),
                        },
                        {
                            xtype: 'numberfield',
                            name: 'letterSpacing',
                            reference: 'letterSpacing',
                            emptyText: Proxmox.Utils.defaultText,
-                           fieldLabel: gettext('Letter Spacing')
+                           fieldLabel: gettext('Letter Spacing'),
                        },
                        {
                            xtype: 'numberfield',
@@ -319,13 +331,13 @@ Ext.define('PVE.window.Settings', {
                            minValue: 0.1,
                            reference: 'lineHeight',
                            emptyText: Proxmox.Utils.defaultText,
-                           fieldLabel: gettext('Line Height')
+                           fieldLabel: gettext('Line Height'),
                        },
                        {
                            xtype: 'container',
                            layout: {
                                type: 'hbox',
-                               pack: 'end'
+                               pack: 'end',
                            },
                            defaults: {
                                margin: '0 0 0 5',
@@ -335,19 +347,19 @@ Ext.define('PVE.window.Settings', {
                                    xtype: 'button',
                                    reference: 'xtermreset',
                                    disabled: true,
-                                   text: gettext('Reset')
+                                   text: gettext('Reset'),
                                },
                                {
                                    xtype: 'button',
                                    reference: 'xtermsave',
                                    disabled: true,
-                                   text: gettext('Save')
-                               }
-                           ]
-                       }
-                   ]
-               }]
-           },{
+                                   text: gettext('Save'),
+                               },
+                           ],
+                       },
+                   ],
+               }],
+           }, {
                xtype: 'fieldset',
                title: gettext('noVNC Settings'),
                items: [
@@ -360,34 +372,39 @@ Ext.define('PVE.window.Settings', {
                            type: 'hbox',
                        },
                        items: [
+                           {
+                               xtype: 'radiofield',
+                               name: 'noVNCScalingField',
+                               inputValue: 'auto',
+                               boxLabel: 'Auto',
+                           },
                            {
                                xtype: 'radiofield',
                                name: 'noVNCScalingField',
                                inputValue: 'scale',
                                boxLabel: 'Local Scaling',
-                               checked: true,
-                           },{
+                               margin: '0 0 0 10',
+                           }, {
                                xtype: 'radiofield',
                                name: 'noVNCScalingField',
                                inputValue: 'off',
                                boxLabel: 'Off',
                                margin: '0 0 0 10',
-                           }
+                           },
                        ],
                        listeners: {
-                           change: function(el, newValue, undefined) {
-                               var sp = Ext.state.Manager.getProvider();
-                               sp.set('novnc-scaling', newValue);
-                           }
+                           change: function(el, { noVNCScalingField }) {
+                               let provider = Ext.state.Manager.getProvider();
+                               if (noVNCScalingField === 'auto') {
+                                   provider.clear('novnc-scaling');
+                               } else {
+                                   provider.set('novnc-scaling', noVNCScalingField);
+                               }
+                           },
                        },
                    },
-               ]
+               ],
            },
-       ]
+       ],
     }],
-
-    onShow: function() {
-       var me = this;
-       me.callParent();
-    }
 });