]> git.proxmox.com Git - proxmox-widget-toolkit.git/commitdiff
make eslint 100% happy
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Sat, 6 Jun 2020 15:15:42 +0000 (17:15 +0200)
committerThomas Lamprecht <t.lamprecht@proxmox.com>
Sat, 6 Jun 2020 15:16:22 +0000 (17:16 +0200)
lots of churn and changes but will allow to enforce linting again in
the build system.

Also switch over from var to let.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
38 files changed:
Toolkit.js
Utils.js
button/Button.js
button/HelpButton.js
data/DiffStore.js
data/ObjectStore.js
data/ProxmoxProxy.js
data/RRDStore.js
data/reader/JsonObject.js
form/BondModeSelector.js
form/Checkbox.js
form/ComboGrid.js
form/DateTimeField.js
form/IntegerField.js
form/KVComboBox.js
form/NetworkSelector.js
form/RRDTypeSelector.js
form/RealmComboBox.js
form/TextField.js
grid/ObjectGrid.js
grid/PendingObjectGrid.js
mixin/CBind.js
node/APT.js
node/DNSEdit.js
node/DNSView.js
node/HostsView.js
node/NetworkEdit.js
node/NetworkView.js
node/ServiceView.js
node/TimeEdit.js
node/TimeView.js
panel/GaugeWidget.js
panel/InputPanel.js
panel/JournalView.js
panel/LogView.js
panel/RRDChart.js
window/Edit.js
window/TaskViewer.js

index 30f2a882698c04d54fe448b8c5b6fc95cb60f297..d528ea79aad8e226aad93cc5943f6eece8a4bd90 100644 (file)
@@ -14,16 +14,16 @@ Ext.apply(Ext.form.field.VTypes, {
        return Proxmox.Utils.IP4_match.test(v);
     },
     IPAddressText: gettext('Example') + ': 192.168.1.1',
-    IPAddressMask: /[\d\.]/i,
+    IPAddressMask: /[\d.]/i,
 
     IPCIDRAddress: function(v) {
-       var result = Proxmox.Utils.IP4_cidr_match.exec(v);
+       let result = Proxmox.Utils.IP4_cidr_match.exec(v);
        // limits according to JSON Schema see
        // pve-common/src/PVE/JSONSchema.pm
        return result !== null && result[1] >= 8 && result[1] <= 32;
     },
-    IPCIDRAddressText: gettext('Example') + ': 192.168.1.1/24' + "<br>" + gettext('Valid CIDR Range') + ': 8-32',
-    IPCIDRAddressMask: /[\d\.\/]/i,
+    IPCIDRAddressText: gettext('Example') + ': 192.168.1.1/24<br>' + gettext('Valid CIDR Range') + ': 8-32',
+    IPCIDRAddressMask: /[\d./]/i,
 
     IP6Address: function(v) {
         return Proxmox.Utils.IP6_match.test(v);
@@ -32,13 +32,13 @@ Ext.apply(Ext.form.field.VTypes, {
     IP6AddressMask: /[A-Fa-f0-9:]/,
 
     IP6CIDRAddress: function(v) {
-       var result = Proxmox.Utils.IP6_cidr_match.exec(v);
+       let result = Proxmox.Utils.IP6_cidr_match.exec(v);
        // limits according to JSON Schema see
        // pve-common/src/PVE/JSONSchema.pm
        return result !== null && result[1] >= 8 && result[1] <= 128;
     },
-    IP6CIDRAddressText: gettext('Example') + ': 2001:DB8::42/64' + "<br>" + gettext('Valid CIDR Range') + ': 8-128',
-    IP6CIDRAddressMask: /[A-Fa-f0-9:\/]/,
+    IP6CIDRAddressText: gettext('Example') + ': 2001:DB8::42/64<br>' + gettext('Valid CIDR Range') + ': 8-128',
+    IP6CIDRAddressMask: /[A-Fa-f0-9:/]/,
 
     IP6PrefixLength: function(v) {
        return v >= 0 && v <= 128;
@@ -50,10 +50,10 @@ Ext.apply(Ext.form.field.VTypes, {
         return Proxmox.Utils.IP64_match.test(v);
     },
     IP64AddressText: gettext('Example') + ': 192.168.1.1 2001:DB8::42',
-    IP64AddressMask: /[A-Fa-f0-9\.:]/,
+    IP64AddressMask: /[A-Fa-f0-9.:]/,
 
     IP64CIDRAddress: function(v) {
-       var result = Proxmox.Utils.IP64_cidr_match.exec(v);
+       let result = Proxmox.Utils.IP64_cidr_match.exec(v);
        if (result === null) {
            return false;
        }
@@ -66,7 +66,7 @@ Ext.apply(Ext.form.field.VTypes, {
        }
     },
     IP64CIDRAddressText: gettext('Example') + ': 192.168.1.1/24 2001:DB8::42/64',
-    IP64CIDRAddressMask: /[A-Fa-f0-9\.:\/]/,
+    IP64CIDRAddressMask: /[A-Fa-f0-9.:/]/,
 
     MacAddress: function(v) {
        return (/^([a-fA-F0-9]{2}:){5}[a-fA-F0-9]{2}$/).test(v);
@@ -101,24 +101,24 @@ Ext.apply(Ext.form.field.VTypes, {
     InterfaceName: function(v) {
         return (/^[a-z][a-z0-9_]{1,20}$/).test(v);
     },
-    InterfaceNameText: gettext("Allowed characters") + ": 'a-z', '0-9', '_'" + "<br />" +
-                      gettext("Minimum characters") + ": 2" + "<br />" +
-                      gettext("Maximum characters") + ": 21" + "<br />" +
+    InterfaceNameText: gettext("Allowed characters") + ": 'a-z', '0-9', '_'<br />" +
+                      gettext("Minimum characters") + ": 2<br />" +
+                      gettext("Maximum characters") + ": 21<br />" +
                       gettext("Must start with") + ": 'a-z'",
 
     StorageId: function(v) {
-        return (/^[a-z][a-z0-9\-\_\.]*[a-z0-9]$/i).test(v);
+        return (/^[a-z][a-z0-9\-_.]*[a-z0-9]$/i).test(v);
     },
-    StorageIdText: gettext("Allowed characters") + ":  'A-Z', 'a-z', '0-9', '-', '_', '.'" + "<br />" +
-                  gettext("Minimum characters") + ": 2" + "<br />" +
+    StorageIdText: gettext("Allowed characters") + ":  'A-Z', 'a-z', '0-9', '-', '_', '.'<br />" +
+                  gettext("Minimum characters") + ": 2<br />" +
                   gettext("Must start with") + ": 'A-Z', 'a-z'<br />" +
                   gettext("Must end with") + ": 'A-Z', 'a-z', '0-9'<br />",
 
     ConfigId: function(v) {
-        return (/^[a-z][a-z0-9\_]+$/i).test(v);
+        return (/^[a-z][a-z0-9_]+$/i).test(v);
     },
-    ConfigIdText: gettext("Allowed characters") + ": 'A-Z', 'a-z', '0-9', '_'" + "<br />" +
-                 gettext("Minimum characters") + ": 2" + "<br />" +
+    ConfigIdText: gettext("Allowed characters") + ": 'A-Z', 'a-z', '0-9', '_'<br />" +
+                 gettext("Minimum characters") + ": 2<br />" +
                  gettext("Must start with") + ": " + gettext("letter"),
 
     HttpProxy: function(v) {
@@ -133,7 +133,7 @@ Ext.apply(Ext.form.field.VTypes, {
 
     // workaround for https://www.sencha.com/forum/showthread.php?302150
     proxmoxMail: function(v) {
-        return (/^(\w+)([\-+.][\w]+)*@(\w[\-\w]*\.){1,5}([A-Za-z]){2,63}$/).test(v);
+        return (/^(\w+)([-+.][\w]+)*@(\w[-\w]*\.){1,5}([A-Za-z]){2,63}$/).test(v);
     },
     proxmoxMailText: gettext('Example') + ": user@example.com",
 
@@ -148,10 +148,10 @@ Ext.apply(Ext.form.field.VTypes, {
     DnsOrIpText: gettext('Not a valid DNS name or IP address.'),
 
     HostList: function(v) {
-       var list = v.split(/[\ \,\;]+/);
-       var i;
+       let list = v.split(/[ ,;]+/);
+       let i;
        for (i = 0; i < list.length; i++) {
-           if (list[i] == "") {
+           if (list[i] === '') {
                continue;
            }
 
@@ -168,9 +168,8 @@ Ext.apply(Ext.form.field.VTypes, {
 
     password: function(val, field) {
         if (field.initialPassField) {
-            var pwd = field.up('form').down(
-               '[name=' + field.initialPassField + ']');
-            return val == pwd.getValue();
+            let pwd = field.up('form').down(`[name=${field.initialPassField}]`);
+            return val === pwd.getValue();
         }
         return true;
     },
@@ -184,7 +183,7 @@ Ext.apply(Ext.form.field.VTypes, {
 Ext.define('EXTJS_23846.Element', {
     override: 'Ext.dom.Element',
 }, function(Element) {
-    var supports = Ext.supports,
+    let supports = Ext.supports,
         proto = Element.prototype,
         eventMap = proto.eventMap,
         additiveEvents = proto.additiveEvents;
@@ -213,11 +212,11 @@ Ext.define('EXTJS_23846.Element', {
 Ext.define('EXTJS_23846.Gesture', {
     override: 'Ext.event.publisher.Gesture',
 }, function(Gesture) {
-    var me = Gesture.instance;
+    let gestures = Gesture.instance;
 
     if (Ext.supports.TouchEvents && !Ext.isWebKit && Ext.os.is.Desktop) {
-        me.handledDomEvents.push('mousedown', 'mousemove', 'mouseup');
-        me.registerEvents();
+        gestures.handledDomEvents.push('mousedown', 'mousemove', 'mouseup');
+        gestures.registerEvents();
     }
 });
 
@@ -226,7 +225,7 @@ Ext.define('EXTJS_18900.Pie', {
 
     // from 6.0.2
     betweenAngle: function(x, a, b) {
-        var pp = Math.PI * 2,
+        let pp = Math.PI * 2,
             offset = this.rotationOffset;
 
         if (a === b) {
@@ -273,7 +272,7 @@ Ext.define('Proxmox.UnderlayPool', {
     override: 'Ext.dom.UnderlayPool',
 
     checkOut: function() {
-        var cache = this.cache,
+        let cache = this.cache,
             len = cache.length,
             el;
 
@@ -324,12 +323,13 @@ Ext.define('Proxmox.form.ComboBox', {
 
     reset: function() {
        // copied from combobox
-       var me = this;
+       let me = this;
        me.callParent();
 
        // clear and set when not the same
-       var value = me.getValue();
-       if (Ext.isArray(me.originalValue) && Ext.isArray(value) && !Ext.Array.equals(value, me.originalValue)) {
+       let value = me.getValue();
+       if (Ext.isArray(me.originalValue) && Ext.isArray(value) &&
+           !Ext.Array.equals(value, me.originalValue)) {
            me.clearValue();
            me.setValue(me.originalValue);
        }
@@ -373,67 +373,66 @@ Ext.define(null, {
     jumpToFocus: false,
 
     saveFocusState: function() {
-        var me = this,
-            store = me.dataSource,
-            actionableMode = me.actionableMode,
-            navModel = me.getNavigationModel(),
-            focusPosition = actionableMode ? me.actionPosition : navModel.getPosition(true),
-            refocusRow, refocusCol;
-
-        if (focusPosition) {
-            // Separate this from the instance that the nav model is using.
-            focusPosition = focusPosition.clone();
-
-            // Exit actionable mode.
-            // We must inform any Actionables that they must relinquish control.
-            // Tabbability must be reset.
-            if (actionableMode) {
-                me.ownerGrid.setActionableMode(false);
-            }
+       let me = this,
+           store = me.dataSource,
+           actionableMode = me.actionableMode,
+           navModel = me.getNavigationModel(),
+           focusPosition = actionableMode ? me.actionPosition : navModel.getPosition(true),
+           refocusRow, refocusCol;
+
+       if (focusPosition) {
+           // Separate this from the instance that the nav model is using.
+           focusPosition = focusPosition.clone();
+
+           // Exit actionable mode.
+           // We must inform any Actionables that they must relinquish control.
+           // Tabbability must be reset.
+           if (actionableMode) {
+               me.ownerGrid.setActionableMode(false);
+           }
 
-            // Blur the focused descendant, but do not trigger focusLeave.
-            me.el.dom.focus();
-
-            // Exiting actionable mode navigates to the owning cell, so in either focus mode we must
-            // clear the navigation position
-            navModel.setPosition();
-
-            // The following function will attempt to refocus back in the same mode to the same cell
-            // as it was at before based upon the previous record (if it's still inthe store), or the row index.
-            return function() {
-                // If we still have data, attempt to refocus in the same mode.
-                if (store.getCount()) {
-                    // Adjust expectations of where we are able to refocus according to what kind of destruction
-                    // might have been wrought on this view's DOM during focus save.
-                    refocusRow = Math.min(focusPosition.rowIdx, me.all.getCount() - 1);
-                    refocusCol = Math.min(focusPosition.colIdx, me.getVisibleColumnManager().getColumns().length - 1);
-                    focusPosition = new Ext.grid.CellContext(me).setPosition(
-                            store.contains(focusPosition.record) ? focusPosition.record : refocusRow, refocusCol);
-
-                    if (actionableMode) {
-                        me.ownerGrid.setActionableMode(true, focusPosition);
-                    } else {
-                        me.cellFocused = true;
+           // Blur the focused descendant, but do not trigger focusLeave.
+           me.el.dom.focus();
+
+           // Exiting actionable mode navigates to the owning cell, so in either focus mode we must
+           // clear the navigation position
+           navModel.setPosition();
+
+           // The following function will attempt to refocus back in the same mode to the same cell
+           // as it was at before based upon the previous record (if it's still inthe store), or the row index.
+           return function() {
+               // If we still have data, attempt to refocus in the same mode.
+               if (store.getCount()) {
+                   // Adjust expectations of where we are able to refocus according to what kind of destruction
+                   // might have been wrought on this view's DOM during focus save.
+                   refocusRow = Math.min(focusPosition.rowIdx, me.all.getCount() - 1);
+                   refocusCol = Math.min(focusPosition.colIdx,
+                                         me.getVisibleColumnManager().getColumns().length - 1);
+                   refocusRow = store.contains(focusPosition.record) ? focusPosition.record : refocusRow;
+                   focusPosition = new Ext.grid.CellContext(me).setPosition(refocusRow, refocusCol);
+
+                   if (actionableMode) {
+                       me.ownerGrid.setActionableMode(true, focusPosition);
+                   } else {
+                       me.cellFocused = true;
 
                        // we sometimes want to scroll back to where we were
-                       var x = me.getScrollX();
-                       var y = me.getScrollY();
+                       let x = me.getScrollX();
+                       let y = me.getScrollY();
 
-                        // Pass "preventNavigation" as true so that that does not cause selection.
-                        navModel.setPosition(focusPosition, null, null, null, true);
+                       // Pass "preventNavigation" as true so that that does not cause selection.
+                       navModel.setPosition(focusPosition, null, null, null, true);
 
                        if (!me.jumpToFocus) {
                            me.scrollTo(x, y);
                        }
-                    }
-                }
-                // No rows - focus associated column header
-                else {
-                    focusPosition.column.focus();
-                }
-            };
-        }
-        return Ext.emptyFn;
+                   }
+               } else { // No rows - focus associated column header
+                   focusPosition.column.focus();
+               }
+           };
+       }
+       return Ext.emptyFn;
     },
 });
 
@@ -461,7 +460,7 @@ Ext.define(null, {
     override: 'Ext.layout.container.boxOverflow.Scroller',
 
     createWheelListener: function() {
-       var me = this;
+       let me = this;
        if (Ext.isFirefox) {
            me.wheelListener = me.layout.innerCt.on('wheel', me.onMouseWheelFirefox, me, { destroyable: true });
        } else {
@@ -474,7 +473,7 @@ Ext.define(null, {
     // because it is already
     onMouseWheelFirefox: function(e) {
        e.stopEvent();
-       var delta = e.browserEvent.deltaY || 0;
+       let delta = e.browserEvent.deltaY || 0;
        this.scrollBy(delta * this.wheelIncrement, false);
     },
 
@@ -483,7 +482,7 @@ Ext.define(null, {
 // add '@' to the valid id
 Ext.define('Proxmox.validIdReOverride', {
     override: 'Ext.Component',
-    validIdRe: /^[a-z_][a-z0-9\-_\@]*$/i,
+    validIdRe: /^[a-z_][a-z0-9\-_@]*$/i,
 });
 
 // force alert boxes to be rendered with an Error Icon
@@ -492,9 +491,9 @@ Ext.define('Proxmox.validIdReOverride', {
 Ext.onReady(function() {
 /*jslint confusion: true */
     Ext.override(Ext.Msg, {
-       alert: function(title, message, fn, scope) {
+       alert: function(title, message, fn, scope) { // eslint-disable-line consistent-return
            if (Ext.isString(title)) {
-               var config = {
+               let config = {
                    title: title,
                    message: message,
                    icon: this.ERROR,
@@ -530,7 +529,7 @@ Ext.define('Ext.ux.IFrame', {
     },
 
     initEvents: function() {
-        var me = this;
+        let me = this;
         me.callParent();
         me.iframeEl.on('load', me.onLoad, me);
     },
@@ -543,7 +542,7 @@ Ext.define('Ext.ux.IFrame', {
     },
 
     getBody: function() {
-        var doc = this.getDoc();
+        let doc = this.getDoc();
         return doc.body || doc.documentElement;
     },
 
@@ -556,7 +555,7 @@ Ext.define('Ext.ux.IFrame', {
     },
 
     getWin: function() {
-        var me = this,
+        let me = this,
             name = me.frameName,
             win = Ext.isIE
                 ? me.iframeEl.dom.contentWindow
@@ -565,7 +564,7 @@ Ext.define('Ext.ux.IFrame', {
     },
 
     getFrame: function() {
-        var me = this;
+        let me = this;
         return me.iframeEl.dom;
     },
 
@@ -575,29 +574,29 @@ Ext.define('Ext.ux.IFrame', {
     },
 
     cleanupListeners: function(destroying) {
-        var doc, prop;
+        let doc, prop;
 
         if (this.rendered) {
             try {
                 doc = this.getDoc();
                 if (doc) {
-                   /*jslint nomen: true*/
                     Ext.get(doc).un(this._docListeners);
-                   /*jslint nomen: false*/
                     if (destroying && doc.hasOwnProperty) {
                         for (prop in doc) {
-                            if (doc.hasOwnProperty(prop)) {
+                            if (Object.prototype.hasOwnProperty.call(doc, prop)) {
                                 delete doc[prop];
                             }
                         }
                     }
                 }
-            } catch (e) { }
+            } catch (e) {
+                // do nothing
+            }
         }
     },
 
     onLoad: function() {
-        var me = this,
+        let me = this,
             doc = me.getDoc(),
             fn = me.onRelayedEvent;
 
@@ -638,7 +637,7 @@ Ext.define('Ext.ux.IFrame', {
     onRelayedEvent: function(event) {
         // relay event from the iframe's document to the document that owns the iframe...
 
-        var iframeEl = this.iframeEl,
+        let iframeEl = this.iframeEl,
 
             // Get the left-based iframe position
             iframeXY = iframeEl.getTrueXY(),
@@ -659,7 +658,7 @@ Ext.define('Ext.ux.IFrame', {
     },
 
     load: function(src) {
-        var me = this,
+        let me = this,
             text = me.loadMask,
             frame = me.getFrame();
 
index f86fa0939064c4aafa1097a8e04c20ffe98ec54d..c3b13f442f0ce4c69087d48ff42e3ce07bff4c00 100644 (file)
--- a/Utils.js
+++ b/Utils.js
@@ -14,7 +14,7 @@ Ext.enableAriaPanels = false;
 
 // avoid errors when running without development tools
 if (!Ext.isDefined(Ext.global.console)) {
-    var console = {
+    let console = {
        dir: function() {
            // do nothing
        },
@@ -93,7 +93,7 @@ utilities: {
        if (!value) {
            return Proxmox.Utils.defaultText + ' (English)';
        }
-       var text = Proxmox.Utils.language_map[value];
+       let text = Proxmox.Utils.language_map[value];
        if (text) {
            return text + ' (' + value + ')';
        }
@@ -101,7 +101,7 @@ utilities: {
     },
 
     language_array: function() {
-       var data = [['__default__', Proxmox.Utils.render_language('')]];
+       let data = [['__default__', Proxmox.Utils.render_language('')]];
        Ext.Object.each(Proxmox.Utils.language_map, function(key, value) {
            data.push([key, Proxmox.Utils.render_language(value)]);
        });
@@ -192,22 +192,22 @@ utilities: {
     },
 
     format_duration_long: function(ut) {
-       var days = Math.floor(ut / 86400);
+       let days = Math.floor(ut / 86400);
        ut -= days*86400;
-       var hours = Math.floor(ut / 3600);
+       let hours = Math.floor(ut / 3600);
        ut -= hours*3600;
-       var mins = Math.floor(ut / 60);
+       let mins = Math.floor(ut / 60);
        ut -= mins*60;
 
-       var hours_str = '00' + hours.toString();
+       let hours_str = '00' + hours.toString();
        hours_str = hours_str.substr(hours_str.length - 2);
-       var mins_str = "00" + mins.toString();
+       let mins_str = "00" + mins.toString();
        mins_str = mins_str.substr(mins_str.length - 2);
-       var ut_str = "00" + ut.toString();
+       let ut_str = "00" + ut.toString();
        ut_str = ut_str.substr(ut_str.length - 2);
 
        if (days) {
-           var ds = days > 1 ? Proxmox.Utils.daysText : Proxmox.Utils.dayText;
+           let ds = days > 1 ? Proxmox.Utils.daysText : Proxmox.Utils.dayText;
            return days.toString() + ' ' + ds + ' ' +
                hours_str + ':' + mins_str + ':' + ut_str;
        } else {
@@ -232,8 +232,8 @@ utilities: {
     compute_min_label_width: function(text, width) {
        if (width === undefined) { width = 100; }
 
-       var tm = new Ext.util.TextMetrics();
-       var min = tm.getWidth(text + ':');
+       let tm = new Ext.util.TextMetrics();
+       let min = tm.getWidth(text + ':');
 
        return min < width ? width : min;
     },
@@ -269,7 +269,7 @@ utilities: {
     // comp.setLoading() is buggy in ExtJS 4.0.7, so we
     // use el.mask() instead
     setErrorMask: function(comp, msg) {
-       var el = comp.el;
+       let el = comp.el;
        if (!el) {
            return;
        }
@@ -334,7 +334,7 @@ utilities: {
     },
 
     extractRequestError: function(result, verbose) {
-       var msg = gettext('Successful');
+       let msg = gettext('Successful');
 
        if (!result.success) {
            msg = gettext("Unknown error");
@@ -358,7 +358,7 @@ utilities: {
 
     // Ext.Ajax.request
     API2Request: function(reqOpts) {
-       var newopts = Ext.apply({
+       let newopts = Ext.apply({
            waitMsg: gettext('Please wait...'),
        }, reqOpts);
 
@@ -367,7 +367,7 @@ utilities: {
        }
        delete newopts.callback;
 
-       var createWrapper = function(successFn, callbackFn, failureFn) {
+       let createWrapper = function(successFn, callbackFn, failureFn) {
            Ext.apply(newopts, {
                success: function(response, options) {
                    if (options.waitMsgTarget) {
@@ -377,7 +377,7 @@ utilities: {
                            options.waitMsgTarget.setLoading(false);
                        }
                    }
-                   var result = Ext.decode(response.responseText);
+                   let result = Ext.decode(response.responseText);
                    response.result = result;
                    if (!result.success) {
                        response.htmlStatus = Proxmox.Utils.extractRequestError(result, true);
@@ -402,7 +402,7 @@ utilities: {
                    } catch (e) {
                        // ignore
                    }
-                   var msg = gettext('Connection error') + ' - server offline?';
+                   let msg = gettext('Connection error') + ' - server offline?';
                    if (response.aborted) {
                        msg = gettext('Connection error') + ' - aborted.';
                    } else if (response.timedout) {
@@ -419,7 +419,7 @@ utilities: {
 
        createWrapper(reqOpts.success, reqOpts.callback, reqOpts.failure);
 
-       var target = newopts.waitMsgTarget;
+       let target = newopts.waitMsgTarget;
        if (target) {
            if (Proxmox.Utils.toolkit === 'touch') {
                target.setMasked({ xtype: 'loadmask', message: newopts.waitMsg });
@@ -657,11 +657,8 @@ utilities: {
     },
 
     format_size: function(size) {
-       /*jslint confusion: true */
-
-       var units = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'];
-       var num = 0;
-
+       let units = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'];
+       let num = 0;
        while (size >= 1024 && num++ <= units.length) {
            size = size / 1024;
        }
@@ -678,7 +675,7 @@ utilities: {
     },
 
     render_uptime: function(value) {
-       var uptime = value;
+       let uptime = value;
 
        if (uptime === undefined) {
            return '';
@@ -692,9 +689,9 @@ utilities: {
     },
 
     parse_task_upid: function(upid) {
-       var task = {};
+       let task = {};
 
-       var res = upid.match(/^UPID:([^\s:]+):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8,9}):(([0-9A-Fa-f]{8,16}):)?([0-9A-Fa-f]{8}):([^:\s]+):([^:\s]*):([^:\s]+):$/);
+       let res = upid.match(/^UPID:([^\s:]+):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8,9}):(([0-9A-Fa-f]{8,16}):)?([0-9A-Fa-f]{8}):([^:\s]+):([^:\s]*):([^:\s]+):$/);
        if (!res) {
            throw "unable to parse upid '" + upid + "'";
        }
@@ -722,12 +719,12 @@ utilities: {
     },
 
     render_timestamp: function(value, metaData, record, rowIndex, colIndex, store) {
-       var servertime = new Date(value * 1000);
+       let servertime = new Date(value * 1000);
        return Ext.Date.format(servertime, 'Y-m-d H:i:s');
     },
 
     get_help_info: function(section) {
-       var helpMap;
+       let helpMap;
        if (typeof proxmoxOnlineHelpInfo !== 'undefined') {
            helpMap = proxmoxOnlineHelpInfo; // eslint-disable-line no-undef
        } else if (typeof pveOnlineHelpInfo !== 'undefined') {
@@ -741,7 +738,7 @@ utilities: {
     },
 
     get_help_link: function(section) {
-       var info = Proxmox.Utils.get_help_info(section);
+       let info = Proxmox.Utils.get_help_info(section);
        if (!info) {
            return undefined;
        }
@@ -749,7 +746,7 @@ utilities: {
     },
 
     openXtermJsViewer: function(vmtype, vmid, nodename, vmname, cmd) {
-       var url = Ext.Object.toQueryString({
+       let url = Ext.Object.toQueryString({
            console: vmtype, // kvm, lxc, upgrade or shell
            xtermjs: 1,
            vmid: vmid,
@@ -758,7 +755,7 @@ utilities: {
            cmd: cmd,
 
        });
-       var nw = window.open("?" + url, '_blank', 'toolbar=no,location=no,status=no,menubar=no,resizable=yes,width=800,height=420');
+       let nw = window.open("?" + url, '_blank', 'toolbar=no,location=no,status=no,menubar=no,resizable=yes,width=800,height=420');
        if (nw) {
            nw.focus();
        }
@@ -768,22 +765,22 @@ utilities: {
 
     singleton: true,
     constructor: function() {
-       var me = this;
+       let me = this;
        Ext.apply(me, me.utilities);
 
-       var IPV4_OCTET = "(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])";
-       var IPV4_REGEXP = "(?:(?:" + IPV4_OCTET + "\\.){3}" + IPV4_OCTET + ")";
-       var IPV6_H16 = "(?:[0-9a-fA-F]{1,4})";
-       var IPV6_LS32 = "(?:(?:" + IPV6_H16 + ":" + IPV6_H16 + ")|" + IPV4_REGEXP + ")";
-       var IPV4_CIDR_MASK = "([0-9]{1,2})";
-       var IPV6_CIDR_MASK = "([0-9]{1,3})";
+       let IPV4_OCTET = "(?:25[0-5]|(?:[1-9]|1[0-9]|2[0-4])?[0-9])";
+       let IPV4_REGEXP = "(?:(?:" + IPV4_OCTET + "\\.){3}" + IPV4_OCTET + ")";
+       let IPV6_H16 = "(?:[0-9a-fA-F]{1,4})";
+       let IPV6_LS32 = "(?:(?:" + IPV6_H16 + ":" + IPV6_H16 + ")|" + IPV4_REGEXP + ")";
+       let IPV4_CIDR_MASK = "([0-9]{1,2})";
+       let IPV6_CIDR_MASK = "([0-9]{1,3})";
 
 
        me.IP4_match = new RegExp("^(?:" + IPV4_REGEXP + ")$");
        me.IP4_cidr_match = new RegExp("^(?:" + IPV4_REGEXP + ")/" + IPV4_CIDR_MASK + "$");
 
        /* eslint-disable no-useless-concat,no-multi-spaces */
-       var IPV6_REGEXP = "(?:" +
+       let IPV6_REGEXP = "(?:" +
            "(?:(?:"                                                  + "(?:" + IPV6_H16 + ":){6})" + IPV6_LS32 + ")|" +
            "(?:(?:"                                         +   "::" + "(?:" + IPV6_H16 + ":){5})" + IPV6_LS32 + ")|" +
            "(?:(?:(?:"                           + IPV6_H16 + ")?::" + "(?:" + IPV6_H16 + ":){4})" + IPV6_LS32 + ")|" +
@@ -803,7 +800,7 @@ utilities: {
        me.IP64_match = new RegExp("^(?:" + IPV6_REGEXP + "|" + IPV4_REGEXP + ")$");
        me.IP64_cidr_match = new RegExp("^(?:" + IPV6_REGEXP + "/" + IPV6_CIDR_MASK + ")|(?:" + IPV4_REGEXP + "/" + IPV4_CIDR_MASK + ")$");
 
-       var DnsName_REGEXP = "(?:(([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?)\\.)*([A-Za-z0-9]([A-Za-z0-9\\-]*[A-Za-z0-9])?))";
+       let DnsName_REGEXP = "(?:(([a-zA-Z0-9]([a-zA-Z0-9\\-]*[a-zA-Z0-9])?)\\.)*([A-Za-z0-9]([A-Za-z0-9\\-]*[A-Za-z0-9])?))";
        me.DnsName_match = new RegExp("^" + DnsName_REGEXP + "$");
 
        me.HostPort_match = new RegExp("^(" + IPV4_REGEXP + "|" + DnsName_REGEXP + ")(:\\d+)?$");
index 9b8d66ef956d2814f9896c37ad47e937c41f364a..93c773cbbc029201b15fb85e392a518cdbb3e3c0 100644 (file)
@@ -24,14 +24,14 @@ Ext.define('Proxmox.button.Button', {
     parentXType: 'grid',
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
        if (me.handler) {
            // Note: me.realHandler may be a string (see named scopes)
-           var realHandler = me.handler;
+           let realHandler = me.handler;
 
            me.handler = function(button, event) {
-               var rec, msg;
+               let rec, msg;
                if (me.selModel) {
                    rec = me.selModel.getSelection()[0];
                    if (!rec || me.enableFn(rec) === false) {
@@ -66,9 +66,9 @@ Ext.define('Proxmox.button.Button', {
 
        me.callParent();
 
-       var grid;
+       let grid;
        if (!me.selModel && me.selModel !== null && me.selModel !== false) {
-           parent = me.up(me.parentXType);
+           let parent = me.up(me.parentXType);
            if (parent && parent.selModel) {
                me.selModel = parent.selModel;
            }
@@ -85,7 +85,7 @@ Ext.define('Proxmox.button.Button', {
 
        if (me.selModel) {
            me.mon(me.selModel, "selectionchange", function() {
-               var rec = me.selModel.getSelection()[0];
+               let rec = me.selModel.getSelection()[0];
                if (!rec || me.enableFn(rec) === false) {
                    me.setDisabled(true);
                } else {
@@ -113,7 +113,7 @@ Ext.define('Proxmox.button.StdRemoveButton', {
     },
 
     getUrl: function(rec) {
-       var me = this;
+       let me = this;
 
        if (me.selModel) {
            return me.baseurl + '/' + rec.getId();
@@ -130,16 +130,16 @@ Ext.define('Proxmox.button.StdRemoveButton', {
     getRecordName: (rec) => rec.getId(),
 
     confirmMsg: function(rec) {
-       var me = this;
+       let me = this;
 
-       var name = me.getRecordName(rec);
+       let name = me.getRecordName(rec);
        return Ext.String.format(gettext('Are you sure you want to remove entry {0}'), `'${name}'`);
     },
 
     handler: function(btn, event, rec) {
-       var me = this;
+       let me = this;
 
-       var url = me.getUrl(rec);
+       let url = me.getUrl(rec);
 
        if (typeof me.delay !== 'undefined' && me.delay >= 0) {
            url += "?delay=" + me.delay;
index 8fbcf5c923b31cf33d572ffc77a6be7a9aa47e52..d97a6c4fb72bca8203f4c685696a384b8a000859 100644 (file)
@@ -1,9 +1,6 @@
 /* help button pointing to an online documentation
    for components contained in a modal window
 */
-/*global
-  proxmoxOnlineHelpInfo
-*/
 Ext.define('Proxmox.button.Help', {
     extend: 'Ext.button.Button',
     xtype: 'proxmoxHelpButton',
@@ -27,28 +24,28 @@ Ext.define('Proxmox.button.Help', {
            },
        },
        onProxmoxShowHelp: function(helpLink) {
-           var me = this.getView();
-           if (me.listenToGlobalEvent === true) {
-               me.setOnlineHelp(helpLink);
-               me.show();
+           let view = this.getView();
+           if (view.listenToGlobalEvent === true) {
+               view.setOnlineHelp(helpLink);
+               view.show();
            }
        },
        onProxmoxHideHelp: function() {
-           var me = this.getView();
-           if (me.listenToGlobalEvent === true) {
-               me.hide();
+           let view = this.getView();
+           if (view.listenToGlobalEvent === true) {
+               view.hide();
            }
        },
     },
 
     // this sets the link and the tooltip text
     setOnlineHelp: function(blockid) {
-       var me = this;
+       let me = this;
 
-       var info = Proxmox.Utils.get_help_info(blockid);
+       let info = Proxmox.Utils.get_help_info(blockid);
        if (info) {
            me.onlineHelp = blockid;
-           var title = info.title;
+           let title = info.title;
            if (info.subtitle) {
                title += ' - ' + info.subtitle;
            }
@@ -58,13 +55,13 @@ Ext.define('Proxmox.button.Help', {
 
     // helper to set the onlineHelp via a config object
     setHelpConfig: function(config) {
-       var me = this;
+       let me = this;
        me.setOnlineHelp(config.onlineHelp);
     },
 
     handler: function() {
-       var me = this;
-       var docsURI;
+       let me = this;
+       let docsURI;
 
        if (me.onlineHelp) {
            docsURI = Proxmox.Utils.get_help_link(me.onlineHelp);
@@ -78,8 +75,7 @@ Ext.define('Proxmox.button.Help', {
     },
 
     initComponent: function() {
-       /*jslint confusion: true */
-       var me = this;
+       let me = this;
 
        me.callParent();
 
index db608c56ac8c00d47a98c3ef4582b714c2cc57d4..e4143f560b6b0199dcf59f5cc2cfbeae71e30019 100644 (file)
@@ -40,7 +40,7 @@ Ext.define('Proxmox.data.DiffStore', {
     },
 
     constructor: function(config) {
-       var me = this;
+       let me = this;
 
        config = config || {};
 
@@ -73,10 +73,10 @@ Ext.define('Proxmox.data.DiffStore', {
 
        me.rstore = rstore;
 
-       var first_load = true;
+       let first_load = true;
 
-       var cond_add_item = function(data, id) {
-           var olditem = me.getById(id);
+       let cond_add_item = function(data, id) {
+           let olditem = me.getById(id);
            if (olditem) {
                olditem.beginEdit();
                Ext.Array.each(me.model.prototype.fields, function(field) {
@@ -87,13 +87,13 @@ Ext.define('Proxmox.data.DiffStore', {
                olditem.endEdit(true);
                olditem.commit();
            } else {
-               var newrec = Ext.create(me.model, data);
-               var pos = me.appendAtStart && !first_load ? 0 : me.data.length;
+               let newrec = Ext.create(me.model, data);
+               let pos = me.appendAtStart && !first_load ? 0 : me.data.length;
                me.insert(pos, newrec);
            }
        };
 
-       var loadFn = function(s, records, success) {
+       let loadFn = function(s, records, success) {
            if (!success) {
                return;
            }
@@ -102,11 +102,11 @@ Ext.define('Proxmox.data.DiffStore', {
 
            // getSource returns null if data is not filtered
            // if it is filtered it returns all records
-           var allItems = me.getData().getSource() || me.getData();
+           let allItems = me.getData().getSource() || me.getData();
 
            // remove vanished items
            allItems.each(function(olditem) {
-               var item = me.rstore.getById(olditem.getId());
+               let item = me.rstore.getById(olditem.getId());
                if (!item) {
                    me.remove(olditem);
                }
index e9fd2ce51084e9b21c422649b59681c80796e1f3..860cbfdb755b9345d321c897f456fc2c2be4e6e1 100644 (file)
@@ -7,8 +7,8 @@ Ext.define('Proxmox.data.ObjectStore', {
     extend: 'Proxmox.data.UpdateStore',
 
     getRecord: function() {
-       var me = this;
-       var record = Ext.create('Ext.data.Model');
+       let me = this;
+       let record = Ext.create('Ext.data.Model');
        me.getData().each(function(item) {
            record.set(item.data.key, item.data.value);
        });
@@ -17,7 +17,7 @@ Ext.define('Proxmox.data.ObjectStore', {
     },
 
     constructor: function(config) {
-       var me = this;
+       let me = this;
 
         config = config || {};
 
index e9e78f71c65a32a5340227d52c0e1b2ed30cd12a..53e92f3126d38c0f73613550122b97911763c3ba 100644 (file)
@@ -59,8 +59,7 @@ Ext.define('Proxmox.RestProxy', {
            {
                name: 'id',
                convert: function(value, record) {
-                   var info = record.data;
-                   var text;
+                   let info = record.data;
 
                    if (value) {
                        return value;
index 65b04107626c04d5c6649cbc09fe893c199ca727..67ffb57098fa31517cfde75948e40a4f1da60cf7 100644 (file)
@@ -7,7 +7,7 @@ Ext.define('Proxmox.data.RRDStore', {
     alias: 'store.proxmoxRRDStore',
 
     setRRDUrl: function(timeframe, cf) {
-       var me = this;
+       let me = this;
        if (!timeframe) {
            timeframe = me.timeframe;
        }
@@ -28,7 +28,7 @@ Ext.define('Proxmox.data.RRDStore', {
     cf: 'AVERAGE',
 
     constructor: function(config) {
-       var me = this;
+       let me = this;
 
        config = config || {};
 
@@ -47,9 +47,9 @@ Ext.define('Proxmox.data.RRDStore', {
            throw "no rrdurl specified";
        }
 
-       var stateid = 'proxmoxRRDTypeSelection';
-       var sp = Ext.state.Manager.getProvider();
-       var stateinit = sp.get(stateid);
+       let stateid = 'proxmoxRRDTypeSelection';
+       let sp = Ext.state.Manager.getProvider();
+       let stateinit = sp.get(stateid);
 
         if (stateinit) {
            if (stateinit.timeframe !== me.timeframe || stateinit.cf !== me.rrdcffn) {
index 5deadd3616a753eb92217ea971c894974a3cdf81..0489df88269cd7916fde5f07ae73312633225990 100644 (file)
@@ -18,7 +18,7 @@
  *
  * Additional feature: specify allowed properties with default values with 'rows' object
  *
- * var rows = {
+ * let rows = {
  *   memory: {
  *     required: true,
  *     defaultValue: 512
@@ -36,7 +36,7 @@ Ext.define('Proxmox.data.reader.JsonObject', {
     rows: undefined,
 
     constructor: function(config) {
-        var me = this;
+        let me = this;
 
         Ext.apply(me, config || {});
 
@@ -44,16 +44,16 @@ Ext.define('Proxmox.data.reader.JsonObject', {
     },
 
     getResponseData: function(response) {
-       var me = this;
+       let me = this;
 
-       var data = [];
+       let data = [];
         try {
-        var result = Ext.decode(response.responseText);
+        let result = Ext.decode(response.responseText);
         // get our data items inside the server response
-        var root = result[me.getRootProperty()];
+        let root = result[me.getRootProperty()];
 
            if (me.readArray) {
-               var rec_hash = {};
+               let rec_hash = {};
                Ext.Array.each(root, function(rec) {
                    if (Ext.isDefined(rec.key)) {
                        rec_hash[rec.key] = rec;
@@ -62,7 +62,7 @@ Ext.define('Proxmox.data.reader.JsonObject', {
 
                if (me.rows) {
                    Ext.Object.each(me.rows, function(key, rowdef) {
-                       var rec = rec_hash[key];
+                       let rec = rec_hash[key];
                        if (Ext.isDefined(rec)) {
                            if (!Ext.isDefined(rec.value)) {
                                rec.value = rowdef.defaultValue;
@@ -82,10 +82,10 @@ Ext.define('Proxmox.data.reader.JsonObject', {
                    });
                }
            } else {
-               var org_root = root;
+               let org_root = root;
 
                if (Ext.isArray(org_root)) {
-                   if (root.length == 1) {
+                   if (root.length === 1) {
                        root = org_root[0];
                    } else {
                        root = {};
index 81314964540febe83d9a777b9c0109088e7d72de..1fe45b9015e015325c4ca1e733f5afaa96c26204 100644 (file)
@@ -5,7 +5,7 @@ Ext.define('Proxmox.form.BondModeSelector', {
     openvswitch: false,
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        if (me.openvswitch) {
            me.comboItems = Proxmox.Utils.bond_mode_array([
index dd654df99c8dc65746c21fb740d779501f19aa3c..2b29e1c75e35858d5b26881c19c84b6cd85b7906 100644 (file)
@@ -11,14 +11,14 @@ Ext.define('Proxmox.form.Checkbox', {
     inputValue: '1',
 
     getSubmitData: function() {
-        var me = this,
+        let me = this,
             data = null,
             val;
         if (!me.disabled && me.submitValue) {
             val = me.getSubmitValue();
             if (val !== null) {
                 data = {};
-               if (val == me.getDefaultValue() && me.getDeleteDefaultValue()) {
+               if (val === me.getDefaultValue() && me.getDeleteDefaultValue()) {
                    data.delete = me.getName();
                } else {
                     data[me.getName()] = val;
@@ -33,7 +33,7 @@ Ext.define('Proxmox.form.Checkbox', {
 
     // also accept integer 1 as true
     setRawValue: function(value) {
-       var me = this;
+       let me = this;
 
        if (value === 1) {
             me.callParent([true]);
index c9eaa5cc5c5f7dfce976a9e311998ea9b43cbbee..e5a1920e392b3e2ac0088faa6fd2a20fcea11820 100644 (file)
@@ -16,11 +16,11 @@ Ext.define('Proxmox.form.ComboGrid', {
     // 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();
+        let me = this;
+        let key = e.getKey();
 
         if (!me.editable && me.allowBlank && !me.multiSelect &&
-           (key == e.BACKSPACE || key == e.DELETE)) {
+           (key === e.BACKSPACE || key === e.DELETE)) {
            me.setValue('');
        }
 
@@ -44,14 +44,14 @@ Ext.define('Proxmox.form.ComboGrid', {
            weight: -1,
            hidden: true,
            handler: function() {
-               var me = this;
+               let me = this;
                me.setValue('');
            },
        },
     },
 
     setValue: function(value) {
-       var me = this;
+       let me = this;
        let empty = Ext.isArray(value) ? !value.length : !value;
        me.triggers.clear.setVisible(!empty && me.allowBlank);
        return me.callParent([value]);
@@ -68,7 +68,7 @@ Ext.define('Proxmox.form.ComboGrid', {
     // 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;
+       let me = this;
        if (me.multiSelect) {
            return me.rawValue;
        } else {
@@ -77,7 +77,7 @@ Ext.define('Proxmox.form.ComboGrid', {
     },
 
     getSubmitData: function() {
-       var me = this;
+       let me = this;
 
        let data = null;
        if (!me.disabled && me.submitValue) {
@@ -94,9 +94,9 @@ Ext.define('Proxmox.form.ComboGrid', {
    },
 
     getSubmitValue: function() {
-       var me = this;
+       let me = this;
 
-       var value = me.callParent();
+       let value = me.callParent();
        if (value !== '') {
            return value;
        }
@@ -111,121 +111,122 @@ Ext.define('Proxmox.form.ComboGrid', {
 
 // 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';
-                }
+       let 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.
-
-            //proxmox 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,
-                },
-            });
+               // displayTpl config will need regenerating with the autogenerated displayField name 'field1'
+               me.setDisplayTpl(null);
+           }
+           if (!Ext.isDefined(me.valueField)) {
+               me.valueField = me.displayField;
+           }
 
-            if (!initial) {
-                me.resetToDefault();
-            }
+           // 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);
+           }
 
-            if (picker) {
-                picker.setSelectionModel(me.pickerSelectionModel);
-                if (picker.getStore() !== store) {
-                    picker.bindStore(store);
-                }
-            }
-        }
+           // 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.
+
+           //proxmox 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;
+        let me = this;
+        let picker;
 
-        var pickerCfg = Ext.apply({
+        let pickerCfg = Ext.apply({
                 // proxmox overrides: display a grid for selection
                 xtype: 'gridpanel',
                 id: me.pickerId,
@@ -273,10 +274,9 @@ Ext.define('Proxmox.form.ComboGrid', {
             beforedeselect: me.onBeforeDeselect,
             focuschange: me.onFocusChange,
             selectionChange: function(sm, selectedRecords) {
-                var me = this;
                 if (selectedRecords.length) {
-                    me.setValue(selectedRecords);
-                    me.fireEvent('select', me, selectedRecords);
+                    this.setValue(selectedRecords);
+                    this.fireEvent('select', me, selectedRecords);
                 }
             },
             scope: me,
@@ -312,7 +312,7 @@ Ext.define('Proxmox.form.ComboGrid', {
     },
 
     clearLocalFilter: function() {
-        var me = this,
+        let me = this,
             filter = me.queryFilter;
 
         if (filter) {
@@ -324,9 +324,9 @@ Ext.define('Proxmox.form.ComboGrid', {
     },
 
     isValueInStore: function(value) {
-       var me = this;
-       var store = me.store;
-       var found = false;
+       let me = this;
+       let store = me.store;
+       let found = false;
 
        if (!store) {
            return found;
@@ -345,6 +345,7 @@ Ext.define('Proxmox.form.ComboGrid', {
                    found = true;
                    return false; // break
                }
+               return true;
            });
        } else {
            found = !!store.findRecord(me.valueField, value);
@@ -354,7 +355,7 @@ Ext.define('Proxmox.form.ComboGrid', {
     },
 
     validator: function(value) {
-       var me = this;
+       let me = this;
 
        if (!value) {
            return true; // handled later by allowEmpty in the getErrors call chain
@@ -366,8 +367,8 @@ Ext.define('Proxmox.form.ComboGrid', {
        //
        // we also have to get the 'real' value if the we have a mulitSelect
        // Field but got a non array value
-       if (me.valueField && me.valueField !== me.displayField ||
-           me.multiSelect && !Ext.isArray(value)) {
+       if ((me.valueField && me.valueField !== me.displayField) ||
+           (me.multiSelect && !Ext.isArray(value))) {
            value = me.getValue();
        }
 
@@ -386,7 +387,7 @@ Ext.define('Proxmox.form.ComboGrid', {
     },
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        Ext.apply(me, {
            queryMode: 'local',
@@ -397,12 +398,12 @@ Ext.define('Proxmox.form.ComboGrid', {
 
        Ext.applyIf(me.listConfig, { width: 400 });
 
-        me.callParent();
+       me.callParent();
 
-        // Create the picker at an early stage, so it is available to store the previous selection
-        if (!me.picker) {
-            me.createPicker();
-        }
+       // Create the picker at an early stage, so it is available to store the previous selection
+       if (!me.picker) {
+           me.createPicker();
+       }
 
        me.mon(me.store, 'beforeload', function() {
            if (!me.isDisabled()) {
@@ -419,7 +420,7 @@ Ext.define('Proxmox.form.ComboGrid', {
                    delete me.enableLoadMask;
 
                    // if the picker exists,
-                   // we reset its minheight to the saved var/0
+                   // we reset its minheight to the saved let/0
                    // we have to update the layout, otherwise the height
                    // gets not recalculated
                    if (me.picker) {
@@ -429,17 +430,17 @@ Ext.define('Proxmox.form.ComboGrid', {
                    }
                }
 
-               var def = me.getValue() || me.preferredValue;
+               let def = me.getValue() || me.preferredValue;
                if (def) {
                    me.setValue(def, true); // sync with grid
                }
-               var found = false;
+               let found = false;
                if (def) {
                    found = me.isValueInStore(def);
                }
 
                if (!found) {
-                   var rec = me.store.first();
+                   let rec = me.store.first();
                    if (me.autoSelect && rec && rec.data) {
                        def = rec.data[me.valueField];
                        me.setValue(def, true);
index c49ec553b2b4106efde952d9a08c3b387975fc63..a061e159ae9da6288df5418c7d0191088c6b0cd8 100644 (file)
@@ -9,24 +9,24 @@ Ext.define('Proxmox.DateTimeField', {
     submitFormat: 'U',
 
     getValue: function() {
-       var me = this;
-       var d = me.lookupReference('dateentry').getValue();
+       let me = this;
+       let d = me.lookupReference('dateentry').getValue();
 
        if (d === undefined || d === null) { return null; }
 
-       var t = me.lookupReference('timeentry').getValue();
+       let t = me.lookupReference('timeentry').getValue();
 
        if (t === undefined || t === null) { return null; }
 
-       var offset = (t.getHours()*3600+t.getMinutes()*60)*1000;
+       let offset = (t.getHours() * 3600 + t.getMinutes() * 60) * 1000;
 
        return new Date(d.getTime() + offset);
     },
 
     getSubmitValue: function() {
-        var me = this;
-        var format = me.submitFormat;
-        var value = me.getValue();
+        let me = this;
+        let format = me.submitFormat;
+        let value = me.getValue();
 
         return value ? Ext.Date.format(value, format) : null;
     },
@@ -128,11 +128,11 @@ Ext.define('Proxmox.DateTimeField', {
     },
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        me.callParent();
 
-       var value = me.value || new Date();
+       let value = me.value || new Date();
 
        me.lookupReference('dateentry').setValue(value);
        me.lookupReference('timeentry').setValue(value);
index 457c302281b92195fca019cde6adb9184f161ef9..67dd215f60d3f5e9b6e71c84fddb275e33bcd40f 100644 (file)
@@ -11,7 +11,7 @@ Ext.define('Proxmox.form.field.Integer', {
     step: 1,
 
    getSubmitData: function() {
-        var me = this,
+        let me = this,
             data = null,
             val;
         if (!me.disabled && me.submitValue && !me.isFileUpload()) {
index f14f934d5d26fcfd425fb8682b628d6bc6746784..361217e039bf83e1e8807367ba72bfd1d8c407be 100644 (file)
@@ -20,7 +20,7 @@ Ext.define('Proxmox.form.KVComboBox', {
 
     // overide framework function to implement deleteEmpty behaviour
     getSubmitData: function() {
-        var me = this,
+        let me = this,
             data = null,
             val;
         if (!me.disabled && me.submitValue) {
@@ -37,15 +37,15 @@ Ext.define('Proxmox.form.KVComboBox', {
     },
 
     validator: function(val) {
-       var me = this;
+       let me = this;
 
        if (me.editable || val === null || val === '') {
            return true;
        }
 
        if (me.store.getCount() > 0) {
-           var values = me.multiSelect ? val.split(me.delimiter) : [val];
-           var items = me.store.getData().collect('value', 'data');
+           let values = me.multiSelect ? val.split(me.delimiter) : [val];
+           let items = me.store.getData().collect('value', 'data');
            if (Ext.Array.every(values, function(value) {
                return Ext.Array.contains(items, value);
            })) {
@@ -54,12 +54,11 @@ Ext.define('Proxmox.form.KVComboBox', {
        }
 
        // returns a boolean or string
-       /*jslint confusion: true */
        return "value '" + val + "' not allowed!";
     },
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        me.store = Ext.create('Ext.data.ArrayStore', {
            model: 'KeyValue',
@@ -74,7 +73,7 @@ Ext.define('Proxmox.form.KVComboBox', {
     },
 
     setComboItems: function(items) {
-       var me = this;
+       let me = this;
 
        me.getStore().setData(items);
     },
index 154ea3a4cff93ec5c67bce942f01bfb8166edae1..b87efc18a0ca023a1e57337477fb953c4792b61d 100644 (file)
@@ -3,7 +3,7 @@ Ext.define('Proxmox.form.NetworkSelectorController', {
     alias: 'controller.proxmoxNetworkSelectorController',
 
     init: function(view) {
-       var me = this;
+       let me = this;
 
        if (!view.nodename) {
            throw "missing custom view config: nodename";
@@ -36,7 +36,7 @@ Ext.define('Proxmox.form.NetworkSelector', {
     nodename: 'localhost',
     setNodename: function(nodename) {
        this.nodename = nodename;
-       var networkSelectorStore = this.getStore();
+       let networkSelectorStore = this.getStore();
        networkSelectorStore.removeAll();
        // because of manual local copy of data for ip4/6
        this.getPicker().refresh();
index f7f7f264cb465254e7671ec32cbd94700d6b0dbb..16cac2012f45a2b8f8660f087807d3f78ecc2247 100644 (file)
@@ -38,10 +38,10 @@ Ext.define('Proxmox.form.RRDTypeSelector', {
     },
     // save current selection in the state Provider so RRDView can read it
     getState: function() {
-       var ind = this.getStore().findExact('id', this.getValue());
-       var rec = this.getStore().getAt(ind);
+       let ind = this.getStore().findExact('id', this.getValue());
+       let rec = this.getStore().getAt(ind);
        if (!rec) {
-           return;
+           return undefined;
        }
        return {
            id: rec.data.id,
index e391fbf91307dffff8cae3e28c63be811da519dd..309bf4fd8fa7278172fcb185dc56ed915cbdfb25 100644 (file)
@@ -13,10 +13,10 @@ Ext.define('Proxmox.form.RealmComboBox', {
            if (!success) {
                return;
            }
-           var me = this;
-           var val = me.getValue();
+           let me = this;
+           let val = me.getValue();
            if (!val || !me.store.findRecord('realm', val)) {
-               var def = 'pam';
+               let def = 'pam';
                Ext.each(records, function(rec) {
                    if (rec.data && rec.data.default) {
                        def = rec.data.realm;
index 66f890fe223b48341e8699076c0f9ef895088b6c..56e59764cf1dfede078c7c0b080407315fdbee98 100644 (file)
@@ -9,7 +9,7 @@ Ext.define('Proxmox.form.field.Textfield', {
     },
 
     getSubmitData: function() {
-        var me = this,
+        let me = this,
             data = null,
             val;
         if (!me.disabled && me.submitValue && !me.isFileUpload()) {
@@ -26,9 +26,9 @@ Ext.define('Proxmox.form.field.Textfield', {
     },
 
     getSubmitValue: function() {
-       var me = this;
+       let me = this;
 
-        var value = this.processRawValue(this.getRawValue());
+        let value = this.processRawValue(this.getRawValue());
        if (value !== '') {
            return value;
        }
index 4a722ac83c3d0e712cbf084ccb4a1eefa5fb133c..541cf1dddd14090e6ba4fae73fd8d2fd12787e6a 100644 (file)
@@ -2,7 +2,7 @@
 
 mandatory config parameters:
 rows: an object container where each propery is a key-value object we want to render
-       var rows = {
+       let rows = {
            keyboard: {
                header: gettext('Keyboard Layout'),
                editor: 'Your.KeyboardEdit',
@@ -25,7 +25,7 @@ Ext.define('Proxmox.grid.ObjectGrid', {
     monStoreErrors: false,
 
     add_combobox_row: function(name, text, opts) {
-       var me = this;
+       let me = this;
 
        opts = opts || {};
        me.rows = me.rows || {};
@@ -58,7 +58,7 @@ Ext.define('Proxmox.grid.ObjectGrid', {
     },
 
     add_text_row: function(name, text, opts) {
-       var me = this;
+       let me = this;
 
        opts = opts || {};
        me.rows = me.rows || {};
@@ -90,7 +90,7 @@ Ext.define('Proxmox.grid.ObjectGrid', {
     },
 
     add_boolean_row: function(name, text, opts) {
-       var me = this;
+       let me = this;
 
        opts = opts || {};
        me.rows = me.rows || {};
@@ -123,7 +123,7 @@ Ext.define('Proxmox.grid.ObjectGrid', {
     },
 
     add_integer_row: function(name, text, opts) {
-       var me = this;
+       let me = this;
 
        opts = opts || {};
        me.rows = me.rows || {};
@@ -159,22 +159,22 @@ Ext.define('Proxmox.grid.ObjectGrid', {
     editorConfig: {}, // default config passed to editor
 
     run_editor: function() {
-       var me = this;
+       let me = this;
 
-       var sm = me.getSelectionModel();
-       var rec = sm.getSelection()[0];
+       let sm = me.getSelectionModel();
+       let rec = sm.getSelection()[0];
        if (!rec) {
            return;
        }
 
-       var rows = me.rows;
-       var rowdef = rows[rec.data.key];
+       let rows = me.rows;
+       let rowdef = rows[rec.data.key];
        if (!rowdef.editor) {
            return;
        }
 
-       var win;
-       var config;
+       let win;
+       let config;
        if (Ext.isString(rowdef.editor)) {
            config = Ext.apply({
                confid: rec.data.key,
@@ -194,13 +194,13 @@ Ext.define('Proxmox.grid.ObjectGrid', {
     },
 
     reload: function() {
-       var me = this;
+       let me = this;
        me.rstore.load();
     },
 
     getObjectValue: function(key, defaultValue) {
-       var me = this;
-       var rec = me.store.getById(key);
+       let me = this;
+       let rec = me.store.getById(key);
        if (rec) {
            return rec.data.value;
        }
@@ -208,19 +208,19 @@ Ext.define('Proxmox.grid.ObjectGrid', {
     },
 
     renderKey: function(key, metaData, record, rowIndex, colIndex, store) {
-       var me = this;
-       var rows = me.rows;
-       var rowdef = rows && rows[key] ? rows[key] : {};
+       let me = this;
+       let rows = me.rows;
+       let rowdef = rows && rows[key] ? rows[key] : {};
        return rowdef.header || key;
     },
 
     renderValue: function(value, metaData, record, rowIndex, colIndex, store) {
-       var me = this;
-       var rows = me.rows;
-       var key = record.data.key;
-       var rowdef = rows && rows[key] ? rows[key] : {};
+       let me = this;
+       let rows = me.rows;
+       let key = record.data.key;
+       let rowdef = rows && rows[key] ? rows[key] : {};
 
-       var renderer = rowdef.renderer;
+       let renderer = rowdef.renderer;
        if (renderer) {
            return renderer(value, metaData, record, rowIndex, colIndex, store);
        }
@@ -235,7 +235,7 @@ Ext.define('Proxmox.grid.ObjectGrid', {
            }
        },
        itemkeyup: function(view, record, item, index, e) {
-           if (e.getKey() === e.ENTER && index == this.pressedIndex) {
+           if (e.getKey() === e.ENTER && index === this.pressedIndex) {
                this.run_editor();
            }
 
@@ -244,9 +244,9 @@ Ext.define('Proxmox.grid.ObjectGrid', {
     },
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
-       var rows = me.rows;
+       let rows = me.rows;
 
        if (!me.rstore) {
            if (!me.url) {
@@ -287,7 +287,7 @@ Ext.define('Proxmox.grid.ObjectGrid', {
        store.filters.add(Ext.create('Ext.util.Filter', {
            filterFn: function(item) {
                if (rows) {
-                   var rowdef = rows[item.data.key];
+                   let rowdef = rows[item.data.key];
                    if (!rowdef || rowdef.visible === false) {
                        return false;
                    }
index 0ab16d6d71c7bd7b6ebdf8ee8cae983fed851315..a5a640c90b245618e4efe66312deef589b90538c 100644 (file)
@@ -3,10 +3,10 @@ Ext.define('Proxmox.grid.PendingObjectGrid', {
     alias: ['widget.proxmoxPendingObjectGrid'],
 
     getObjectValue: function(key, defaultValue, pending) {
-       var me = this;
-       var rec = me.store.getById(key);
+       let me = this;
+       let rec = me.store.getById(key);
        if (rec) {
-           var value = rec.data.value;
+           let value = rec.data.value;
            if (pending) {
                if (Ext.isDefined(rec.data.pending) && rec.data.pending !== '') {
                    value = rec.data.pending;
@@ -25,42 +25,42 @@ Ext.define('Proxmox.grid.PendingObjectGrid', {
     },
 
     hasPendingChanges: function(key) {
-       var me = this;
-       var rows = me.rows;
-       var rowdef = rows && rows[key] ? rows[key] : {};
-       var keys = rowdef.multiKey || [key];
-       var pending = false;
+       let me = this;
+       let rows = me.rows;
+       let rowdef = rows && rows[key] ? rows[key] : {};
+       let keys = rowdef.multiKey || [key];
+       let pending = false;
 
        Ext.Array.each(keys, function(k) {
-           var rec = me.store.getById(k);
+           let rec = me.store.getById(k);
            if (rec && rec.data && (
-                   Ext.isDefined(rec.data.pending) && rec.data.pending !== '' ||
+                   (Ext.isDefined(rec.data.pending) && rec.data.pending !== '') ||
                    rec.data.delete === 1
            )) {
                pending = true;
                return false; // break
            }
+           return true;
        });
 
        return pending;
     },
 
     renderValue: function(value, metaData, record, rowIndex, colIndex, store) {
-       var me = this;
-       var rows = me.rows;
-       var key = record.data.key;
-       var rowdef = rows && rows[key] ? rows[key] : {};
-       var renderer = rowdef.renderer;
-       var current = '';
-       var pendingdelete = '';
-       var pending = '';
+       let me = this;
+       let rows = me.rows;
+       let key = record.data.key;
+       let rowdef = rows && rows[key] ? rows[key] : {};
+       let renderer = rowdef.renderer;
+       let current = '';
+       let pending = '';
 
        if (renderer) {
            current = renderer(value, metaData, record, rowIndex, colIndex, store, false);
            if (me.hasPendingChanges(key)) {
                pending = renderer(record.data.pending, metaData, record, rowIndex, colIndex, store, true);
            }
-           if (pending == current) {
+           if (pending === current) {
                pending = undefined;
            }
        } else {
@@ -69,14 +69,15 @@ Ext.define('Proxmox.grid.PendingObjectGrid', {
        }
 
        if (record.data.delete) {
-           var delete_all = true;
+           let delete_all = true;
            if (rowdef.multiKey) {
                Ext.Array.each(rowdef.multiKey, function(k) {
-                   var rec = me.store.getById(k);
+                   let rec = me.store.getById(k);
                    if (rec && rec.data && rec.data.delete !== 1) {
                        delete_all = false;
                        return false; // break
                    }
+                   return true;
                });
            }
            if (delete_all) {
@@ -92,9 +93,7 @@ Ext.define('Proxmox.grid.PendingObjectGrid', {
     },
 
     initComponent: function() {
-       var me = this;
-
-       var rows = me.rows;
+       let me = this;
 
        if (!me.rstore) {
            if (!me.url) {
index 14710a507f2f3c76b895be053a71c06a5c83501c..afef53aadc7a60645788d2d02c54f5b935e90e71 100644 (file)
@@ -8,14 +8,14 @@ Ext.define('Proxmox.Mixin.CBind', {
     },
 
     cloneTemplates: function() {
-       var me = this;
+       let me = this;
 
        if (typeof me.cbindData === "function") {
            me.cbindData = me.cbindData(me.initialConfig);
        }
        me.cbindData = me.cbindData || {};
 
-       var getConfigValue = function(cname) {
+       let getConfigValue = function(cname) {
            if (cname in me.initialConfig) {
                return me.initialConfig[cname];
            }
@@ -33,25 +33,26 @@ Ext.define('Proxmox.Mixin.CBind', {
            throw "unable to get cbind data for '" + cname + "'";
        };
 
-       var applyCBind = function(obj) {
-           var cbind = obj.cbind, prop, cdata, cvalue, match, found;
+       let applyCBind = function(obj) {
+           let cbind = obj.cbind, cdata;
            if (!cbind) return;
 
-           for (prop in cbind) {
+           for (const prop in cbind) { // eslint-disable-line guard-for-in
+               let match, found;
                cdata = cbind[prop];
 
                found = false;
                if (typeof cdata === 'function') {
                    obj[prop] = cdata(getConfigValue, prop);
                    found = true;
-               } else if (match = /^\{(!)?([a-z_][a-z0-9_]*)\}$/i.exec(cdata)) {
-                   var cvalue = getConfigValue(match[2]);
+               } else if ((match = /^\{(!)?([a-z_][a-z0-9_]*)\}$/i.exec(cdata))) {
+                   let cvalue = getConfigValue(match[2]);
                    if (match[1]) cvalue = !cvalue;
                    obj[prop] = cvalue;
                    found = true;
-               } else if (match = /^\{(!)?([a-z_][a-z0-9_]*(\.[a-z_][a-z0-9_]*)+)\}$/i.exec(cdata)) {
-                   var keys = match[2].split('.');
-                   var cvalue = getConfigValue(keys.shift());
+               } else if ((match = /^\{(!)?([a-z_][a-z0-9_]*(\.[a-z_][a-z0-9_]*)+)\}$/i.exec(cdata))) {
+                   let keys = match[2].split('.');
+                   let cvalue = getConfigValue(keys.shift());
                    keys.forEach(function(k) {
                        if (k in cvalue) {
                            cvalue = cvalue[k];
@@ -63,8 +64,8 @@ Ext.define('Proxmox.Mixin.CBind', {
                    obj[prop] = cvalue;
                    found = true;
                } else {
-                   obj[prop] = cdata.replace(/{([a-z_][a-z0-9_]*)\}/ig, function(match, cname) {
-                       var cvalue = getConfigValue(cname);
+                   obj[prop] = cdata.replace(/{([a-z_][a-z0-9_]*)\}/ig, (_match, cname) => {
+                       let cvalue = getConfigValue(cname);
                        found = true;
                        return cvalue;
                    });
@@ -79,14 +80,15 @@ Ext.define('Proxmox.Mixin.CBind', {
            applyCBind(me);
        }
 
-       var cloneTemplateArray = function(org) {
-           var copy, i, found, el, elcopy, arrayLength;
+       let cloneTemplateObject;
+       let cloneTemplateArray = function(org) {
+           let copy, i, found, el, elcopy, arrayLength;
 
            arrayLength = org.length;
            found = false;
            for (i = 0; i < arrayLength; i++) {
                el = org[i];
-               if (el.constructor == Object && el.xtype) {
+               if (el.constructor === Object && el.xtype) {
                    found = true;
                    break;
                }
@@ -97,13 +99,13 @@ Ext.define('Proxmox.Mixin.CBind', {
            copy = [];
            for (i = 0; i < arrayLength; i++) {
                el = org[i];
-               if (el.constructor == Object && el.xtype) {
+               if (el.constructor === Object && el.xtype) {
                    elcopy = cloneTemplateObject(el);
                    if (elcopy.cbind) {
                        applyCBind(elcopy);
                    }
                    copy.push(elcopy);
-               } else if (el.constructor == Array) {
+               } else if (el.constructor === Array) {
                    elcopy = cloneTemplateArray(el);
                    copy.push(elcopy);
                } else {
@@ -113,21 +115,21 @@ Ext.define('Proxmox.Mixin.CBind', {
            return copy;
        };
 
-       var cloneTemplateObject = function(org) {
-           var res = {}, prop, el, copy;
-           for (prop in org) {
+       cloneTemplateObject = function(org) {
+           let res = {}, prop, el, copy;
+           for (prop in org) { // eslint-disable-line guard-for-in
                el = org[prop];
                if (el === undefined || el === null) {
                    res[prop] = el;
                    continue;
                }
-               if (el.constructor == Object && el.xtype) {
+               if (el.constructor === Object && el.xtype) {
                    copy = cloneTemplateObject(el);
                    if (copy.cbind) {
                        applyCBind(copy);
                    }
                    res[prop] = copy;
-               } else if (el.constructor == Array) {
+               } else if (el.constructor === Array) {
                    copy = cloneTemplateArray(el);
                    res[prop] = copy;
                } else {
@@ -137,17 +139,17 @@ Ext.define('Proxmox.Mixin.CBind', {
            return res;
        };
 
-       var condCloneProperties = function() {
-           var prop, el, i, tmp;
+       let condCloneProperties = function() {
+           let prop, el, tmp;
 
-           for (prop in me) {
+           for (prop in me) { // eslint-disable-line guard-for-in
                el = me[prop];
                if (el === undefined || el === null) continue;
-               if (typeof el === 'object' && el.constructor == Object) {
-                   if (el.xtype && prop != 'config') {
+               if (typeof el === 'object' && el.constructor === Object) {
+                   if (el.xtype && prop !== 'config') {
                        me[prop] = cloneTemplateObject(el);
                    }
-               } else if (el.constructor == Array) {
+               } else if (el.constructor === Array) {
                    tmp = cloneTemplateArray(el);
                    me[prop] = tmp;
                }
index a2c5f1c92ea0385648bc009fd31b4739dbd71773..1b564efd73fadcbb1be5c91d10970a315b601fb2 100644 (file)
@@ -45,13 +45,13 @@ Ext.define('Proxmox.node.APT', {
     ],
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        if (!me.nodename) {
            throw "no node name specified";
        }
 
-       var store = Ext.create('Ext.data.Store', {
+       let store = Ext.create('Ext.data.Store', {
            model: 'apt-pkglist',
            groupField: 'Origin',
            proxy: {
@@ -66,15 +66,15 @@ Ext.define('Proxmox.node.APT', {
            ],
        });
 
-       var groupingFeature = Ext.create('Ext.grid.feature.Grouping', {
+       let groupingFeature = Ext.create('Ext.grid.feature.Grouping', {
             groupHeaderTpl: '{[ "Origin: " + values.name ]} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})',
            enableGroupingMenu: false,
        });
 
-       var rowBodyFeature = Ext.create('Ext.grid.feature.RowBody', {
+       let rowBodyFeature = Ext.create('Ext.grid.feature.RowBody', {
             getAdditionalData: function(data, rowIndex, record, orig) {
-               var headerCt = this.view.headerCt;
-               var colspan = headerCt.getColumnCount();
+               let headerCt = this.view.headerCt;
+               let colspan = headerCt.getColumnCount();
                return {
                    rowBody: '<div style="padding: 1em">' +
                        Ext.String.htmlEncode(data.Description) +
@@ -85,13 +85,13 @@ Ext.define('Proxmox.node.APT', {
            },
        });
 
-       var reload = function() {
+       let reload = function() {
            store.load();
        };
 
        Proxmox.Utils.monStoreErrors(me, store, true);
 
-       var apt_command = function(cmd) {
+       let apt_command = function(cmd) {
            Proxmox.Utils.API2Request({
                url: "/nodes/" + me.nodename + "/apt/" + cmd,
                method: 'POST',
@@ -99,9 +99,9 @@ Ext.define('Proxmox.node.APT', {
                    Ext.Msg.alert(gettext('Error'), response.htmlStatus);
                },
                success: function(response, opts) {
-                   var upid = response.result.data;
+                   let upid = response.result.data;
 
-                   var win = Ext.create('Proxmox.window.TaskViewer', {
+                   let win = Ext.create('Proxmox.window.TaskViewer', {
                        upid: upid,
                    });
                    win.show();
@@ -110,21 +110,21 @@ Ext.define('Proxmox.node.APT', {
            });
        };
 
-       var sm = Ext.create('Ext.selection.RowModel', {});
+       let sm = Ext.create('Ext.selection.RowModel', {});
 
-       var update_btn = new Ext.Button({
+       let update_btn = new Ext.Button({
            text: gettext('Refresh'),
            handler: function() {
                Proxmox.Utils.checked_command(function() { apt_command('update'); });
            },
        });
 
-       var show_changelog = function(rec) {
+       let show_changelog = function(rec) {
            if (!rec || !rec.data || !(rec.data.ChangeLogUrl && rec.data.Package)) {
                return;
            }
 
-           var view = Ext.createWidget('component', {
+           let view = Ext.createWidget('component', {
                autoScroll: true,
                style: {
                    'background-color': 'white',
@@ -134,7 +134,7 @@ Ext.define('Proxmox.node.APT', {
                },
            });
 
-           var win = Ext.create('Ext.window.Window', {
+           let win = Ext.create('Ext.window.Window', {
                title: gettext('Changelog') + ": " + rec.data.Package,
                width: 800,
                height: 400,
@@ -162,7 +162,7 @@ Ext.define('Proxmox.node.APT', {
            });
        };
 
-       var changelog_btn = new Proxmox.button.Button({
+       let changelog_btn = new Proxmox.button.Button({
            text: gettext('Changelog'),
            selModel: sm,
            disabled: true,
@@ -177,7 +177,7 @@ Ext.define('Proxmox.node.APT', {
            },
        });
 
-       var verbose_desc_checkbox = new Ext.form.field.Checkbox({
+       let verbose_desc_checkbox = new Ext.form.field.Checkbox({
            boxLabel: gettext('Show details'),
            value: false,
            listeners: {
index c4f2ff79677f49d9a6f0805dbc494839b0ec62bb..0b1135ed5f4bf2c7df12827ea56f3e70423121b1 100644 (file)
@@ -3,7 +3,7 @@ Ext.define('Proxmox.node.DNSEdit', {
     alias: ['widget.proxmoxNodeDNSEdit'],
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        if (!me.nodename) {
            throw "no node name specified";
index 6afec545bb078ad099f6a4ae8bfa49faaded115a..e40e5a1a42456ebff9d89eefdb059db97e8c81ca 100644 (file)
@@ -3,14 +3,14 @@ Ext.define('Proxmox.node.DNSView', {
     alias: ['widget.proxmoxNodeDNSView'],
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        if (!me.nodename) {
            throw "no node name specified";
        }
 
-       var run_editor = function() {
-           var win = Ext.create('Proxmox.node.DNSEdit', {
+       let run_editor = function() {
+           let win = Ext.create('Proxmox.node.DNSEdit', {
                nodename: me.nodename,
            });
            win.show();
index 6f594b2c488e9e8fa5fc9e830f1b699c082e897e..9adb6b2b1224618f22a8e2c760cea88a2c64fe9d 100644 (file)
@@ -3,7 +3,7 @@ Ext.define('Proxmox.node.HostsView', {
     xtype: 'proxmoxNodeHostsView',
 
     reload: function() {
-       var me = this;
+       let me = this;
        me.store.load();
     },
 
@@ -13,17 +13,17 @@ Ext.define('Proxmox.node.HostsView', {
            disabled: true,
            itemId: 'savebtn',
            handler: function() {
-               var me = this.up('panel');
+               let view = this.up('panel');
                Proxmox.Utils.API2Request({
                    params: {
-                       digest: me.digest,
-                       data: me.down('#hostsfield').getValue(),
+                       digest: view.digest,
+                       data: view.down('#hostsfield').getValue(),
                    },
                    method: 'POST',
-                   url: '/nodes/' + me.nodename + '/hosts',
-                   waitMsgTarget: me,
+                   url: '/nodes/' + view.nodename + '/hosts',
+                   waitMsgTarget: view,
                    success: function(response, opts) {
-                       me.reload();
+                       view.reload();
                    },
                    failure: function(response, opts) {
                        Ext.Msg.alert('Error', response.htmlStatus);
@@ -36,8 +36,8 @@ Ext.define('Proxmox.node.HostsView', {
            disabled: true,
            itemId: 'resetbtn',
            handler: function() {
-               var me = this.up('panel');
-               me.down('#hostsfield').reset();
+               let view = this.up('panel');
+               view.down('#hostsfield').reset();
            },
        },
     ],
@@ -54,16 +54,16 @@ Ext.define('Proxmox.node.HostsView', {
            },
            listeners: {
                dirtychange: function(ta, dirty) {
-                   var me = this.up('panel');
-                   me.down('#savebtn').setDisabled(!dirty);
-                   me.down('#resetbtn').setDisabled(!dirty);
+                   let view = this.up('panel');
+                   view.down('#savebtn').setDisabled(!dirty);
+                   view.down('#resetbtn').setDisabled(!dirty);
                },
            },
        },
     ],
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        if (!me.nodename) {
            throw "no node name specified";
@@ -85,7 +85,7 @@ Ext.define('Proxmox.node.HostsView', {
                return;
            }
            me.digest = records[0].data.digest;
-           var data = records[0].data.data;
+           let data = records[0].data.data;
            me.down('#hostsfield').setValue(data);
            me.down('#hostsfield').resetOriginalValue();
        });
index b4cb4c931e73db6a79ba7820a7113d118fe40e9b..72aab6f771c56fb3d629aca5f851e38ce3a3efb8 100644 (file)
@@ -3,7 +3,7 @@ Ext.define('Proxmox.node.NetworkEdit', {
     alias: ['widget.proxmoxNodeNetworkEdit'],
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        if (!me.nodename) {
            throw "no node name specified";
@@ -15,7 +15,7 @@ Ext.define('Proxmox.node.NetworkEdit', {
 
        me.isCreate = !me.iface;
 
-       var iface_vtype;
+       let iface_vtype;
 
        if (me.iftype === 'bridge') {
            iface_vtype = 'BridgeName';
@@ -109,12 +109,12 @@ Ext.define('Proxmox.node.NetworkEdit', {
                if (Proxmox.Utils.VlanInterface_match.test(me.iface)) {
                   me.disablevlanid = true;
                   me.disablevlanrawdevice = true;
-                  var arr = Proxmox.Utils.VlanInterface_match.exec(me.iface);
+                  let arr = Proxmox.Utils.VlanInterface_match.exec(me.iface);
                   me.vlanrawdevicevalue = arr[1];
                   me.vlanidvalue = arr[2];
                } else if (Proxmox.Utils.Vlan_match.test(me.iface)) {
                   me.disablevlanid = true;
-                  var arr = Proxmox.Utils.Vlan_match.exec(me.iface);
+                  let arr = Proxmox.Utils.Vlan_match.exec(me.iface);
                   me.vlanidvalue = arr[1];
                }
            } else {
@@ -149,14 +149,14 @@ Ext.define('Proxmox.node.NetworkEdit', {
                name: 'slaves',
            });
 
-           var policySelector = Ext.createWidget('bondPolicySelector', {
+           let policySelector = Ext.createWidget('bondPolicySelector', {
                fieldLabel: gettext('Hash policy'),
                name: 'bond_xmit_hash_policy',
                deleteEmpty: !me.isCreate,
                disabled: true,
            });
 
-           var primaryfield = Ext.createWidget('textfield', {
+           let primaryfield = Ext.createWidget('textfield', {
                fieldLabel: gettext('bond-primary'),
                name: 'bond-primary',
                value: '',
@@ -222,8 +222,8 @@ Ext.define('Proxmox.node.NetworkEdit', {
            name: 'comments',
        });
 
-       var url;
-       var method;
+       let url;
+       let method;
 
        if (me.isCreate) {
            url = "/api2/extjs/nodes/" + me.nodename + "/network";
@@ -248,8 +248,8 @@ Ext.define('Proxmox.node.NetworkEdit', {
            listeners: {
                change: function(f, value) {
                    if (me.isCreate && iface_vtype === 'VlanName') {
-                       var vlanidField = me.down('field[name=vlan-id]');
-                       var vlanrawdeviceField = me.down('field[name=vlan-raw-device]');
+                       let vlanidField = me.down('field[name=vlan-id]');
+                       let vlanrawdeviceField = me.down('field[name=vlan-raw-device]');
                        if (Proxmox.Utils.VlanInterface_match.test(value)) {
                            vlanidField.setDisabled(true);
                            vlanrawdeviceField.setDisabled(true);
@@ -345,9 +345,9 @@ Ext.define('Proxmox.node.NetworkEdit', {
        } else {
            me.load({
                success: function(response, options) {
-                   var data = response.result.data;
+                   let data = response.result.data;
                    if (data.type !== me.iftype) {
-                       var msg = "Got unexpected device type";
+                       let msg = "Got unexpected device type";
                        Ext.Msg.alert(gettext('Error'), msg, function() {
                            me.close();
                        });
index 9503aa51689dbec1537b8530dcdb22d2d34fcedb..886b8de67d7da425e2a63b395d4f95d7cc5c63c8 100644 (file)
@@ -32,15 +32,15 @@ Ext.define('Proxmox.node.NetworkView', {
     showApplyBtn: false,
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        if (!me.nodename) {
            throw "no node name specified";
        }
 
-       var baseUrl = '/nodes/' + me.nodename + '/network';
+       let baseUrl = '/nodes/' + me.nodename + '/network';
 
-       var store = Ext.create('Ext.data.Store', {
+       let store = Ext.create('Ext.data.Store', {
            model: 'proxmox-networks',
            proxy: {
                 type: 'proxmox',
@@ -54,10 +54,10 @@ Ext.define('Proxmox.node.NetworkView', {
            ],
        });
 
-       var reload = function() {
-           var changeitem = me.down('#changes');
-           var apply_btn = me.down('#apply');
-           var revert_btn = me.down('#revert');
+       let reload = function() {
+           let changeitem = me.down('#changes');
+           let apply_btn = me.down('#apply');
+           let revert_btn = me.down('#revert');
            Proxmox.Utils.API2Request({
                url: baseUrl,
                failure: function(response, opts) {
@@ -67,9 +67,9 @@ Ext.define('Proxmox.node.NetworkView', {
                    changeitem.setHidden(true);
                },
                success: function(response, opts) {
-                   var result = Ext.decode(response.responseText);
+                   let result = Ext.decode(response.responseText);
                    store.loadData(result.data);
-                   var changes = result.changes;
+                   let changes = result.changes;
                    if (changes === undefined || changes === '') {
                        changes = gettext("No changes");
                        changeitem.setHidden(true);
@@ -85,15 +85,15 @@ Ext.define('Proxmox.node.NetworkView', {
            });
        };
 
-       var run_editor = function() {
-           var grid = me.down('gridpanel');
-           var sm = grid.getSelectionModel();
-           var rec = sm.getSelection()[0];
+       let run_editor = function() {
+           let grid = me.down('gridpanel');
+           let sm = grid.getSelectionModel();
+           let rec = sm.getSelection()[0];
            if (!rec) {
                return;
            }
 
-           var win = Ext.create('Proxmox.node.NetworkEdit', {
+           let win = Ext.create('Proxmox.node.NetworkEdit', {
                nodename: me.nodename,
                iface: rec.data.iface,
                iftype: rec.data.type,
@@ -102,24 +102,24 @@ Ext.define('Proxmox.node.NetworkView', {
            win.on('destroy', reload);
        };
 
-       var edit_btn = new Ext.Button({
+       let edit_btn = new Ext.Button({
            text: gettext('Edit'),
            disabled: true,
            handler: run_editor,
        });
 
-       var del_btn = new Ext.Button({
+       let del_btn = new Ext.Button({
            text: gettext('Remove'),
            disabled: true,
            handler: function() {
-               var grid = me.down('gridpanel');
-               var sm = grid.getSelectionModel();
-               var rec = sm.getSelection()[0];
+               let grid = me.down('gridpanel');
+               let sm = grid.getSelectionModel();
+               let rec = sm.getSelection()[0];
                if (!rec) {
                    return;
                }
 
-               var iface = rec.data.iface;
+               let iface = rec.data.iface;
 
                Proxmox.Utils.API2Request({
                    url: baseUrl + '/' + iface,
@@ -135,7 +135,7 @@ Ext.define('Proxmox.node.NetworkView', {
            },
        });
 
-       var apply_btn = Ext.create('Proxmox.button.Button', {
+       let apply_btn = Ext.create('Proxmox.button.Button', {
            text: gettext('Apply Configuration'),
            itemId: 'apply',
            disabled: true,
@@ -147,9 +147,9 @@ Ext.define('Proxmox.node.NetworkView', {
                    method: 'PUT',
                    waitMsgTarget: me,
                    success: function(response, opts) {
-                       var upid = response.result.data;
+                       let upid = response.result.data;
 
-                       var win = Ext.create('Proxmox.window.TaskProgress', {
+                       let win = Ext.create('Proxmox.window.TaskProgress', {
                            taskDone: reload,
                            upid: upid,
                        });
@@ -162,16 +162,16 @@ Ext.define('Proxmox.node.NetworkView', {
            },
        });
 
-       var set_button_status = function() {
-           var grid = me.down('gridpanel');
-           var sm = grid.getSelectionModel();
-           var rec = sm.getSelection()[0];
+       let set_button_status = function() {
+           let grid = me.down('gridpanel');
+           let sm = grid.getSelectionModel();
+           let rec = sm.getSelection()[0];
 
            edit_btn.setDisabled(!rec);
            del_btn.setDisabled(!rec);
        };
 
-       var render_ports = function(value, metaData, record) {
+       let render_ports = function(value, metaData, record) {
            if (value === 'bridge') {
                return record.data.bridge_ports;
            } else if (value === 'bond') {
@@ -181,10 +181,11 @@ Ext.define('Proxmox.node.NetworkView', {
            } else if (value === 'OVSBond') {
                return record.data.ovs_bonds;
            }
+           return '';
        };
 
-       var find_next_iface_id = function(prefix) {
-           var next;
+       let find_next_iface_id = function(prefix) {
+           let next;
            for (next = 0; next <= 9999; next++) {
                if (!store.getById(prefix + next.toString())) {
                    break;
@@ -193,13 +194,13 @@ Ext.define('Proxmox.node.NetworkView', {
            return prefix + next.toString();
        };
 
-       var menu_items = [];
+       let menu_items = [];
 
        if (me.types.indexOf('bridge') !== -1) {
            menu_items.push({
                text: Proxmox.Utils.render_network_iface_type('bridge'),
                handler: function() {
-                   var win = Ext.create('Proxmox.node.NetworkEdit', {
+                   let win = Ext.create('Proxmox.node.NetworkEdit', {
                        nodename: me.nodename,
                        iftype: 'bridge',
                        iface_default: find_next_iface_id('vmbr'),
@@ -215,7 +216,7 @@ Ext.define('Proxmox.node.NetworkView', {
            menu_items.push({
                text: Proxmox.Utils.render_network_iface_type('bond'),
                handler: function() {
-                   var win = Ext.create('Proxmox.node.NetworkEdit', {
+                   let win = Ext.create('Proxmox.node.NetworkEdit', {
                        nodename: me.nodename,
                        iftype: 'bond',
                        iface_default: find_next_iface_id('bond'),
@@ -231,7 +232,7 @@ Ext.define('Proxmox.node.NetworkView', {
            menu_items.push({
                text: Proxmox.Utils.render_network_iface_type('vlan'),
                handler: function() {
-                   var win = Ext.create('Proxmox.node.NetworkEdit', {
+                   let win = Ext.create('Proxmox.node.NetworkEdit', {
                        nodename: me.nodename,
                        iftype: 'vlan',
                        iface_default: 'interfaceX.1',
@@ -252,7 +253,7 @@ Ext.define('Proxmox.node.NetworkView', {
                {
                    text: Proxmox.Utils.render_network_iface_type('OVSBridge'),
                    handler: function() {
-                       var win = Ext.create('Proxmox.node.NetworkEdit', {
+                       let win = Ext.create('Proxmox.node.NetworkEdit', {
                            nodename: me.nodename,
                            iftype: 'OVSBridge',
                            iface_default: find_next_iface_id('vmbr'),
@@ -264,7 +265,7 @@ Ext.define('Proxmox.node.NetworkView', {
                {
                    text: Proxmox.Utils.render_network_iface_type('OVSBond'),
                    handler: function() {
-                       var win = Ext.create('Proxmox.node.NetworkEdit', {
+                       let win = Ext.create('Proxmox.node.NetworkEdit', {
                            nodename: me.nodename,
                            iftype: 'OVSBond',
                            iface_default: find_next_iface_id('bond'),
@@ -276,7 +277,7 @@ Ext.define('Proxmox.node.NetworkView', {
                {
                    text: Proxmox.Utils.render_network_iface_type('OVSIntPort'),
                    handler: function() {
-                       var win = Ext.create('Proxmox.node.NetworkEdit', {
+                       let win = Ext.create('Proxmox.node.NetworkEdit', {
                            nodename: me.nodename,
                            iftype: 'OVSIntPort',
                        });
@@ -287,9 +288,9 @@ Ext.define('Proxmox.node.NetworkView', {
            );
        }
 
-       var renderer_generator = function(fieldname) {
+       let renderer_generator = function(fieldname) {
            return function(val, metaData, rec) {
-               var tmp = [];
+               let tmp = [];
                if (rec.data[fieldname]) {
                    tmp.push(rec.data[fieldname]);
                }
index 416edf722d6a26d95ae812973428838c2a498a57..88026a44b57f7af629a7f645a7eb0baccf8ab213 100644 (file)
@@ -12,13 +12,13 @@ Ext.define('Proxmox.node.ServiceView', {
     startOnlyServices: {},
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        if (!me.nodename) {
            throw "no node name specified";
        }
 
-       var rstore = Ext.create('Proxmox.data.UpdateStore', {
+       let rstore = Ext.create('Proxmox.data.UpdateStore', {
            interval: 1000,
            storeid: 'proxmox-services' + me.nodename,
            model: 'proxmox-services',
@@ -28,7 +28,7 @@ Ext.define('Proxmox.node.ServiceView', {
            },
        });
 
-       var store = Ext.create('Proxmox.data.DiffStore', {
+       let store = Ext.create('Proxmox.data.DiffStore', {
            rstore: rstore,
            sortAfterUpdate: true,
            sorters: [
@@ -39,10 +39,10 @@ Ext.define('Proxmox.node.ServiceView', {
            ],
        });
 
-       var view_service_log = function() {
-           var sm = me.getSelectionModel();
-           var rec = sm.getSelection()[0];
-           var win = Ext.create('Ext.window.Window', {
+       let view_service_log = function() {
+           let sm = me.getSelectionModel();
+           let rec = sm.getSelection()[0];
+           let win = Ext.create('Ext.window.Window', {
                title: gettext('Syslog') + ': ' + rec.data.service,
                modal: true,
                width: 800,
@@ -58,9 +58,9 @@ Ext.define('Proxmox.node.ServiceView', {
            win.show();
        };
 
-       var service_cmd = function(cmd) {
-           var sm = me.getSelectionModel();
-           var rec = sm.getSelection()[0];
+       let service_cmd = function(cmd) {
+           let sm = me.getSelectionModel();
+           let rec = sm.getSelection()[0];
            Proxmox.Utils.API2Request({
                url: "/nodes/" + me.nodename + "/services/" + rec.data.service + "/" + cmd,
                method: 'POST',
@@ -70,9 +70,9 @@ Ext.define('Proxmox.node.ServiceView', {
                },
                success: function(response, opts) {
                    rstore.startUpdate();
-                   var upid = response.result.data;
+                   let upid = response.result.data;
 
-                   var win = Ext.create('Proxmox.window.TaskProgress', {
+                   let win = Ext.create('Proxmox.window.TaskProgress', {
                        upid: upid,
                    });
                    win.show();
@@ -80,7 +80,7 @@ Ext.define('Proxmox.node.ServiceView', {
            });
        };
 
-       var start_btn = new Ext.Button({
+       let start_btn = new Ext.Button({
            text: gettext('Start'),
            disabled: true,
            handler: function() {
@@ -88,7 +88,7 @@ Ext.define('Proxmox.node.ServiceView', {
            },
        });
 
-       var stop_btn = new Ext.Button({
+       let stop_btn = new Ext.Button({
            text: gettext('Stop'),
            disabled: true,
            handler: function() {
@@ -96,7 +96,7 @@ Ext.define('Proxmox.node.ServiceView', {
            },
        });
 
-       var restart_btn = new Ext.Button({
+       let restart_btn = new Ext.Button({
            text: gettext('Restart'),
            disabled: true,
            handler: function() {
@@ -104,15 +104,15 @@ Ext.define('Proxmox.node.ServiceView', {
            },
        });
 
-       var syslog_btn = new Ext.Button({
+       let syslog_btn = new Ext.Button({
            text: gettext('Syslog'),
            disabled: true,
            handler: view_service_log,
        });
 
-       var set_button_status = function() {
-           var sm = me.getSelectionModel();
-           var rec = sm.getSelection()[0];
+       let set_button_status = function() {
+           let sm = me.getSelectionModel();
+           let rec = sm.getSelection()[0];
 
            if (!rec) {
                start_btn.disable();
@@ -121,29 +121,25 @@ Ext.define('Proxmox.node.ServiceView', {
                syslog_btn.disable();
                return;
            }
-           var service = rec.data.service;
-           var state = rec.data.state;
+           let service = rec.data.service;
+           let state = rec.data.state;
 
            syslog_btn.enable();
 
-           if (me.startOnlyServices[service]) {
-               if (state == 'running') {
-                   start_btn.disable();
-                   restart_btn.enable();
-               } else {
-                   start_btn.enable();
-                   restart_btn.disable();
-               }
-               stop_btn.disable();
-           } else if (state == 'running') {
-                   start_btn.disable();
-                   restart_btn.enable();
+           if (state === 'running') {
+               start_btn.disable();
+               restart_btn.enable();
+           } else {
+               start_btn.enable();
+               restart_btn.disable();
+           }
+           if (!me.startOnlyServices[service]) {
+               if (state === 'running') {
                    stop_btn.enable();
                } else {
-                   start_btn.enable();
-                   restart_btn.disable();
                    stop_btn.disable();
                }
+           }
        };
 
        me.mon(store, 'refresh', set_button_status);
index 43bbfe90b54e535f72748faee831ffca89129cea..613a2f589804654f1655d73f27b6656d5626e211 100644 (file)
@@ -26,7 +26,7 @@ Ext.define('Proxmox.node.TimeEdit', {
     },
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        if (!me.nodename) {
            throw "no node name specified";
index 0b09483b790deccf585dc08439ba1c7939a19f49..9033d131ae67ba0dd8b075cf1d64dbb3f533163c 100644 (file)
@@ -3,20 +3,20 @@ Ext.define('Proxmox.node.TimeView', {
     alias: ['widget.proxmoxNodeTimeView'],
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        if (!me.nodename) {
            throw "no node name specified";
        }
 
-       var tzoffset = new Date().getTimezoneOffset()*60000;
-       var renderlocaltime = function(value) {
-           var servertime = new Date(value * 1000 + tzoffset);
+       let tzoffset = new Date().getTimezoneOffset()*60000;
+       let renderlocaltime = function(value) {
+           let servertime = new Date((value * 1000) + tzoffset);
            return Ext.Date.format(servertime, 'Y-m-d H:i:s');
        };
 
-       var run_editor = function() {
-           var win = Ext.create('Proxmox.node.TimeEdit', {
+       let run_editor = function() {
+           let win = Ext.create('Proxmox.node.TimeEdit', {
                nodename: me.nodename,
            });
            win.show();
index b5c15392f87317301773ff01e21d606be7d12d20..6cd6b602a54bbea4e1957327b0558101a40bea19 100644 (file)
@@ -61,9 +61,9 @@ Ext.define('Proxmox.panel.GaugeWidget', {
 
 
     updateValue: function(value, text) {
-       var me = this;
-       var color = me.defaultColor;
-       var attr = {};
+       let me = this;
+       let color = me.defaultColor;
+       let attr = {};
 
        if (value >= me.criticalThreshold) {
            color = me.criticalColor;
@@ -88,7 +88,7 @@ Ext.define('Proxmox.panel.GaugeWidget', {
     },
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
        me.callParent();
 
index cac9574207a88d76ac6a64cd15d30c98aa202016..0ac5e4873ec05de2bf219c86ba63cedb5a2873a0 100644 (file)
@@ -33,13 +33,13 @@ Ext.define('Proxmox.panel.InputPanel', {
     },
 
     getValues: function(dirtyOnly) {
-       var me = this;
+       let me = this;
 
        if (Ext.isFunction(me.onGetValues)) {
            dirtyOnly = false;
        }
 
-       var values = {};
+       let values = {};
 
        Ext.Array.each(me.query('[isFormField]'), function(field) {
            if (!dirtyOnly || field.isDirty()) {
@@ -51,17 +51,17 @@ Ext.define('Proxmox.panel.InputPanel', {
     },
 
     setAdvancedVisible: function(visible) {
-       var me = this;
-       var advItems = me.getComponent('advancedContainer');
+       let me = this;
+       let advItems = me.getComponent('advancedContainer');
        if (advItems) {
            advItems.setVisible(visible);
        }
     },
 
     setValues: function(values) {
-       var me = this;
+       let me = this;
 
-       var form = me.up('form');
+       let form = me.up('form');
 
         Ext.iterate(values, function(fieldId, val) {
            let fields = me.query('[isFormField][name=' + fieldId + ']');
@@ -77,9 +77,9 @@ Ext.define('Proxmox.panel.InputPanel', {
     },
 
     initComponent: function() {
-       var me = this;
+       let me = this;
 
-       var items;
+       let items;
 
        if (me.items) {
            me.columns = 1;
@@ -155,7 +155,7 @@ Ext.define('Proxmox.panel.InputPanel', {
            throw "unsupported config";
        }
 
-       var advItems;
+       let advItems;
        if (me.advancedItems) {
            advItems = [
                {
index a8f2fc38be80b841f0b1393f881e6497cf1eaf93..b81cc45c9d4114350f3672f30840ad4b813a19dc 100644 (file)
@@ -16,10 +16,10 @@ Ext.define('Proxmox.panel.JournalView', {
        xclass: 'Ext.app.ViewController',
 
        updateParams: function() {
-           var me = this;
-           var viewModel = me.getViewModel();
-           var since = viewModel.get('since');
-           var until = viewModel.get('until');
+           let me = this;
+           let viewModel = me.getViewModel();
+           let since = viewModel.get('since');
+           let until = viewModel.get('until');
 
            since.setHours(0, 0, 0, 0);
            until.setHours(0, 0, 0, 0);
@@ -34,48 +34,48 @@ Ext.define('Proxmox.panel.JournalView', {
        },
 
        scrollPosBottom: function() {
-           var view = this.getView();
-           var pos = view.getScrollY();
-           var maxPos = view.getScrollable().getMaxPosition().y;
+           let view = this.getView();
+           let pos = view.getScrollY();
+           let maxPos = view.getScrollable().getMaxPosition().y;
            return maxPos - pos;
        },
 
        scrollPosTop: function() {
-           var view = this.getView();
+           let view = this.getView();
            return view.getScrollY();
        },
 
        updateScroll: function(livemode, num, scrollPos, scrollPosTop) {
-           var me = this;
-           var view = me.getView();
+           let me = this;
+           let view = me.getView();
 
            if (!livemode) {
                setTimeout(function() { view.scrollTo(0, 0); }, 10);
            } else if (view.scrollToEnd && scrollPos <= 0) {
                setTimeout(function() { view.scrollTo(0, Infinity); }, 10);
-           } else if (!view.scrollToEnd && scrollPosTop < 20*view.lineHeight) {
-               setTimeout(function() { view.scrollTo(0, num*view.lineHeight + scrollPosTop); }, 10);
+           } else if (!view.scrollToEnd && scrollPosTop < 20 * view.lineHeight) {
+               setTimeout(function() { view.scrollTo(0, (num * view.lineHeight) + scrollPosTop); }, 10);
            }
        },
 
        updateView: function(lines, livemode, top) {
-           var me = this;
-           var view = me.getView();
-           var viewmodel = me.getViewModel();
+           let me = this;
+           let view = me.getView();
+           let viewmodel = me.getViewModel();
            if (!viewmodel || viewmodel.get('livemode') !== livemode) {
                return; // we switched mode, do not update the content
            }
-           var contentEl = me.lookup('content');
+           let contentEl = me.lookup('content');
 
            // save old scrollpositions
-           var scrollPos = me.scrollPosBottom();
-           var scrollPosTop = me.scrollPosTop();
+           let scrollPos = me.scrollPosBottom();
+           let scrollPosTop = me.scrollPosTop();
 
-           var newend = lines.shift();
-           var newstart = lines.pop();
+           let newend = lines.shift();
+           let newstart = lines.pop();
 
-           var num = lines.length;
-           var text = lines.map(Ext.htmlEncode).join('<br>');
+           let num = lines.length;
+           let text = lines.map(Ext.htmlEncode).join('<br>');
 
            if (!livemode) {
                if (num) {
@@ -107,14 +107,14 @@ Ext.define('Proxmox.panel.JournalView', {
        },
 
        doLoad: function(livemode, top, since, until) {
-           var me = this;
+           let me = this;
            if (me.running) {
                me.requested = true;
                return;
            }
            me.running = true;
-           var view = me.getView();
-           var params = {
+           let view = me.getView();
+           let params = {
                lastentries: view.numEntries || 500,
            };
            if (livemode) {
@@ -138,7 +138,7 @@ Ext.define('Proxmox.panel.JournalView', {
                method: 'GET',
                success: function(response) {
                    Proxmox.Utils.setErrorMask(me, false);
-                   var lines = response.result.data;
+                   let lines = response.result.data;
                    me.updateView(lines, livemode, top);
                    me.running = false;
                    if (me.requested) {
@@ -147,7 +147,7 @@ Ext.define('Proxmox.panel.JournalView', {
                    }
                },
                failure: function(response) {
-                   var msg = response.htmlStatus;
+                   let msg = response.htmlStatus;
                    Proxmox.Utils.setErrorMask(me, msg);
                    me.running = false;
                    if (me.requested) {
@@ -159,10 +159,10 @@ Ext.define('Proxmox.panel.JournalView', {
        },
 
        onScroll: function(x, y) {
-           var me = this;
-           var view = me.getView();
-           var viewmodel = me.getViewModel();
-           var livemode = viewmodel.get('livemode');
+           let me = this;
+           let view = me.getView();
+           let viewmodel = me.getViewModel();
+           let livemode = viewmodel.get('livemode');
            if (!livemode) {
                return;
            }
@@ -176,15 +176,15 @@ Ext.define('Proxmox.panel.JournalView', {
        },
 
        init: function(view) {
-           var me = this;
+           let me = this;
 
            if (!view.url) {
                throw "no url specified";
            }
 
-           var viewmodel = me.getViewModel();
-           var viewModel = this.getViewModel();
-           var since = new Date();
+           let viewmodel = me.getViewModel();
+           let viewModel = this.getViewModel();
+           let since = new Date();
            since.setDate(since.getDate() - 3);
            viewModel.set('until', new Date());
            viewModel.set('since', since);
@@ -208,8 +208,8 @@ Ext.define('Proxmox.panel.JournalView', {
        },
 
        onLiveMode: function() {
-           var me = this;
-           var view = me.getView();
+           let me = this;
+           let view = me.getView();
            delete view.startcursor;
            delete view.endcursor;
            delete view.content;
@@ -219,14 +219,14 @@ Ext.define('Proxmox.panel.JournalView', {
        },
 
        onTimespan: function() {
-           var me = this;
+           let me = this;
            me.getViewModel().set('livemode', false);
            me.updateView([], false);
        },
     },
 
     onDestroy: function() {
-       var me = this;
+       let me = this;
        me.loadTask.cancel();
        Ext.TaskManager.stop(me.task);
        delete me.content;
@@ -234,7 +234,7 @@ Ext.define('Proxmox.panel.JournalView', {
 
     // for user to initiate a load from outside
     requestUpdate: function() {
-       var me = this;
+       let me = this;
        me.loadTask.delay(200);
     },
 
@@ -257,7 +257,7 @@ Ext.define('Proxmox.panel.JournalView', {
            // the panel have a 'scroll' event'
            scroll: {
                fn: function(scroller, x, y) {
-                   var controller = this.component.getController();
+                   let controller = this.component.getController();
                    if (controller) { // on destroy, controller can be gone
                        controller.onScroll(x, y);
                    }
index 98c8f2b336cc1b07d7b44b181298007a581005ac..1ce83bc0f30c2301bc701e73b156f587a9ad23e1 100644 (file)
@@ -20,10 +20,10 @@ Ext.define('Proxmox.panel.LogView', {
        xclass: 'Ext.app.ViewController',
 
        updateParams: function() {
-           var me = this;
-           var viewModel = me.getViewModel();
-           var since = viewModel.get('since');
-           var until = viewModel.get('until');
+           let me = this;
+           let viewModel = me.getViewModel();
+           let since = viewModel.get('since');
+           let until = viewModel.get('until');
            if (viewModel.get('hide_timespan')) {
                return;
            }
@@ -39,18 +39,18 @@ Ext.define('Proxmox.panel.LogView', {
        },
 
        scrollPosBottom: function() {
-           var view = this.getView();
-           var pos = view.getScrollY();
-           var maxPos = view.getScrollable().getMaxPosition().y;
+           let view = this.getView();
+           let pos = view.getScrollY();
+           let maxPos = view.getScrollable().getMaxPosition().y;
            return maxPos - pos;
        },
 
        updateView: function(text, first, total) {
-           var me = this;
-           var view = me.getView();
-           var viewModel = me.getViewModel();
-           var content = me.lookup('content');
-           var data = viewModel.get('data');
+           let me = this;
+           let view = me.getView();
+           let viewModel = me.getViewModel();
+           let content = me.lookup('content');
+           let data = viewModel.get('data');
 
            if (first === data.first && total === data.total && text.length === data.textlen) {
                return; // same content, skip setting and scrolling
@@ -61,7 +61,7 @@ Ext.define('Proxmox.panel.LogView', {
                textlen: text.length,
            });
 
-           var scrollPos = me.scrollPosBottom();
+           let scrollPos = me.scrollPosBottom();
 
            content.update(text);
 
@@ -72,23 +72,23 @@ Ext.define('Proxmox.panel.LogView', {
        },
 
        doLoad: function() {
-           var me = this;
+           let me = this;
            if (me.running) {
                me.requested = true;
                return;
            }
            me.running = true;
-           var view = me.getView();
-           var viewModel = me.getViewModel();
+           let view = me.getView();
+           let viewModel = me.getViewModel();
            Proxmox.Utils.API2Request({
                url: me.getView().url,
                params: viewModel.get('params'),
                method: 'GET',
                success: function(response) {
                    Proxmox.Utils.setErrorMask(me, false);
-                   var total = response.result.total;
-                   var lines = new Array();
-                   var first = Infinity;
+                   let total = response.result.total;
+                   let lines = [];
+                   let first = Infinity;
 
                    Ext.Array.each(response.result.data, function(line) {
                        if (first > line.n) {
@@ -109,7 +109,7 @@ Ext.define('Proxmox.panel.LogView', {
                    if (view.failCallback) {
                        view.failCallback(response);
                    } else {
-                       var msg = response.htmlStatus;
+                       let msg = response.htmlStatus;
                        Proxmox.Utils.setErrorMask(me, msg);
                    }
                    me.running = false;
@@ -122,35 +122,35 @@ Ext.define('Proxmox.panel.LogView', {
        },
 
        onScroll: function(x, y) {
-           var me = this;
-           var view = me.getView();
-           var viewModel = me.getViewModel();
+           let me = this;
+           let view = me.getView();
+           let viewModel = me.getViewModel();
 
-           var lineHeight = view.lineHeight;
-           var line = view.getScrollY()/lineHeight;
-           var start = viewModel.get('params.start');
-           var limit = viewModel.get('params.limit');
-           var viewLines = view.getHeight()/lineHeight;
+           let lineHeight = view.lineHeight;
+           let line = view.getScrollY()/lineHeight;
+           let start = viewModel.get('params.start');
+           let limit = viewModel.get('params.limit');
+           let viewLines = view.getHeight()/lineHeight;
 
-           var viewStart = Math.max(parseInt(line - 1 - view.viewBuffer, 10), 0);
-           var viewEnd = parseInt(line + viewLines + 1 + view.viewBuffer, 10);
+           let viewStart = Math.max(parseInt(line - 1 - view.viewBuffer, 10), 0);
+           let viewEnd = parseInt(line + viewLines + 1 + view.viewBuffer, 10);
 
            if (viewStart < start || viewEnd > start+limit) {
                viewModel.set('params.start',
-                   Math.max(parseInt(line - limit/2 + 10, 10), 0));
+                   Math.max(parseInt(line - (limit / 2) + 10, 10), 0));
                view.loadTask.delay(200);
            }
        },
 
        init: function(view) {
-           var me = this;
+           let me = this;
 
            if (!view.url) {
                throw "no url specified";
            }
 
-           var viewModel = this.getViewModel();
-           var since = new Date();
+           let viewModel = this.getViewModel();
+           let since = new Date();
            since.setDate(since.getDate() - 3);
            viewModel.set('until', new Date());
            viewModel.set('since', since);
@@ -177,14 +177,14 @@ Ext.define('Proxmox.panel.LogView', {
     },
 
     onDestroy: function() {
-       var me = this;
+       let me = this;
        me.loadTask.cancel();
        Ext.TaskManager.stop(me.task);
     },
 
     // for user to initiate a load from outside
     requestUpdate: function() {
-       var me = this;
+       let me = this;
        me.loadTask.delay(200);
     },
 
@@ -216,7 +216,7 @@ Ext.define('Proxmox.panel.LogView', {
            // the panel have a 'scroll' event'
            scroll: {
                fn: function(scroller, x, y) {
-                   var controller = this.component.getController();
+                   let controller = this.component.getController();
                    if (controller) { // on destroy, controller can be gone
                        controller.onScroll(x, y);
                    }
index 718b32b9b23502dc56611f48a424ee4b6a03049a..b4f89a420ca1b5f45dee61ccdcc58d43aa95491f 100644 (file)
@@ -8,8 +8,8 @@ Ext.define('Proxmox.widget.RRDChart', {
        xclass: 'Ext.app.ViewController',
 
        convertToUnits: function(value) {
-           var units = ['', 'k', 'M', 'G', 'T', 'P'];
-           var si = 0;
+           let units = ['', 'k', 'M', 'G', 'T', 'P'];
+           let si = 0;
            let format = '0.##';
            if (value < 0.1) format += '#';
            while (value >= 1000 && si < units.length -1) {
@@ -27,26 +27,25 @@ Ext.define('Proxmox.widget.RRDChart', {
        },
 
        leftAxisRenderer: function(axis, label, layoutContext) {
-           var me = this;
+           let me = this;
            return me.convertToUnits(label);
        },
 
        onSeriesTooltipRender: function(tooltip, record, item) {
-           var me = this.getView();
+           let view = this.getView();
 
-           var suffix = '';
-
-           if (me.unit === 'percent') {
+           let suffix = '';
+           if (view.unit === 'percent') {
                suffix = '%';
-           } else if (me.unit === 'bytes') {
+           } else if (view.unit === 'bytes') {
                suffix = 'B';
-           } else if (me.unit === 'bytespersecond') {
+           } else if (view.unit === 'bytespersecond') {
                suffix = 'B/s';
            }
 
-           var prefix = item.field;
-           if (me.fieldTitles && me.fieldTitles[me.fields.indexOf(item.field)]) {
-               prefix = me.fieldTitles[me.fields.indexOf(item.field)];
+           let prefix = item.field;
+           if (view.fieldTitles && view.fieldTitles[view.fields.indexOf(item.field)]) {
+               prefix = view.fieldTitles[view.fields.indexOf(item.field)];
            }
            let v = this.convertToUnits(record.get(item.field));
            let t = new Date(record.get('time'));
@@ -55,8 +54,8 @@ Ext.define('Proxmox.widget.RRDChart', {
 
        onAfterAnimation: function(chart, eopts) {
            // if the undo button is disabled, disable our tool
-           var ourUndoZoomButton = chart.header.tools[0];
-           var undoButton = chart.interactions[0].getUndoButton();
+           let ourUndoZoomButton = chart.header.tools[0];
+           let undoButton = chart.interactions[0].getUndoButton();
            ourUndoZoomButton.setDisabled(undoButton.isDisabled());
        },
     },
@@ -92,8 +91,7 @@ Ext.define('Proxmox.widget.RRDChart', {
     },
 
     initComponent: function() {
-       var me = this;
-       var series = {};
+       let me = this;
 
        if (!me.store) {
            throw "cannot work without store";
@@ -106,7 +104,7 @@ Ext.define('Proxmox.widget.RRDChart', {
        me.callParent();
 
        // add correct label for left axis
-       var axisTitle = "";
+       let axisTitle = "";
        if (me.unit === 'percent') {
            axisTitle = "%";
        } else if (me.unit === 'bytes') {
@@ -134,7 +132,7 @@ Ext.define('Proxmox.widget.RRDChart', {
                disabled: true,
                tooltip: gettext('Undo Zoom'),
                handler: function() {
-                   var undoButton = me.interactions[0].getUndoButton();
+                   let undoButton = me.interactions[0].getUndoButton();
                    if (undoButton.handler) {
                        undoButton.handler();
                    }
@@ -144,7 +142,7 @@ Ext.define('Proxmox.widget.RRDChart', {
 
        // add a series for each field we get
        me.fields.forEach(function(item, index) {
-           var title = item;
+           let title = item;
            if (me.fieldTitles && me.fieldTitles[index]) {
                title = me.fieldTitles[index];
            }
index e258e49271bf1c1d5a171bb620adc56abdb5ea6b..c165141129f7e725d18a04a17a0b02ed8f683be8 100644 (file)
@@ -1,5 +1,4 @@
 // fixme: how can we avoid those lint errors?
-/*jslint confusion: true */
 Ext.define('Proxmox.window.Edit', {
     extend: 'Ext.window.Window',
     alias: 'widget.proxmoxWindowEdit',
index 96bf3e7e72bd48d4bb718976c4fe4571db16f6be..2f3102361aea2abdd190dc82e67fb5023a182f1f 100644 (file)
@@ -5,15 +5,15 @@ Ext.define('Proxmox.window.TaskProgress', {
     taskDone: Ext.emptyFn,
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
        if (!me.upid) {
            throw "no task specified";
        }
 
-       var task = Proxmox.Utils.parse_task_upid(me.upid);
+       let task = Proxmox.Utils.parse_task_upid(me.upid);
 
-       var statstore = Ext.create('Proxmox.data.ObjectStore', {
+       let statstore = Ext.create('Proxmox.data.ObjectStore', {
             url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/status",
            interval: 1000,
            rows: {
@@ -24,21 +24,21 @@ Ext.define('Proxmox.window.TaskProgress', {
 
        me.on('destroy', statstore.stopUpdate);
 
-       var getObjectValue = function(key, defaultValue) {
-           var rec = statstore.getById(key);
+       let getObjectValue = function(key, defaultValue) {
+           let rec = statstore.getById(key);
            if (rec) {
                return rec.data.value;
            }
            return defaultValue;
        };
 
-       var pbar = Ext.create('Ext.ProgressBar', { text: 'running...' });
+       let pbar = Ext.create('Ext.ProgressBar', { text: 'running...' });
 
        me.mon(statstore, 'load', function() {
-           var status = getObjectValue('status');
+           let status = getObjectValue('status');
            if (status === 'stopped') {
-               var exitstatus = getObjectValue('exitstatus');
-               if (exitstatus == 'OK') {
+               let exitstatus = getObjectValue('exitstatus');
+               if (exitstatus === 'OK') {
                    pbar.reset();
                    pbar.updateText("Done!");
                    Ext.Function.defer(me.close, 1000, me);
@@ -46,11 +46,11 @@ Ext.define('Proxmox.window.TaskProgress', {
                    me.close();
                    Ext.Msg.alert('Task failed', exitstatus);
                }
-               me.taskDone(exitstatus == 'OK');
+               me.taskDone(exitstatus === 'OK');
            }
        });
 
-       var descr = Proxmox.Utils.format_task_description(task.type, task.id);
+       let descr = Proxmox.Utils.format_task_description(task.type, task.id);
 
        Ext.apply(me, {
            title: gettext('Task') + ': ' + descr,
@@ -63,7 +63,7 @@ Ext.define('Proxmox.window.TaskProgress', {
                {
                    text: gettext('Details'),
                    handler: function() {
-                       var win = Ext.create('Proxmox.window.TaskViewer', {
+                       let win = Ext.create('Proxmox.window.TaskViewer', {
                            taskDone: me.taskDone,
                            upid: me.upid,
                        });
@@ -83,7 +83,6 @@ Ext.define('Proxmox.window.TaskProgress', {
 });
 
 // fixme: how can we avoid those lint errors?
-/*jslint confusion: true */
 
 Ext.define('Proxmox.window.TaskViewer', {
     extend: 'Ext.window.Window',
@@ -94,28 +93,29 @@ Ext.define('Proxmox.window.TaskViewer', {
     taskDone: Ext.emptyFn,
 
     initComponent: function() {
-        var me = this;
+        let me = this;
 
        if (!me.upid) {
            throw "no task specified";
        }
 
-       var task = Proxmox.Utils.parse_task_upid(me.upid);
+       let task = Proxmox.Utils.parse_task_upid(me.upid);
 
-       var statgrid;
+       let statgrid;
 
-       var rows = {
+       let rows = {
            status: {
                header: gettext('Status'),
                defaultValue: 'unknown',
                renderer: function(value) {
-                   if (value != 'stopped') {
+                   if (value !== 'stopped') {
                        return value;
                    }
-                   var es = statgrid.getObjectValue('exitstatus');
+                   let es = statgrid.getObjectValue('exitstatus');
                    if (es) {
                        return value + ': ' + es;
                    }
+                   return 'unknown';
                },
            },
            exitstatus: {
@@ -152,7 +152,7 @@ Ext.define('Proxmox.window.TaskViewer', {
            },
        };
 
-       var statstore = Ext.create('Proxmox.data.ObjectStore', {
+       let statstore = Ext.create('Proxmox.data.ObjectStore', {
             url: "/api2/json/nodes/" + task.node + "/tasks/" + me.upid + "/status",
            interval: 1000,
            rows: rows,
@@ -160,7 +160,7 @@ Ext.define('Proxmox.window.TaskViewer', {
 
        me.on('destroy', statstore.stopUpdate);
 
-       var stop_task = function() {
+       let stop_task = function() {
            Proxmox.Utils.API2Request({
                url: "/nodes/" + task.node + "/tasks/" + me.upid,
                waitMsgTarget: me,
@@ -171,13 +171,13 @@ Ext.define('Proxmox.window.TaskViewer', {
            });
        };
 
-       var stop_btn1 = new Ext.Button({
+       let stop_btn1 = new Ext.Button({
            text: gettext('Stop'),
            disabled: true,
            handler: stop_task,
        });
 
-       var stop_btn2 = new Ext.Button({
+       let stop_btn2 = new Ext.Button({
            text: gettext('Stop'),
            disabled: true,
            handler: stop_task,
@@ -192,7 +192,7 @@ Ext.define('Proxmox.window.TaskViewer', {
            border: false,
        });
 
-       var logView = Ext.create('Proxmox.panel.LogView', {
+       let logView = Ext.create('Proxmox.panel.LogView', {
            title: gettext('Output'),
            tbar: [stop_btn2],
            border: false,
@@ -200,13 +200,13 @@ Ext.define('Proxmox.window.TaskViewer', {
        });
 
        me.mon(statstore, 'load', function() {
-           var status = statgrid.getObjectValue('status');
+           let status = statgrid.getObjectValue('status');
 
            if (status === 'stopped') {
                logView.scrollToEnd = false;
                logView.requestUpdate();
                statstore.stopUpdate();
-               me.taskDone(statgrid.getObjectValue('exitstatus') == 'OK');
+               me.taskDone(statgrid.getObjectValue('exitstatus') === 'OK');
            }
 
            stop_btn1.setDisabled(status !== 'running');