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);
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;
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;
}
}
},
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);
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) {
// 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",
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;
}
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;
},
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;
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();
}
});
// 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) {
override: 'Ext.dom.UnderlayPool',
checkOut: function() {
- var cache = this.cache,
+ let cache = this.cache,
len = cache.length,
el;
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);
}
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;
},
});
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 {
// 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);
},
// 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
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,
},
initEvents: function() {
- var me = this;
+ let me = this;
me.callParent();
me.iframeEl.on('load', me.onLoad, me);
},
},
getBody: function() {
- var doc = this.getDoc();
+ let doc = this.getDoc();
return doc.body || doc.documentElement;
},
},
getWin: function() {
- var me = this,
+ let me = this,
name = me.frameName,
win = Ext.isIE
? me.iframeEl.dom.contentWindow
},
getFrame: function() {
- var me = this;
+ let me = this;
return me.iframeEl.dom;
},
},
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;
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(),
},
load: function(src) {
- var me = this,
+ let me = this,
text = me.loadMask,
frame = me.getFrame();
// avoid errors when running without development tools
if (!Ext.isDefined(Ext.global.console)) {
- var console = {
+ let console = {
dir: function() {
// do nothing
},
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 + ')';
}
},
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)]);
});
},
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 {
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;
},
// 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;
}
},
extractRequestError: function(result, verbose) {
- var msg = gettext('Successful');
+ let msg = gettext('Successful');
if (!result.success) {
msg = gettext("Unknown error");
// Ext.Ajax.request
API2Request: function(reqOpts) {
- var newopts = Ext.apply({
+ let newopts = Ext.apply({
waitMsg: gettext('Please wait...'),
}, reqOpts);
}
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) {
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);
} 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) {
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 });
},
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;
}
},
render_uptime: function(value) {
- var uptime = value;
+ let uptime = value;
if (uptime === undefined) {
return '';
},
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 + "'";
}
},
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') {
},
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;
}
},
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,
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();
}
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 + ")|" +
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+)?$");
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) {
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;
}
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 {
},
getUrl: function(rec) {
- var me = this;
+ let me = this;
if (me.selModel) {
return me.baseurl + '/' + rec.getId();
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;
/* 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',
},
},
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;
}
// 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);
},
initComponent: function() {
- /*jslint confusion: true */
- var me = this;
+ let me = this;
me.callParent();
},
constructor: function(config) {
- var me = this;
+ let me = this;
config = config || {};
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) {
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;
}
// 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);
}
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);
});
},
constructor: function(config) {
- var me = this;
+ let me = this;
config = config || {};
{
name: 'id',
convert: function(value, record) {
- var info = record.data;
- var text;
+ let info = record.data;
if (value) {
return value;
alias: 'store.proxmoxRRDStore',
setRRDUrl: function(timeframe, cf) {
- var me = this;
+ let me = this;
if (!timeframe) {
timeframe = me.timeframe;
}
cf: 'AVERAGE',
constructor: function(config) {
- var me = this;
+ let me = this;
config = config || {};
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) {
*
* Additional feature: specify allowed properties with default values with 'rows' object
*
- * var rows = {
+ * let rows = {
* memory: {
* required: true,
* defaultValue: 512
rows: undefined,
constructor: function(config) {
- var me = this;
+ let me = this;
Ext.apply(me, config || {});
},
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;
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;
});
}
} 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 = {};
openvswitch: false,
initComponent: function() {
- var me = this;
+ let me = this;
if (me.openvswitch) {
me.comboItems = Proxmox.Utils.bond_mode_array([
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;
// also accept integer 1 as true
setRawValue: function(value) {
- var me = this;
+ let me = this;
if (value === 1) {
me.callParent([true]);
// 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('');
}
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]);
// 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 {
},
getSubmitData: function() {
- var me = this;
+ let me = this;
let data = null;
if (!me.disabled && me.submitValue) {
},
getSubmitValue: function() {
- var me = this;
+ let me = this;
- var value = me.callParent();
+ let value = me.callParent();
if (value !== '') {
return value;
}
// 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,
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,
},
clearLocalFilter: function() {
- var me = this,
+ let me = this,
filter = me.queryFilter;
if (filter) {
},
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;
found = true;
return false; // break
}
+ return true;
});
} else {
found = !!store.findRecord(me.valueField, value);
},
validator: function(value) {
- var me = this;
+ let me = this;
if (!value) {
return true; // handled later by allowEmpty in the getErrors call chain
//
// 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();
}
},
initComponent: function() {
- var me = this;
+ let me = this;
Ext.apply(me, {
queryMode: 'local',
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()) {
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) {
}
}
- 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);
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;
},
},
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);
step: 1,
getSubmitData: function() {
- var me = this,
+ let me = this,
data = null,
val;
if (!me.disabled && me.submitValue && !me.isFileUpload()) {
// overide framework function to implement deleteEmpty behaviour
getSubmitData: function() {
- var me = this,
+ let me = this,
data = null,
val;
if (!me.disabled && me.submitValue) {
},
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);
})) {
}
// 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',
},
setComboItems: function(items) {
- var me = this;
+ let me = this;
me.getStore().setData(items);
},
alias: 'controller.proxmoxNetworkSelectorController',
init: function(view) {
- var me = this;
+ let me = this;
if (!view.nodename) {
throw "missing custom view config: nodename";
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();
},
// 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,
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;
},
getSubmitData: function() {
- var me = this,
+ let me = this,
data = null,
val;
if (!me.disabled && me.submitValue && !me.isFileUpload()) {
},
getSubmitValue: function() {
- var me = this;
+ let me = this;
- var value = this.processRawValue(this.getRawValue());
+ let value = this.processRawValue(this.getRawValue());
if (value !== '') {
return value;
}
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',
monStoreErrors: false,
add_combobox_row: function(name, text, opts) {
- var me = this;
+ let me = this;
opts = opts || {};
me.rows = me.rows || {};
},
add_text_row: function(name, text, opts) {
- var me = this;
+ let me = this;
opts = opts || {};
me.rows = me.rows || {};
},
add_boolean_row: function(name, text, opts) {
- var me = this;
+ let me = this;
opts = opts || {};
me.rows = me.rows || {};
},
add_integer_row: function(name, text, opts) {
- var me = this;
+ let me = this;
opts = opts || {};
me.rows = me.rows || {};
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,
},
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;
}
},
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);
}
}
},
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();
}
},
initComponent: function() {
- var me = this;
+ let me = this;
- var rows = me.rows;
+ let rows = me.rows;
if (!me.rstore) {
if (!me.url) {
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;
}
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;
},
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 {
}
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) {
},
initComponent: function() {
- var me = this;
-
- var rows = me.rows;
+ let me = this;
if (!me.rstore) {
if (!me.url) {
},
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];
}
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];
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;
});
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;
}
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 {
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 {
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;
}
],
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: {
],
});
- 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) +
},
});
- 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',
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();
});
};
- 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',
},
});
- var win = Ext.create('Ext.window.Window', {
+ let win = Ext.create('Ext.window.Window', {
title: gettext('Changelog') + ": " + rec.data.Package,
width: 800,
height: 400,
});
};
- var changelog_btn = new Proxmox.button.Button({
+ let changelog_btn = new Proxmox.button.Button({
text: gettext('Changelog'),
selModel: sm,
disabled: true,
},
});
- 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: {
alias: ['widget.proxmoxNodeDNSEdit'],
initComponent: function() {
- var me = this;
+ let me = this;
if (!me.nodename) {
throw "no node name specified";
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();
xtype: 'proxmoxNodeHostsView',
reload: function() {
- var me = this;
+ let me = this;
me.store.load();
},
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);
disabled: true,
itemId: 'resetbtn',
handler: function() {
- var me = this.up('panel');
- me.down('#hostsfield').reset();
+ let view = this.up('panel');
+ view.down('#hostsfield').reset();
},
},
],
},
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";
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();
});
alias: ['widget.proxmoxNodeNetworkEdit'],
initComponent: function() {
- var me = this;
+ let me = this;
if (!me.nodename) {
throw "no node name specified";
me.isCreate = !me.iface;
- var iface_vtype;
+ let iface_vtype;
if (me.iftype === 'bridge') {
iface_vtype = 'BridgeName';
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 {
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: '',
name: 'comments',
});
- var url;
- var method;
+ let url;
+ let method;
if (me.isCreate) {
url = "/api2/extjs/nodes/" + me.nodename + "/network";
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);
} 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();
});
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',
],
});
- 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) {
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);
});
};
- 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,
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,
},
});
- var apply_btn = Ext.create('Proxmox.button.Button', {
+ let apply_btn = Ext.create('Proxmox.button.Button', {
text: gettext('Apply Configuration'),
itemId: 'apply',
disabled: true,
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,
});
},
});
- 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') {
} 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;
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'),
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'),
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',
{
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'),
{
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'),
{
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',
});
);
}
- 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]);
}
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',
},
});
- var store = Ext.create('Proxmox.data.DiffStore', {
+ let store = Ext.create('Proxmox.data.DiffStore', {
rstore: rstore,
sortAfterUpdate: true,
sorters: [
],
});
- 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,
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',
},
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();
});
};
- var start_btn = new Ext.Button({
+ let start_btn = new Ext.Button({
text: gettext('Start'),
disabled: true,
handler: function() {
},
});
- var stop_btn = new Ext.Button({
+ let stop_btn = new Ext.Button({
text: gettext('Stop'),
disabled: true,
handler: function() {
},
});
- var restart_btn = new Ext.Button({
+ let restart_btn = new Ext.Button({
text: gettext('Restart'),
disabled: true,
handler: function() {
},
});
- 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();
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);
},
initComponent: function() {
- var me = this;
+ let me = this;
if (!me.nodename) {
throw "no node name specified";
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();
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;
},
initComponent: function() {
- var me = this;
+ let me = this;
me.callParent();
},
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()) {
},
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 + ']');
},
initComponent: function() {
- var me = this;
+ let me = this;
- var items;
+ let items;
if (me.items) {
me.columns = 1;
throw "unsupported config";
}
- var advItems;
+ let advItems;
if (me.advancedItems) {
advItems = [
{
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);
},
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) {
},
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) {
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) {
}
},
failure: function(response) {
- var msg = response.htmlStatus;
+ let msg = response.htmlStatus;
Proxmox.Utils.setErrorMask(me, msg);
me.running = false;
if (me.requested) {
},
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;
}
},
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);
},
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;
},
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;
// for user to initiate a load from outside
requestUpdate: function() {
- var me = this;
+ let me = this;
me.loadTask.delay(200);
},
// 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);
}
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;
}
},
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
textlen: text.length,
});
- var scrollPos = me.scrollPosBottom();
+ let scrollPos = me.scrollPosBottom();
content.update(text);
},
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) {
if (view.failCallback) {
view.failCallback(response);
} else {
- var msg = response.htmlStatus;
+ let msg = response.htmlStatus;
Proxmox.Utils.setErrorMask(me, msg);
}
me.running = false;
},
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);
},
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);
},
// 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);
}
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) {
},
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'));
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());
},
},
},
initComponent: function() {
- var me = this;
- var series = {};
+ let me = this;
if (!me.store) {
throw "cannot work without store";
me.callParent();
// add correct label for left axis
- var axisTitle = "";
+ let axisTitle = "";
if (me.unit === 'percent') {
axisTitle = "%";
} else if (me.unit === 'bytes') {
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();
}
// 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];
}
// fixme: how can we avoid those lint errors?
-/*jslint confusion: true */
Ext.define('Proxmox.window.Edit', {
extend: 'Ext.window.Window',
alias: 'widget.proxmoxWindowEdit',
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: {
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);
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,
{
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,
});
});
// fixme: how can we avoid those lint errors?
-/*jslint confusion: true */
Ext.define('Proxmox.window.TaskViewer', {
extend: 'Ext.window.Window',
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: {
},
};
- 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,
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,
});
};
- 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,
border: false,
});
- var logView = Ext.create('Proxmox.panel.LogView', {
+ let logView = Ext.create('Proxmox.panel.LogView', {
title: gettext('Output'),
tbar: [stop_btn2],
border: false,
});
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');