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