ui: eslint: fix trailing comma and comma related whitespaces errors

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
This commit is contained in:
Thomas Lamprecht 2021-01-19 17:31:03 +01:00
parent 2a4971d8c9
commit f6710aac38
231 changed files with 3847 additions and 3847 deletions

View File

@ -366,7 +366,7 @@ Ext.define('PVE.Parser', { statics: {
Ext.Object.each(netif, function(iface, data) { Ext.Object.each(netif, function(iface, data) {
var tmparray = []; var tmparray = [];
Ext.Array.each(['ifname', 'mac', 'bridge', 'host_ifname' , 'host_mac', 'mac_filter', 'tag', 'firewall'], function(key) { Ext.Array.each(['ifname', 'mac', 'bridge', 'host_ifname', 'host_mac', 'mac_filter', 'tag', 'firewall'], function(key) {
var value = data[key]; var value = data[key];
if (key === 'bridge'){ if (key === 'bridge'){
if(data.tag){ if(data.tag){
@ -686,7 +686,7 @@ Ext.define('PVE.Parser', { statics: {
return { return {
type: m[1], type: m[1],
key: m[2], key: m[2],
comment: m[3] comment: m[3],
}; };
} }
if (m[2].match(typere)) { if (m[2].match(typere)) {
@ -694,7 +694,7 @@ Ext.define('PVE.Parser', { statics: {
options: m[1], options: m[1],
type: m[2], type: m[2],
key: m[3], key: m[3],
comment: m[4] comment: m[4],
}; };
} }
return null; return null;

View File

@ -44,7 +44,7 @@ Ext.define('PVE.StateProvider', {
['pooltab', ''], ['pooltab', ''],
['kvmtab', ''], ['kvmtab', ''],
['lxctab', ''], ['lxctab', ''],
['dctab', ''] ['dctab', ''],
], ],
hprefix: 'v1', hprefix: 'v1',
@ -103,7 +103,7 @@ Ext.define('PVE.StateProvider', {
clog: 3, clog: 3,
storage: 2, storage: 2,
folder: 1, folder: 1,
server: 0 server: 0,
}, },
decodeHToken: function(token) { decodeHToken: function(token) {
@ -253,5 +253,5 @@ Ext.define('PVE.StateProvider', {
} else { } else {
me.callParent(arguments); me.callParent(arguments);
} }
} },
}); });

View File

@ -12,7 +12,7 @@ Ext.apply(Ext.form.field.VTypes, {
IP64AddressList: v => PVE.Utils.verify_ip64_address_list(v, false), IP64AddressList: v => PVE.Utils.verify_ip64_address_list(v, false),
IP64AddressWithSuffixList: v => PVE.Utils.verify_ip64_address_list(v, true), IP64AddressWithSuffixList: v => PVE.Utils.verify_ip64_address_list(v, true),
IP64AddressListText: gettext('Example') + ': 192.168.1.1,192.168.1.2', IP64AddressListText: gettext('Example') + ': 192.168.1.1,192.168.1.2',
IP64AddressListMask: /[A-Fa-f0-9\,\:\.\;\ ]/ IP64AddressListMask: /[A-Fa-f0-9\,\:\.\;\ ]/,
}); });
Ext.define('PVE.form.field.Display', { Ext.define('PVE.form.field.Display', {
@ -21,5 +21,5 @@ Ext.define('PVE.form.field.Display', {
setSubmitValue: function(value) { setSubmitValue: function(value) {
// do nothing, this is only to allow generalized bindings for the: // do nothing, this is only to allow generalized bindings for the:
// `me.isCreate ? 'textfield' : 'displayfield'` cases we have. // `me.isCreate ? 'textfield' : 'displayfield'` cases we have.
} },
}); });

View File

@ -10,13 +10,13 @@ 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 = { var console = {
log: function() {} log: function() {},
}; };
} }
console.log("Starting PVE Manager"); console.log("Starting PVE Manager");
Ext.Ajax.defaultHeaders = { Ext.Ajax.defaultHeaders = {
'Accept': 'application/json' 'Accept': 'application/json',
}; };
Ext.define('PVE.Utils', { utilities: { Ext.define('PVE.Utils', { utilities: {
@ -35,14 +35,14 @@ Ext.define('PVE.Utils', { utilities: {
4: "warning", 4: "warning",
5: "notice", 5: "notice",
6: "info", 6: "info",
7: "debug" 7: "debug",
}, },
support_level_hash: { support_level_hash: {
'c': gettext('Community'), 'c': gettext('Community'),
'b': gettext('Basic'), 'b': gettext('Basic'),
's': gettext('Standard'), 's': gettext('Standard'),
'p': gettext('Premium') 'p': gettext('Premium'),
}, },
noSubKeyHtml: 'You do not have a valid subscription for this server. Please visit <a target="_blank" href="https://www.proxmox.com/products/proxmox-ve/subscription-service-plans">www.proxmox.com</a> to get a list of available options.', noSubKeyHtml: 'You do not have a valid subscription for this server. Please visit <a target="_blank" href="https://www.proxmox.com/products/proxmox-ve/subscription-service-plans">www.proxmox.com</a> to get a list of available options.',
@ -50,7 +50,7 @@ Ext.define('PVE.Utils', { utilities: {
kvm_ostypes: { kvm_ostypes: {
'Linux': [ 'Linux': [
{ desc: '5.x - 2.6 Kernel', val: 'l26' }, { desc: '5.x - 2.6 Kernel', val: 'l26' },
{ desc: '2.4 Kernel', val: 'l24' } { desc: '2.4 Kernel', val: 'l24' },
], ],
'Microsoft Windows': [ 'Microsoft Windows': [
{ desc: '10/2016/2019', val: 'win10' }, { desc: '10/2016/2019', val: 'win10' },
@ -58,14 +58,14 @@ Ext.define('PVE.Utils', { utilities: {
{ desc: '7/2008r2', val: 'win7' }, { desc: '7/2008r2', val: 'win7' },
{ desc: 'Vista/2008', val: 'w2k8' }, { desc: 'Vista/2008', val: 'w2k8' },
{ desc: 'XP/2003', val: 'wxp' }, { desc: 'XP/2003', val: 'wxp' },
{ desc: '2000', val: 'w2k' } { desc: '2000', val: 'w2k' },
], ],
'Solaris Kernel': [ 'Solaris Kernel': [
{ desc: '-', val: 'solaris'} { desc: '-', val: 'solaris'},
], ],
'Other': [ 'Other': [
{ desc: '-', val: 'other'} { desc: '-', val: 'other'},
] ],
}, },
get_health_icon: function(state, circle) { get_health_icon: function(state, circle) {
@ -172,13 +172,13 @@ Ext.define('PVE.Utils', { utilities: {
'HEALTH_UPGRADE':'upgrade', 'HEALTH_UPGRADE':'upgrade',
'HEALTH_OLD':'old', 'HEALTH_OLD':'old',
'HEALTH_WARN':'warning', 'HEALTH_WARN':'warning',
'HEALTH_ERR':'critical' 'HEALTH_ERR':'critical',
}, },
render_ceph_health: function(healthObj) { render_ceph_health: function(healthObj) {
var state = { var state = {
iconCls: PVE.Utils.get_health_icon(), iconCls: PVE.Utils.get_health_icon(),
text: '' text: '',
}; };
if (!healthObj || !healthObj.status) { if (!healthObj || !healthObj.status) {
@ -544,7 +544,7 @@ Ext.define('PVE.Utils', { utilities: {
sl: 'Slovenian', sl: 'Slovenian',
sv: 'Swedish', sv: 'Swedish',
//th: 'Thai', //th: 'Thai',
tr: 'Turkish' tr: 'Turkish',
}, },
kvm_vga_drivers: { kvm_vga_drivers: {
@ -559,7 +559,7 @@ Ext.define('PVE.Utils', { utilities: {
serial2: gettext('Serial terminal') + ' 2', serial2: gettext('Serial terminal') + ' 2',
serial3: gettext('Serial terminal') + ' 3', serial3: gettext('Serial terminal') + ' 3',
virtio: 'VirtIO-GPU', virtio: 'VirtIO-GPU',
none: Proxmox.Utils.noneText none: Proxmox.Utils.noneText,
}, },
render_kvm_language: function (value) { render_kvm_language: function (value) {
@ -586,7 +586,7 @@ Ext.define('PVE.Utils', { utilities: {
'__default__': Proxmox.Utils.defaultText + ' (xterm.js)', '__default__': Proxmox.Utils.defaultText + ' (xterm.js)',
'vv': 'SPICE (remote-viewer)', 'vv': 'SPICE (remote-viewer)',
'html5': 'HTML5 (noVNC)', 'html5': 'HTML5 (noVNC)',
'xtermjs': 'xterm.js' 'xtermjs': 'xterm.js',
}, },
render_console_viewer: function(value) { render_console_viewer: function(value) {
@ -673,7 +673,7 @@ Ext.define('PVE.Utils', { utilities: {
'vztmpl': gettext('Container template'), 'vztmpl': gettext('Container template'),
'iso': gettext('ISO image'), 'iso': gettext('ISO image'),
'rootdir': gettext('Container'), 'rootdir': gettext('Container'),
'snippets': gettext('Snippets') 'snippets': gettext('Snippets'),
}, },
volume_is_qemu_backup: function(volid, format) { volume_is_qemu_backup: function(volid, format) {
@ -806,51 +806,51 @@ Ext.define('PVE.Utils', { utilities: {
sdnvnetSchema: { sdnvnetSchema: {
vnet: { vnet: {
name: 'vnet', name: 'vnet',
faIcon: 'folder' faIcon: 'folder',
}, },
}, },
sdnzoneSchema: { sdnzoneSchema: {
zone: { zone: {
name: 'zone', name: 'zone',
hideAdd: true hideAdd: true,
}, },
simple: { simple: {
name: 'Simple', name: 'Simple',
ipanel: 'SimpleInputPanel', ipanel: 'SimpleInputPanel',
faIcon: 'th' faIcon: 'th',
}, },
vlan: { vlan: {
name: 'VLAN', name: 'VLAN',
ipanel: 'VlanInputPanel', ipanel: 'VlanInputPanel',
faIcon: 'th' faIcon: 'th',
}, },
qinq: { qinq: {
name: 'QinQ', name: 'QinQ',
ipanel: 'QinQInputPanel', ipanel: 'QinQInputPanel',
faIcon: 'th' faIcon: 'th',
}, },
vxlan: { vxlan: {
name: 'VXLAN', name: 'VXLAN',
ipanel: 'VxlanInputPanel', ipanel: 'VxlanInputPanel',
faIcon: 'th' faIcon: 'th',
}, },
evpn: { evpn: {
name: 'EVPN', name: 'EVPN',
ipanel: 'EvpnInputPanel', ipanel: 'EvpnInputPanel',
faIcon: 'th' faIcon: 'th',
}, },
}, },
sdncontrollerSchema: { sdncontrollerSchema: {
controller: { controller: {
name: 'controller', name: 'controller',
hideAdd: true hideAdd: true,
}, },
evpn: { evpn: {
name: 'evpn', name: 'evpn',
ipanel: 'EvpnInputPanel', ipanel: 'EvpnInputPanel',
faIcon: 'crosshairs' faIcon: 'crosshairs',
}, },
}, },
@ -917,10 +917,10 @@ Ext.define('PVE.Utils', { utilities: {
Ext.isNumber(data.id) && Ext.isNumber(data.id) &&
Ext.isNumber(data.lun)) { Ext.isNumber(data.lun)) {
return "CH " + return "CH " +
Ext.String.leftPad(data.channel,2, '0') + Ext.String.leftPad(data.channel, 2, '0') +
" ID " + data.id + " LUN " + data.lun; " ID " + data.id + " LUN " + data.lun;
} }
return data.volid.replace(/^.*?:(.*?\/)?/,''); return data.volid.replace(/^.*?:(.*?\/)?/, '');
}, },
render_serverity: function (value) { render_serverity: function (value) {
@ -1077,7 +1077,7 @@ Ext.define('PVE.Utils', { utilities: {
render_resource_type: function(value, metaData, record, rowIndex, colIndex, store) { render_resource_type: function(value, metaData, record, rowIndex, colIndex, store) {
var cls = PVE.Utils.get_object_icon_class(value,record.data); var cls = PVE.Utils.get_object_icon_class(value, record.data);
var fa = '<i class="fa-fw x-grid-icon-custom ' + cls + '"></i> '; var fa = '<i class="fa-fw x-grid-icon-custom ' + cls + '"></i> ';
return fa + value; return fa + value;
@ -1157,7 +1157,7 @@ Ext.define('PVE.Utils', { utilities: {
'2': gettext('Bad Request'), '2': gettext('Bad Request'),
'3': gettext('Configuration Unsupported'), '3': gettext('Configuration Unsupported'),
'4': gettext('Device Ineligible'), '4': gettext('Device Ineligible'),
'5': gettext('Timeout') '5': gettext('Timeout'),
}; };
return "U2F Error: " + ErrorNames[error] || Proxmox.Utils.unknownText; return "U2F Error: " + ErrorNames[error] || Proxmox.Utils.unknownText;
}, },
@ -1240,7 +1240,7 @@ Ext.define('PVE.Utils', { utilities: {
vmname: vmname, vmname: vmname,
node: nodename, node: nodename,
resize: scaling, resize: scaling,
cmd: cmd cmd: cmd,
}); });
var nw = window.open("?" + url, '_blank', "innerWidth=745,innerheight=427"); var nw = window.open("?" + url, '_blank', "innerWidth=745,innerheight=427");
if (nw) { if (nw) {
@ -1254,7 +1254,7 @@ Ext.define('PVE.Utils', { utilities: {
var link = Ext.DomHelper.append(document.body, { var link = Ext.DomHelper.append(document.body, {
tag: 'a', tag: 'a',
href: uri, href: uri,
css : 'display:none;visibility:hidden;height:0px;' css : 'display:none;visibility:hidden;height:0px;',
}); });
// Note: we need to tell android the correct file name extension // Note: we need to tell android the correct file name extension
@ -1290,7 +1290,7 @@ Ext.define('PVE.Utils', { utilities: {
encodeURIComponent(raw); encodeURIComponent(raw);
downloadWithName(url, "pve-spice.vv"); downloadWithName(url, "pve-spice.vv");
} },
}); });
}, },
@ -1312,7 +1312,7 @@ Ext.define('PVE.Utils', { utilities: {
xtermjs: !!conf.serial, xtermjs: !!conf.serial,
}; };
PVE.Utils.openDefaultConsoleWindow(consoles, 'kvm', vmid, nodename, vmname); PVE.Utils.openDefaultConsoleWindow(consoles, 'kvm', vmid, nodename, vmname);
} },
}); });
} else if (record.data.type === 'lxc' && !record.data.template) { } else if (record.data.type === 'lxc' && !record.data.template) {
PVE.Utils.openDefaultConsoleWindow(true, 'lxc', vmid, nodename, vmname); PVE.Utils.openDefaultConsoleWindow(true, 'lxc', vmid, nodename, vmname);
@ -1348,7 +1348,7 @@ Ext.define('PVE.Utils', { utilities: {
if (template) { if (template) {
if (type === 'qemu' || type == 'lxc') { if (type === 'qemu' || type == 'lxc') {
menu = Ext.create('PVE.menu.TemplateMenu', { menu = Ext.create('PVE.menu.TemplateMenu', {
pveSelNode: record pveSelNode: record,
}); });
} }
} else if (type === 'qemu' || } else if (type === 'qemu' ||
@ -1356,7 +1356,7 @@ Ext.define('PVE.Utils', { utilities: {
type === 'node') { type === 'node') {
menu = Ext.create('PVE.' + type + '.CmdMenu', { menu = Ext.create('PVE.' + type + '.CmdMenu', {
pveSelNode: record, pveSelNode: record,
nodename: record.data.node nodename: record.data.node,
}); });
} else { } else {
return; return;
@ -1545,7 +1545,7 @@ Ext.define('PVE.Utils', { utilities: {
if (!container.down('pveCephInstallWindow')){ if (!container.down('pveCephInstallWindow')){
var isInstalled = msg.match(/not initialized/i) ? true : false; var isInstalled = msg.match(/not initialized/i) ? true : false;
var win = Ext.create('PVE.ceph.Install', { var win = Ext.create('PVE.ceph.Install', {
nodename: nodename nodename: nodename,
}); });
win.getViewModel().set('isInstalled', isInstalled); win.getViewModel().set('isInstalled', isInstalled);
container.add(win); container.add(win);
@ -1617,7 +1617,7 @@ Ext.define('PVE.Utils', { utilities: {
cpu_vendor_map: { cpu_vendor_map: {
'default': 'QEMU', 'default': 'QEMU',
'AuthenticAMD': 'AMD', 'AuthenticAMD': 'AMD',
'GenuineIntel': 'Intel' 'GenuineIntel': 'Intel',
}, },
cpu_vendor_order: { cpu_vendor_order: {
@ -1745,6 +1745,6 @@ Ext.define('PVE.Utils', { utilities: {
vzumount: ['CT', gettext('Unmount')], vzumount: ['CT', gettext('Unmount')],
zfscreate: [gettext('ZFS Storage'), gettext('Create')], zfscreate: [gettext('ZFS Storage'), gettext('Create')],
}); });
} },
}); });

View File

@ -52,8 +52,8 @@ Ext.define('PVE.noVncConsole', {
PVE.Utils.cleanEmptyObjectKeys(queryDict); PVE.Utils.cleanEmptyObjectKeys(queryDict);
var url = '/?' + Ext.Object.toQueryString(queryDict); var url = '/?' + Ext.Object.toQueryString(queryDict);
box.load(url); box.load(url);
} },
} },
}); });
me.callParent(); me.callParent();
@ -67,6 +67,6 @@ Ext.define('PVE.noVncConsole', {
// reload IFrame content to forcibly reconnect VNC/xterm.js to VM // reload IFrame content to forcibly reconnect VNC/xterm.js to VM
var box = this.down('[itemid=vncconsole]'); var box = this.down('[itemid=vncconsole]');
box.getWin().location.reload(); box.getWin().location.reload();
} },
}); });

View File

@ -48,7 +48,7 @@ Ext.define('PVE.Workspace', {
me.login = null; me.login = null;
me.updateLoginData(data); me.updateLoginData(data);
Proxmox.Utils.checked_command(function() {}); // display subscription status Proxmox.Utils.checked_command(function() {}); // display subscription status
} },
}); });
} }
me.onLogin(null); me.onLogin(null);
@ -92,20 +92,20 @@ Ext.define('PVE.Workspace', {
Ext.Ajax.request({ Ext.Ajax.request({
params: { params: {
username: Proxmox.UserName, username: Proxmox.UserName,
password: ticket password: ticket,
}, },
url: '/api2/json/access/ticket', url: '/api2/json/access/ticket',
method: 'POST', method: 'POST',
success: function(response, opts) { success: function(response, opts) {
var obj = Ext.decode(response.responseText); var obj = Ext.decode(response.responseText);
me.updateLoginData(obj.data); me.updateLoginData(obj.data);
} },
}); });
}, },
interval: 15*60*1000 interval: 15*60*1000,
}); });
} },
}); });
Ext.define('PVE.StdWorkspace', { Ext.define('PVE.StdWorkspace', {
@ -161,7 +161,7 @@ Ext.define('PVE.StdWorkspace', {
success: function(response) { success: function(response) {
PVE.VersionInfo = response.result.data; PVE.VersionInfo = response.result.data;
me.updateVersionInfo(); me.updateVersionInfo();
} },
}); });
Proxmox.Utils.API2Request({ Proxmox.Utils.API2Request({
@ -228,7 +228,7 @@ Ext.define('PVE.StdWorkspace', {
lxc: 'PVE.lxc.Config', lxc: 'PVE.lxc.Config',
storage: 'PVE.storage.Browser', storage: 'PVE.storage.Browser',
sdn: 'PVE.sdn.Browser', sdn: 'PVE.sdn.Browser',
pool: 'pvePoolConfig' pool: 'pvePoolConfig',
}; };
var comp = { var comp = {
xtype: tlckup[n.data.type || 'root'] || xtype: tlckup[n.data.type || 'root'] ||
@ -237,14 +237,14 @@ Ext.define('PVE.StdWorkspace', {
Ext.isDefined(n.data.groupbyid), Ext.isDefined(n.data.groupbyid),
pveSelNode: n, pveSelNode: n,
workspace: me, workspace: me,
viewFilter: selview.getViewFilter() viewFilter: selview.getViewFilter(),
}; };
PVE.curSelectedNode = n; PVE.curSelectedNode = n;
me.setContent(comp); me.setContent(comp);
} }
} },
} },
} },
}); });
selview.on('select', function(combo, records) { selview.on('select', function(combo, records) {
@ -266,7 +266,7 @@ Ext.define('PVE.StdWorkspace', {
handler: function() { handler: function() {
var wiz = Ext.create('PVE.qemu.CreateWizard', {}); var wiz = Ext.create('PVE.qemu.CreateWizard', {});
wiz.show(); wiz.show();
} },
}); });
var createCT = Ext.createWidget('button', { var createCT = Ext.createWidget('button', {
@ -279,7 +279,7 @@ Ext.define('PVE.StdWorkspace', {
handler: function() { handler: function() {
var wiz = Ext.create('PVE.lxc.CreateWizard', {}); var wiz = Ext.create('PVE.lxc.CreateWizard', {});
wiz.show(); wiz.show();
} },
}); });
sprovider.on('statechange', function(sp, key, value) { sprovider.on('statechange', function(sp, key, value) {
@ -298,11 +298,11 @@ Ext.define('PVE.StdWorkspace', {
region: 'north', region: 'north',
layout: { layout: {
type: 'hbox', type: 'hbox',
align: 'middle' align: 'middle',
}, },
baseCls: 'x-plain', baseCls: 'x-plain',
defaults: { defaults: {
baseCls: 'x-plain' baseCls: 'x-plain',
}, },
border: false, border: false,
margin: '2 0 2 5', margin: '2 0 2 5',
@ -313,14 +313,14 @@ Ext.define('PVE.StdWorkspace', {
{ {
minWidth: 150, minWidth: 150,
id: 'versioninfo', id: 'versioninfo',
html: 'Virtual Environment' html: 'Virtual Environment',
}, },
{ {
xtype: 'pveGlobalSearchField', xtype: 'pveGlobalSearchField',
tree: rtree tree: rtree,
}, },
{ {
flex: 1 flex: 1,
}, },
{ {
xtype: 'proxmoxHelpButton', xtype: 'proxmoxHelpButton',
@ -330,7 +330,7 @@ Ext.define('PVE.StdWorkspace', {
listenToGlobalEvent: false, listenToGlobalEvent: false,
onlineHelp: 'pve_documentation_index', onlineHelp: 'pve_documentation_index',
text: gettext('Documentation'), text: gettext('Documentation'),
margin: '0 5 0 0' margin: '0 5 0 0',
}, },
createVM, createVM,
createCT, createCT,
@ -343,7 +343,7 @@ Ext.define('PVE.StdWorkspace', {
style: { style: {
// proxmox dark grey p light grey as border // proxmox dark grey p light grey as border
backgroundColor: '#464d4d', backgroundColor: '#464d4d',
borderColor: '#ABBABA' borderColor: '#ABBABA',
}, },
iconCls: 'fa fa-user', iconCls: 'fa fa-user',
menu: [ menu: [
@ -353,27 +353,27 @@ Ext.define('PVE.StdWorkspace', {
handler: function() { handler: function() {
var win = Ext.create('PVE.window.Settings'); var win = Ext.create('PVE.window.Settings');
win.show(); win.show();
} },
}, },
{ {
text: gettext('Password'), text: gettext('Password'),
iconCls: 'fa fa-fw fa-key', iconCls: 'fa fa-fw fa-key',
handler: function() { handler: function() {
var win = Ext.create('Proxmox.window.PasswordEdit', { var win = Ext.create('Proxmox.window.PasswordEdit', {
userid: Proxmox.UserName userid: Proxmox.UserName,
}); });
win.show(); win.show();
} },
}, },
{ {
text: 'TFA', text: 'TFA',
iconCls: 'fa fa-fw fa-lock', iconCls: 'fa fa-fw fa-lock',
handler: function(btn, event, rec) { handler: function(btn, event, rec) {
var win = Ext.create('PVE.window.TFAEdit',{ var win = Ext.create('PVE.window.TFAEdit', {
userid: Proxmox.UserName userid: Proxmox.UserName,
}); });
win.show(); win.show();
} },
}, },
{ {
iconCls: 'fa fa-language', iconCls: 'fa fa-language',
@ -402,11 +402,11 @@ Ext.define('PVE.StdWorkspace', {
comp.getStore().loadData([], false); comp.getStore().loadData([], false);
} }
}); });
} },
} },
] ],
} },
] ],
}, },
{ {
region: 'center', region: 'center',
@ -419,7 +419,7 @@ Ext.define('PVE.StdWorkspace', {
layout: { type: 'card' }, layout: { type: 'card' },
border: false, border: false,
margin: '0 5 0 0', margin: '0 5 0 0',
items: [] items: [],
}, },
{ {
region: 'west', region: 'west',
@ -439,8 +439,8 @@ Ext.define('PVE.StdWorkspace', {
if (width > viewWidth - 100) { if (width > viewWidth - 100) {
panel.setWidth(viewWidth - 100); panel.setWidth(viewWidth - 100);
} }
} },
} },
}, },
{ {
xtype: 'pveStatusPanel', xtype: 'pveStatusPanel',
@ -460,10 +460,10 @@ Ext.define('PVE.StdWorkspace', {
if (height > (viewHeight - 150)) { if (height > (viewHeight - 150)) {
panel.setHeight(viewHeight - 150); panel.setHeight(viewHeight - 150);
} }
} },
} },
} },
] ],
}); });
me.callParent(); me.callParent();
@ -479,6 +479,6 @@ Ext.define('PVE.StdWorkspace', {
}); });
} }
}); });
} },
}); });

View File

@ -37,7 +37,7 @@ Ext.define('PVE.button.ConsoleButton', {
var me = this; var me = this;
var consoles = { var consoles = {
spice: me.enableSpice, spice: me.enableSpice,
xtermjs: me.enableXtermjs xtermjs: me.enableXtermjs,
}; };
PVE.Utils.openDefaultConsoleWindow(consoles, me.consoleType, me.vmid, PVE.Utils.openDefaultConsoleWindow(consoles, me.consoleType, me.vmid,
me.nodename, me.consoleName, me.cmd); me.nodename, me.consoleName, me.cmd);
@ -52,7 +52,7 @@ Ext.define('PVE.button.ConsoleButton', {
handler: function(button) { handler: function(button) {
var me = this.up('button'); var me = this.up('button');
PVE.Utils.openConsoleWindow(button.type, me.consoleType, me.vmid, me.nodename, me.consoleName, me.cmd); PVE.Utils.openConsoleWindow(button.type, me.consoleType, me.vmid, me.nodename, me.consoleName, me.cmd);
} },
}, },
{ {
xterm: 'menuitem', xterm: 'menuitem',
@ -63,7 +63,7 @@ Ext.define('PVE.button.ConsoleButton', {
handler: function(button) { handler: function(button) {
var me = this.up('button'); var me = this.up('button');
PVE.Utils.openConsoleWindow(button.type, me.consoleType, me.vmid, me.nodename, me.consoleName, me.cmd); PVE.Utils.openConsoleWindow(button.type, me.consoleType, me.vmid, me.nodename, me.consoleName, me.cmd);
} },
}, },
{ {
text: 'xterm.js', text: 'xterm.js',
@ -73,8 +73,8 @@ Ext.define('PVE.button.ConsoleButton', {
handler: function(button) { handler: function(button) {
var me = this.up('button'); var me = this.up('button');
PVE.Utils.openConsoleWindow(button.type, me.consoleType, me.vmid, me.nodename, me.consoleName, me.cmd); PVE.Utils.openConsoleWindow(button.type, me.consoleType, me.vmid, me.nodename, me.consoleName, me.cmd);
} },
} },
], ],
initComponent: function() { initComponent: function() {
@ -85,5 +85,5 @@ Ext.define('PVE.button.ConsoleButton', {
} }
me.callParent(); me.callParent();
} },
}); });

View File

@ -28,7 +28,7 @@ Ext.define('PVE.button.PendingRevert', {
selModel: view.getSelectionModel(), selModel: view.getSelectionModel(),
method: 'PUT', method: 'PUT',
params: { params: {
'revert': keys.join(',') 'revert': keys.join(','),
}, },
callback: () => view.reload(), callback: () => view.reload(),
failure: (response) => Ext.Msg.alert('Error', response.htmlStatus), failure: (response) => Ext.Msg.alert('Error', response.htmlStatus),

View File

@ -47,7 +47,7 @@ Ext.define('PVE.button.Split', {
return; return;
} }
me.realHandler(button, event, rec); me.realHandler(button, event, rec);
} },
}); });
} else { } else {
me.realHandler(button, event, rec); me.realHandler(button, event, rec);
@ -96,5 +96,5 @@ Ext.define('PVE.button.Split', {
} }
}); });
} }
} },
}); });

View File

@ -126,7 +126,7 @@ Ext.define('PVE.ceph.CephHighestVersionDisplay', {
}, },
failure: function(response, opts) { failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus); Ext.Msg.alert(gettext('Error'), response.htmlStatus);
} },
}); });
}, },
}); });
@ -145,10 +145,10 @@ Ext.define('PVE.ceph.CephInstallWizard', {
cephRelease: 'octopus', cephRelease: 'octopus',
configuration: true, configuration: true,
isInstalled: false, isInstalled: false,
} },
}, },
cbindData: { cbindData: {
nodename: undefined nodename: undefined,
}, },
title: gettext('Setup'), title: gettext('Setup'),
@ -204,7 +204,7 @@ Ext.define('PVE.ceph.CephInstallWizard', {
xtype: 'pveCephHighestVersionDisplay', xtype: 'pveCephHighestVersionDisplay',
labelWidth: 180, labelWidth: 180,
cbind:{ cbind:{
nodename: '{nodename}' nodename: '{nodename}',
}, },
gotNewestVersion: function(release, maxversiontext, maxversion) { gotNewestVersion: function(release, maxversiontext, maxversion) {
if (release === 'unknown') { if (release === 'unknown') {
@ -249,22 +249,22 @@ Ext.define('PVE.ceph.CephInstallWizard', {
Ext.GlobalEvents.fireEvent('proxmoxHideHelp', this.onlineHelp); Ext.GlobalEvents.fireEvent('proxmoxHideHelp', this.onlineHelp);
} }
this.up('pveCephInstallWizard').down('#next').setText(gettext('Next')); this.up('pveCephInstallWizard').down('#next').setText(gettext('Next'));
} },
} },
}, },
{ {
title: gettext('Installation'), title: gettext('Installation'),
xtype: 'panel', xtype: 'panel',
layout: 'fit', layout: 'fit',
cbind:{ cbind:{
nodename: '{nodename}' nodename: '{nodename}',
}, },
viewModel: {}, // needed to inherit parent viewModel data viewModel: {}, // needed to inherit parent viewModel data
listeners: { listeners: {
afterrender: function() { afterrender: function() {
var me = this; var me = this;
if (this.getViewModel().get('isInstalled')) { if (this.getViewModel().get('isInstalled')) {
this.mask("Ceph is already installed, click next to create your configuration.",['pve-static-mask']); this.mask("Ceph is already installed, click next to create your configuration.", ['pve-static-mask']);
} else { } else {
me.down('pveNoVncConsole').fireEvent('activate'); me.down('pveNoVncConsole').fireEvent('activate');
} }
@ -277,7 +277,7 @@ Ext.define('PVE.ceph.CephInstallWizard', {
interval: 1000, interval: 1000,
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json/nodes/' + nodename + '/ceph/status' url: '/api2/json/nodes/' + nodename + '/ceph/status',
}, },
listeners: { listeners: {
load: function(rec, response, success, operation) { load: function(rec, response, success, operation) {
@ -287,17 +287,17 @@ Ext.define('PVE.ceph.CephInstallWizard', {
me.down('textfield').setValue('success'); me.down('textfield').setValue('success');
} else if (operation.error.statusText.match("not initialized", "i")) { } else if (operation.error.statusText.match("not initialized", "i")) {
me.updateStore.stopUpdate(); me.updateStore.stopUpdate();
me.up('pveCephInstallWizard').getViewModel().set('configuration',false); me.up('pveCephInstallWizard').getViewModel().set('configuration', false);
me.down('textfield').setValue('success'); me.down('textfield').setValue('success');
} else if (operation.error.statusText.match("rados_connect failed", "i")) { } else if (operation.error.statusText.match("rados_connect failed", "i")) {
me.updateStore.stopUpdate(); me.updateStore.stopUpdate();
me.up('pveCephInstallWizard').getViewModel().set('configuration',true); me.up('pveCephInstallWizard').getViewModel().set('configuration', true);
me.down('textfield').setValue('success'); me.down('textfield').setValue('success');
} else if (!operation.error.statusText.match("not installed", "i")) { } else if (!operation.error.statusText.match("not installed", "i")) {
Proxmox.Utils.setErrorMask(me, operation.error.statusText); Proxmox.Utils.setErrorMask(me, operation.error.statusText);
} }
} },
} },
}); });
me.updateStore.startUpdate(); me.updateStore.startUpdate();
}, },
@ -306,7 +306,7 @@ Ext.define('PVE.ceph.CephInstallWizard', {
if (me.updateStore) { if (me.updateStore) {
me.updateStore.stopUpdate(); me.updateStore.stopUpdate();
} }
} },
}, },
items: [ items: [
{ {
@ -331,22 +331,22 @@ Ext.define('PVE.ceph.CephInstallWizard', {
value: '', value: '',
allowBlank: false, allowBlank: false,
submitValue: false, submitValue: false,
hidden: true hidden: true,
} },
] ],
}, },
{ {
xtype: 'inputpanel', xtype: 'inputpanel',
title: gettext('Configuration'), title: gettext('Configuration'),
onlineHelp: 'chapter_pveceph', onlineHelp: 'chapter_pveceph',
cbind: { cbind: {
nodename: '{nodename}' nodename: '{nodename}',
}, },
viewModel: { viewModel: {
data: { data: {
replicas: undefined, replicas: undefined,
minreplicas: undefined minreplicas: undefined,
} },
}, },
listeners: { listeners: {
activate: function() { activate: function() {
@ -354,19 +354,19 @@ Ext.define('PVE.ceph.CephInstallWizard', {
}, },
beforeshow: function() { beforeshow: function() {
if (this.up('pveCephInstallWizard').getViewModel().get('configuration')) { if (this.up('pveCephInstallWizard').getViewModel().get('configuration')) {
this.mask("Configuration already initialized",['pve-static-mask']); this.mask("Configuration already initialized", ['pve-static-mask']);
} else { } else {
this.unmask(); this.unmask();
} }
}, },
deactivate: function() { deactivate: function() {
this.up('pveCephInstallWizard').down('#submit').setText(gettext('Finish')); this.up('pveCephInstallWizard').down('#submit').setText(gettext('Finish'));
} },
}, },
column1: [ column1: [
{ {
xtype: 'displayfield', xtype: 'displayfield',
value: gettext('Ceph cluster configuration') + ':' value: gettext('Ceph cluster configuration') + ':',
}, },
{ {
xtype: 'proxmoxNetworkSelector', xtype: 'proxmoxNetworkSelector',
@ -374,11 +374,11 @@ Ext.define('PVE.ceph.CephInstallWizard', {
value: '', value: '',
fieldLabel: 'Public Network IP/CIDR', fieldLabel: 'Public Network IP/CIDR',
bind: { bind: {
allowBlank: '{configuration}' allowBlank: '{configuration}',
}, },
cbind: { cbind: {
nodename: '{nodename}' nodename: '{nodename}',
} },
}, },
{ {
xtype: 'proxmoxNetworkSelector', xtype: 'proxmoxNetworkSelector',
@ -388,28 +388,28 @@ Ext.define('PVE.ceph.CephInstallWizard', {
autoSelect: false, autoSelect: false,
emptyText: gettext('Same as Public Network'), emptyText: gettext('Same as Public Network'),
cbind: { cbind: {
nodename: '{nodename}' nodename: '{nodename}',
} },
} },
// FIXME: add hint about cluster network and/or reference user to docs?? // FIXME: add hint about cluster network and/or reference user to docs??
], ],
column2: [ column2: [
{ {
xtype: 'displayfield', xtype: 'displayfield',
value: gettext('First Ceph monitor') + ':' value: gettext('First Ceph monitor') + ':',
}, },
{ {
xtype: 'pveNodeSelector', xtype: 'pveNodeSelector',
fieldLabel: gettext('Monitor node'), fieldLabel: gettext('Monitor node'),
name: 'mon-node', name: 'mon-node',
selectCurNode: true, selectCurNode: true,
allowBlank: false allowBlank: false,
}, },
{ {
xtype: 'displayfield', xtype: 'displayfield',
value: gettext('Additional monitors are recommended. They can be created at any time in the Monitor tab.'), value: gettext('Additional monitors are recommended. They can be created at any time in the Monitor tab.'),
userCls: 'pmx-hint' userCls: 'pmx-hint',
} },
], ],
advancedColumn1: [ advancedColumn1: [
{ {
@ -417,11 +417,11 @@ Ext.define('PVE.ceph.CephInstallWizard', {
name: 'size', name: 'size',
fieldLabel: 'Number of replicas', fieldLabel: 'Number of replicas',
bind: { bind: {
value: '{replicas}' value: '{replicas}',
}, },
maxValue: 7, maxValue: 7,
minValue: 2, minValue: 2,
emptyText: '3' emptyText: '3',
}, },
{ {
xtype: 'numberfield', xtype: 'numberfield',
@ -429,7 +429,7 @@ Ext.define('PVE.ceph.CephInstallWizard', {
fieldLabel: 'Minimum replicas', fieldLabel: 'Minimum replicas',
bind: { bind: {
maxValue: '{replicas}', maxValue: '{replicas}',
value: '{minreplicas}' value: '{minreplicas}',
}, },
minValue: 2, minValue: 2,
maxValue: 3, maxValue: 3,
@ -442,8 +442,8 @@ Ext.define('PVE.ceph.CephInstallWizard', {
this.toggleSpinners(); this.toggleSpinners();
this.validate(); this.validate();
}, },
emptyText: '2' emptyText: '2',
} },
], ],
onGetValues: function(values) { onGetValues: function(values) {
['cluster-network', 'size', 'min_size'].forEach(function(field) { ['cluster-network', 'size', 'min_size'].forEach(function(field) {
@ -478,18 +478,18 @@ Ext.define('PVE.ceph.CephInstallWizard', {
}, },
failure: function(response, opts) { failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus); Ext.Msg.alert(gettext('Error'), response.htmlStatus);
} },
}); });
}, },
failure: function(response, opts) { failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus); Ext.Msg.alert(gettext('Error'), response.htmlStatus);
} },
}); });
} else { } else {
me.up('pveCephInstallWizard').navigateNext(); me.up('pveCephInstallWizard').navigateNext();
} }
} },
}, },
{ {
title: gettext('Success'), title: gettext('Success'),
@ -524,12 +524,12 @@ Ext.define('PVE.ceph.CephInstallWizard', {
if (this.onlineHelp) { if (this.onlineHelp) {
Ext.GlobalEvents.fireEvent('proxmoxHideHelp', this.onlineHelp); Ext.GlobalEvents.fireEvent('proxmoxHideHelp', this.onlineHelp);
} }
} },
}, },
onSubmit: function() { onSubmit: function() {
var wizard = this.up('pveCephInstallWizard'); var wizard = this.up('pveCephInstallWizard');
wizard.close(); wizard.close();
} },
} },
] ],
}); });

View File

@ -5,8 +5,8 @@ Ext.define('PVE.node.CephConfigDb', {
border: false, border: false,
store: { store: {
proxy: { proxy: {
type: 'proxmox' type: 'proxmox',
} },
}, },
columns: [ columns: [
@ -41,7 +41,7 @@ Ext.define('PVE.node.CephConfigDb', {
text: 'Runtime Updatable', text: 'Runtime Updatable',
hidden: true, hidden: true,
width: 80, width: 80,
renderer: Proxmox.Utils.format_boolean renderer: Proxmox.Utils.format_boolean,
}, },
], ],
@ -59,7 +59,7 @@ Ext.define('PVE.node.CephConfigDb', {
Proxmox.Utils.monStoreErrors(me, me.getStore()); Proxmox.Utils.monStoreErrors(me, me.getStore());
me.getStore().load(); me.getStore().load();
} },
}); });
Ext.define('PVE.node.CephConfig', { Ext.define('PVE.node.CephConfig', {
extend: 'Ext.panel.Panel', extend: 'Ext.panel.Panel',
@ -83,14 +83,14 @@ Ext.define('PVE.node.CephConfig', {
me.mon(win, 'cephInstallWindowClosed', function(){ me.mon(win, 'cephInstallWindowClosed', function(){
me.load(); me.load();
}); });
} },
); );
}, },
success: function(response, opts) { success: function(response, opts) {
var data = response.result.data; var data = response.result.data;
me.update(Ext.htmlEncode(data)); me.update(Ext.htmlEncode(data));
} },
}); });
}, },
@ -107,14 +107,14 @@ Ext.define('PVE.node.CephConfig', {
listeners: { listeners: {
activate: function() { activate: function() {
me.load(); me.load();
} },
} },
}); });
me.callParent(); me.callParent();
me.load(); me.load();
} },
}); });
Ext.define('PVE.node.CephConfigCrush', { Ext.define('PVE.node.CephConfigCrush', {
@ -127,14 +127,14 @@ Ext.define('PVE.node.CephConfigCrush', {
items: [{ items: [{
title: gettext('Configuration'), title: gettext('Configuration'),
xtype: 'pveNodeCephConfig', xtype: 'pveNodeCephConfig',
region: 'center' region: 'center',
}, },
{ {
title: 'Crush Map', // do not localize title: 'Crush Map', // do not localize
xtype: 'pveNodeCephCrushMap', xtype: 'pveNodeCephCrushMap',
region: 'east', region: 'east',
split: true, split: true,
width: '50%' width: '50%',
}, },
{ {
title: gettext('Configuration Database'), title: gettext('Configuration Database'),
@ -142,14 +142,14 @@ Ext.define('PVE.node.CephConfigCrush', {
region: 'south', region: 'south',
split: true, split: true,
weight: -30, weight: -30,
height: '50%' height: '50%',
}], }],
initComponent: function() { initComponent: function() {
var me = this; var me = this;
me.defaults = { me.defaults = {
pveSelNode: me.pveSelNode pveSelNode: me.pveSelNode,
}; };
me.callParent(); me.callParent();
} },
}); });

View File

@ -21,13 +21,13 @@ Ext.define('PVE.node.CephCrushMap', {
me.mon(win, 'cephInstallWindowClosed', function(){ me.mon(win, 'cephInstallWindowClosed', function(){
me.load(); me.load();
}); });
} },
); );
}, },
success: function(response, opts) { success: function(response, opts) {
var data = response.result.data; var data = response.result.data;
me.update(Ext.htmlEncode(data)); me.update(Ext.htmlEncode(data));
} },
}); });
}, },
@ -45,12 +45,12 @@ Ext.define('PVE.node.CephCrushMap', {
listeners: { listeners: {
activate: function() { activate: function() {
me.load(); me.load();
} },
} },
}); });
me.callParent(); me.callParent();
me.load(); me.load();
} },
}); });

View File

@ -28,10 +28,10 @@ Ext.define('PVE.CephCreateFS', {
listeners: { listeners: {
change: function(f, value) { change: function(f, value) {
this.up('pveCephCreateFS').setFSName(value); this.up('pveCephCreateFS').setFSName(value);
} },
}, },
submitValue: false, // already encoded in apicall URL submitValue: false, // already encoded in apicall URL
emptyText: 'cephfs' emptyText: 'cephfs',
}, },
{ {
xtype: 'proxmoxintegerfield', xtype: 'proxmoxintegerfield',
@ -41,7 +41,7 @@ Ext.define('PVE.CephCreateFS', {
emptyText: 128, emptyText: 128,
minValue: 8, minValue: 8,
maxValue: 32768, maxValue: 32768,
allowBlank: false allowBlank: false,
}, },
{ {
xtype: 'proxmoxcheckbox', xtype: 'proxmoxcheckbox',
@ -52,7 +52,7 @@ Ext.define('PVE.CephCreateFS', {
tag: 'div', tag: 'div',
'data-qtip': gettext('Add the new CephFS to the cluster storage configuration.'), 'data-qtip': gettext('Add the new CephFS to the cluster storage configuration.'),
}, },
} },
], ],
initComponent : function() { initComponent : function() {
@ -64,7 +64,7 @@ Ext.define('PVE.CephCreateFS', {
me.setFSName(); me.setFSName();
me.callParent(); me.callParent();
} },
}); });
Ext.define('PVE.NodeCephFSPanel', { Ext.define('PVE.NodeCephFSPanel', {
@ -79,21 +79,21 @@ Ext.define('PVE.NodeCephFSPanel', {
defaults: { defaults: {
border: false, border: false,
cbind: { cbind: {
nodename: '{nodename}' nodename: '{nodename}',
} },
}, },
viewModel: { viewModel: {
parent: null, parent: null,
data: { data: {
cephfsConfigured: false, cephfsConfigured: false,
mdsCount: 0 mdsCount: 0,
}, },
formulas: { formulas: {
canCreateFS: function(get) { canCreateFS: function(get) {
return (!get('cephfsConfigured') && get('mdsCount') > 0); return (!get('cephfsConfigured') && get('mdsCount') > 0);
} },
} },
}, },
items: [ items: [
@ -112,16 +112,16 @@ Ext.define('PVE.NodeCephFSPanel', {
storeid: 'pve-ceph-fs', storeid: 'pve-ceph-fs',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json/nodes/' + view.nodename + '/ceph/fs' url: '/api2/json/nodes/' + view.nodename + '/ceph/fs',
}, },
model: 'pve-ceph-fs' model: 'pve-ceph-fs',
}); });
view.setStore(Ext.create('Proxmox.data.DiffStore', { view.setStore(Ext.create('Proxmox.data.DiffStore', {
rstore: view.rstore, rstore: view.rstore,
sorters: { sorters: {
property: 'name', property: 'name',
order: 'DESC' order: 'DESC',
} },
})); }));
var regex = new RegExp("not (installed|initialized)", "i"); var regex = new RegExp("not (installed|initialized)", "i");
PVE.Utils.handleStoreErrorOrMask(view, view.rstore, regex, function(me, error){ PVE.Utils.handleStoreErrorOrMask(view, view.rstore, regex, function(me, error){
@ -131,7 +131,7 @@ Ext.define('PVE.NodeCephFSPanel', {
me.mon(win, 'cephInstallWindowClosed', function(){ me.mon(win, 'cephInstallWindowClosed', function(){
me.rstore.startUpdate(); me.rstore.startUpdate();
}); });
} },
); );
}); });
view.rstore.on('load', this.onLoad, this); view.rstore.on('load', this.onLoad, this);
@ -147,8 +147,8 @@ Ext.define('PVE.NodeCephFSPanel', {
listeners: { listeners: {
destroy: function() { destroy: function() {
view.rstore.startUpdate(); view.rstore.startUpdate();
} },
} },
}); });
}, },
@ -159,7 +159,7 @@ Ext.define('PVE.NodeCephFSPanel', {
return; return;
} }
vm.set('cephfsConfigured', true); vm.set('cephfsConfigured', true);
} },
}, },
tbar: [ tbar: [
{ {
@ -168,30 +168,30 @@ Ext.define('PVE.NodeCephFSPanel', {
handler: 'onCreate', handler: 'onCreate',
bind: { bind: {
// only one CephFS per Ceph cluster makes sense for now // only one CephFS per Ceph cluster makes sense for now
disabled: '{!canCreateFS}' disabled: '{!canCreateFS}',
} },
} },
], ],
columns: [ columns: [
{ {
header: gettext('Name'), header: gettext('Name'),
flex: 1, flex: 1,
dataIndex: 'name' dataIndex: 'name',
}, },
{ {
header: 'Data Pool', header: 'Data Pool',
flex: 1, flex: 1,
dataIndex: 'data_pool' dataIndex: 'data_pool',
}, },
{ {
header: 'Metadata Pool', header: 'Metadata Pool',
flex: 1, flex: 1,
dataIndex: 'metadata_pool' dataIndex: 'metadata_pool',
} },
], ],
cbind: { cbind: {
nodename: '{nodename}' nodename: '{nodename}',
} },
}, },
{ {
xtype: 'pveNodeCephServiceList', xtype: 'pveNodeCephServiceList',
@ -207,18 +207,18 @@ Ext.define('PVE.NodeCephFSPanel', {
vm.set('mdsCount', records.length); vm.set('mdsCount', records.length);
}, },
cbind: { cbind: {
nodename: '{nodename}' nodename: '{nodename}',
} },
} },
] ],
}, function() { }, function() {
Ext.define('pve-ceph-fs', { Ext.define('pve-ceph-fs', {
extend: 'Ext.data.Model', extend: 'Ext.data.Model',
fields: [ 'name', 'data_pool', 'metadata_pool' ], fields: [ 'name', 'data_pool', 'metadata_pool' ],
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/nodes/localhost/ceph/fs" url: "/api2/json/nodes/localhost/ceph/fs",
}, },
idProperty: 'name' idProperty: 'name',
}); });
}); });

View File

@ -12,10 +12,10 @@ Ext.define('PVE.ceph.Log', {
me.mon(win, 'cephInstallWindowClosed', function(){ me.mon(win, 'cephInstallWindowClosed', function(){
me.loadTask.delay(200); me.loadTask.delay(200);
}); });
} },
); );
if (!windowShow) { if (!windowShow) {
Proxmox.Utils.setErrorMask(me, msg); Proxmox.Utils.setErrorMask(me, msg);
} }
} },
}); });

View File

@ -9,12 +9,12 @@ Ext.define('PVE.node.CephMonMgrList', {
defaults: { defaults: {
border: false, border: false,
onlineHelp: 'chapter_pveceph', onlineHelp: 'chapter_pveceph',
flex: 1 flex: 1,
}, },
layout: { layout: {
type: 'vbox', type: 'vbox',
align: 'stretch' align: 'stretch',
}, },
items: [ items: [
@ -28,19 +28,19 @@ Ext.define('PVE.node.CephMonMgrList', {
width: 70, width: 70,
sortable: true, sortable: true,
renderer: Proxmox.Utils.format_boolean, renderer: Proxmox.Utils.format_boolean,
dataIndex: 'quorum' dataIndex: 'quorum',
} },
], ],
stateId: 'grid-ceph-monitor', stateId: 'grid-ceph-monitor',
showCephInstallMask: true, showCephInstallMask: true,
title: gettext('Monitor') title: gettext('Monitor'),
}, },
{ {
xtype: 'pveNodeCephServiceList', xtype: 'pveNodeCephServiceList',
type: 'mgr', type: 'mgr',
stateId: 'grid-ceph-manager', stateId: 'grid-ceph-manager',
cbind: { pveSelNode: '{pveSelNode}' }, cbind: { pveSelNode: '{pveSelNode}' },
title: gettext('Manager') title: gettext('Manager'),
} },
] ],
}); });

View File

@ -13,7 +13,7 @@ Ext.define('PVE.CephCreatePool', {
xtype: 'textfield', xtype: 'textfield',
fieldLabel: gettext('Name'), fieldLabel: gettext('Name'),
name: 'name', name: 'name',
allowBlank: false allowBlank: false,
}, },
{ {
xtype: 'proxmoxintegerfield', xtype: 'proxmoxintegerfield',
@ -22,7 +22,7 @@ Ext.define('PVE.CephCreatePool', {
value: 3, value: 3,
minValue: 1, minValue: 1,
maxValue: 7, maxValue: 7,
allowBlank: false allowBlank: false,
}, },
{ {
xtype: 'proxmoxintegerfield', xtype: 'proxmoxintegerfield',
@ -31,13 +31,13 @@ Ext.define('PVE.CephCreatePool', {
value: 2, value: 2,
minValue: 1, minValue: 1,
maxValue: 7, maxValue: 7,
allowBlank: false allowBlank: false,
}, },
{ {
xtype: 'pveCephRuleSelector', xtype: 'pveCephRuleSelector',
fieldLabel: 'Crush Rule', // do not localize fieldLabel: 'Crush Rule', // do not localize
name: 'crush_rule', name: 'crush_rule',
allowBlank: false allowBlank: false,
}, },
{ {
xtype: 'proxmoxKVComboBox', xtype: 'proxmoxKVComboBox',
@ -71,7 +71,7 @@ Ext.define('PVE.CephCreatePool', {
tag: 'div', tag: 'div',
'data-qtip': gettext('Add the new pool to the cluster storage configuration.'), 'data-qtip': gettext('Add the new pool to the cluster storage configuration.'),
}, },
} },
], ],
initComponent : function() { initComponent : function() {
var me = this; var me = this;
@ -83,12 +83,12 @@ Ext.define('PVE.CephCreatePool', {
Ext.apply(me, { Ext.apply(me, {
url: "/nodes/" + me.nodename + "/ceph/pools", url: "/nodes/" + me.nodename + "/ceph/pools",
defaults: { defaults: {
nodename: me.nodename nodename: me.nodename,
} },
}); });
me.callParent(); me.callParent();
} },
}); });
Ext.define('PVE.node.CephPoolList', { Ext.define('PVE.node.CephPoolList', {
@ -108,7 +108,7 @@ Ext.define('PVE.node.CephPoolList', {
header: gettext('Name'), header: gettext('Name'),
width: 120, width: 120,
sortable: true, sortable: true,
dataIndex: 'pool_name' dataIndex: 'pool_name',
}, },
{ {
header: gettext('Size') + '/min', header: gettext('Size') + '/min',
@ -117,7 +117,7 @@ Ext.define('PVE.node.CephPoolList', {
renderer: function(v, meta, rec) { renderer: function(v, meta, rec) {
return v + '/' + rec.data.min_size; return v + '/' + rec.data.min_size;
}, },
dataIndex: 'size' dataIndex: 'size',
}, },
{ {
text: 'Placement Groups', text: 'Placement Groups',
@ -126,15 +126,15 @@ Ext.define('PVE.node.CephPoolList', {
text: '# of PGs', // pg_num', text: '# of PGs', // pg_num',
width: 150, width: 150,
align: 'right', align: 'right',
dataIndex: 'pg_num' dataIndex: 'pg_num',
}, },
{ {
text: gettext('Autoscale'), text: gettext('Autoscale'),
width: 140, width: 140,
align: 'right', align: 'right',
dataIndex: 'pg_autoscale_mode' dataIndex: 'pg_autoscale_mode',
}, },
] ],
}, },
{ {
text: 'CRUSH Rule', text: 'CRUSH Rule',
@ -143,14 +143,14 @@ Ext.define('PVE.node.CephPoolList', {
text: 'ID', text: 'ID',
align: 'right', align: 'right',
width: 50, width: 50,
dataIndex: 'crush_rule' dataIndex: 'crush_rule',
}, },
{ {
text: gettext('Name'), text: gettext('Name'),
width: 150, width: 150,
dataIndex: 'crush_rule_name', dataIndex: 'crush_rule_name',
}, },
] ],
}, },
{ {
text: gettext('Used'), text: gettext('Used'),
@ -173,10 +173,10 @@ Ext.define('PVE.node.CephPoolList', {
align: 'right', align: 'right',
dataIndex: 'bytes_used', dataIndex: 'bytes_used',
summaryType: 'sum', summaryType: 'sum',
summaryRenderer: PVE.Utils.render_size summaryRenderer: PVE.Utils.render_size,
} },
] ],
} },
], ],
initComponent: function() { initComponent: function() {
var me = this; var me = this;
@ -194,8 +194,8 @@ Ext.define('PVE.node.CephPoolList', {
model: 'ceph-pool-list', model: 'ceph-pool-list',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/nodes/" + nodename + "/ceph/pools" url: "/api2/json/nodes/" + nodename + "/ceph/pools",
} },
}); });
var store = Ext.create('Proxmox.data.DiffStore', { rstore: rstore }); var store = Ext.create('Proxmox.data.DiffStore', { rstore: rstore });
@ -208,7 +208,7 @@ Ext.define('PVE.node.CephPoolList', {
me.mon(win, 'cephInstallWindowClosed', function(){ me.mon(win, 'cephInstallWindowClosed', function(){
me.store.rstore.startUpdate(); me.store.rstore.startUpdate();
}); });
} },
); );
}); });
@ -216,13 +216,13 @@ Ext.define('PVE.node.CephPoolList', {
text: gettext('Create'), text: gettext('Create'),
handler: function() { handler: function() {
var win = Ext.create('PVE.CephCreatePool', { var win = Ext.create('PVE.CephCreatePool', {
nodename: nodename nodename: nodename,
}); });
win.show(); win.show();
win.on('destroy', function() { win.on('destroy', function() {
rstore.load(); rstore.load();
}); });
} },
}); });
var destroy_btn = Ext.create('Proxmox.button.Button', { var destroy_btn = Ext.create('Proxmox.button.Button', {
@ -242,14 +242,14 @@ Ext.define('PVE.node.CephPoolList', {
showProgress: true, showProgress: true,
url: base_url, url: base_url,
params: { params: {
remove_storages: 1 remove_storages: 1,
}, },
item: { type: 'CephPool', id: rec.data.pool_name } item: { type: 'CephPool', id: rec.data.pool_name },
}).show(); }).show();
win.on('destroy', function() { win.on('destroy', function() {
rstore.load(); rstore.load();
}); });
} },
}); });
Ext.apply(me, { Ext.apply(me, {
@ -259,11 +259,11 @@ Ext.define('PVE.node.CephPoolList', {
listeners: { listeners: {
activate: () => rstore.startUpdate(), activate: () => rstore.startUpdate(),
destroy: () => rstore.stopUpdate(), destroy: () => rstore.stopUpdate(),
} },
}); });
me.callParent(); me.callParent();
} },
}, function() { }, function() {
Ext.define('ceph-pool-list', { Ext.define('ceph-pool-list', {
@ -276,9 +276,9 @@ Ext.define('PVE.node.CephPoolList', {
{ name: 'bytes_used', type: 'integer'}, { name: 'bytes_used', type: 'integer'},
{ name: 'percent_used', type: 'number'}, { name: 'percent_used', type: 'number'},
{ name: 'crush_rule', type: 'integer'}, { name: 'crush_rule', type: 'integer'},
{ name: 'crush_rule_name', type: 'string'} { name: 'crush_rule_name', type: 'string'},
], ],
idProperty: 'pool_name' idProperty: 'pool_name',
}); });
}); });
@ -304,12 +304,12 @@ Ext.define('PVE.form.CephRuleSelector', {
sorters: 'name', sorters: 'name',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json/nodes/' + me.nodename + '/ceph/rules' url: '/api2/json/nodes/' + me.nodename + '/ceph/rules',
} },
}); });
Ext.apply(me, { Ext.apply(me, {
store: store store: store,
}); });
me.callParent(); me.callParent();
@ -319,8 +319,8 @@ Ext.define('PVE.form.CephRuleSelector', {
if (success && rec.length > 0) { if (success && rec.length > 0) {
me.select(rec[0]); me.select(rec[0]);
} }
} },
}); });
} },
}); });

View File

@ -25,9 +25,9 @@ Ext.define('PVE.CephCreateService', {
change: function(f, value) { change: function(f, value) {
var me = this.up('pveCephCreateService'); var me = this.up('pveCephCreateService');
me.setNode(value); me.setNode(value);
} },
} },
} },
], ],
initComponent : function() { initComponent : function() {
@ -44,7 +44,7 @@ Ext.define('PVE.CephCreateService', {
me.setNode(me.nodename); me.setNode(me.nodename);
me.callParent(); me.callParent();
} },
}); });
Ext.define('PVE.node.CephServiceList', { Ext.define('PVE.node.CephServiceList', {
@ -126,8 +126,8 @@ Ext.define('PVE.node.CephServiceList', {
storeid: 'ceph-versions-' + view.type + '-list' + view.nodename, storeid: 'ceph-versions-' + view.type + '-list' + view.nodename,
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/cluster/ceph/metadata?scope=versions" url: "/api2/json/cluster/ceph/metadata?scope=versions",
} },
}); });
view.versionsstore.on('load', this.getMaxVersions, this); view.versionsstore.on('load', this.getMaxVersions, this);
@ -140,13 +140,13 @@ Ext.define('PVE.node.CephServiceList', {
model: 'ceph-service-list', model: 'ceph-service-list',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/nodes/" + view.nodename + "/ceph/" + view.type url: "/api2/json/nodes/" + view.nodename + "/ceph/" + view.type,
} },
}); });
view.setStore(Ext.create('Proxmox.data.DiffStore', { view.setStore(Ext.create('Proxmox.data.DiffStore', {
rstore: view.rstore, rstore: view.rstore,
sorters: [{ property: 'name' }] sorters: [{ property: 'name' }],
})); }));
if (view.storeLoadCallback) { if (view.storeLoadCallback) {
@ -163,7 +163,7 @@ Ext.define('PVE.node.CephServiceList', {
me.mon(win, 'cephInstallWindowClosed', function(){ me.mon(win, 'cephInstallWindowClosed', function(){
view.rstore.startUpdate(); view.rstore.startUpdate();
}); });
} },
); );
}); });
} }
@ -185,13 +185,13 @@ Ext.define('PVE.node.CephServiceList', {
upid: upid, upid: upid,
taskDone: function() { taskDone: function() {
view.rstore.load(); view.rstore.load();
} },
}); });
win.show(); win.show();
}, },
failure: function(response, opts) { failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus); Ext.Msg.alert(gettext('Error'), response.htmlStatus);
} },
}); });
}, },
onChangeService: function(btn) { onChangeService: function(btn) {
@ -216,8 +216,8 @@ Ext.define('PVE.node.CephServiceList', {
items: [{ items: [{
xtype: 'proxmoxLogView', xtype: 'proxmoxLogView',
url: url, url: url,
log_select_timespan: 1 log_select_timespan: 1,
}] }],
}); });
win.show(); win.show();
}, },
@ -231,9 +231,9 @@ Ext.define('PVE.node.CephServiceList', {
type: view.type, type: view.type,
taskDone: function() { taskDone: function() {
view.rstore.load(); view.rstore.load();
} },
}); });
} },
}, },
tbar: [ tbar: [
@ -247,7 +247,7 @@ Ext.define('PVE.node.CephServiceList', {
return rec.data.state === 'stopped' || return rec.data.state === 'stopped' ||
rec.data.state === 'unknown'; rec.data.state === 'unknown';
}, },
handler: 'onChangeService' handler: 'onChangeService',
}, },
{ {
xtype: 'proxmoxButton', xtype: 'proxmoxButton',
@ -258,7 +258,7 @@ Ext.define('PVE.node.CephServiceList', {
return rec.data.state !== 'stopped'; return rec.data.state !== 'stopped';
}, },
disabled: true, disabled: true,
handler: 'onChangeService' handler: 'onChangeService',
}, },
{ {
xtype: 'proxmoxButton', xtype: 'proxmoxButton',
@ -269,13 +269,13 @@ Ext.define('PVE.node.CephServiceList', {
enableFn: function(rec) { enableFn: function(rec) {
return rec.data.state !== 'stopped'; return rec.data.state !== 'stopped';
}, },
handler: 'onChangeService' handler: 'onChangeService',
}, },
'-', '-',
{ {
text: gettext('Create'), text: gettext('Create'),
reference: 'createButton', reference: 'createButton',
handler: 'onCreate' handler: 'onCreate',
}, },
{ {
text: gettext('Destroy'), text: gettext('Destroy'),
@ -299,18 +299,18 @@ Ext.define('PVE.node.CephServiceList', {
upid: upid, upid: upid,
taskDone: function() { taskDone: function() {
view.rstore.load(); view.rstore.load();
} },
}); });
win.show(); win.show();
} },
}, },
'-', '-',
{ {
xtype: 'proxmoxButton', xtype: 'proxmoxButton',
text: gettext('Syslog'), text: gettext('Syslog'),
disabled: true, disabled: true,
handler: 'showSyslog' handler: 'showSyslog',
} },
], ],
columns: [ columns: [
@ -321,7 +321,7 @@ Ext.define('PVE.node.CephServiceList', {
renderer: function(v) { renderer: function(v) {
return this.type + '.' + v; return this.type + '.' + v;
}, },
dataIndex: 'name' dataIndex: 'name',
}, },
{ {
header: gettext('Host'), header: gettext('Host'),
@ -330,13 +330,13 @@ Ext.define('PVE.node.CephServiceList', {
renderer: function(v) { renderer: function(v) {
return v || Proxmox.Utils.unknownText; return v || Proxmox.Utils.unknownText;
}, },
dataIndex: 'host' dataIndex: 'host',
}, },
{ {
header: gettext('Status'), header: gettext('Status'),
flex: 1, flex: 1,
sortable: false, sortable: false,
dataIndex: 'state' dataIndex: 'state',
}, },
{ {
header: gettext('Address'), header: gettext('Address'),
@ -345,7 +345,7 @@ Ext.define('PVE.node.CephServiceList', {
renderer: function(v) { renderer: function(v) {
return v || Proxmox.Utils.unknownText; return v || Proxmox.Utils.unknownText;
}, },
dataIndex: 'addr' dataIndex: 'addr',
}, },
{ {
header: gettext('Version'), header: gettext('Version'),
@ -353,7 +353,7 @@ Ext.define('PVE.node.CephServiceList', {
sortable: true, sortable: true,
dataIndex: 'version', dataIndex: 'version',
renderer: 'render_version', renderer: 'render_version',
} },
], ],
initComponent: function() { initComponent: function() {
@ -364,7 +364,7 @@ Ext.define('PVE.node.CephServiceList', {
} }
me.callParent(); me.callParent();
} },
}, function() { }, function() {
@ -374,8 +374,8 @@ Ext.define('PVE.node.CephServiceList', {
'ceph_version', 'ceph_version_short', 'ceph_version', 'ceph_version_short',
{ type: 'string', name: 'version', calculate: function(data) { { type: 'string', name: 'version', calculate: function(data) {
return PVE.Utils.parse_ceph_version(data); return PVE.Utils.parse_ceph_version(data);
} } } },
], ],
idProperty: 'name' idProperty: 'name',
}); });
}); });

View File

@ -4,15 +4,15 @@ Ext.define('PVE.ceph.Services', {
layout: { layout: {
type: 'hbox', type: 'hbox',
align: 'stretch' align: 'stretch',
}, },
bodyPadding: '0 5 20', bodyPadding: '0 5 20',
defaults: { defaults: {
xtype: 'box', xtype: 'box',
style: { style: {
'text-align':'center' 'text-align':'center',
} },
}, },
items: [ items: [
@ -20,20 +20,20 @@ Ext.define('PVE.ceph.Services', {
flex: 1, flex: 1,
xtype: 'pveCephServiceList', xtype: 'pveCephServiceList',
itemId: 'mons', itemId: 'mons',
title: gettext('Monitors') title: gettext('Monitors'),
}, },
{ {
flex: 1, flex: 1,
xtype: 'pveCephServiceList', xtype: 'pveCephServiceList',
itemId: 'mgrs', itemId: 'mgrs',
title: gettext('Managers') title: gettext('Managers'),
}, },
{ {
flex: 1, flex: 1,
xtype: 'pveCephServiceList', xtype: 'pveCephServiceList',
itemId: 'mdss', itemId: 'mdss',
title: gettext('Meta Data Servers') title: gettext('Meta Data Servers'),
} },
], ],
updateAll: function(metadata, status) { updateAll: function(metadata, status) {
@ -45,7 +45,7 @@ Ext.define('PVE.ceph.Services', {
'HEALTH_WARN': 2, 'HEALTH_WARN': 2,
'HEALTH_UPGRADE': 3, 'HEALTH_UPGRADE': 3,
'HEALTH_OLD': 4, 'HEALTH_OLD': 4,
'HEALTH_OK': 5 'HEALTH_OK': 5,
}; };
var healthmap = [ var healthmap = [
'HEALTH_UNKNOWN', 'HEALTH_UNKNOWN',
@ -53,7 +53,7 @@ Ext.define('PVE.ceph.Services', {
'HEALTH_WARN', 'HEALTH_WARN',
'HEALTH_UPGRADE', 'HEALTH_UPGRADE',
'HEALTH_OLD', 'HEALTH_OLD',
'HEALTH_OK' 'HEALTH_OK',
]; ];
var reduceFn = function(first, second) { var reduceFn = function(first, second) {
return first + '\n' + second.message; return first + '\n' + second.message;
@ -87,14 +87,14 @@ Ext.define('PVE.ceph.Services', {
if (!monmessages[monid]) { if (!monmessages[monid]) {
monmessages[monid] = { monmessages[monid] = {
worstSeverity: healthstates.HEALTH_OK, worstSeverity: healthstates.HEALTH_OK,
messages: [] messages: [],
}; };
} }
monmessages[monid].messages.push( monmessages[monid].messages.push(
PVE.Utils.get_ceph_icon_html(value.severity, true) + PVE.Utils.get_ceph_icon_html(value.severity, true) +
Ext.Array.reduce(value.detail, reduceFn, '') Ext.Array.reduce(value.detail, reduceFn, ''),
); );
if (healthstates[value.severity] < monmessages[monid].worstSeverity) { if (healthstates[value.severity] < monmessages[monid].worstSeverity) {
monmessages[monid].worstSeverity = healthstates[value.severity]; monmessages[monid].worstSeverity = healthstates[value.severity];
@ -153,7 +153,7 @@ Ext.define('PVE.ceph.Services', {
} }
return mds; return mds;
} },
}; };
for (let type of ['mon', 'mgr', 'mds']) { for (let type of ['mon', 'mgr', 'mds']) {
@ -174,12 +174,12 @@ Ext.define('PVE.ceph.Services', {
host: host, host: host,
version: PVE.Utils.parse_ceph_version(metadata[type][id]), version: PVE.Utils.parse_ceph_version(metadata[type][id]),
service: metadata[type][id].service, service: metadata[type][id].service,
addr: metadata[type][id].addr || metadata[type][id].addrs || Proxmox.Utils.unknownText addr: metadata[type][id].addr || metadata[type][id].addrs || Proxmox.Utils.unknownText,
}; };
result.statuses = [ result.statuses = [
gettext('Host') + ": " + result.host, gettext('Host') + ": " + result.host,
gettext('Address') + ": " + result.addr gettext('Address') + ": " + result.addr,
]; ];
if (checks[type]) { if (checks[type]) {
@ -189,7 +189,7 @@ Ext.define('PVE.ceph.Services', {
if (result.service && !result.version) { if (result.service && !result.version) {
result.messages.push( result.messages.push(
PVE.Utils.get_ceph_icon_html('HEALTH_UNKNOWN', true) + PVE.Utils.get_ceph_icon_html('HEALTH_UNKNOWN', true) +
gettext('Stopped') gettext('Stopped'),
); );
result.health = healthstates.HEALTH_UNKNOWN; result.health = healthstates.HEALTH_UNKNOWN;
} }
@ -208,7 +208,7 @@ Ext.define('PVE.ceph.Services', {
} }
result.messages.push( result.messages.push(
PVE.Utils.get_ceph_icon_html('HEALTH_OLD', true) + PVE.Utils.get_ceph_icon_html('HEALTH_OLD', true) +
gettext('A newer version was installed but old version still running, please restart') gettext('A newer version was installed but old version still running, please restart'),
); );
} else { } else {
if (result.health > healthstates.HEALTH_UPGRADE) { if (result.health > healthstates.HEALTH_UPGRADE) {
@ -216,7 +216,7 @@ Ext.define('PVE.ceph.Services', {
} }
result.messages.push( result.messages.push(
PVE.Utils.get_ceph_icon_html('HEALTH_UPGRADE', true) + PVE.Utils.get_ceph_icon_html('HEALTH_UPGRADE', true) +
gettext('Other cluster members use a newer version of this service, please upgrade and restart') gettext('Other cluster members use a newer version of this service, please upgrade and restart'),
); );
} }
} }
@ -234,7 +234,7 @@ Ext.define('PVE.ceph.Services', {
me.getComponent('mons').updateAll(Object.values(me.mon)); me.getComponent('mons').updateAll(Object.values(me.mon));
me.getComponent('mgrs').updateAll(Object.values(me.mgr)); me.getComponent('mgrs').updateAll(Object.values(me.mgr));
me.getComponent('mdss').updateAll(Object.values(me.mds)); me.getComponent('mdss').updateAll(Object.values(me.mds));
} },
}); });
Ext.define('PVE.ceph.ServiceList', { Ext.define('PVE.ceph.ServiceList', {
@ -242,23 +242,23 @@ Ext.define('PVE.ceph.ServiceList', {
xtype: 'pveCephServiceList', xtype: 'pveCephServiceList',
style: { style: {
'text-align':'center' 'text-align':'center',
}, },
defaults: { defaults: {
xtype: 'box', xtype: 'box',
style: { style: {
'text-align':'center' 'text-align':'center',
} },
}, },
items: [ items: [
{ {
itemId: 'title', itemId: 'title',
data: { data: {
title: '' title: '',
}, },
tpl: '<h3>{title}</h3>' tpl: '<h3>{title}</h3>',
} },
], ],
updateAll: function(list) { updateAll: function(list) {
@ -279,7 +279,7 @@ Ext.define('PVE.ceph.ServiceList', {
// we can add it at the service+1 position (because of the title) // we can add it at the service+1 position (because of the title)
service = me.insert(i+1, { service = me.insert(i+1, {
xtype: 'pveCephServiceWidget', xtype: 'pveCephServiceWidget',
itemId: list[i].id itemId: list[i].id,
}); });
if (!me.ids) { if (!me.ids) {
me.ids = []; me.ids = [];
@ -302,9 +302,9 @@ Ext.define('PVE.ceph.ServiceList', {
var me = this; var me = this;
me.callParent(); me.callParent();
me.getComponent('title').update({ me.getComponent('title').update({
title: me.title title: me.title,
}); });
} },
}); });
Ext.define('PVE.ceph.ServiceWidget', { Ext.define('PVE.ceph.ServiceWidget', {
@ -316,12 +316,12 @@ Ext.define('PVE.ceph.ServiceWidget', {
title: '0', title: '0',
health: 'HEALTH_ERR', health: 'HEALTH_ERR',
text: '', text: '',
iconCls: PVE.Utils.get_health_icon() iconCls: PVE.Utils.get_health_icon(),
}, },
tpl: [ tpl: [
'{title}: ', '{title}: ',
'<i class="fa fa-fw {iconCls}"></i>' '<i class="fa fa-fw {iconCls}"></i>',
], ],
updateService: function(title, text, health) { updateService: function(title, text, health) {
@ -331,7 +331,7 @@ Ext.define('PVE.ceph.ServiceWidget', {
health: health, health: health,
text: text, text: text,
title: title, title: title,
iconCls: PVE.Utils.get_health_icon(PVE.Utils.map_ceph_health[health]) iconCls: PVE.Utils.get_health_icon(PVE.Utils.map_ceph_health[health]),
})); }));
if (me.tooltip) { if (me.tooltip) {
@ -360,11 +360,11 @@ Ext.define('PVE.ceph.ServiceWidget', {
trackMouse: true, trackMouse: true,
dismissDelay: 0, dismissDelay: 0,
renderTo: Ext.getBody(), renderTo: Ext.getBody(),
html: me.data.text html: me.data.text,
}); });
} }
me.tooltip.show(); me.tooltip.show();
} },
}, },
mouseleave: { mouseleave: {
element: 'el', element: 'el',
@ -374,7 +374,7 @@ Ext.define('PVE.ceph.ServiceWidget', {
me.tooltip.destroy(); me.tooltip.destroy();
delete me.tooltip; delete me.tooltip;
} }
} },
} },
} },
}); });

View File

@ -9,11 +9,11 @@ Ext.define('PVE.node.CephStatus', {
bodyPadding: 5, bodyPadding: 5,
layout: { layout: {
type: 'column' type: 'column',
}, },
defaults: { defaults: {
padding: 5 padding: 5,
}, },
items: [ items: [
@ -25,16 +25,16 @@ Ext.define('PVE.node.CephStatus', {
responsiveConfig: { responsiveConfig: {
'width < 1900': { 'width < 1900': {
minHeight: 230, minHeight: 230,
columnWidth: 1 columnWidth: 1,
}, },
'width >= 1900': { 'width >= 1900': {
minHeight: 500, minHeight: 500,
columnWidth: 0.5 columnWidth: 0.5,
} },
}, },
layout: { layout: {
type: 'hbox', type: 'hbox',
align: 'stretch' align: 'stretch',
}, },
items: [ items: [
{ {
@ -49,7 +49,7 @@ Ext.define('PVE.node.CephStatus', {
flex: 1, flex: 1,
itemId: 'overallhealth', itemId: 'overallhealth',
xtype: 'pveHealthWidget', xtype: 'pveHealthWidget',
title: gettext('Status') title: gettext('Status'),
}, },
{ {
itemId: 'versioninfo', itemId: 'versioninfo',
@ -64,7 +64,7 @@ Ext.define('PVE.node.CephStatus', {
style: { style: {
'text-align': 'center', 'text-align': 'center',
}, },
} },
], ],
}, },
{ {
@ -93,16 +93,16 @@ Ext.define('PVE.node.CephStatus', {
return '<i class="fa fa-fw ' + classes + '"></i>'; return '<i class="fa fa-fw ' + classes + '"></i>';
}, },
sorter: { sorter: {
sorterFn: function(a,b) { sorterFn: function(a, b) {
var healthArr = ['HEALTH_ERR', 'HEALTH_WARN', 'HEALTH_OK']; var healthArr = ['HEALTH_ERR', 'HEALTH_WARN', 'HEALTH_OK'];
return healthArr.indexOf(b.data.severity) - healthArr.indexOf(a.data.severity); return healthArr.indexOf(b.data.severity) - healthArr.indexOf(a.data.severity);
} },
} },
}, },
{ {
dataIndex: 'summary', dataIndex: 'summary',
header: gettext('Summary'), header: gettext('Summary'),
flex: 1 flex: 1,
}, },
{ {
xtype: 'actioncolumn', xtype: 'actioncolumn',
@ -120,7 +120,7 @@ Ext.define('PVE.node.CephStatus', {
width: 650, width: 650,
height: 400, height: 400,
layout: { layout: {
type: 'fit' type: 'fit',
}, },
items: [{ items: [{
scrollable: true, scrollable: true,
@ -128,18 +128,18 @@ Ext.define('PVE.node.CephStatus', {
xtype: 'box', xtype: 'box',
html: [ html: [
'<span>' + Ext.htmlEncode(record.data.summary) + '</span>', '<span>' + Ext.htmlEncode(record.data.summary) + '</span>',
'<pre>' + Ext.htmlEncode(record.data.detail) + '</pre>' '<pre>' + Ext.htmlEncode(record.data.detail) + '</pre>',
] ],
}] }],
}); });
win.show(); win.show();
} },
} },
] ],
} },
] ],
} },
] ],
}, },
{ {
xtype: 'pveCephStatusDetail', xtype: 'pveCephStatusDetail',
@ -148,14 +148,14 @@ Ext.define('PVE.node.CephStatus', {
responsiveConfig: { responsiveConfig: {
'width < 1900': { 'width < 1900': {
columnWidth: 1, columnWidth: 1,
minHeight: 250 minHeight: 250,
}, },
'width >= 1900': { 'width >= 1900': {
columnWidth: 0.5, columnWidth: 0.5,
minHeight: 300 minHeight: 300,
} },
}, },
title: gettext('Status') title: gettext('Status'),
}, },
{ {
title: gettext('Services'), title: gettext('Services'),
@ -164,18 +164,18 @@ Ext.define('PVE.node.CephStatus', {
plugins: 'responsive', plugins: 'responsive',
layout: { layout: {
type: 'hbox', type: 'hbox',
align: 'stretch' align: 'stretch',
}, },
responsiveConfig: { responsiveConfig: {
'width < 1900': { 'width < 1900': {
columnWidth: 1, columnWidth: 1,
minHeight: 200 minHeight: 200,
}, },
'width >= 1900': { 'width >= 1900': {
columnWidth: 0.5, columnWidth: 0.5,
minHeight: 200 minHeight: 200,
} },
} },
}, },
{ {
xtype: 'panel', xtype: 'panel',
@ -184,7 +184,7 @@ Ext.define('PVE.node.CephStatus', {
bodyPadding: 5, bodyPadding: 5,
layout: { layout: {
type: 'hbox', type: 'hbox',
align: 'center' align: 'center',
}, },
items: [ items: [
{ {
@ -194,7 +194,7 @@ Ext.define('PVE.node.CephStatus', {
{ {
xtype: 'proxmoxGauge', xtype: 'proxmoxGauge',
itemId: 'space', itemId: 'space',
title: gettext('Usage') title: gettext('Usage'),
}, },
{ {
flex: 1, flex: 1,
@ -217,46 +217,46 @@ Ext.define('PVE.node.CephStatus', {
xtype: 'progressbar', xtype: 'progressbar',
itemId: 'recoveryprogress', itemId: 'recoveryprogress',
}, },
] ],
}, },
] ],
}, },
{ {
flex: 2, flex: 2,
xtype: 'container', xtype: 'container',
defaults: { defaults: {
padding: 0, padding: 0,
height: 100 height: 100,
}, },
items: [ items: [
{ {
itemId: 'reads', itemId: 'reads',
xtype: 'pveRunningChart', xtype: 'pveRunningChart',
title: gettext('Reads'), title: gettext('Reads'),
renderer: PVE.Utils.render_bandwidth renderer: PVE.Utils.render_bandwidth,
}, },
{ {
itemId: 'writes', itemId: 'writes',
xtype: 'pveRunningChart', xtype: 'pveRunningChart',
title: gettext('Writes'), title: gettext('Writes'),
renderer: PVE.Utils.render_bandwidth renderer: PVE.Utils.render_bandwidth,
}, },
{ {
itemId: 'readiops', itemId: 'readiops',
xtype: 'pveRunningChart', xtype: 'pveRunningChart',
title: 'IOPS: ' + gettext('Reads'), title: 'IOPS: ' + gettext('Reads'),
renderer: Ext.util.Format.numberRenderer('0,000') renderer: Ext.util.Format.numberRenderer('0,000'),
}, },
{ {
itemId: 'writeiops', itemId: 'writeiops',
xtype: 'pveRunningChart', xtype: 'pveRunningChart',
title: 'IOPS: ' + gettext('Writes'), title: 'IOPS: ' + gettext('Writes'),
renderer: Ext.util.Format.numberRenderer('0,000') renderer: Ext.util.Format.numberRenderer('0,000'),
}, },
] ],
} },
] ],
} },
], ],
generateCheckData: function(health) { generateCheckData: function(health) {
@ -274,9 +274,9 @@ Ext.define('PVE.node.CephStatus', {
function(first, second) { function(first, second) {
return first + '\n' + second.message; return first + '\n' + second.message;
}, },
'' '',
), ),
severity: checks[key].severity severity: checks[key].severity,
}); });
}); });
@ -310,7 +310,7 @@ Ext.define('PVE.node.CephStatus', {
var text = Ext.String.format(gettext('{0} of {1}'), var text = Ext.String.format(gettext('{0} of {1}'),
PVE.Utils.render_size(used), PVE.Utils.render_size(used),
PVE.Utils.render_size(total) PVE.Utils.render_size(total),
); );
// update the usage widget // update the usage widget
@ -369,8 +369,8 @@ Ext.define('PVE.node.CephStatus', {
interval: 5000, interval: 5000,
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: baseurl + '/status' url: baseurl + '/status',
} },
}); });
me.metadatastore = Ext.create('Proxmox.data.UpdateStore', { me.metadatastore = Ext.create('Proxmox.data.UpdateStore', {
@ -378,8 +378,8 @@ Ext.define('PVE.node.CephStatus', {
interval: 15*1000, interval: 15*1000,
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json/cluster/ceph/metadata' url: '/api2/json/cluster/ceph/metadata',
} },
}); });
// save references for the updatefunction // save references for the updatefunction
@ -397,7 +397,7 @@ Ext.define('PVE.node.CephStatus', {
me.mon(win, 'cephInstallWindowClosed', function(){ me.mon(win, 'cephInstallWindowClosed', function(){
me.store.startUpdate(); me.store.startUpdate();
}); });
} },
); );
}); });
@ -431,6 +431,6 @@ Ext.define('PVE.node.CephStatus', {
me.on('destroy', me.metadatastore.stopUpdate); me.on('destroy', me.metadatastore.stopUpdate);
me.store.startUpdate(); me.store.startUpdate();
me.metadatastore.startUpdate(); me.metadatastore.startUpdate();
} },
}); });

View File

@ -4,15 +4,15 @@ Ext.define('PVE.ceph.StatusDetail', {
layout: { layout: {
type: 'hbox', type: 'hbox',
align: 'stretch' align: 'stretch',
}, },
bodyPadding: '0 5', bodyPadding: '0 5',
defaults: { defaults: {
xtype: 'box', xtype: 'box',
style: { style: {
'text-align':'center' 'text-align':'center',
} },
}, },
items: [{ items: [{
@ -27,7 +27,7 @@ Ext.define('PVE.ceph.StatusDetail', {
upout: 0, upout: 0,
downin: 0, downin: 0,
downout: 0, downout: 0,
oldosds: [] oldosds: [],
}, },
tpl: [ tpl: [
'<h3>' + 'OSDs' + '</h3>', '<h3>' + 'OSDs' + '</h3>',
@ -68,8 +68,8 @@ Ext.define('PVE.ceph.StatusDetail', {
'<div style="clear:both"></div>', '<div style="clear:both"></div>',
'</tpl>', '</tpl>',
'</div>', '</div>',
'</tpl>' '</tpl>',
] ],
}, },
{ {
flex: 1, flex: 1,
@ -83,7 +83,7 @@ Ext.define('PVE.ceph.StatusDetail', {
'#CFCFCF', '#CFCFCF',
'#21BF4B', '#21BF4B',
'#FFCC00', '#FFCC00',
'#FF6C59' '#FF6C59',
], ],
store: { }, store: { },
series: [ series: [
@ -101,13 +101,13 @@ Ext.define('PVE.ceph.StatusDetail', {
state.state_name + ': ' + state.count.toString(); state.state_name + ': ' + state.count.toString();
}); });
tooltip.setHtml(html); tooltip.setHtml(html);
} },
}, },
subStyle: { subStyle: {
strokeStyle: false strokeStyle: false,
} },
} },
] ],
}, },
{ {
flex: 1.6, flex: 1.6,
@ -116,7 +116,7 @@ Ext.define('PVE.ceph.StatusDetail', {
maxHeight: 250, maxHeight: 250,
scrollable: true, scrollable: true,
data: { data: {
states: [] states: [],
}, },
tpl: [ tpl: [
'<h3>' + 'PGs' + '</h3>', '<h3>' + 'PGs' + '</h3>',
@ -124,8 +124,8 @@ Ext.define('PVE.ceph.StatusDetail', {
'<div class="left-aligned"><i class ="fa fa-circle {cls}"></i> {state_name}:</div>', '<div class="left-aligned"><i class ="fa fa-circle {cls}"></i> {state_name}:</div>',
'<div class="right-aligned">{count}</div><br />', '<div class="right-aligned">{count}</div><br />',
'<div style="clear:both"></div>', '<div style="clear:both"></div>',
'</tpl>' '</tpl>',
] ],
}], }],
// similar to mgr dashboard // similar to mgr dashboard
@ -163,7 +163,7 @@ Ext.define('PVE.ceph.StatusDetail', {
recovery_unfound: 3, recovery_unfound: 3,
snaptrim_error: 3, snaptrim_error: 3,
stale: 3, stale: 3,
undersized: 3 undersized: 3,
}, },
statecategories: [ statecategories: [
@ -171,20 +171,20 @@ Ext.define('PVE.ceph.StatusDetail', {
text: gettext('Unknown'), text: gettext('Unknown'),
count: 0, count: 0,
states: [], states: [],
cls: 'faded' cls: 'faded',
}, },
{ {
text: gettext('Clean'), text: gettext('Clean'),
cls: 'good' cls: 'good',
}, },
{ {
text: gettext('Working'), text: gettext('Working'),
cls: 'warning' cls: 'warning',
}, },
{ {
text: gettext('Error'), text: gettext('Error'),
cls: 'critical' cls: 'critical',
} },
], ],
updateAll: function(metadata, status) { updateAll: function(metadata, status) {
@ -206,7 +206,7 @@ Ext.define('PVE.ceph.StatusDetail', {
if (version != maxversion) { if (version != maxversion) {
oldosds.push({ oldosds.push({
id: osd.id, id: osd.id,
version: version version: version,
}); });
} }
}); });
@ -215,7 +215,7 @@ Ext.define('PVE.ceph.StatusDetail', {
// update PGs sorted // update PGs sorted
var pgmap = status.pgmap || {}; var pgmap = status.pgmap || {};
var pgs_by_state = pgmap.pgs_by_state || []; var pgs_by_state = pgmap.pgs_by_state || [];
pgs_by_state.sort(function(a,b){ pgs_by_state.sort(function(a, b){
return (a.state_name < b.state_name)?-1:(a.state_name === b.state_name)?0:1; return (a.state_name < b.state_name)?-1:(a.state_name === b.state_name)?0:1;
}); });
@ -253,7 +253,7 @@ Ext.define('PVE.ceph.StatusDetail', {
if (key === 'OSD_DOWN') { if (key === 'OSD_DOWN') {
found = value.summary.message.match(downinregex); found = value.summary.message.match(downinregex);
if (found !== null) { if (found !== null) {
downin_osds = parseInt(found[1],10); downin_osds = parseInt(found[1], 10);
} }
} }
}); });
@ -278,13 +278,13 @@ Ext.define('PVE.ceph.StatusDetail', {
upout: upout_osds, upout: upout_osds,
downin: downin_osds, downin: downin_osds,
downout: downout_osds, downout: downout_osds,
oldosds: oldosds oldosds: oldosds,
}; };
var osdcomponent = me.getComponent('osds'); var osdcomponent = me.getComponent('osds');
osdcomponent.update(Ext.apply(osdcomponent.data, osds)); osdcomponent.update(Ext.apply(osdcomponent.data, osds));
me.suspendLayout = false; me.suspendLayout = false;
me.updateLayout(); me.updateLayout();
} },
}); });

View File

@ -15,7 +15,7 @@ Ext.define('PVE.controller.StorageEdit', {
maxfiles.reset(); maxfiles.reset();
} }
maxfiles.setDisabled(!hasBackups); maxfiles.setDisabled(!hasBackups);
} },
} },
} },
}); });

View File

@ -65,14 +65,14 @@ Ext.define('PVE.data.ResourceStore', {
renderer: PVE.Utils.render_resource_type, renderer: PVE.Utils.render_resource_type,
sortable: true, sortable: true,
hideable: false, hideable: false,
width: 100 width: 100,
}, },
id: { id: {
header: 'ID', header: 'ID',
type: 'string', type: 'string',
hidden: true, hidden: true,
sortable: true, sortable: true,
width: 80 width: 80,
}, },
running: { running: {
header: gettext('Online'), header: gettext('Online'),
@ -82,7 +82,7 @@ Ext.define('PVE.data.ResourceStore', {
convert: function(value, record) { convert: function(value, record) {
var info = record.data; var info = record.data;
return (Ext.isNumeric(info.uptime) && (info.uptime > 0)); return (Ext.isNumeric(info.uptime) && (info.uptime > 0));
} },
}, },
text: { text: {
header: gettext('Description'), header: gettext('Description'),
@ -110,20 +110,20 @@ Ext.define('PVE.data.ResourceStore', {
} }
return text; return text;
} },
}, },
vmid: { vmid: {
header: 'VMID', header: 'VMID',
type: 'integer', type: 'integer',
hidden: true, hidden: true,
sortable: true, sortable: true,
width: 80 width: 80,
}, },
name: { name: {
header: gettext('Name'), header: gettext('Name'),
hidden: true, hidden: true,
sortable: true, sortable: true,
type: 'string' type: 'string',
}, },
disk: { disk: {
header: gettext('Disk usage'), header: gettext('Disk usage'),
@ -131,7 +131,7 @@ Ext.define('PVE.data.ResourceStore', {
renderer: PVE.Utils.render_disk_usage, renderer: PVE.Utils.render_disk_usage,
sortable: true, sortable: true,
width: 100, width: 100,
hidden: true hidden: true,
}, },
diskuse: { diskuse: {
header: gettext('Disk usage') + " %", header: gettext('Disk usage') + " %",
@ -140,7 +140,7 @@ Ext.define('PVE.data.ResourceStore', {
renderer: PVE.Utils.render_disk_usage_percent, renderer: PVE.Utils.render_disk_usage_percent,
width: 100, width: 100,
calculate: PVE.Utils.calculate_disk_usage, calculate: PVE.Utils.calculate_disk_usage,
sortType: 'asFloat' sortType: 'asFloat',
}, },
maxdisk: { maxdisk: {
header: gettext('Disk size'), header: gettext('Disk size'),
@ -148,7 +148,7 @@ Ext.define('PVE.data.ResourceStore', {
renderer: PVE.Utils.render_size, renderer: PVE.Utils.render_size,
sortable: true, sortable: true,
hidden: true, hidden: true,
width: 100 width: 100,
}, },
mem: { mem: {
header: gettext('Memory usage'), header: gettext('Memory usage'),
@ -156,7 +156,7 @@ Ext.define('PVE.data.ResourceStore', {
renderer: PVE.Utils.render_mem_usage, renderer: PVE.Utils.render_mem_usage,
sortable: true, sortable: true,
hidden: true, hidden: true,
width: 100 width: 100,
}, },
memuse: { memuse: {
header: gettext('Memory usage') + " %", header: gettext('Memory usage') + " %",
@ -165,7 +165,7 @@ Ext.define('PVE.data.ResourceStore', {
calculate: PVE.Utils.calculate_mem_usage, calculate: PVE.Utils.calculate_mem_usage,
sortType: 'asFloat', sortType: 'asFloat',
sortable: true, sortable: true,
width: 100 width: 100,
}, },
maxmem: { maxmem: {
header: gettext('Memory size'), header: gettext('Memory size'),
@ -173,21 +173,21 @@ Ext.define('PVE.data.ResourceStore', {
renderer: PVE.Utils.render_size, renderer: PVE.Utils.render_size,
hidden: true, hidden: true,
sortable: true, sortable: true,
width: 100 width: 100,
}, },
cpu: { cpu: {
header: gettext('CPU usage'), header: gettext('CPU usage'),
type: 'float', type: 'float',
renderer: PVE.Utils.render_cpu, renderer: PVE.Utils.render_cpu,
sortable: true, sortable: true,
width: 100 width: 100,
}, },
maxcpu: { maxcpu: {
header: gettext('maxcpu'), header: gettext('maxcpu'),
type: 'integer', type: 'integer',
hidden: true, hidden: true,
sortable: true, sortable: true,
width: 60 width: 60,
}, },
diskread: { diskread: {
header: gettext('Total Disk Read'), header: gettext('Total Disk Read'),
@ -195,7 +195,7 @@ Ext.define('PVE.data.ResourceStore', {
hidden: true, hidden: true,
sortable: true, sortable: true,
renderer: Proxmox.Utils.format_size, renderer: Proxmox.Utils.format_size,
width: 100 width: 100,
}, },
diskwrite: { diskwrite: {
header: gettext('Total Disk Write'), header: gettext('Total Disk Write'),
@ -203,7 +203,7 @@ Ext.define('PVE.data.ResourceStore', {
hidden: true, hidden: true,
sortable: true, sortable: true,
renderer: Proxmox.Utils.format_size, renderer: Proxmox.Utils.format_size,
width: 100 width: 100,
}, },
netin: { netin: {
header: gettext('Total NetIn'), header: gettext('Total NetIn'),
@ -211,7 +211,7 @@ Ext.define('PVE.data.ResourceStore', {
hidden: true, hidden: true,
sortable: true, sortable: true,
renderer: Proxmox.Utils.format_size, renderer: Proxmox.Utils.format_size,
width: 100 width: 100,
}, },
netout: { netout: {
header: gettext('Total NetOut'), header: gettext('Total NetOut'),
@ -219,64 +219,64 @@ Ext.define('PVE.data.ResourceStore', {
hidden: true, hidden: true,
sortable: true, sortable: true,
renderer: Proxmox.Utils.format_size, renderer: Proxmox.Utils.format_size,
width: 100 width: 100,
}, },
template: { template: {
header: gettext('Template'), header: gettext('Template'),
type: 'integer', type: 'integer',
hidden: true, hidden: true,
sortable: true, sortable: true,
width: 60 width: 60,
}, },
uptime: { uptime: {
header: gettext('Uptime'), header: gettext('Uptime'),
type: 'integer', type: 'integer',
renderer: Proxmox.Utils.render_uptime, renderer: Proxmox.Utils.render_uptime,
sortable: true, sortable: true,
width: 110 width: 110,
}, },
node: { node: {
header: gettext('Node'), header: gettext('Node'),
type: 'string', type: 'string',
hidden: true, hidden: true,
sortable: true, sortable: true,
width: 110 width: 110,
}, },
storage: { storage: {
header: gettext('Storage'), header: gettext('Storage'),
type: 'string', type: 'string',
hidden: true, hidden: true,
sortable: true, sortable: true,
width: 110 width: 110,
}, },
pool: { pool: {
header: gettext('Pool'), header: gettext('Pool'),
type: 'string', type: 'string',
hidden: true, hidden: true,
sortable: true, sortable: true,
width: 110 width: 110,
}, },
hastate: { hastate: {
header: gettext('HA State'), header: gettext('HA State'),
type: 'string', type: 'string',
defaultValue: 'unmanaged', defaultValue: 'unmanaged',
hidden: true, hidden: true,
sortable: true sortable: true,
}, },
status: { status: {
header: gettext('Status'), header: gettext('Status'),
type: 'string', type: 'string',
hidden: true, hidden: true,
sortable: true, sortable: true,
width: 110 width: 110,
}, },
lock: { lock: {
header: gettext('Lock'), header: gettext('Lock'),
type: 'string', type: 'string',
hidden: true, hidden: true,
sortable: true, sortable: true,
width: 110 width: 110,
} },
}; };
var fields = []; var fields = [];
@ -304,14 +304,14 @@ Ext.define('PVE.data.ResourceStore', {
fields: fields, fields: fields,
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json/cluster/resources' url: '/api2/json/cluster/resources',
} },
}); });
Ext.define('PVETree', { Ext.define('PVETree', {
extend: "Ext.data.Model", extend: "Ext.data.Model",
fields: fields, fields: fields,
proxy: { type: 'memory' } proxy: { type: 'memory' },
}); });
Ext.apply(config, { Ext.apply(config, {
@ -325,9 +325,9 @@ Ext.define('PVE.data.ResourceStore', {
}); });
return res; return res;
}, },
fieldNames: fieldNames fieldNames: fieldNames,
}); });
me.callParent([config]); me.callParent([config]);
} },
}); });

View File

@ -6,14 +6,14 @@ Ext.define('pve-rrd-node', {
// percentage // percentage
convert: function(value) { convert: function(value) {
return value*100; return value*100;
} },
}, },
{ {
name:'iowait', name:'iowait',
// percentage // percentage
convert: function(value) { convert: function(value) {
return value*100; return value*100;
} },
}, },
'loadavg', 'loadavg',
'maxcpu', 'maxcpu',
@ -25,8 +25,8 @@ Ext.define('pve-rrd-node', {
'rootused', 'rootused',
'swaptotal', 'swaptotal',
'swapused', 'swapused',
{ type: 'date', dateFormat: 'timestamp', name: 'time' } { type: 'date', dateFormat: 'timestamp', name: 'time' },
] ],
}); });
Ext.define('pve-rrd-guest', { Ext.define('pve-rrd-guest', {
@ -37,7 +37,7 @@ Ext.define('pve-rrd-guest', {
// percentage // percentage
convert: function(value) { convert: function(value) {
return value*100; return value*100;
} },
}, },
'maxcpu', 'maxcpu',
'netin', 'netin',
@ -48,8 +48,8 @@ Ext.define('pve-rrd-guest', {
'maxdisk', 'maxdisk',
'diskread', 'diskread',
'diskwrite', 'diskwrite',
{ type: 'date', dateFormat: 'timestamp', name: 'time' } { type: 'date', dateFormat: 'timestamp', name: 'time' },
] ],
}); });
Ext.define('pve-rrd-storage', { Ext.define('pve-rrd-storage', {
@ -57,6 +57,6 @@ Ext.define('pve-rrd-storage', {
fields: [ fields: [
'used', 'used',
'total', 'total',
{ type: 'date', dateFormat: 'timestamp', name: 'time' } { type: 'date', dateFormat: 'timestamp', name: 'time' },
] ],
}); });

View File

@ -16,8 +16,8 @@ Ext.define('PVE.dc.ACLAdd', {
name: 'path', name: 'path',
value: me.path, value: me.path,
allowBlank: false, allowBlank: false,
fieldLabel: gettext('Path') fieldLabel: gettext('Path'),
} },
]; ];
if (me.aclType === 'group') { if (me.aclType === 'group') {
@ -25,21 +25,21 @@ Ext.define('PVE.dc.ACLAdd', {
items.push({ items.push({
xtype: 'pveGroupSelector', xtype: 'pveGroupSelector',
name: 'groups', name: 'groups',
fieldLabel: gettext('Group') fieldLabel: gettext('Group'),
}); });
} else if (me.aclType === 'user') { } else if (me.aclType === 'user') {
me.subject = gettext("User Permission"); me.subject = gettext("User Permission");
items.push({ items.push({
xtype: 'pveUserSelector', xtype: 'pveUserSelector',
name: 'users', name: 'users',
fieldLabel: gettext('User') fieldLabel: gettext('User'),
}); });
} else if (me.aclType === 'token') { } else if (me.aclType === 'token') {
me.subject = gettext("API Token Permission"); me.subject = gettext("API Token Permission");
items.push({ items.push({
xtype: 'pveTokenSelector', xtype: 'pveTokenSelector',
name: 'tokens', name: 'tokens',
fieldLabel: gettext('API Token') fieldLabel: gettext('API Token'),
}); });
} else { } else {
throw "unknown ACL type"; throw "unknown ACL type";
@ -49,7 +49,7 @@ Ext.define('PVE.dc.ACLAdd', {
xtype: 'pmxRoleSelector', xtype: 'pmxRoleSelector',
name: 'roles', name: 'roles',
value: 'NoAccess', value: 'NoAccess',
fieldLabel: gettext('Role') fieldLabel: gettext('Role'),
}); });
if (!me.path) { if (!me.path) {
@ -58,21 +58,21 @@ Ext.define('PVE.dc.ACLAdd', {
name: 'propagate', name: 'propagate',
checked: true, checked: true,
uncheckedValue: 0, uncheckedValue: 0,
fieldLabel: gettext('Propagate') fieldLabel: gettext('Propagate'),
}); });
} }
var ipanel = Ext.create('Proxmox.panel.InputPanel', { var ipanel = Ext.create('Proxmox.panel.InputPanel', {
items: items, items: items,
onlineHelp: 'pveum_permission_management' onlineHelp: 'pveum_permission_management',
}); });
Ext.apply(me, { Ext.apply(me, {
items: [ ipanel ] items: [ ipanel ],
}); });
me.callParent(); me.callParent();
} },
}); });
Ext.define('PVE.dc.ACLView', { Ext.define('PVE.dc.ACLView', {
@ -91,25 +91,25 @@ Ext.define('PVE.dc.ACLView', {
initComponent : function() { initComponent : function() {
var me = this; var me = this;
var store = Ext.create('Ext.data.Store',{ var store = Ext.create('Ext.data.Store', {
model: 'pve-acl', model: 'pve-acl',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/access/acl" url: "/api2/json/access/acl",
}, },
sorters: { sorters: {
property: 'path', property: 'path',
order: 'DESC' order: 'DESC',
} },
}); });
if (me.path) { if (me.path) {
store.addFilter(Ext.create('Ext.util.Filter',{ store.addFilter(Ext.create('Ext.util.Filter', {
filterFn: function(item) { filterFn: function(item) {
if (item.data.path === me.path) { if (item.data.path === me.path) {
return true; return true;
} }
} },
})); }));
} }
@ -127,14 +127,14 @@ Ext.define('PVE.dc.ACLView', {
flex: 1, flex: 1,
sortable: true, sortable: true,
renderer: render_ugid, renderer: render_ugid,
dataIndex: 'ugid' dataIndex: 'ugid',
}, },
{ {
header: gettext('Role'), header: gettext('Role'),
flex: 1, flex: 1,
sortable: true, sortable: true,
dataIndex: 'roleid' dataIndex: 'roleid',
} },
]; ];
if (!me.path) { if (!me.path) {
@ -142,13 +142,13 @@ Ext.define('PVE.dc.ACLView', {
header: gettext('Path'), header: gettext('Path'),
flex: 1, flex: 1,
sortable: true, sortable: true,
dataIndex: 'path' dataIndex: 'path',
}); });
columns.push({ columns.push({
header: gettext('Propagate'), header: gettext('Propagate'),
width: 80, width: 80,
sortable: true, sortable: true,
dataIndex: 'propagate' dataIndex: 'propagate',
}); });
} }
@ -167,7 +167,7 @@ Ext.define('PVE.dc.ACLView', {
var params = { var params = {
'delete': 1, 'delete': 1,
path: rec.data.path, path: rec.data.path,
roles: rec.data.roleid roles: rec.data.roleid,
}; };
if (rec.data.type === 'group') { if (rec.data.type === 'group') {
params.groups = rec.data.ugid; params.groups = rec.data.ugid;
@ -189,9 +189,9 @@ Ext.define('PVE.dc.ACLView', {
}, },
failure: function (response, opts) { failure: function (response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus); Ext.Msg.alert(gettext('Error'), response.htmlStatus);
} },
}); });
} },
}); });
Proxmox.Utils.monStoreErrors(me, store); Proxmox.Utils.monStoreErrors(me, store);
@ -209,54 +209,54 @@ Ext.define('PVE.dc.ACLView', {
text: gettext('Group Permission'), text: gettext('Group Permission'),
iconCls: 'fa fa-fw fa-group', iconCls: 'fa fa-fw fa-group',
handler: function() { handler: function() {
var win = Ext.create('PVE.dc.ACLAdd',{ var win = Ext.create('PVE.dc.ACLAdd', {
aclType: 'group', aclType: 'group',
path: me.path path: me.path,
}); });
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
} },
}, },
{ {
text: gettext('User Permission'), text: gettext('User Permission'),
iconCls: 'fa fa-fw fa-user', iconCls: 'fa fa-fw fa-user',
handler: function() { handler: function() {
var win = Ext.create('PVE.dc.ACLAdd',{ var win = Ext.create('PVE.dc.ACLAdd', {
aclType: 'user', aclType: 'user',
path: me.path path: me.path,
}); });
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
} },
}, },
{ {
text: gettext('API Token Permission'), text: gettext('API Token Permission'),
iconCls: 'fa fa-fw fa-user-o', iconCls: 'fa fa-fw fa-user-o',
handler: function() { handler: function() {
var win = Ext.create('PVE.dc.ACLAdd',{ var win = Ext.create('PVE.dc.ACLAdd', {
aclType: 'token', aclType: 'token',
path: me.path path: me.path,
}); });
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
} },
} },
] ],
} },
}, },
remove_btn remove_btn,
], ],
viewConfig: { viewConfig: {
trackOver: false trackOver: false,
}, },
columns: columns, columns: columns,
listeners: { listeners: {
activate: reload activate: reload,
} },
}); });
me.callParent(); me.callParent();
} },
}, function() { }, function() {
Ext.define('pve-acl', { Ext.define('pve-acl', {
@ -265,9 +265,9 @@ Ext.define('PVE.dc.ACLView', {
'path', 'type', 'ugid', 'roleid', 'path', 'type', 'ugid', 'roleid',
{ {
name: 'propagate', name: 'propagate',
type: 'boolean' type: 'boolean',
} },
] ],
}); });
}); });

View File

@ -21,7 +21,7 @@ Ext.define('PVE.dc.BackupEdit', {
} }
var vmidField = Ext.create('Ext.form.field.Hidden', { var vmidField = Ext.create('Ext.form.field.Hidden', {
name: 'vmid' name: 'vmid',
}); });
// 'value' can be assigned a string or an array // 'value' can be assigned a string or an array
@ -31,11 +31,11 @@ Ext.define('PVE.dc.BackupEdit', {
['include', gettext('Include selected VMs')], ['include', gettext('Include selected VMs')],
['all', gettext('All')], ['all', gettext('All')],
['exclude', gettext('Exclude selected VMs')], ['exclude', gettext('Exclude selected VMs')],
['pool', gettext('Pool based')] ['pool', gettext('Pool based')],
], ],
fieldLabel: gettext('Selection mode'), fieldLabel: gettext('Selection mode'),
name: 'selMode', name: 'selMode',
value: '' value: '',
}); });
var sm = Ext.create('Ext.selection.CheckboxModel', { var sm = Ext.create('Ext.selection.CheckboxModel', {
@ -52,8 +52,8 @@ Ext.define('PVE.dc.BackupEdit', {
vmidField.suspendEvent('change'); vmidField.suspendEvent('change');
vmidField.setValue(sel); vmidField.setValue(sel);
vmidField.resumeEvent('change'); vmidField.resumeEvent('change');
} },
} },
}); });
var storagesel = Ext.create('PVE.form.StorageSelector', { var storagesel = Ext.create('PVE.form.StorageSelector', {
@ -74,16 +74,16 @@ Ext.define('PVE.dc.BackupEdit', {
} else if (!compressionSelector.getEditable()) { } else if (!compressionSelector.getEditable()) {
compressionSelector.setDisabled(false); compressionSelector.setDisabled(false);
} }
} },
} },
}); });
var store = new Ext.data.Store({ var store = new Ext.data.Store({
model: 'PVEResources', model: 'PVEResources',
sorters: { sorters: {
property: 'vmid', property: 'vmid',
order: 'ASC' order: 'ASC',
} },
}); });
var vmgrid = Ext.createWidget('grid', { var vmgrid = Ext.createWidget('grid', {
@ -96,11 +96,11 @@ Ext.define('PVE.dc.BackupEdit', {
{ {
header: 'ID', header: 'ID',
dataIndex: 'vmid', dataIndex: 'vmid',
width: 60 width: 60,
}, },
{ {
header: gettext('Node'), header: gettext('Node'),
dataIndex: 'node' dataIndex: 'node',
}, },
{ {
header: gettext('Status'), header: gettext('Status'),
@ -111,18 +111,18 @@ Ext.define('PVE.dc.BackupEdit', {
} else { } else {
return Proxmox.Utils.stoppedText; return Proxmox.Utils.stoppedText;
} }
} },
}, },
{ {
header: gettext('Name'), header: gettext('Name'),
dataIndex: 'name', dataIndex: 'name',
flex: 1 flex: 1,
}, },
{ {
header: gettext('Type'), header: gettext('Type'),
dataIndex: 'type' dataIndex: 'type',
} },
] ],
}); });
var selectPoolMembers = function(poolid) { var selectPoolMembers = function(poolid) {
@ -134,8 +134,8 @@ Ext.define('PVE.dc.BackupEdit', {
{ {
id: 'poolFilter', id: 'poolFilter',
property: 'pool', property: 'pool',
value: poolid value: poolid,
} },
]); ]);
sm.selectAll(true); sm.selectAll(true);
}; };
@ -148,8 +148,8 @@ Ext.define('PVE.dc.BackupEdit', {
listeners: { listeners: {
change: function( selpool, newValue, oldValue) { change: function( selpool, newValue, oldValue) {
selectPoolMembers(newValue); selectPoolMembers(newValue);
} },
} },
}); });
var nodesel = Ext.create('PVE.form.NodeSelector', { var nodesel = Ext.create('PVE.form.NodeSelector', {
@ -174,8 +174,8 @@ Ext.define('PVE.dc.BackupEdit', {
if (mode === 'pool') { if (mode === 'pool') {
selectPoolMembers(selPool.value); selectPoolMembers(selPool.value);
} }
} },
} },
}); });
var column1 = [ var column1 = [
@ -187,7 +187,7 @@ Ext.define('PVE.dc.BackupEdit', {
fieldLabel: gettext('Day of week'), fieldLabel: gettext('Day of week'),
multiSelect: true, multiSelect: true,
value: ['sat'], value: ['sat'],
allowBlank: false allowBlank: false,
}, },
{ {
xtype: 'timefield', xtype: 'timefield',
@ -196,37 +196,37 @@ Ext.define('PVE.dc.BackupEdit', {
format: 'H:i', format: 'H:i',
formatText: 'HH:MM', formatText: 'HH:MM',
value: '00:00', value: '00:00',
allowBlank: false allowBlank: false,
}, },
selModeField, selModeField,
selPool selPool,
]; ];
var column2 = [ var column2 = [
{ {
xtype: 'textfield', xtype: 'textfield',
fieldLabel: gettext('Send email to'), fieldLabel: gettext('Send email to'),
name: 'mailto' name: 'mailto',
}, },
{ {
xtype: 'pveEmailNotificationSelector', xtype: 'pveEmailNotificationSelector',
fieldLabel: gettext('Email notification'), fieldLabel: gettext('Email notification'),
name: 'mailnotification', name: 'mailnotification',
deleteEmpty: me.isCreate ? false : true, deleteEmpty: me.isCreate ? false : true,
value: me.isCreate ? 'always' : '' value: me.isCreate ? 'always' : '',
}, },
{ {
xtype: 'pveCompressionSelector', xtype: 'pveCompressionSelector',
fieldLabel: gettext('Compression'), fieldLabel: gettext('Compression'),
name: 'compress', name: 'compress',
deleteEmpty: me.isCreate ? false : true, deleteEmpty: me.isCreate ? false : true,
value: 'zstd' value: 'zstd',
}, },
{ {
xtype: 'pveBackupModeSelector', xtype: 'pveBackupModeSelector',
fieldLabel: gettext('Mode'), fieldLabel: gettext('Mode'),
value: 'snapshot', value: 'snapshot',
name: 'mode' name: 'mode',
}, },
{ {
xtype: 'proxmoxcheckbox', xtype: 'proxmoxcheckbox',
@ -234,9 +234,9 @@ Ext.define('PVE.dc.BackupEdit', {
name: 'enabled', name: 'enabled',
uncheckedValue: 0, uncheckedValue: 0,
defaultValue: 1, defaultValue: 1,
checked: true checked: true,
}, },
vmidField vmidField,
]; ];
var ipanel = Ext.create('Proxmox.panel.InputPanel', { var ipanel = Ext.create('Proxmox.panel.InputPanel', {
@ -270,7 +270,7 @@ Ext.define('PVE.dc.BackupEdit', {
delete values.pool; delete values.pool;
} }
return values; return values;
} },
}); });
var update_vmid_selection = function(list, mode) { var update_vmid_selection = function(list, mode) {
@ -342,7 +342,7 @@ Ext.define('PVE.dc.BackupEdit', {
} else { } else {
update_vmid_selection(list, mode); update_vmid_selection(list, mode);
} }
} },
}); });
}; };
@ -350,7 +350,7 @@ Ext.define('PVE.dc.BackupEdit', {
subject: gettext("Backup Job"), subject: gettext("Backup Job"),
url: url, url: url,
method: method, method: method,
items: [ ipanel, vmgrid ] items: [ ipanel, vmgrid ],
}); });
me.callParent(); me.callParent();
@ -380,12 +380,12 @@ Ext.define('PVE.dc.BackupEdit', {
} }
me.setValues(data); me.setValues(data);
} },
}); });
} }
reload(); reload();
} },
}); });
@ -416,7 +416,7 @@ Ext.define('PVE.dc.BackupDiskTree', {
scope: this, scope: this,
callback: function(panel) { callback: function(panel) {
panel.collapseAll(); panel.collapseAll();
} },
}, },
], ],
@ -500,8 +500,8 @@ Ext.define('PVE.dc.BackupDiskTree', {
} else { } else {
return txt + 'question-circle'; return txt + 'question-circle';
} }
} },
} },
], ],
header: { header: {
items: [{ items: [{
@ -547,16 +547,16 @@ Ext.define('PVE.dc.BackupDiskTree', {
}); });
return match; return match;
}); });
} },
} },
} },
]}, ]},
}); });
me.callParent(); me.callParent();
me.reload(); me.reload();
} },
}); });
Ext.define('PVE.dc.BackupInfo', { Ext.define('PVE.dc.BackupInfo', {
@ -603,7 +603,7 @@ Ext.define('PVE.dc.BackupInfo', {
name: 'pool', name: 'pool',
fieldLabel: gettext('Pool to backup'), fieldLabel: gettext('Pool to backup'),
xtype: 'displayfield', xtype: 'displayfield',
} },
], ],
column2: [ column2: [
{ {
@ -709,7 +709,7 @@ Ext.define('PVE.dc.BackupInfo', {
me.callParent(); me.callParent();
me.setValues(me.record); me.setValues(me.record);
} },
}); });
@ -783,9 +783,9 @@ Ext.define('PVE.dc.BackedGuests', {
}); });
return match; return match;
}); });
} },
} },
} },
], ],
viewConfig: { viewConfig: {
stripeRows: true, stripeRows: true,
@ -812,8 +812,8 @@ Ext.define('PVE.dc.BackupView', {
model: 'pve-cluster-backup', model: 'pve-cluster-backup',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/cluster/backup" url: "/api2/json/cluster/backup",
} },
}); });
var not_backed_store = new Ext.data.Store({ var not_backed_store = new Ext.data.Store({
@ -848,7 +848,7 @@ Ext.define('PVE.dc.BackupView', {
} }
var win = Ext.create('PVE.dc.BackupEdit', { var win = Ext.create('PVE.dc.BackupEdit', {
jobid: rec.data.id jobid: rec.data.id,
}); });
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
@ -886,10 +886,10 @@ Ext.define('PVE.dc.BackupView', {
region: 'center', region: 'center',
layout: { layout: {
type: 'vbox', type: 'vbox',
align: 'stretch' align: 'stretch',
}, },
items: [infoview, disktree], items: [infoview, disktree],
}] }],
}).show(); }).show();
}; };
@ -949,7 +949,7 @@ Ext.define('PVE.dc.BackupView', {
errors.push(node + ': ' + response.htmlStatus); errors.push(node + ': ' + response.htmlStatus);
postRequest(); postRequest();
}, },
success: postRequest success: postRequest,
})); }));
}; };
@ -974,10 +974,10 @@ Ext.define('PVE.dc.BackupView', {
region: 'center', region: 'center',
layout: { layout: {
type: 'vbox', type: 'vbox',
align: 'stretch' align: 'stretch',
}, },
items: [backedinfo], items: [backedinfo],
}] }],
}).show(); }).show();
}; };
@ -985,7 +985,7 @@ Ext.define('PVE.dc.BackupView', {
text: gettext('Edit'), text: gettext('Edit'),
disabled: true, disabled: true,
selModel: sm, selModel: sm,
handler: run_editor handler: run_editor,
}); });
var run_btn = new Proxmox.button.Button({ var run_btn = new Proxmox.button.Button({
@ -1008,9 +1008,9 @@ Ext.define('PVE.dc.BackupView', {
return; return;
} }
run_backup_now(rec.data); run_backup_now(rec.data);
} },
}); });
} },
}); });
var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', { var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
@ -1018,7 +1018,7 @@ Ext.define('PVE.dc.BackupView', {
baseurl: '/cluster/backup', baseurl: '/cluster/backup',
callback: function() { callback: function() {
reload(); reload();
} },
}); });
var detail_btn = new Proxmox.button.Button({ var detail_btn = new Proxmox.button.Button({
@ -1048,16 +1048,16 @@ Ext.define('PVE.dc.BackupView', {
stateful: true, stateful: true,
stateId: 'grid-dc-backup', stateId: 'grid-dc-backup',
viewConfig: { viewConfig: {
trackOver: false trackOver: false,
}, },
tbar: [ tbar: [
{ {
text: gettext('Add'), text: gettext('Add'),
handler: function() { handler: function() {
var win = Ext.create('PVE.dc.BackupEdit',{}); var win = Ext.create('PVE.dc.BackupEdit', {});
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
} },
}, },
'-', '-',
remove_btn, remove_btn,
@ -1078,7 +1078,7 @@ Ext.define('PVE.dc.BackupView', {
sortable: true, sortable: true,
disabled: true, disabled: true,
disabledCls: 'x-item-enabled', disabledCls: 'x-item-enabled',
stopSelection: false stopSelection: false,
}, },
{ {
header: gettext('Node'), header: gettext('Node'),
@ -1090,43 +1090,43 @@ Ext.define('PVE.dc.BackupView', {
return value; return value;
} }
return me.allText; return me.allText;
} },
}, },
{ {
header: gettext('Day of week'), header: gettext('Day of week'),
width: 200, width: 200,
sortable: false, sortable: false,
dataIndex: 'dow', dataIndex: 'dow',
renderer: PVE.Utils.render_backup_days_of_week renderer: PVE.Utils.render_backup_days_of_week,
}, },
{ {
header: gettext('Start Time'), header: gettext('Start Time'),
width: 60, width: 60,
sortable: true, sortable: true,
dataIndex: 'starttime' dataIndex: 'starttime',
}, },
{ {
header: gettext('Storage'), header: gettext('Storage'),
width: 100, width: 100,
sortable: true, sortable: true,
dataIndex: 'storage' dataIndex: 'storage',
}, },
{ {
header: gettext('Selection'), header: gettext('Selection'),
flex: 1, flex: 1,
sortable: false, sortable: false,
dataIndex: 'vmid', dataIndex: 'vmid',
renderer: PVE.Utils.render_backup_selection renderer: PVE.Utils.render_backup_selection,
} },
], ],
listeners: { listeners: {
activate: reload, activate: reload,
itemdblclick: run_editor itemdblclick: run_editor,
} },
}); });
me.callParent(); me.callParent();
} },
}, function() { }, function() {
Ext.define('pve-cluster-backup', { Ext.define('pve-cluster-backup', {
@ -1136,7 +1136,7 @@ Ext.define('PVE.dc.BackupView', {
'storage', 'node', 'vmid', 'exclude', 'storage', 'node', 'vmid', 'exclude',
'mailto', 'pool', 'compress', 'mode', 'mailto', 'pool', 'compress', 'mode',
{ name: 'enabled', type: 'boolean' }, { name: 'enabled', type: 'boolean' },
{ name: 'all', type: 'boolean' } { name: 'all', type: 'boolean' },
] ],
}); });
}); });

View File

@ -2,21 +2,21 @@ Ext.define('pve-cluster-nodes', {
extend: 'Ext.data.Model', extend: 'Ext.data.Model',
fields: [ fields: [
'node', { type: 'integer', name: 'nodeid' }, 'ring0_addr', 'ring1_addr', 'node', { type: 'integer', name: 'nodeid' }, 'ring0_addr', 'ring1_addr',
{ type: 'integer', name: 'quorum_votes' } { type: 'integer', name: 'quorum_votes' },
], ],
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/cluster/config/nodes" url: "/api2/json/cluster/config/nodes",
}, },
idProperty: 'nodeid' idProperty: 'nodeid',
}); });
Ext.define('pve-cluster-info', { Ext.define('pve-cluster-info', {
extend: 'Ext.data.Model', extend: 'Ext.data.Model',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/cluster/config/join" url: "/api2/json/cluster/config/join",
} },
}); });
Ext.define('PVE.ClusterAdministration', { Ext.define('PVE.ClusterAdministration', {
@ -37,11 +37,11 @@ Ext.define('PVE.ClusterAdministration', {
preferred_node: { preferred_node: {
name: '', name: '',
fp: '', fp: '',
addr: '' addr: '',
}, },
isInCluster: false, isInCluster: false,
nodecount: 0 nodecount: 0,
} },
}, },
items: [ items: [
@ -56,7 +56,7 @@ Ext.define('PVE.ClusterAdministration', {
autoStart: true, autoStart: true,
interval: 15 * 1000, interval: 15 * 1000,
storeid: 'pve-cluster-info', storeid: 'pve-cluster-info',
model: 'pve-cluster-info' model: 'pve-cluster-info',
}); });
view.store.on('load', this.onLoad, this); view.store.on('load', this.onLoad, this);
view.on('destroy', view.store.stopUpdate); view.on('destroy', view.store.stopUpdate);
@ -71,7 +71,7 @@ Ext.define('PVE.ClusterAdministration', {
vm.set('preferred_node', { vm.set('preferred_node', {
name: '', name: '',
addr: '', addr: '',
fp: '' fp: '',
}); });
return; return;
} }
@ -96,7 +96,7 @@ Ext.define('PVE.ClusterAdministration', {
addr: nodeinfo.pve_addr, addr: nodeinfo.pve_addr,
peerLinks: links, peerLinks: links,
ring_addr: ring_addr, ring_addr: ring_addr,
fp: nodeinfo.pve_fp fp: nodeinfo.pve_fp,
}); });
}, },
@ -108,8 +108,8 @@ Ext.define('PVE.ClusterAdministration', {
listeners: { listeners: {
destroy: function() { destroy: function() {
view.store.startUpdate(); view.store.startUpdate();
} },
} },
}); });
}, },
@ -121,8 +121,8 @@ Ext.define('PVE.ClusterAdministration', {
fingerprint: vm.get('preferred_node.fp'), fingerprint: vm.get('preferred_node.fp'),
peerLinks: vm.get('preferred_node.peerLinks'), peerLinks: vm.get('preferred_node.peerLinks'),
ring_addr: vm.get('preferred_node.ring_addr'), ring_addr: vm.get('preferred_node.ring_addr'),
totem: vm.get('totem') totem: vm.get('totem'),
} },
}); });
win.show(); win.show();
}, },
@ -135,10 +135,10 @@ Ext.define('PVE.ClusterAdministration', {
listeners: { listeners: {
destroy: function() { destroy: function() {
view.store.startUpdate(); view.store.startUpdate();
} },
} },
}); });
} },
}, },
tbar: [ tbar: [
{ {
@ -146,25 +146,25 @@ Ext.define('PVE.ClusterAdministration', {
reference: 'createButton', reference: 'createButton',
handler: 'onCreate', handler: 'onCreate',
bind: { bind: {
disabled: '{isInCluster}' disabled: '{isInCluster}',
} },
}, },
{ {
text: gettext('Join Information'), text: gettext('Join Information'),
reference: 'addButton', reference: 'addButton',
handler: 'onClusterInfo', handler: 'onClusterInfo',
bind: { bind: {
disabled: '{!isInCluster}' disabled: '{!isInCluster}',
} },
}, },
{ {
text: gettext('Join Cluster'), text: gettext('Join Cluster'),
reference: 'joinButton', reference: 'joinButton',
handler: 'onJoin', handler: 'onJoin',
bind: { bind: {
disabled: '{isInCluster}' disabled: '{isInCluster}',
} },
} },
], ],
layout: 'hbox', layout: 'hbox',
bodyPadding: 5, bodyPadding: 5,
@ -174,18 +174,18 @@ Ext.define('PVE.ClusterAdministration', {
fieldLabel: gettext('Cluster Name'), fieldLabel: gettext('Cluster Name'),
bind: { bind: {
value: '{totem.cluster_name}', value: '{totem.cluster_name}',
hidden: '{!isInCluster}' hidden: '{!isInCluster}',
}, },
flex: 1 flex: 1,
}, },
{ {
xtype: 'displayfield', xtype: 'displayfield',
fieldLabel: gettext('Config Version'), fieldLabel: gettext('Config Version'),
bind: { bind: {
value: '{totem.config_version}', value: '{totem.config_version}',
hidden: '{!isInCluster}' hidden: '{!isInCluster}',
}, },
flex: 1 flex: 1,
}, },
{ {
xtype: 'displayfield', xtype: 'displayfield',
@ -193,19 +193,19 @@ Ext.define('PVE.ClusterAdministration', {
labelWidth: 120, labelWidth: 120,
bind: { bind: {
value: '{nodecount}', value: '{nodecount}',
hidden: '{!isInCluster}' hidden: '{!isInCluster}',
}, },
flex: 1 flex: 1,
}, },
{ {
xtype: 'displayfield', xtype: 'displayfield',
value: gettext('Standalone node - no cluster defined'), value: gettext('Standalone node - no cluster defined'),
bind: { bind: {
hidden: '{isInCluster}' hidden: '{isInCluster}',
}, },
flex: 1 flex: 1,
} },
] ],
}, },
{ {
xtype: 'grid', xtype: 'grid',
@ -222,14 +222,14 @@ Ext.define('PVE.ClusterAdministration', {
interval: 5 * 1000, interval: 5 * 1000,
autoStart: true, autoStart: true,
storeid: 'pve-cluster-nodes', storeid: 'pve-cluster-nodes',
model: 'pve-cluster-nodes' model: 'pve-cluster-nodes',
}); });
view.setStore(Ext.create('Proxmox.data.DiffStore', { view.setStore(Ext.create('Proxmox.data.DiffStore', {
rstore: view.rstore, rstore: view.rstore,
sorters: { sorters: {
property: 'nodeid', property: 'nodeid',
order: 'DESC' order: 'DESC',
} },
})); }));
Proxmox.Utils.monStoreErrors(view, view.rstore); Proxmox.Utils.monStoreErrors(view, view.rstore);
view.rstore.on('load', this.onLoad, this); view.rstore.on('load', this.onLoad, this);
@ -266,16 +266,16 @@ Ext.define('PVE.ClusterAdministration', {
return; return;
} }
view.columns[linkIndex+linknum].setHidden(false); view.columns[linkIndex+linknum].setHidden(false);
} },
); );
} },
}, },
columns: { columns: {
items: [ items: [
{ {
header: gettext('Nodename'), header: gettext('Nodename'),
hidden: false, hidden: false,
dataIndex: 'name' dataIndex: 'name',
}, },
{ {
header: gettext('ID'), header: gettext('ID'),
@ -283,7 +283,7 @@ Ext.define('PVE.ClusterAdministration', {
width: 100, width: 100,
flex: 0, flex: 0,
hidden: false, hidden: false,
dataIndex: 'nodeid' dataIndex: 'nodeid',
}, },
{ {
header: gettext('Votes'), header: gettext('Votes'),
@ -291,55 +291,55 @@ Ext.define('PVE.ClusterAdministration', {
width: 100, width: 100,
flex: 0, flex: 0,
hidden: false, hidden: false,
dataIndex: 'quorum_votes' dataIndex: 'quorum_votes',
}, },
{ {
header: Ext.String.format(gettext('Link {0}'), 0), header: Ext.String.format(gettext('Link {0}'), 0),
dataIndex: 'ring0_addr', dataIndex: 'ring0_addr',
linkNumber: 0 linkNumber: 0,
}, },
{ {
header: Ext.String.format(gettext('Link {0}'), 1), header: Ext.String.format(gettext('Link {0}'), 1),
dataIndex: 'ring1_addr', dataIndex: 'ring1_addr',
linkNumber: 1 linkNumber: 1,
}, },
{ {
header: Ext.String.format(gettext('Link {0}'), 2), header: Ext.String.format(gettext('Link {0}'), 2),
dataIndex: 'ring2_addr', dataIndex: 'ring2_addr',
linkNumber: 2 linkNumber: 2,
}, },
{ {
header: Ext.String.format(gettext('Link {0}'), 3), header: Ext.String.format(gettext('Link {0}'), 3),
dataIndex: 'ring3_addr', dataIndex: 'ring3_addr',
linkNumber: 3 linkNumber: 3,
}, },
{ {
header: Ext.String.format(gettext('Link {0}'), 4), header: Ext.String.format(gettext('Link {0}'), 4),
dataIndex: 'ring4_addr', dataIndex: 'ring4_addr',
linkNumber: 4 linkNumber: 4,
}, },
{ {
header: Ext.String.format(gettext('Link {0}'), 5), header: Ext.String.format(gettext('Link {0}'), 5),
dataIndex: 'ring5_addr', dataIndex: 'ring5_addr',
linkNumber: 5 linkNumber: 5,
}, },
{ {
header: Ext.String.format(gettext('Link {0}'), 6), header: Ext.String.format(gettext('Link {0}'), 6),
dataIndex: 'ring6_addr', dataIndex: 'ring6_addr',
linkNumber: 6 linkNumber: 6,
}, },
{ {
header: Ext.String.format(gettext('Link {0}'), 7), header: Ext.String.format(gettext('Link {0}'), 7),
dataIndex: 'ring7_addr', dataIndex: 'ring7_addr',
linkNumber: 7 linkNumber: 7,
} },
], ],
defaults: { defaults: {
flex: 1, flex: 1,
hidden: true, hidden: true,
minWidth: 150 minWidth: 150,
} },
} },
} },
] ],
}); });

View File

@ -21,7 +21,7 @@ Ext.define('PVE.ClusterCreateWindow', {
fieldLabel: gettext('Cluster Name'), fieldLabel: gettext('Cluster Name'),
allowBlank: false, allowBlank: false,
maxLength: 15, maxLength: 15,
name: 'clustername' name: 'clustername',
}, },
{ {
xtype: 'fieldcontainer', xtype: 'fieldcontainer',
@ -30,11 +30,11 @@ Ext.define('PVE.ClusterCreateWindow', {
{ {
xtype: 'pveCorosyncLinkEditor', xtype: 'pveCorosyncLinkEditor',
infoText: gettext("Multiple links are used as failover, lower numbers have higher priority."), infoText: gettext("Multiple links are used as failover, lower numbers have higher priority."),
name: 'links' name: 'links',
}, },
] ],
}] }],
} },
}); });
Ext.define('PVE.ClusterInfoWindow', { Ext.define('PVE.ClusterInfoWindow', {
@ -50,7 +50,7 @@ Ext.define('PVE.ClusterInfoWindow', {
joinInfo: { joinInfo: {
ipAddress: undefined, ipAddress: undefined,
fingerprint: undefined, fingerprint: undefined,
totem: {} totem: {},
}, },
items: [ items: [
@ -58,7 +58,7 @@ Ext.define('PVE.ClusterInfoWindow', {
xtype: 'component', xtype: 'component',
border: false, border: false,
padding: '10 10 10 10', padding: '10 10 10 10',
html: gettext("Copy the Join Information here and use it on the node you want to add.") html: gettext("Copy the Join Information here and use it on the node you want to add."),
}, },
{ {
xtype: 'container', xtype: 'container',
@ -99,11 +99,11 @@ Ext.define('PVE.ClusterInfoWindow', {
var jsons = Ext.JSON.encode(field.joinInfo); var jsons = Ext.JSON.encode(field.joinInfo);
var base64s = Ext.util.Base64.encode(jsons); var base64s = Ext.util.Base64.encode(jsons);
field.setValue(base64s); field.setValue(base64s);
} },
} },
} },
] ],
} },
], ],
dockedItems: [{ dockedItems: [{
dock: 'bottom', dock: 'bottom',
@ -115,9 +115,9 @@ Ext.define('PVE.ClusterInfoWindow', {
el.select(); el.select();
document.execCommand("copy"); document.execCommand("copy");
}, },
text: gettext('Copy Information') text: gettext('Copy Information'),
}] }],
}] }],
}); });
Ext.define('PVE.ClusterJoinNodeWindow', { Ext.define('PVE.ClusterJoinNodeWindow', {
@ -145,7 +145,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
info: { info: {
fp: '', fp: '',
ip: '', ip: '',
clusterName: '' clusterName: '',
}, },
hasAssistedInfo: false, hasAssistedInfo: false,
}, },
@ -170,18 +170,18 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
'#': { '#': {
close: function() { close: function() {
delete PVE.Utils.silenceAuthFailures; delete PVE.Utils.silenceAuthFailures;
} },
}, },
'proxmoxcheckbox[name=assistedEntry]': { 'proxmoxcheckbox[name=assistedEntry]': {
change: 'onInputTypeChange' change: 'onInputTypeChange',
}, },
'textarea[name=serializedinfo]': { 'textarea[name=serializedinfo]': {
change: 'recomputeSerializedInfo', change: 'recomputeSerializedInfo',
enable: 'resetField' enable: 'resetField',
}, },
'textfield': { 'textfield': {
disable: 'resetField' disable: 'resetField',
} },
}, },
resetField: function(field) { resetField: function(field) {
field.reset(); field.reset();
@ -216,7 +216,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
let info = { let info = {
fp: '', fp: '',
ip: '', ip: '',
clusterName: '' clusterName: '',
}; };
if (!(joinInfo && joinInfo.totem)) { if (!(joinInfo && joinInfo.totem)) {
@ -236,7 +236,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
number: linkNumber, number: linkNumber,
value: '', value: '',
text: peerLink ? Ext.String.format(gettext("peer's link address: {0}"), peerLink) : '', text: peerLink ? Ext.String.format(gettext("peer's link address: {0}"), peerLink) : '',
allowBlank: false allowBlank: false,
}; };
}); });
@ -253,13 +253,13 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
info = { info = {
ip: joinInfo.ipAddress, ip: joinInfo.ipAddress,
fp: joinInfo.fingerprint, fp: joinInfo.fingerprint,
clusterName: joinInfo.totem.cluster_name clusterName: joinInfo.totem.cluster_name,
}; };
field.valid = true; field.valid = true;
vm.set('hasAssistedInfo', true); vm.set('hasAssistedInfo', true);
} }
vm.set('info', info); vm.set('info', info);
} },
}, },
submit: function() { submit: function() {
@ -282,7 +282,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
Ext.Msg.show({ Ext.Msg.show({
title: gettext('Join Task Finished'), title: gettext('Join Task Finished'),
icon: Ext.Msg.INFO, icon: Ext.Msg.INFO,
msg: txt msg: txt,
}); });
} }
}, },
@ -296,9 +296,9 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
value: true, value: true,
autoEl: { autoEl: {
tag: 'div', tag: 'div',
'data-qtip': gettext('Select if join information should be extracted from pasted cluster information, deselect for manual entering') 'data-qtip': gettext('Select if join information should be extracted from pasted cluster information, deselect for manual entering'),
}, },
boxLabel: gettext('Assisted join: Paste encoded cluster join information and enter password.') boxLabel: gettext('Assisted join: Paste encoded cluster join information and enter password.'),
}, },
{ {
xtype: 'textarea', xtype: 'textarea',
@ -313,16 +313,16 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
}, },
bind: { bind: {
disabled: '{!assistedEntry.checked}', disabled: '{!assistedEntry.checked}',
hidden: '{!assistedEntry.checked}' hidden: '{!assistedEntry.checked}',
}, },
value: '' value: '',
}, },
{ {
xtype: 'panel', xtype: 'panel',
width: 776, width: 776,
layout: { layout: {
type: 'hbox', type: 'hbox',
align: 'center' align: 'center',
}, },
bind: { bind: {
hidden: '{!showClusterFields}', hidden: '{!showClusterFields}',
@ -338,7 +338,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
value: '{info.ip}', value: '{info.ip}',
readOnly: '{assistedEntry.checked}', readOnly: '{assistedEntry.checked}',
}, },
name: 'hostname' name: 'hostname',
}, },
{ {
xtype: 'textfield', xtype: 'textfield',
@ -348,9 +348,9 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
emptyText: gettext("Peer's root password"), emptyText: gettext("Peer's root password"),
fieldLabel: gettext('Password'), fieldLabel: gettext('Password'),
allowBlank: false, allowBlank: false,
name: 'password' name: 'password',
}, },
] ],
}, },
{ {
xtype: 'textfield', xtype: 'textfield',
@ -361,7 +361,7 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
readOnly: '{assistedEntry.checked}', readOnly: '{assistedEntry.checked}',
hidden: '{!showClusterFields}', hidden: '{!showClusterFields}',
}, },
name: 'fingerprint' name: 'fingerprint',
}, },
{ {
xtype: 'fieldcontainer', xtype: 'fieldcontainer',
@ -374,8 +374,8 @@ Ext.define('PVE.ClusterJoinNodeWindow', {
xtype: 'pveCorosyncLinkEditor', xtype: 'pveCorosyncLinkEditor',
itemId: 'linkEditor', itemId: 'linkEditor',
reference: 'linkEditor', reference: 'linkEditor',
allowNumberEdit: false allowNumberEdit: false,
}, },
] ],
}] }],
}); });

View File

@ -17,7 +17,7 @@ Ext.define('PVE.dc.Config', {
Ext.apply(me, { Ext.apply(me, {
title: gettext("Datacenter"), title: gettext("Datacenter"),
hstateid: 'dctab' hstateid: 'dctab',
}); });
if (caps.dc['Sys.Audit']) { if (caps.dc['Sys.Audit']) {
@ -25,25 +25,25 @@ Ext.define('PVE.dc.Config', {
title: gettext('Summary'), title: gettext('Summary'),
xtype: 'pveDcSummary', xtype: 'pveDcSummary',
iconCls: 'fa fa-book', iconCls: 'fa fa-book',
itemId: 'summary' itemId: 'summary',
}, },
{ {
title: gettext('Cluster'), title: gettext('Cluster'),
xtype: 'pveClusterAdministration', xtype: 'pveClusterAdministration',
iconCls: 'fa fa-server', iconCls: 'fa fa-server',
itemId: 'cluster' itemId: 'cluster',
}, },
{ {
title: 'Ceph', title: 'Ceph',
itemId: 'ceph', itemId: 'ceph',
iconCls: 'fa fa-ceph', iconCls: 'fa fa-ceph',
xtype: 'pveNodeCephStatus' xtype: 'pveNodeCephStatus',
}, },
{ {
xtype: 'pveDcOptionView', xtype: 'pveDcOptionView',
title: gettext('Options'), title: gettext('Options'),
iconCls: 'fa fa-gear', iconCls: 'fa fa-gear',
itemId: 'options' itemId: 'options',
}); });
} }
@ -52,7 +52,7 @@ Ext.define('PVE.dc.Config', {
xtype: 'pveStorageView', xtype: 'pveStorageView',
title: gettext('Storage'), title: gettext('Storage'),
iconCls: 'fa fa-database', iconCls: 'fa fa-database',
itemId: 'storage' itemId: 'storage',
}); });
} }
@ -62,20 +62,20 @@ Ext.define('PVE.dc.Config', {
xtype: 'pveDcBackupView', xtype: 'pveDcBackupView',
iconCls: 'fa fa-floppy-o', iconCls: 'fa fa-floppy-o',
title: gettext('Backup'), title: gettext('Backup'),
itemId: 'backup' itemId: 'backup',
}, },
{ {
xtype: 'pveReplicaView', xtype: 'pveReplicaView',
iconCls: 'fa fa-retweet', iconCls: 'fa fa-retweet',
title: gettext('Replication'), title: gettext('Replication'),
itemId: 'replication' itemId: 'replication',
}, },
{ {
xtype: 'pveACLView', xtype: 'pveACLView',
title: gettext('Permissions'), title: gettext('Permissions'),
iconCls: 'fa fa-unlock', iconCls: 'fa fa-unlock',
itemId: 'permissions', itemId: 'permissions',
expandedOnInit: true expandedOnInit: true,
}); });
} }
@ -84,7 +84,7 @@ Ext.define('PVE.dc.Config', {
groups: ['permissions'], groups: ['permissions'],
iconCls: 'fa fa-user', iconCls: 'fa fa-user',
title: gettext('Users'), title: gettext('Users'),
itemId: 'users' itemId: 'users',
}); });
me.items.push({ me.items.push({
@ -92,7 +92,7 @@ Ext.define('PVE.dc.Config', {
groups: ['permissions'], groups: ['permissions'],
iconCls: 'fa fa-user-o', iconCls: 'fa fa-user-o',
title: gettext('API Tokens'), title: gettext('API Tokens'),
itemId: 'apitokens' itemId: 'apitokens',
}); });
if (caps.dc['Sys.Audit']) { if (caps.dc['Sys.Audit']) {
@ -101,48 +101,48 @@ Ext.define('PVE.dc.Config', {
title: gettext('Groups'), title: gettext('Groups'),
iconCls: 'fa fa-users', iconCls: 'fa fa-users',
groups: ['permissions'], groups: ['permissions'],
itemId: 'groups' itemId: 'groups',
}, },
{ {
xtype: 'pvePoolView', xtype: 'pvePoolView',
title: gettext('Pools'), title: gettext('Pools'),
iconCls: 'fa fa-tags', iconCls: 'fa fa-tags',
groups: ['permissions'], groups: ['permissions'],
itemId: 'pools' itemId: 'pools',
}, },
{ {
xtype: 'pveRoleView', xtype: 'pveRoleView',
title: gettext('Roles'), title: gettext('Roles'),
iconCls: 'fa fa-male', iconCls: 'fa fa-male',
groups: ['permissions'], groups: ['permissions'],
itemId: 'roles' itemId: 'roles',
}, },
{ {
xtype: 'pveAuthView', xtype: 'pveAuthView',
title: gettext('Authentication'), title: gettext('Authentication'),
groups: ['permissions'], groups: ['permissions'],
iconCls: 'fa fa-key', iconCls: 'fa fa-key',
itemId: 'domains' itemId: 'domains',
}, },
{ {
xtype: 'pveHAStatus', xtype: 'pveHAStatus',
title: 'HA', title: 'HA',
iconCls: 'fa fa-heartbeat', iconCls: 'fa fa-heartbeat',
itemId: 'ha' itemId: 'ha',
}, },
{ {
title: gettext('Groups'), title: gettext('Groups'),
groups: ['ha'], groups: ['ha'],
xtype: 'pveHAGroupsView', xtype: 'pveHAGroupsView',
iconCls: 'fa fa-object-group', iconCls: 'fa fa-object-group',
itemId: 'ha-groups' itemId: 'ha-groups',
}, },
{ {
title: gettext('Fencing'), title: gettext('Fencing'),
groups: ['ha'], groups: ['ha'],
iconCls: 'fa fa-bolt', iconCls: 'fa fa-bolt',
xtype: 'pveFencingView', xtype: 'pveFencingView',
itemId: 'ha-fencing' itemId: 'ha-fencing',
}); });
if (PVE.SDNInfo || PVE.SDNInfo === undefined) { if (PVE.SDNInfo || PVE.SDNInfo === undefined) {
me.items.push({ me.items.push({
@ -151,7 +151,7 @@ Ext.define('PVE.dc.Config', {
iconCls: 'fa fa-sdn', iconCls: 'fa fa-sdn',
hidden: true, hidden: true,
itemId: 'sdn', itemId: 'sdn',
expandedOnInit: true expandedOnInit: true,
}, },
{ {
xtype: 'pveSDNControllerView', xtype: 'pveSDNControllerView',
@ -159,7 +159,7 @@ Ext.define('PVE.dc.Config', {
title: gettext('Controllers'), title: gettext('Controllers'),
hidden: true, hidden: true,
iconCls: 'fa fa-crosshairs', iconCls: 'fa fa-crosshairs',
itemId: 'sdncontroller' itemId: 'sdncontroller',
}, },
{ {
xtype: 'pveSDNZoneView', xtype: 'pveSDNZoneView',
@ -167,7 +167,7 @@ Ext.define('PVE.dc.Config', {
title: gettext('Zones'), title: gettext('Zones'),
hidden: true, hidden: true,
iconCls: 'fa fa-th', iconCls: 'fa fa-th',
itemId: 'sdnzone' itemId: 'sdnzone',
}, },
{ {
xtype: 'pveSDNVnetView', xtype: 'pveSDNVnetView',
@ -175,7 +175,7 @@ Ext.define('PVE.dc.Config', {
title: gettext('Vnets'), title: gettext('Vnets'),
hidden: true, hidden: true,
iconCls: 'fa fa-network-wired', iconCls: 'fa fa-network-wired',
itemId: 'sdnvnet' itemId: 'sdnvnet',
}); });
} }
@ -184,7 +184,7 @@ Ext.define('PVE.dc.Config', {
xtype: 'pveACMEClusterView', xtype: 'pveACMEClusterView',
title: 'ACME', title: 'ACME',
iconCls: 'fa fa-certificate', iconCls: 'fa fa-certificate',
itemId: 'acme' itemId: 'acme',
}); });
} }
@ -195,7 +195,7 @@ Ext.define('PVE.dc.Config', {
base_url: '/cluster/firewall/rules', base_url: '/cluster/firewall/rules',
list_refs_url: '/cluster/firewall/refs', list_refs_url: '/cluster/firewall/refs',
iconCls: 'fa fa-shield', iconCls: 'fa fa-shield',
itemId: 'firewall' itemId: 'firewall',
}, },
{ {
xtype: 'pveFirewallOptions', xtype: 'pveFirewallOptions',
@ -205,14 +205,14 @@ Ext.define('PVE.dc.Config', {
base_url: '/cluster/firewall/options', base_url: '/cluster/firewall/options',
onlineHelp: 'pve_firewall_cluster_wide_setup', onlineHelp: 'pve_firewall_cluster_wide_setup',
fwtype: 'dc', fwtype: 'dc',
itemId: 'firewall-options' itemId: 'firewall-options',
}, },
{ {
xtype: 'pveSecurityGroups', xtype: 'pveSecurityGroups',
title: gettext('Security Group'), title: gettext('Security Group'),
groups: ['firewall'], groups: ['firewall'],
iconCls: 'fa fa-group', iconCls: 'fa fa-group',
itemId: 'firewall-sg' itemId: 'firewall-sg',
}, },
{ {
xtype: 'pveFirewallAliases', xtype: 'pveFirewallAliases',
@ -220,7 +220,7 @@ Ext.define('PVE.dc.Config', {
groups: ['firewall'], groups: ['firewall'],
iconCls: 'fa fa-external-link', iconCls: 'fa fa-external-link',
base_url: '/cluster/firewall/aliases', base_url: '/cluster/firewall/aliases',
itemId: 'firewall-aliases' itemId: 'firewall-aliases',
}, },
{ {
xtype: 'pveIPSet', xtype: 'pveIPSet',
@ -229,7 +229,7 @@ Ext.define('PVE.dc.Config', {
iconCls: 'fa fa-list-ol', iconCls: 'fa fa-list-ol',
base_url: '/cluster/firewall/ipset', base_url: '/cluster/firewall/ipset',
list_refs_url: '/cluster/firewall/refs', list_refs_url: '/cluster/firewall/refs',
itemId: 'firewall-ipset' itemId: 'firewall-ipset',
}, },
{ {
xtype: 'pveMetricServerView', xtype: 'pveMetricServerView',
@ -242,10 +242,10 @@ Ext.define('PVE.dc.Config', {
xtype: 'pveDcSupport', xtype: 'pveDcSupport',
title: gettext('Support'), title: gettext('Support'),
itemId: 'support', itemId: 'support',
iconCls: 'fa fa-comments-o' iconCls: 'fa fa-comments-o',
}); });
} }
me.callParent(); me.callParent();
} },
}); });

View File

@ -56,7 +56,7 @@ Ext.define('PVE.form.CorosyncLinkEditorController', {
view.remove(this); view.remove(this);
me.updateDeleteButtonState(); me.updateDeleteButtonState();
} },
}); });
view.add(linkSelector); view.add(linkSelector);
@ -115,7 +115,7 @@ Ext.define('PVE.form.CorosyncLinkEditorController', {
// all numbers in use, this should never happen since add button is // all numbers in use, this should never happen since add button is
// disabled automatically // disabled automatically
return 0; return 0;
} },
}); });
Ext.define('PVE.form.CorosyncLinkSelector', { Ext.define('PVE.form.CorosyncLinkSelector', {
@ -147,7 +147,7 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
fieldLabel: 'Link', fieldLabel: 'Link',
cbind: { cbind: {
hidden: '{allowNumberEdit}', hidden: '{allowNumberEdit}',
value: '{initNumber}' value: '{initNumber}',
}, },
width: 45, width: 45,
labelWidth: 30, labelWidth: 30,
@ -159,7 +159,7 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
cbind: { cbind: {
maxValue: '{maxLinkNumber}', maxValue: '{maxLinkNumber}',
hidden: '{!allowNumberEdit}', hidden: '{!allowNumberEdit}',
value: '{initNumber}' value: '{initNumber}',
}, },
width: 80, width: 80,
labelWidth: 30, labelWidth: 30,
@ -187,14 +187,14 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
let linkNumber = numSelect.getValue(); let linkNumber = numSelect.getValue();
me.name = 'link' + linkNumber; me.name = 'link' + linkNumber;
return me.getValue(); return me.getValue();
} },
}, },
{ {
xtype: 'button', xtype: 'button',
iconCls: 'fa fa-trash-o', iconCls: 'fa fa-trash-o',
cls: 'removeLinkBtn', cls: 'removeLinkBtn',
cbind: { cbind: {
hidden: '{!allowNumberEdit}' hidden: '{!allowNumberEdit}',
}, },
handler: function() { handler: function() {
let me = this; let me = this;
@ -202,7 +202,7 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
if (parent.removeBtnHandler !== undefined) { if (parent.removeBtnHandler !== undefined) {
parent.removeBtnHandler(); parent.removeBtnHandler();
} }
} },
}, },
{ {
xtype: 'label', xtype: 'label',
@ -212,9 +212,9 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
cls: 'x-form-item-label-default', cls: 'x-form-item-label-default',
cbind: { cbind: {
text: '{text}' text: '{text}',
} },
} },
], ],
initComponent: function() { initComponent: function() {
@ -227,12 +227,12 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
numSelect.validator = this.createNoDuplicatesValidator( numSelect.validator = this.createNoDuplicatesValidator(
'numberfield', 'numberfield',
gettext("Duplicate link number not allowed.") gettext("Duplicate link number not allowed."),
); );
netSelect.validator = this.createNoDuplicatesValidator( netSelect.validator = this.createNoDuplicatesValidator(
'proxmoxNetworkSelector', 'proxmoxNetworkSelector',
gettext("Duplicate link address not allowed.") gettext("Duplicate link address not allowed."),
); );
}, },
@ -278,7 +278,7 @@ Ext.define('PVE.form.CorosyncLinkSelector', {
return err || true; return err || true;
}; };
} },
}); });
Ext.define('PVE.form.CorosyncLinkEditor', { Ext.define('PVE.form.CorosyncLinkEditor', {
@ -296,7 +296,7 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
maxLinkCount: 8, maxLinkCount: 8,
networks: null, networks: null,
allowNumberEdit: true, allowNumberEdit: true,
infoText: '' infoText: '',
}, },
formulas: { formulas: {
addDisabled: function(get) { addDisabled: function(get) {
@ -305,8 +305,8 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
}, },
dockHidden: function(get) { dockHidden: function(get) {
return !(get('allowNumberEdit') || get('infoText')); return !(get('allowNumberEdit') || get('infoText'));
} },
} },
}, },
dockedItems: [{ dockedItems: [{
@ -316,7 +316,7 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
border: false, border: false,
padding: '6 0 6 0', padding: '6 0 6 0',
bind: { bind: {
hidden: '{dockHidden}' hidden: '{dockHidden}',
}, },
items: [ items: [
{ {
@ -324,17 +324,17 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
text: gettext('Add'), text: gettext('Add'),
bind: { bind: {
disabled: '{addDisabled}', disabled: '{addDisabled}',
hidden: '{!allowNumberEdit}' hidden: '{!allowNumberEdit}',
}, },
handler: 'addEmptyLink' handler: 'addEmptyLink',
}, },
{ {
xtype: 'label', xtype: 'label',
bind: { bind: {
text: '{infoText}' text: '{infoText}',
} },
} },
] ],
}], }],
setInfoText: function(text) { setInfoText: function(text) {
@ -382,7 +382,7 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
let me = this; let me = this;
let vm = me.up('pveCorosyncLinkEditor').getViewModel(); let vm = me.up('pveCorosyncLinkEditor').getViewModel();
return vm.get('linkCount') > 0; return vm.get('linkCount') > 0;
} },
}], }],
initComponent: function() { initComponent: function() {
@ -429,8 +429,8 @@ Ext.define('PVE.form.CorosyncLinkEditor', {
if (vm.get('allowNumberEdit')) { if (vm.get('allowNumberEdit')) {
controller.addLinkIfEmpty(); controller.addLinkIfEmpty();
} }
} },
}); });
} },
}); });

View File

@ -28,15 +28,15 @@ Ext.define('PVE.dc.GroupEdit', {
fieldLabel: gettext('Name'), fieldLabel: gettext('Name'),
name: 'groupid', name: 'groupid',
value: me.groupid, value: me.groupid,
allowBlank: false allowBlank: false,
}, },
{ {
xtype: 'textfield', xtype: 'textfield',
fieldLabel: gettext('Comment'), fieldLabel: gettext('Comment'),
name: 'comment', name: 'comment',
allowBlank: true allowBlank: true,
} },
] ],
}); });
me.callParent(); me.callParent();
@ -44,5 +44,5 @@ Ext.define('PVE.dc.GroupEdit', {
if (!me.isCreate) { if (!me.isCreate) {
me.load(); me.load();
} }
} },
}); });

View File

@ -15,8 +15,8 @@ Ext.define('PVE.dc.GroupView', {
model: 'pve-groups', model: 'pve-groups',
sorters: { sorters: {
property: 'groupid', property: 'groupid',
order: 'DESC' order: 'DESC',
} },
}); });
var reload = function() { var reload = function() {
@ -30,7 +30,7 @@ Ext.define('PVE.dc.GroupView', {
callback: function() { callback: function() {
reload(); reload();
}, },
baseurl: '/access/groups/' baseurl: '/access/groups/',
}); });
var run_editor = function() { var run_editor = function() {
@ -39,8 +39,8 @@ Ext.define('PVE.dc.GroupView', {
return; return;
} }
var win = Ext.create('PVE.dc.GroupEdit',{ var win = Ext.create('PVE.dc.GroupEdit', {
groupid: rec.data.groupid groupid: rec.data.groupid,
}); });
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
@ -50,7 +50,7 @@ Ext.define('PVE.dc.GroupView', {
text: gettext('Edit'), text: gettext('Edit'),
disabled: true, disabled: true,
selModel: sm, selModel: sm,
handler: run_editor handler: run_editor,
}); });
var tbar = [ var tbar = [
@ -60,9 +60,9 @@ Ext.define('PVE.dc.GroupView', {
var win = Ext.create('PVE.dc.GroupEdit', {}); var win = Ext.create('PVE.dc.GroupEdit', {});
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
} },
}, },
edit_btn, remove_btn edit_btn, remove_btn,
]; ];
Proxmox.Utils.monStoreErrors(me, store); Proxmox.Utils.monStoreErrors(me, store);
@ -72,36 +72,36 @@ Ext.define('PVE.dc.GroupView', {
selModel: sm, selModel: sm,
tbar: tbar, tbar: tbar,
viewConfig: { viewConfig: {
trackOver: false trackOver: false,
}, },
columns: [ columns: [
{ {
header: gettext('Name'), header: gettext('Name'),
width: 200, width: 200,
sortable: true, sortable: true,
dataIndex: 'groupid' dataIndex: 'groupid',
}, },
{ {
header: gettext('Comment'), header: gettext('Comment'),
sortable: false, sortable: false,
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
dataIndex: 'comment', dataIndex: 'comment',
flex: 1 flex: 1,
}, },
{ {
header: gettext('Users'), header: gettext('Users'),
sortable: false, sortable: false,
dataIndex: 'users', dataIndex: 'users',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
} },
], ],
listeners: { listeners: {
activate: reload, activate: reload,
itemdblclick: run_editor itemdblclick: run_editor,
} },
}); });
me.callParent(); me.callParent();
} },
}); });

View File

@ -10,9 +10,9 @@ Ext.define('PVE.dc.Guests', {
columns: 2, columns: 2,
tableAttrs: { tableAttrs: {
style: { style: {
width: '100%' width: '100%',
} },
} },
}, },
bodyPadding: '0 20 20 20', bodyPadding: '0 20 20 20',
@ -21,8 +21,8 @@ Ext.define('PVE.dc.Guests', {
padding: '0 50 0 50', padding: '0 50 0 50',
style: { style: {
'text-align':'center', 'text-align':'center',
'line-height':'1.2' 'line-height':'1.2',
} },
}, },
items: [{ items: [{
itemId: 'qemu', itemId: 'qemu',
@ -30,7 +30,7 @@ Ext.define('PVE.dc.Guests', {
running: 0, running: 0,
paused: 0, paused: 0,
stopped: 0, stopped: 0,
template: 0 template: 0,
}, },
tpl: [ tpl: [
'<h3>' + gettext("Virtual Machines") + '</h3>', '<h3>' + gettext("Virtual Machines") + '</h3>',
@ -57,15 +57,15 @@ Ext.define('PVE.dc.Guests', {
gettext('Templates'), gettext('Templates'),
'</div>', '</div>',
'<div class="right-aligned">{template}</div>', '<div class="right-aligned">{template}</div>',
'</tpl>' '</tpl>',
] ],
},{ }, {
itemId: 'lxc', itemId: 'lxc',
data: { data: {
running: 0, running: 0,
paused: 0, paused: 0,
stopped: 0, stopped: 0,
template: 0 template: 0,
}, },
tpl: [ tpl: [
'<h3>' + gettext("LXC Container") + '</h3>', '<h3>' + gettext("LXC Container") + '</h3>',
@ -92,13 +92,13 @@ Ext.define('PVE.dc.Guests', {
gettext('Templates'), gettext('Templates'),
'</div>', '</div>',
'<div class="right-aligned">{template}</div>', '<div class="right-aligned">{template}</div>',
'</tpl>' '</tpl>',
] ],
},{ }, {
itemId: 'error', itemId: 'error',
colspan: 2, colspan: 2,
data: { data: {
num: 0 num: 0,
}, },
columnWidth: 1, columnWidth: 1,
padding: '10 250 0 250', padding: '10 250 0 250',
@ -109,8 +109,8 @@ Ext.define('PVE.dc.Guests', {
gettext('Error'), gettext('Error'),
'</div>', '</div>',
'<div class="right-aligned">{num}</div>', '<div class="right-aligned">{num}</div>',
'</tpl>' '</tpl>',
] ],
}], }],
updateValues: function(qemu, lxc, error) { updateValues: function(qemu, lxc, error) {
@ -118,5 +118,5 @@ Ext.define('PVE.dc.Guests', {
me.getComponent('qemu').update(qemu); me.getComponent('qemu').update(qemu);
me.getComponent('lxc').update(lxc); me.getComponent('lxc').update(lxc);
me.getComponent('error').update({num: error}); me.getComponent('error').update({num: error});
} },
}); });

View File

@ -8,15 +8,15 @@ Ext.define('PVE.dc.Health', {
height: 250, height: 250,
layout: { layout: {
type: 'hbox', type: 'hbox',
align: 'stretch' align: 'stretch',
}, },
defaults: { defaults: {
flex: 1, flex: 1,
xtype: 'box', xtype: 'box',
style: { style: {
'text-align':'center' 'text-align':'center',
} },
}, },
nodeList: [], nodeList: [],
@ -30,12 +30,12 @@ Ext.define('PVE.dc.Health', {
var cluster = { var cluster = {
iconCls: PVE.Utils.get_health_icon('good', true), iconCls: PVE.Utils.get_health_icon('good', true),
text: gettext("Standalone node - no cluster defined") text: gettext("Standalone node - no cluster defined"),
}; };
var nodes = { var nodes = {
online: 0, online: 0,
offline: 0 offline: 0,
}; };
// by default we have one node // by default we have one node
@ -98,20 +98,20 @@ Ext.define('PVE.dc.Health', {
destroy: function() { destroy: function() {
var me = this; var me = this;
me.cephstore.stopUpdate(); me.cephstore.stopUpdate();
} },
}, },
items: [ items: [
{ {
itemId: 'clusterstatus', itemId: 'clusterstatus',
xtype: 'pveHealthWidget', xtype: 'pveHealthWidget',
title: gettext('Status') title: gettext('Status'),
}, },
{ {
itemId: 'nodestatus', itemId: 'nodestatus',
data: { data: {
online: 0, online: 0,
offline: 0 offline: 0,
}, },
tpl: [ tpl: [
'<h3>' + gettext('Nodes') + '</h3><br />', '<h3>' + gettext('Nodes') + '</h3><br />',
@ -127,8 +127,8 @@ Ext.define('PVE.dc.Health', {
gettext('Offline'), gettext('Offline'),
'</div>', '</div>',
'<div class="right-aligned">{offline}</div>', '<div class="right-aligned">{offline}</div>',
'</div>' '</div>',
] ],
}, },
{ {
itemId: 'ceph', itemId: 'ceph',
@ -143,9 +143,9 @@ Ext.define('PVE.dc.Health', {
click: function() { click: function() {
var sp = Ext.state.Manager.getProvider(); var sp = Ext.state.Manager.getProvider();
sp.set('dctab', {value:'ceph'}, true); sp.set('dctab', {value:'ceph'}, true);
} },
} },
} },
], ],
initComponent: function() { initComponent: function() {
@ -158,11 +158,11 @@ Ext.define('PVE.dc.Health', {
storeid: 'pve-cluster-ceph', storeid: 'pve-cluster-ceph',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json/nodes/' + me.nodeList[me.nodeIndex].node + '/ceph/status' url: '/api2/json/nodes/' + me.nodeList[me.nodeIndex].node + '/ceph/status',
} },
}); });
me.callParent(); me.callParent();
me.mon(me.cephstore, 'load', me.updateCeph, me); me.mon(me.cephstore, 'load', me.updateCeph, me);
me.cephstore.startUpdate(); me.cephstore.startUpdate();
} },
}); });

View File

@ -15,13 +15,13 @@ Ext.define('PVE.dc.Log', {
model: 'proxmox-cluster-log', model: 'proxmox-cluster-log',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json/cluster/log' url: '/api2/json/cluster/log',
} },
}); });
var store = Ext.create('Proxmox.data.DiffStore', { var store = Ext.create('Proxmox.data.DiffStore', {
rstore: logstore, rstore: logstore,
appendAtStart: true appendAtStart: true,
}); });
Ext.apply(me, { Ext.apply(me, {
@ -38,7 +38,7 @@ Ext.define('PVE.dc.Log', {
if (pri && pri <= 3) { if (pri && pri <= 3) {
return "proxmox-invalid-row"; return "proxmox-invalid-row";
} }
} },
}, },
sortableColumns: false, sortableColumns: false,
columns: [ columns: [
@ -48,49 +48,49 @@ Ext.define('PVE.dc.Log', {
width: 150, width: 150,
renderer: function(value) { renderer: function(value) {
return Ext.Date.format(value, "M d H:i:s"); return Ext.Date.format(value, "M d H:i:s");
} },
}, },
{ {
header: gettext("Node"), header: gettext("Node"),
dataIndex: 'node', dataIndex: 'node',
width: 150 width: 150,
}, },
{ {
header: gettext("Service"), header: gettext("Service"),
dataIndex: 'tag', dataIndex: 'tag',
width: 100 width: 100,
}, },
{ {
header: "PID", header: "PID",
dataIndex: 'pid', dataIndex: 'pid',
width: 100 width: 100,
}, },
{ {
header: gettext("User name"), header: gettext("User name"),
dataIndex: 'user', dataIndex: 'user',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
width: 150 width: 150,
}, },
{ {
header: gettext("Severity"), header: gettext("Severity"),
dataIndex: 'pri', dataIndex: 'pri',
renderer: PVE.Utils.render_serverity, renderer: PVE.Utils.render_serverity,
width: 100 width: 100,
}, },
{ {
header: gettext("Message"), header: gettext("Message"),
dataIndex: 'msg', dataIndex: 'msg',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
} },
], ],
listeners: { listeners: {
activate: () => logstore.startUpdate(), activate: () => logstore.startUpdate(),
deactivate: () => logstore.stopUpdate(), deactivate: () => logstore.stopUpdate(),
destroy: () => logstore.stopUpdate(), destroy: () => logstore.stopUpdate(),
} },
}); });
me.callParent(); me.callParent();
} },
}); });

View File

@ -11,13 +11,13 @@ Ext.define('PVE.dc.NodeView', {
header: gettext('Name'), header: gettext('Name'),
flex: 1, flex: 1,
sortable: true, sortable: true,
dataIndex: 'name' dataIndex: 'name',
}, },
{ {
header: 'ID', header: 'ID',
width: 40, width: 40,
sortable: true, sortable: true,
dataIndex: 'nodeid' dataIndex: 'nodeid',
}, },
{ {
header: gettext('Online'), header: gettext('Online'),
@ -27,20 +27,20 @@ Ext.define('PVE.dc.NodeView', {
renderer: function(value) { renderer: function(value) {
var cls = (value)?'good':'critical'; var cls = (value)?'good':'critical';
return '<i class="fa ' + PVE.Utils.get_health_icon(cls) + '"><i/>'; return '<i class="fa ' + PVE.Utils.get_health_icon(cls) + '"><i/>';
} },
}, },
{ {
header: gettext('Support'), header: gettext('Support'),
width: 100, width: 100,
sortable: true, sortable: true,
dataIndex: 'level', dataIndex: 'level',
renderer: PVE.Utils.render_support_level renderer: PVE.Utils.render_support_level,
}, },
{ {
header: gettext('Server Address'), header: gettext('Server Address'),
width: 115, width: 115,
sortable: true, sortable: true,
dataIndex: 'ip' dataIndex: 'ip',
}, },
{ {
header: gettext('CPU usage'), header: gettext('CPU usage'),
@ -50,8 +50,8 @@ Ext.define('PVE.dc.NodeView', {
tdCls: 'x-progressbar-default-cell', tdCls: 'x-progressbar-default-cell',
xtype: 'widgetcolumn', xtype: 'widgetcolumn',
widget: { widget: {
xtype: 'pveProgressBar' xtype: 'pveProgressBar',
} },
}, },
{ {
header: gettext('Memory usage'), header: gettext('Memory usage'),
@ -61,16 +61,16 @@ Ext.define('PVE.dc.NodeView', {
dataIndex: 'memoryusage', dataIndex: 'memoryusage',
xtype: 'widgetcolumn', xtype: 'widgetcolumn',
widget: { widget: {
xtype: 'pveProgressBar' xtype: 'pveProgressBar',
} },
}, },
{ {
header: gettext('Uptime'), header: gettext('Uptime'),
sortable: true, sortable: true,
dataIndex: 'uptime', dataIndex: 'uptime',
align: 'right', align: 'right',
renderer: Proxmox.Utils.render_uptime renderer: Proxmox.Utils.render_uptime,
} },
], ],
stateful: true, stateful: true,
@ -82,7 +82,7 @@ Ext.define('PVE.dc.NodeView', {
var me = this.up('grid'); var me = this.up('grid');
var height = Math.max(me.getHeight()-50, 250); var height = Math.max(me.getHeight()-50, 250);
me.setHeight(height); me.setHeight(height);
} },
}, },
{ {
type: 'down', type: 'down',
@ -90,26 +90,26 @@ Ext.define('PVE.dc.NodeView', {
var me = this.up('grid'); var me = this.up('grid');
var height = me.getHeight()+50; var height = me.getHeight()+50;
me.setHeight(height); me.setHeight(height);
} },
} },
] ],
}, function() { }, function() {
Ext.define('pve-dc-nodes', { Ext.define('pve-dc-nodes', {
extend: 'Ext.data.Model', extend: 'Ext.data.Model',
fields: [ 'id', 'type', 'name', 'nodeid', 'ip', 'level', 'local', 'online'], fields: [ 'id', 'type', 'name', 'nodeid', 'ip', 'level', 'local', 'online'],
idProperty: 'id' idProperty: 'id',
}); });
}); });
Ext.define('PVE.widget.ProgressBar',{ Ext.define('PVE.widget.ProgressBar', {
extend: 'Ext.Progress', extend: 'Ext.Progress',
alias: 'widget.pveProgressBar', alias: 'widget.pveProgressBar',
animate: true, animate: true,
textTpl: [ textTpl: [
'{percent}%' '{percent}%',
], ],
setValue: function(value){ setValue: function(value){
@ -123,5 +123,5 @@ Ext.define('PVE.widget.ProgressBar',{
} else if (value > 0.59) { } else if (value > 0.59) {
me.addCls('warning'); me.addCls('warning');
} }
} },
}); });

View File

@ -24,7 +24,7 @@ Ext.define('PVE.dc.OptionView', {
subject: text, subject: text,
onlineHelp: opts.onlineHelp, onlineHelp: opts.onlineHelp,
fieldDefaults: { fieldDefaults: {
labelWidth: opts.labelWidth || 100 labelWidth: opts.labelWidth || 100,
}, },
setValues: function(values) { setValues: function(values) {
var edit_value = values[name]; var edit_value = values[name];
@ -48,9 +48,9 @@ Ext.define('PVE.dc.OptionView', {
ret_val[name] = PVE.Parser.printPropertyString(values); ret_val[name] = PVE.Parser.printPropertyString(values);
return ret_val; return ret_val;
}, },
items: opts.items items: opts.items,
}] }],
} : undefined } : undefined,
}; };
}, },
@ -74,28 +74,28 @@ Ext.define('PVE.dc.OptionView', {
renderer: PVE.Utils.render_kvm_language, renderer: PVE.Utils.render_kvm_language,
comboItems: PVE.Utils.kvm_keymap_array(), comboItems: PVE.Utils.kvm_keymap_array(),
defaultValue: '__default__', defaultValue: '__default__',
deleteEmpty: true deleteEmpty: true,
}); });
me.add_text_row('http_proxy', gettext('HTTP proxy'), { me.add_text_row('http_proxy', gettext('HTTP proxy'), {
defaultValue: Proxmox.Utils.noneText, defaultValue: Proxmox.Utils.noneText,
vtype: 'HttpProxy', vtype: 'HttpProxy',
deleteEmpty: true deleteEmpty: true,
}); });
me.add_combobox_row('console', gettext('Console Viewer'), { me.add_combobox_row('console', gettext('Console Viewer'), {
renderer: PVE.Utils.render_console_viewer, renderer: PVE.Utils.render_console_viewer,
comboItems: PVE.Utils.console_viewer_array(), comboItems: PVE.Utils.console_viewer_array(),
defaultValue: '__default__', defaultValue: '__default__',
deleteEmpty: true deleteEmpty: true,
}); });
me.add_text_row('email_from', gettext('Email from address'), { me.add_text_row('email_from', gettext('Email from address'), {
deleteEmpty: true, deleteEmpty: true,
vtype: 'proxmoxMail', vtype: 'proxmoxMail',
defaultValue: 'root@$hostname' defaultValue: 'root@$hostname',
}); });
me.add_text_row('mac_prefix', gettext('MAC address prefix'), { me.add_text_row('mac_prefix', gettext('MAC address prefix'), {
deleteEmpty: true, deleteEmpty: true,
vtype: 'MacPrefix', vtype: 'MacPrefix',
defaultValue: Proxmox.Utils.noneText defaultValue: Proxmox.Utils.noneText,
}); });
me.add_inputpanel_row('migration', gettext('Migration Settings'), { me.add_inputpanel_row('migration', gettext('Migration Settings'), {
renderer: PVE.Utils.render_dc_ha_opts, renderer: PVE.Utils.render_dc_ha_opts,
@ -115,8 +115,8 @@ Ext.define('PVE.dc.OptionView', {
value: null, value: null,
emptyText: Proxmox.Utils.defaultText, emptyText: Proxmox.Utils.defaultText,
autoSelect: false, autoSelect: false,
skipEmptyText: true skipEmptyText: true,
}] }],
}); });
me.add_inputpanel_row('ha', gettext('HA Settings'), { me.add_inputpanel_row('ha', gettext('HA Settings'), {
renderer: PVE.Utils.render_dc_ha_opts, renderer: PVE.Utils.render_dc_ha_opts,
@ -134,10 +134,10 @@ Ext.define('PVE.dc.OptionView', {
['freeze', 'freeze'], ['freeze', 'freeze'],
['failover', 'failover'], ['failover', 'failover'],
['migrate', 'migrate'], ['migrate', 'migrate'],
['conditional', 'conditional'] ['conditional', 'conditional'],
], ],
defaultValue: '__default__' defaultValue: '__default__',
}] }],
}); });
me.add_inputpanel_row('u2f', gettext('U2F Settings'), { me.add_inputpanel_row('u2f', gettext('U2F Settings'), {
renderer: PVE.Utils.render_dc_ha_opts, renderer: PVE.Utils.render_dc_ha_opts,
@ -168,7 +168,7 @@ Ext.define('PVE.dc.OptionView', {
xtype: 'displayfield', xtype: 'displayfield',
userCls: 'pmx-hint', userCls: 'pmx-hint',
value: gettext('NOTE: Changing an AppID breaks existing U2F registrations!'), value: gettext('NOTE: Changing an AppID breaks existing U2F registrations!'),
}] }],
}); });
me.add_inputpanel_row('bwlimit', gettext('Bandwidth Limits'), { me.add_inputpanel_row('bwlimit', gettext('Bandwidth Limits'), {
renderer: me.render_bwlimits, renderer: me.render_bwlimits,
@ -210,7 +210,7 @@ Ext.define('PVE.dc.OptionView', {
fieldLabel: gettext('Disk Move'), fieldLabel: gettext('Disk Move'),
emptyText: gettext('default'), emptyText: gettext('default'),
backendUnit: "KiB", backendUnit: "KiB",
}] }],
}); });
me.add_integer_row('max_workers', gettext('Maximal Workers/bulk-action'), { me.add_integer_row('max_workers', gettext('Maximal Workers/bulk-action'), {
deleteEmpty: true, deleteEmpty: true,
@ -227,17 +227,17 @@ Ext.define('PVE.dc.OptionView', {
xtype: 'proxmoxButton', xtype: 'proxmoxButton',
disabled: true, disabled: true,
handler: function() { me.run_editor(); }, handler: function() { me.run_editor(); },
selModel: me.selModel selModel: me.selModel,
}], }],
url: "/api2/json/cluster/options", url: "/api2/json/cluster/options",
editorConfig: { editorConfig: {
url: "/api2/extjs/cluster/options" url: "/api2/extjs/cluster/options",
}, },
interval: 5000, interval: 5000,
cwidth1: 200, cwidth1: 200,
listeners: { listeners: {
itemdblclick: me.run_editor itemdblclick: me.run_editor,
} },
}); });
me.callParent(); me.callParent();
@ -258,5 +258,5 @@ Ext.define('PVE.dc.OptionView', {
me.on('activate', me.rstore.startUpdate); me.on('activate', me.rstore.startUpdate);
me.on('destroy', me.rstore.stopUpdate); me.on('destroy', me.rstore.stopUpdate);
me.on('deactivate', me.rstore.stopUpdate); me.on('deactivate', me.rstore.stopUpdate);
} },
}); });

View File

@ -15,8 +15,8 @@ Ext.define('PVE.dc.PoolView', {
model: 'pve-pools', model: 'pve-pools',
sorters: { sorters: {
property: 'poolid', property: 'poolid',
order: 'DESC' order: 'DESC',
} },
}); });
var reload = function() { var reload = function() {
@ -30,7 +30,7 @@ Ext.define('PVE.dc.PoolView', {
baseurl: '/pools/', baseurl: '/pools/',
callback: function () { callback: function () {
reload(); reload();
} },
}); });
var run_editor = function() { var run_editor = function() {
@ -39,8 +39,8 @@ Ext.define('PVE.dc.PoolView', {
return; return;
} }
var win = Ext.create('PVE.dc.PoolEdit',{ var win = Ext.create('PVE.dc.PoolEdit', {
poolid: rec.data.poolid poolid: rec.data.poolid,
}); });
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
@ -50,7 +50,7 @@ Ext.define('PVE.dc.PoolView', {
text: gettext('Edit'), text: gettext('Edit'),
disabled: true, disabled: true,
selModel: sm, selModel: sm,
handler: run_editor handler: run_editor,
}); });
var tbar = [ var tbar = [
@ -60,9 +60,9 @@ Ext.define('PVE.dc.PoolView', {
var win = Ext.create('PVE.dc.PoolEdit', {}); var win = Ext.create('PVE.dc.PoolEdit', {});
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
} },
}, },
edit_btn, remove_btn edit_btn, remove_btn,
]; ];
Proxmox.Utils.monStoreErrors(me, store); Proxmox.Utils.monStoreErrors(me, store);
@ -72,29 +72,29 @@ Ext.define('PVE.dc.PoolView', {
selModel: sm, selModel: sm,
tbar: tbar, tbar: tbar,
viewConfig: { viewConfig: {
trackOver: false trackOver: false,
}, },
columns: [ columns: [
{ {
header: gettext('Name'), header: gettext('Name'),
width: 200, width: 200,
sortable: true, sortable: true,
dataIndex: 'poolid' dataIndex: 'poolid',
}, },
{ {
header: gettext('Comment'), header: gettext('Comment'),
sortable: false, sortable: false,
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
dataIndex: 'comment', dataIndex: 'comment',
flex: 1 flex: 1,
} },
], ],
listeners: { listeners: {
activate: reload, activate: reload,
itemdblclick: run_editor itemdblclick: run_editor,
} },
}); });
me.callParent(); me.callParent();
} },
}); });

View File

@ -30,16 +30,16 @@ Ext.define('PVE.dc.RoleEdit', {
name: 'roleid', name: 'roleid',
value: me.roleid, value: me.roleid,
allowBlank: false, allowBlank: false,
fieldLabel: gettext('Name') fieldLabel: gettext('Name'),
}, },
{ {
xtype: 'pvePrivilegesSelector', xtype: 'pvePrivilegesSelector',
name: 'privs', name: 'privs',
value: me.privs, value: me.privs,
allowBlank: false, allowBlank: false,
fieldLabel: gettext('Privileges') fieldLabel: gettext('Privileges'),
} },
] ],
}); });
me.callParent(); me.callParent();
@ -52,10 +52,10 @@ Ext.define('PVE.dc.RoleEdit', {
me.setValues({ me.setValues({
privs: keys, privs: keys,
roleid: me.roleid roleid: me.roleid,
}); });
} },
}); });
} }
} },
}); });

View File

@ -15,8 +15,8 @@ Ext.define('PVE.dc.RoleView', {
model: 'pmx-roles', model: 'pmx-roles',
sorters: { sorters: {
property: 'roleid', property: 'roleid',
order: 'DESC' order: 'DESC',
} },
}); });
var render_privs = function(value, metaData) { var render_privs = function(value, metaData) {
@ -49,9 +49,9 @@ Ext.define('PVE.dc.RoleView', {
return; return;
} }
var win = Ext.create('PVE.dc.RoleEdit',{ var win = Ext.create('PVE.dc.RoleEdit', {
roleid: rec.data.roleid, roleid: rec.data.roleid,
privs: rec.data.privs privs: rec.data.privs,
}); });
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
@ -62,7 +62,7 @@ Ext.define('PVE.dc.RoleView', {
selModel: sm, selModel: sm,
viewConfig: { viewConfig: {
trackOver: false trackOver: false,
}, },
columns: [ columns: [
{ {
@ -70,13 +70,13 @@ Ext.define('PVE.dc.RoleView', {
width: 65, width: 65,
sortable: true, sortable: true,
dataIndex: 'special', dataIndex: 'special',
renderer: Proxmox.Utils.format_boolean renderer: Proxmox.Utils.format_boolean,
}, },
{ {
header: gettext('Name'), header: gettext('Name'),
width: 150, width: 150,
sortable: true, sortable: true,
dataIndex: 'roleid' dataIndex: 'roleid',
}, },
{ {
itemid: 'privs', itemid: 'privs',
@ -84,14 +84,14 @@ Ext.define('PVE.dc.RoleView', {
sortable: false, sortable: false,
renderer: render_privs, renderer: render_privs,
dataIndex: 'privs', dataIndex: 'privs',
flex: 1 flex: 1,
} },
], ],
listeners: { listeners: {
activate: function() { activate: function() {
store.load(); store.load();
}, },
itemdblclick: run_editor itemdblclick: run_editor,
}, },
tbar: [ tbar: [
{ {
@ -100,7 +100,7 @@ Ext.define('PVE.dc.RoleView', {
var win = Ext.create('PVE.dc.RoleEdit', {}); var win = Ext.create('PVE.dc.RoleEdit', {});
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
} },
}, },
{ {
xtype: 'proxmoxButton', xtype: 'proxmoxButton',
@ -118,10 +118,10 @@ Ext.define('PVE.dc.RoleView', {
}, },
baseurl: '/access/roles/', baseurl: '/access/roles/',
enableFn: (rec) => !rec.data.special, enableFn: (rec) => !rec.data.special,
} },
] ],
}); });
me.callParent(); me.callParent();
} },
}); });

View File

@ -2,7 +2,7 @@ Ext.define('pve-security-groups', {
extend: 'Ext.data.Model', extend: 'Ext.data.Model',
fields: [ 'group', 'comment', 'digest' ], fields: [ 'group', 'comment', 'digest' ],
idProperty: 'group' idProperty: 'group',
}); });
Ext.define('PVE.SecurityGroupEdit', { Ext.define('PVE.SecurityGroupEdit', {
@ -28,14 +28,14 @@ Ext.define('PVE.SecurityGroupEdit', {
name: 'group', name: 'group',
value: me.group_name || '', value: me.group_name || '',
fieldLabel: gettext('Name'), fieldLabel: gettext('Name'),
allowBlank: false allowBlank: false,
}, },
{ {
xtype: 'textfield', xtype: 'textfield',
name: 'comment', name: 'comment',
value: me.group_comment || '', value: me.group_comment || '',
fieldLabel: gettext('Comment') fieldLabel: gettext('Comment'),
} },
]; ];
if (me.isCreate) { if (me.isCreate) {
@ -45,24 +45,24 @@ Ext.define('PVE.SecurityGroupEdit', {
items.push({ items.push({
xtype: 'hiddenfield', xtype: 'hiddenfield',
name: 'rename', name: 'rename',
value: me.group_name value: me.group_name,
}); });
} }
var ipanel = Ext.create('Proxmox.panel.InputPanel', { var ipanel = Ext.create('Proxmox.panel.InputPanel', {
// InputPanel does not have a 'create' property, does it need a 'isCreate' // InputPanel does not have a 'create' property, does it need a 'isCreate'
isCreate: me.isCreate, isCreate: me.isCreate,
items: items items: items,
}); });
Ext.apply(me, { Ext.apply(me, {
subject: subject, subject: subject,
items: [ ipanel ] items: [ ipanel ],
}); });
me.callParent(); me.callParent();
} },
}); });
Ext.define('PVE.SecurityGroupList', { Ext.define('PVE.SecurityGroupList', {
@ -95,12 +95,12 @@ Ext.define('PVE.SecurityGroupList', {
model: 'pve-security-groups', model: 'pve-security-groups',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json' + me.base_url url: '/api2/json' + me.base_url,
}, },
sorters: { sorters: {
property: 'group', property: 'group',
order: 'DESC' order: 'DESC',
} },
}); });
var sm = Ext.create('Ext.selection.RowModel', {}); var sm = Ext.create('Ext.selection.RowModel', {});
@ -125,7 +125,7 @@ Ext.define('PVE.SecurityGroupList', {
var win = Ext.create('PVE.SecurityGroupEdit', { var win = Ext.create('PVE.SecurityGroupEdit', {
digest: rec.data.digest, digest: rec.data.digest,
group_name: rec.data.group, group_name: rec.data.group,
group_comment: rec.data.comment group_comment: rec.data.comment,
}); });
win.show(); win.show();
win.on('destroy', reload); win.on('destroy', reload);
@ -135,7 +135,7 @@ Ext.define('PVE.SecurityGroupList', {
text: gettext('Edit'), text: gettext('Edit'),
disabled: true, disabled: true,
selModel: sm, selModel: sm,
handler: run_editor handler: run_editor,
}); });
me.addBtn = new Proxmox.button.Button({ me.addBtn = new Proxmox.button.Button({
@ -145,7 +145,7 @@ Ext.define('PVE.SecurityGroupList', {
var win = Ext.create('PVE.SecurityGroupEdit', {}); var win = Ext.create('PVE.SecurityGroupEdit', {});
win.show(); win.show();
win.on('destroy', reload); win.on('destroy', reload);
} },
}); });
me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', { me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', {
@ -156,7 +156,7 @@ Ext.define('PVE.SecurityGroupList', {
}, },
callback: function() { callback: function() {
reload(); reload();
} },
}); });
Ext.apply(me, { Ext.apply(me, {
@ -165,7 +165,7 @@ Ext.define('PVE.SecurityGroupList', {
selModel: sm, selModel: sm,
columns: [ columns: [
{ header: gettext('Group'), dataIndex: 'group', width: '100' }, { header: gettext('Group'), dataIndex: 'group', width: '100' },
{ header: gettext('Comment'), dataIndex: 'comment', renderer: Ext.String.htmlEncode, flex: 1 } { header: gettext('Comment'), dataIndex: 'comment', renderer: Ext.String.htmlEncode, flex: 1 },
], ],
listeners: { listeners: {
itemdblclick: run_editor, itemdblclick: run_editor,
@ -176,14 +176,14 @@ Ext.define('PVE.SecurityGroupList', {
deselect: function() { deselect: function() {
me.rule_panel.setBaseUrl(undefined); me.rule_panel.setBaseUrl(undefined);
}, },
show: reload show: reload,
} },
}); });
me.callParent(); me.callParent();
store.load(); store.load();
} },
}); });
Ext.define('PVE.SecurityGroups', { Ext.define('PVE.SecurityGroups', {
@ -200,7 +200,7 @@ Ext.define('PVE.SecurityGroups', {
allow_groups: false, allow_groups: false,
list_refs_url: '/cluster/firewall/refs', list_refs_url: '/cluster/firewall/refs',
tbar_prefix: '<b>' + gettext('Rules') + ':</b>', tbar_prefix: '<b>' + gettext('Rules') + ':</b>',
border: false border: false,
}); });
var sglist = Ext.createWidget('pveSecurityGroupList', { var sglist = Ext.createWidget('pveSecurityGroupList', {
@ -208,7 +208,7 @@ Ext.define('PVE.SecurityGroups', {
rule_panel: rule_panel, rule_panel: rule_panel,
width: '25%', width: '25%',
border: false, border: false,
split: true split: true,
}); });
@ -218,10 +218,10 @@ Ext.define('PVE.SecurityGroups', {
listeners: { listeners: {
show: function() { show: function() {
sglist.fireEvent('show', sglist); sglist.fireEvent('show', sglist);
} },
} },
}); });
me.callParent(); me.callParent();
} },
}); });

View File

@ -21,8 +21,8 @@ Ext.define('PVE.dc.StorageView', {
canDoBackups: schema.backups, canDoBackups: schema.backups,
autoShow: true, autoShow: true,
listeners: { listeners: {
destroy: this.reloadStore destroy: this.reloadStore,
} },
}); });
}, },
@ -33,12 +33,12 @@ Ext.define('PVE.dc.StorageView', {
model: 'pve-storage', model: 'pve-storage',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/storage" url: "/api2/json/storage",
}, },
sorters: { sorters: {
property: 'storage', property: 'storage',
order: 'DESC' order: 'DESC',
} },
}); });
var reload = function() { var reload = function() {
@ -62,13 +62,13 @@ Ext.define('PVE.dc.StorageView', {
text: gettext('Edit'), text: gettext('Edit'),
disabled: true, disabled: true,
selModel: sm, selModel: sm,
handler: run_editor handler: run_editor,
}); });
var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', { var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
selModel: sm, selModel: sm,
baseurl: '/storage/', baseurl: '/storage/',
callback: reload callback: reload,
}); });
// else we cannot dynamically generate the add menu handlers // else we cannot dynamically generate the add menu handlers
@ -84,7 +84,7 @@ Ext.define('PVE.dc.StorageView', {
addMenuItems.push({ addMenuItems.push({
text: PVE.Utils.format_storage_type(type), text: PVE.Utils.format_storage_type(type),
iconCls: 'fa fa-fw fa-' + storage.faIcon, iconCls: 'fa fa-fw fa-' + storage.faIcon,
handler: addHandleGenerator(type) handler: addHandleGenerator(type),
}); });
} }
@ -93,38 +93,38 @@ Ext.define('PVE.dc.StorageView', {
reloadStore: reload, reloadStore: reload,
selModel: sm, selModel: sm,
viewConfig: { viewConfig: {
trackOver: false trackOver: false,
}, },
tbar: [ tbar: [
{ {
text: gettext('Add'), text: gettext('Add'),
menu: new Ext.menu.Menu({ menu: new Ext.menu.Menu({
items: addMenuItems items: addMenuItems,
}) }),
}, },
remove_btn, remove_btn,
edit_btn edit_btn,
], ],
columns: [ columns: [
{ {
header: 'ID', header: 'ID',
flex: 2, flex: 2,
sortable: true, sortable: true,
dataIndex: 'storage' dataIndex: 'storage',
}, },
{ {
header: gettext('Type'), header: gettext('Type'),
flex: 1, flex: 1,
sortable: true, sortable: true,
dataIndex: 'type', dataIndex: 'type',
renderer: PVE.Utils.format_storage_type renderer: PVE.Utils.format_storage_type,
}, },
{ {
header: gettext('Content'), header: gettext('Content'),
flex: 3, flex: 3,
sortable: true, sortable: true,
dataIndex: 'content', dataIndex: 'content',
renderer: PVE.Utils.format_content_types renderer: PVE.Utils.format_content_types,
}, },
{ {
header: gettext('Path') + '/' + gettext('Target'), header: gettext('Path') + '/' + gettext('Target'),
@ -136,37 +136,37 @@ Ext.define('PVE.dc.StorageView', {
return record.data.target; return record.data.target;
} }
return value; return value;
} },
}, },
{ {
header: gettext('Shared'), header: gettext('Shared'),
flex: 1, flex: 1,
sortable: true, sortable: true,
dataIndex: 'shared', dataIndex: 'shared',
renderer: Proxmox.Utils.format_boolean renderer: Proxmox.Utils.format_boolean,
}, },
{ {
header: gettext('Enabled'), header: gettext('Enabled'),
flex: 1, flex: 1,
sortable: true, sortable: true,
dataIndex: 'disable', dataIndex: 'disable',
renderer: Proxmox.Utils.format_neg_boolean renderer: Proxmox.Utils.format_neg_boolean,
}, },
{ {
header: gettext('Bandwidth Limit'), header: gettext('Bandwidth Limit'),
flex: 2, flex: 2,
sortable: true, sortable: true,
dataIndex: 'bwlimit' dataIndex: 'bwlimit',
} },
], ],
listeners: { listeners: {
activate: reload, activate: reload,
itemdblclick: run_editor itemdblclick: run_editor,
} },
}); });
me.callParent(); me.callParent();
} },
}, function() { }, function() {
Ext.define('pve-storage', { Ext.define('pve-storage', {
@ -174,9 +174,9 @@ Ext.define('PVE.dc.StorageView', {
fields: [ fields: [
'path', 'type', 'content', 'server', 'portal', 'target', 'export', 'storage', 'path', 'type', 'content', 'server', 'portal', 'target', 'export', 'storage',
{ name: 'shared', type: 'boolean'}, { name: 'shared', type: 'boolean'},
{ name: 'disable', type: 'boolean'} { name: 'disable', type: 'boolean'},
], ],
idProperty: 'storage' idProperty: 'storage',
}); });
}); });

View File

@ -30,27 +30,27 @@ Ext.define('PVE.dc.Summary', {
layout: 'hbox', layout: 'hbox',
defaults: { defaults: {
xtype: 'proxmoxGauge', xtype: 'proxmoxGauge',
flex: 1 flex: 1,
}, },
items:[ items:[
{ {
title: gettext('CPU'), title: gettext('CPU'),
itemId: 'cpu' itemId: 'cpu',
}, },
{ {
title: gettext('Memory'), title: gettext('Memory'),
itemId: 'memory' itemId: 'memory',
}, },
{ {
title: gettext('Storage'), title: gettext('Storage'),
itemId: 'storage' itemId: 'storage',
} },
] ],
}, },
{ {
itemId: 'nodeview', itemId: 'nodeview',
xtype: 'pveDcNodeView', xtype: 'pveDcNodeView',
height: 250 height: 250,
}, },
{ {
title: gettext('Subscriptions'), title: gettext('Subscriptions'),
@ -66,11 +66,11 @@ Ext.define('PVE.dc.Summary', {
if (this.component.userCls === 'pointer') { if (this.component.userCls === 'pointer') {
window.open('https://www.proxmox.com/en/proxmox-ve/pricing', '_blank'); window.open('https://www.proxmox.com/en/proxmox-ve/pricing', '_blank');
} }
} },
} },
} },
] ],
} },
], ],
listeners: { listeners: {
@ -88,20 +88,20 @@ Ext.define('PVE.dc.Summary', {
model: 'pve-dc-nodes', model: 'pve-dc-nodes',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/cluster/status" url: "/api2/json/cluster/status",
} },
}); });
var gridstore = Ext.create('Proxmox.data.DiffStore', { var gridstore = Ext.create('Proxmox.data.DiffStore', {
rstore: rstore, rstore: rstore,
filters: { filters: {
property: 'type', property: 'type',
value: 'node' value: 'node',
}, },
sorters: { sorters: {
property: 'id', property: 'id',
direction: 'ASC' direction: 'ASC',
} },
}); });
me.callParent(); me.callParent();
@ -141,13 +141,13 @@ Ext.define('PVE.dc.Summary', {
running: 0, running: 0,
paused: 0, paused: 0,
stopped: 0, stopped: 0,
template: 0 template: 0,
}; };
var lxc = { var lxc = {
running: 0, running: 0,
paused: 0, paused: 0,
stopped: 0, stopped: 0,
template: 0 template: 0,
}; };
var error = 0; var error = 0;
@ -215,7 +215,7 @@ Ext.define('PVE.dc.Summary', {
text = Ext.String.format(gettext('{0} of {1}'), PVE.Utils.render_size(used), PVE.Utils.render_size(total)); text = Ext.String.format(gettext('{0} of {1}'), PVE.Utils.render_size(used), PVE.Utils.render_size(total));
storagestat.updateValue((used/total), text); storagestat.updateValue((used/total), text);
gueststatus.updateValues(qemu,lxc,error); gueststatus.updateValues(qemu, lxc, error);
me.suspendLayout = false; me.suspendLayout = false;
me.updateLayout(true); me.updateLayout(true);
@ -255,27 +255,27 @@ Ext.define('PVE.dc.Summary', {
var data = { var data = {
title: Proxmox.Utils.unknownText, title: Proxmox.Utils.unknownText,
text: Proxmox.Utils.unknownText, text: Proxmox.Utils.unknownText,
iconCls: PVE.Utils.get_health_icon(undefined, true) iconCls: PVE.Utils.get_health_icon(undefined, true),
}; };
if (level === '') { if (level === '') {
data = { data = {
title: gettext('No Subscription'), title: gettext('No Subscription'),
iconCls: PVE.Utils.get_health_icon('critical', true), iconCls: PVE.Utils.get_health_icon('critical', true),
text: gettext('You have at least one node without subscription.') text: gettext('You have at least one node without subscription.'),
}; };
subs.setUserCls('pointer'); subs.setUserCls('pointer');
} else if (mixed) { } else if (mixed) {
data = { data = {
title: gettext('Mixed Subscriptions'), title: gettext('Mixed Subscriptions'),
iconCls: PVE.Utils.get_health_icon('warning', true), iconCls: PVE.Utils.get_health_icon('warning', true),
text: gettext('Warning: Your subscription levels are not the same.') text: gettext('Warning: Your subscription levels are not the same.'),
}; };
subs.setUserCls('pointer'); subs.setUserCls('pointer');
} else if (level) { } else if (level) {
data = { data = {
title: PVE.Utils.render_support_level(level), title: PVE.Utils.render_support_level(level),
iconCls: PVE.Utils.get_health_icon('good', true), iconCls: PVE.Utils.get_health_icon('good', true),
text: gettext('Your subscription status is valid.') text: gettext('Your subscription status is valid.'),
}; };
subs.setUserCls(''); subs.setUserCls('');
} }
@ -295,6 +295,6 @@ Ext.define('PVE.dc.Summary', {
}); });
rstore.startUpdate(); rstore.startUpdate();
} },
}); });

View File

@ -71,7 +71,7 @@ Ext.define('PVE.dc.Support', {
} else { } else {
me.updateInactive(data); me.updateInactive(data);
} }
} },
}); });
}; };
@ -79,10 +79,10 @@ Ext.define('PVE.dc.Support', {
autoScroll: true, autoScroll: true,
bodyStyle: 'padding:10px', bodyStyle: 'padding:10px',
listeners: { listeners: {
activate: reload activate: reload,
} },
}); });
me.callParent(); me.callParent();
} },
}); });

View File

@ -137,7 +137,7 @@ Ext.define('PVE.dc.SyncWindow', {
reference: 'defaulthint', reference: 'defaulthint',
value: gettext('Default sync options can be set by editing the realm.'), value: gettext('Default sync options can be set by editing the realm.'),
userCls: 'pmx-hint', userCls: 'pmx-hint',
hidden: true hidden: true,
}, },
], ],
}], }],

View File

@ -14,7 +14,7 @@ Ext.define('PVE.window.TFAEdit', {
layout: { layout: {
type: 'vbox', type: 'vbox',
align: 'stretch' align: 'stretch',
}, },
updateQrCode: function() { updateQrCode: function() {
@ -34,7 +34,7 @@ Ext.define('PVE.window.TFAEdit', {
'&period=' + values.step + '&period=' + values.step +
'&digits=' + values.digits + '&digits=' + values.digits +
'&algorithm=' + algorithm + '&algorithm=' + algorithm +
'&issuer=' + encodeURIComponent(values.issuer) '&issuer=' + encodeURIComponent(values.issuer),
); );
me.lookup('challenge').setVisible(true); me.lookup('challenge').setVisible(true);
@ -44,7 +44,7 @@ Ext.define('PVE.window.TFAEdit', {
showError: function(error) { showError: function(error) {
Ext.Msg.alert( Ext.Msg.alert(
gettext('Error'), gettext('Error'),
PVE.Utils.render_u2f_error(error) PVE.Utils.render_u2f_error(error),
); );
}, },
@ -56,7 +56,7 @@ Ext.define('PVE.window.TFAEdit', {
var msg = Ext.Msg.show({ var msg = Ext.Msg.show({
title: 'U2F: '+gettext('Setup'), title: 'U2F: '+gettext('Setup'),
message: gettext('Please press the button on your U2F Device'), message: gettext('Please press the button on your U2F Device'),
buttons: [] buttons: [],
}); });
Ext.Function.defer(function() { Ext.Function.defer(function() {
u2f.register(data.appId, [data], [], function(data) { u2f.register(data.appId, [data], [], function(data) {
@ -75,7 +75,7 @@ Ext.define('PVE.window.TFAEdit', {
var params = { var params = {
userid: me.userid, userid: me.userid,
action: 'confirm', action: 'confirm',
response: JSON.stringify(data) response: JSON.stringify(data),
}; };
if (Proxmox.UserName !== 'root@pam') { if (Proxmox.UserName !== 'root@pam') {
params.password = me.lookup('password').value; params.password = me.lookup('password').value;
@ -89,12 +89,12 @@ Ext.define('PVE.window.TFAEdit', {
Ext.Msg.show({ Ext.Msg.show({
title: gettext('Success'), title: gettext('Success'),
message: gettext('U2F Device successfully connected.'), message: gettext('U2F Device successfully connected.'),
buttons: Ext.Msg.OK buttons: Ext.Msg.OK,
}); });
}, },
failure: function(response, opts) { failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus); Ext.Msg.alert(gettext('Error'), response.htmlStatus);
} },
}); });
}, },
@ -128,7 +128,7 @@ Ext.define('PVE.window.TFAEdit', {
selectedTab: function(get) { selectedTab: function(get) {
return (get('tfa_type') || 'totp') + '-panel'; return (get('tfa_type') || 'totp') + '-panel';
}, },
} },
}, },
afterLoading: function(realm_tfa_type, user_tfa_type) { afterLoading: function(realm_tfa_type, user_tfa_type) {
@ -167,8 +167,8 @@ Ext.define('PVE.window.TFAEdit', {
gettext('Error'), gettext('Error'),
Ext.String.format( Ext.String.format(
gettext("Custom 2nd factor configuration is not supported on realms with '{0}' TFA."), gettext("Custom 2nd factor configuration is not supported on realms with '{0}' TFA."),
realm_tfa_type realm_tfa_type,
) ),
); );
} }
}, },
@ -180,7 +180,7 @@ Ext.define('PVE.window.TFAEdit', {
change: function() { change: function() {
var me = this.getView(); var me = this.getView();
me.updateQrCode(); me.updateQrCode();
} },
}, },
'field': { 'field': {
validitychange: function(field, valid) { validitychange: function(field, valid) {
@ -190,7 +190,7 @@ Ext.define('PVE.window.TFAEdit', {
var challenge = me.lookup('challenge'); var challenge = me.lookup('challenge');
var password = me.lookup('password'); var password = me.lookup('password');
viewModel.set('valid', form.isValid() && challenge.isValid() && password.isValid()); viewModel.set('valid', form.isValid() && challenge.isValid() && password.isValid());
} },
}, },
'#': { '#': {
show: function() { show: function() {
@ -209,14 +209,14 @@ Ext.define('PVE.window.TFAEdit', {
failure: function(response, opts) { failure: function(response, opts) {
me.close(); me.close();
Ext.Msg.alert(gettext('Error'), response.htmlStatus); Ext.Msg.alert(gettext('Error'), response.htmlStatus);
} },
}); });
me.qrdiv = document.createElement('center'); me.qrdiv = document.createElement('center');
me.qrcode = new QRCode(me.qrdiv, { me.qrcode = new QRCode(me.qrdiv, {
width: 256, width: 256,
height: 256, height: 256,
correctLevel: QRCode.CorrectLevel.M correctLevel: QRCode.CorrectLevel.M,
}); });
me.down('#qrbox').getEl().appendChild(me.qrdiv); me.down('#qrbox').getEl().appendChild(me.qrdiv);
@ -224,14 +224,14 @@ Ext.define('PVE.window.TFAEdit', {
me.lookup('password').setVisible(false); me.lookup('password').setVisible(false);
me.lookup('password').setDisabled(true); me.lookup('password').setDisabled(true);
} }
} },
}, },
'#tfatabs': { '#tfatabs': {
tabchange: function(panel, newcard) { tabchange: function(panel, newcard) {
var viewmodel = this.getViewModel(); var viewmodel = this.getViewModel();
viewmodel.set('in_totp_tab', newcard.itemId === 'totp-panel'); viewmodel.set('in_totp_tab', newcard.itemId === 'totp-panel');
} },
} },
}, },
applySettings: function() { applySettings: function() {
@ -244,10 +244,10 @@ Ext.define('PVE.window.TFAEdit', {
config: PVE.Parser.printPropertyString({ config: PVE.Parser.printPropertyString({
type: 'oath', type: 'oath',
digits: values.digits, digits: values.digits,
step: values.step step: values.step,
}), }),
// this is used to verify that the client generates the correct codes: // this is used to verify that the client generates the correct codes:
response: me.lookup('challenge').value response: me.lookup('challenge').value,
}; };
if (Proxmox.UserName !== 'root@pam') { if (Proxmox.UserName !== 'root@pam') {
@ -264,7 +264,7 @@ Ext.define('PVE.window.TFAEdit', {
}, },
failure: function(response, opts) { failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus); Ext.Msg.alert(gettext('Error'), response.htmlStatus);
} },
}); });
}, },
@ -273,7 +273,7 @@ Ext.define('PVE.window.TFAEdit', {
var values = me.lookup('totp_form').getValues(); var values = me.lookup('totp_form').getValues();
var params = { var params = {
userid: me.getView().userid, userid: me.getView().userid,
action: 'delete' action: 'delete',
}; };
if (Proxmox.UserName !== 'root@pam') { if (Proxmox.UserName !== 'root@pam') {
@ -290,7 +290,7 @@ Ext.define('PVE.window.TFAEdit', {
}, },
failure: function(response, opts) { failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus); Ext.Msg.alert(gettext('Error'), response.htmlStatus);
} },
}); });
}, },
@ -318,7 +318,7 @@ Ext.define('PVE.window.TFAEdit', {
var params = { var params = {
userid: me.getView().userid, userid: me.getView().userid,
action: 'new' action: 'new',
}; };
if (Proxmox.UserName !== 'root@pam') { if (Proxmox.UserName !== 'root@pam') {
@ -335,9 +335,9 @@ Ext.define('PVE.window.TFAEdit', {
}, },
failure: function(response, opts) { failure: function(response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus); Ext.Msg.alert(gettext('Error'), response.htmlStatus);
} },
}); });
} },
}, },
items: [ items: [
@ -358,11 +358,11 @@ Ext.define('PVE.window.TFAEdit', {
tfa_type: 'totp', tfa_type: 'totp',
border: false, border: false,
bind: { bind: {
disabled: '{!canSetupTOTP}' disabled: '{!canSetupTOTP}',
}, },
layout: { layout: {
type: 'vbox', type: 'vbox',
align: 'stretch' align: 'stretch',
}, },
items: [ items: [
{ {
@ -372,7 +372,7 @@ Ext.define('PVE.window.TFAEdit', {
reference: 'totp_form', reference: 'totp_form',
fieldDefaults: { fieldDefaults: {
anchor: '100%', anchor: '100%',
padding: '0 5' padding: '0 5',
}, },
items: [ items: [
{ {
@ -380,8 +380,8 @@ Ext.define('PVE.window.TFAEdit', {
fieldLabel: gettext('User name'), fieldLabel: gettext('User name'),
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
cbind: { cbind: {
value: '{userid}' value: '{userid}',
} },
}, },
{ {
layout: 'hbox', layout: 'hbox',
@ -400,15 +400,15 @@ Ext.define('PVE.window.TFAEdit', {
bind: { bind: {
value: "{secret}", value: "{secret}",
}, },
flex: 4 flex: 4,
}, },
{ {
xtype: 'button', xtype: 'button',
text: gettext('Randomize'), text: gettext('Randomize'),
reference: 'randomize_button', reference: 'randomize_button',
handler: 'randomizeSecret', handler: 'randomizeSecret',
flex: 1 flex: 1,
}] }],
}, },
{ {
xtype: 'numberfield', xtype: 'numberfield',
@ -418,7 +418,7 @@ Ext.define('PVE.window.TFAEdit', {
hidden: true, hidden: true,
value: 30, value: 30,
minValue: 10, minValue: 10,
qrupdate: true qrupdate: true,
}, },
{ {
xtype: 'numberfield', xtype: 'numberfield',
@ -429,16 +429,16 @@ Ext.define('PVE.window.TFAEdit', {
hidden: true, hidden: true,
minValue: 6, minValue: 6,
maxValue: 8, maxValue: 8,
qrupdate: true qrupdate: true,
}, },
{ {
xtype: 'textfield', xtype: 'textfield',
fieldLabel: gettext('Issuer Name'), fieldLabel: gettext('Issuer Name'),
name: 'issuer', name: 'issuer',
value: 'Proxmox Web UI', value: 'Proxmox Web UI',
qrupdate: true qrupdate: true,
} },
] ],
}, },
{ {
xtype: 'box', xtype: 'box',
@ -451,8 +451,8 @@ Ext.define('PVE.window.TFAEdit', {
'background-color': 'white', 'background-color': 'white',
padding: '5px', padding: '5px',
width: '266px', width: '266px',
height: '266px' height: '266px',
} },
}, },
{ {
xtype: 'textfield', xtype: 'textfield',
@ -464,9 +464,9 @@ Ext.define('PVE.window.TFAEdit', {
visible: '{showTOTPVerifiction}', visible: '{showTOTPVerifiction}',
}, },
padding: '0 5', padding: '0 5',
emptyText: gettext('Scan QR code and enter TOTP auth. code to verify') emptyText: gettext('Scan QR code and enter TOTP auth. code to verify'),
} },
] ],
}, },
{ {
title: 'U2F', title: 'U2F',
@ -477,20 +477,20 @@ Ext.define('PVE.window.TFAEdit', {
padding: '5 5', padding: '5 5',
layout: { layout: {
type: 'vbox', type: 'vbox',
align: 'middle' align: 'middle',
}, },
bind: { bind: {
disabled: '{!canSetupU2F}' disabled: '{!canSetupU2F}',
}, },
items: [ items: [
{ {
xtype: 'label', xtype: 'label',
width: 500, width: 500,
text: gettext('To register a U2F device, connect the device, then click the button and follow the instructions.') text: gettext('To register a U2F device, connect the device, then click the button and follow the instructions.'),
} },
] ],
} },
] ],
}, },
{ {
xtype: 'textfield', xtype: 'textfield',
@ -501,13 +501,13 @@ Ext.define('PVE.window.TFAEdit', {
allowBlank: false, allowBlank: false,
validateBlank: true, validateBlank: true,
padding: '0 0 5 5', padding: '0 0 5 5',
emptyText: gettext('verify current password') emptyText: gettext('verify current password'),
} },
], ],
buttons: [ buttons: [
{ {
xtype: 'proxmoxHelpButton' xtype: 'proxmoxHelpButton',
}, },
'->', '->',
{ {
@ -515,8 +515,8 @@ Ext.define('PVE.window.TFAEdit', {
handler: 'applySettings', handler: 'applySettings',
bind: { bind: {
hidden: '{!in_totp_tab}', hidden: '{!in_totp_tab}',
disabled: '{!valid}' disabled: '{!valid}',
} },
}, },
{ {
xtype: 'button', xtype: 'button',
@ -524,8 +524,8 @@ Ext.define('PVE.window.TFAEdit', {
handler: 'startU2FRegistration', handler: 'startU2FRegistration',
bind: { bind: {
hidden: '{in_totp_tab}', hidden: '{in_totp_tab}',
disabled: '{tfa_type}' disabled: '{tfa_type}',
} },
}, },
{ {
text: gettext('Delete'), text: gettext('Delete'),
@ -533,9 +533,9 @@ Ext.define('PVE.window.TFAEdit', {
disabled: true, disabled: true,
handler: 'deleteTFA', handler: 'deleteTFA',
bind: { bind: {
disabled: '{!canDeleteTFA}' disabled: '{!canDeleteTFA}',
} },
} },
], ],
initComponent: function() { initComponent: function() {
@ -548,5 +548,5 @@ Ext.define('PVE.window.TFAEdit', {
me.callParent(); me.callParent();
Ext.GlobalEvents.fireEvent('proxmoxShowHelp', 'pveum_tfa_auth'); Ext.GlobalEvents.fireEvent('proxmoxShowHelp', 'pveum_tfa_auth');
} },
}); });

View File

@ -15,8 +15,8 @@ Ext.define('PVE.dc.Tasks', {
model: 'proxmox-tasks', model: 'proxmox-tasks',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json/cluster/tasks' url: '/api2/json/cluster/tasks',
} },
}); });
var store = Ext.create('Proxmox.data.DiffStore', { var store = Ext.create('Proxmox.data.DiffStore', {
@ -26,13 +26,13 @@ Ext.define('PVE.dc.Tasks', {
sorters: [ sorters: [
{ {
property : 'pid', property : 'pid',
direction: 'DESC' direction: 'DESC',
}, },
{ {
property : 'starttime', property : 'starttime',
direction: 'DESC' direction: 'DESC',
} },
] ],
}); });
@ -64,7 +64,7 @@ Ext.define('PVE.dc.Tasks', {
if (status && status != 'OK') { if (status && status != 'OK') {
return "proxmox-invalid-row"; return "proxmox-invalid-row";
} }
} },
}, },
sortableColumns: false, sortableColumns: false,
columns: [ columns: [
@ -74,7 +74,7 @@ Ext.define('PVE.dc.Tasks', {
width: 150, width: 150,
renderer: function(value) { renderer: function(value) {
return Ext.Date.format(value, "M d H:i:s"); return Ext.Date.format(value, "M d H:i:s");
} },
}, },
{ {
header: gettext("End Time"), header: gettext("End Time"),
@ -92,24 +92,24 @@ Ext.define('PVE.dc.Tasks', {
return ""; return "";
} }
return Ext.Date.format(value, "M d H:i:s"); return Ext.Date.format(value, "M d H:i:s");
} },
}, },
{ {
header: gettext("Node"), header: gettext("Node"),
dataIndex: 'node', dataIndex: 'node',
width: 100 width: 100,
}, },
{ {
header: gettext("User name"), header: gettext("User name"),
dataIndex: 'user', dataIndex: 'user',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
width: 150 width: 150,
}, },
{ {
header: gettext("Description"), header: gettext("Description"),
dataIndex: 'upid', dataIndex: 'upid',
flex: 1, flex: 1,
renderer: Proxmox.Utils.render_upid renderer: Proxmox.Utils.render_upid,
}, },
{ {
header: gettext("Status"), header: gettext("Status"),
@ -127,16 +127,16 @@ Ext.define('PVE.dc.Tasks', {
} }
// metaData.attr = 'style="color:red;"'; // metaData.attr = 'style="color:red;"';
return Proxmox.Utils.errorText + ': ' + value; return Proxmox.Utils.errorText + ': ' + value;
} },
} },
], ],
listeners: { listeners: {
itemdblclick: run_task_viewer, itemdblclick: run_task_viewer,
show: () => taskstore.startUpdate(), show: () => taskstore.startUpdate(),
destroy: () => taskstore.stopUpdate(), destroy: () => taskstore.stopUpdate(),
} },
}); });
me.callParent(); me.callParent();
} },
}); });

View File

@ -38,7 +38,7 @@ Ext.define('PVE.dc.UserEdit', {
submitValue: false, submitValue: false,
disabled: true, disabled: true,
hidden: true, hidden: true,
validator: validate_pw validator: validate_pw,
}); });
pwfield = Ext.createWidget('textfield', { pwfield = Ext.createWidget('textfield', {
@ -48,7 +48,7 @@ Ext.define('PVE.dc.UserEdit', {
name: 'password', name: 'password',
disabled: true, disabled: true,
hidden: true, hidden: true,
validator: validate_pw validator: validate_pw,
}); });
var update_passwd_field = function(realm) { var update_passwd_field = function(realm) {
@ -74,7 +74,7 @@ Ext.define('PVE.dc.UserEdit', {
value: me.userid, value: me.userid,
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
allowBlank: false, allowBlank: false,
submitValue: me.isCreate ? true : false submitValue: me.isCreate ? true : false,
}, },
pwfield, verifypw, pwfield, verifypw,
{ {
@ -82,7 +82,7 @@ Ext.define('PVE.dc.UserEdit', {
name: 'groups', name: 'groups',
multiSelect: true, multiSelect: true,
allowBlank: true, allowBlank: true,
fieldLabel: gettext('Group') fieldLabel: gettext('Group'),
}, },
{ {
xtype: 'pmxExpireDate', xtype: 'pmxExpireDate',
@ -94,31 +94,31 @@ Ext.define('PVE.dc.UserEdit', {
name: 'enable', name: 'enable',
uncheckedValue: 0, uncheckedValue: 0,
defaultValue: 1, defaultValue: 1,
checked: true checked: true,
} },
]; ];
var column2 = [ var column2 = [
{ {
xtype: 'textfield', xtype: 'textfield',
name: 'firstname', name: 'firstname',
fieldLabel: gettext('First Name') fieldLabel: gettext('First Name'),
}, },
{ {
xtype: 'textfield', xtype: 'textfield',
name: 'lastname', name: 'lastname',
fieldLabel: gettext('Last Name') fieldLabel: gettext('Last Name'),
}, },
{ {
xtype: 'textfield', xtype: 'textfield',
name: 'email', name: 'email',
fieldLabel: gettext('E-Mail'), fieldLabel: gettext('E-Mail'),
vtype: 'proxmoxMail' vtype: 'proxmoxMail',
} },
]; ];
if (me.isCreate) { if (me.isCreate) {
column1.splice(1,0,{ column1.splice(1, 0, {
xtype: 'pmxRealmComboBox', xtype: 'pmxRealmComboBox',
name: 'realm', name: 'realm',
fieldLabel: gettext('Realm'), fieldLabel: gettext('Realm'),
@ -129,9 +129,9 @@ Ext.define('PVE.dc.UserEdit', {
change: function(combo, newValue){ change: function(combo, newValue){
realm = newValue; realm = newValue;
update_passwd_field(realm); update_passwd_field(realm);
} },
}, },
submitValue: false submitValue: false,
}); });
} }
@ -142,15 +142,15 @@ Ext.define('PVE.dc.UserEdit', {
{ {
xtype: 'textfield', xtype: 'textfield',
name: 'comment', name: 'comment',
fieldLabel: gettext('Comment') fieldLabel: gettext('Comment'),
} },
], ],
advancedItems: [ advancedItems: [
{ {
xtype: 'textfield', xtype: 'textfield',
name: 'keys', name: 'keys',
fieldLabel: gettext('Key IDs') fieldLabel: gettext('Key IDs'),
} },
], ],
onGetValues: function(values) { onGetValues: function(values) {
if (realm) { if (realm) {
@ -162,7 +162,7 @@ Ext.define('PVE.dc.UserEdit', {
} }
return values; return values;
} },
}); });
Ext.applyIf(me, { Ext.applyIf(me, {
@ -170,9 +170,9 @@ Ext.define('PVE.dc.UserEdit', {
url: url, url: url,
method: method, method: method,
fieldDefaults: { fieldDefaults: {
labelWidth: 110 // for spanish translation labelWidth: 110, // for spanish translation
}, },
items: [ ipanel ] items: [ ipanel ],
}); });
me.callParent(); me.callParent();
@ -187,8 +187,8 @@ Ext.define('PVE.dc.UserEdit', {
me.down('[name="keys"]').setDisabled(1); me.down('[name="keys"]').setDisabled(1);
} }
} }
} },
}); });
} }
} },
}); });

View File

@ -18,8 +18,8 @@ Ext.define('PVE.dc.UserView', {
model: 'pve-users', model: 'pve-users',
sorters: { sorters: {
property: 'userid', property: 'userid',
order: 'DESC' order: 'DESC',
} },
}); });
var reload = function() { var reload = function() {
@ -39,7 +39,7 @@ Ext.define('PVE.dc.UserView', {
}, },
callback: function() { callback: function() {
reload(); reload();
} },
}); });
var run_editor = function() { var run_editor = function() {
@ -48,8 +48,8 @@ Ext.define('PVE.dc.UserView', {
return; return;
} }
var win = Ext.create('PVE.dc.UserEdit',{ var win = Ext.create('PVE.dc.UserEdit', {
userid: rec.data.userid userid: rec.data.userid,
}); });
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
@ -62,7 +62,7 @@ Ext.define('PVE.dc.UserView', {
return !!caps.access['User.Modify']; return !!caps.access['User.Modify'];
}, },
selModel: sm, selModel: sm,
handler: run_editor handler: run_editor,
}); });
var pwchange_btn = new Proxmox.button.Button({ var pwchange_btn = new Proxmox.button.Button({
@ -71,11 +71,11 @@ Ext.define('PVE.dc.UserView', {
selModel: sm, selModel: sm,
handler: function(btn, event, rec) { handler: function(btn, event, rec) {
var win = Ext.create('Proxmox.window.PasswordEdit', { var win = Ext.create('Proxmox.window.PasswordEdit', {
userid: rec.data.userid userid: rec.data.userid,
}); });
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
} },
}); });
var tfachange_btn = new Proxmox.button.Button({ var tfachange_btn = new Proxmox.button.Button({
@ -85,13 +85,13 @@ Ext.define('PVE.dc.UserView', {
handler: function(btn, event, rec) { handler: function(btn, event, rec) {
var d = rec.data; var d = rec.data;
var tfa_type = PVE.Parser.parseTfaType(d.keys); var tfa_type = PVE.Parser.parseTfaType(d.keys);
var win = Ext.create('PVE.window.TFAEdit',{ var win = Ext.create('PVE.window.TFAEdit', {
tfa_type: tfa_type, tfa_type: tfa_type,
userid: d.userid userid: d.userid,
}); });
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
} },
}); });
var perm_btn = new Proxmox.button.Button({ var perm_btn = new Proxmox.button.Button({
@ -100,10 +100,10 @@ Ext.define('PVE.dc.UserView', {
selModel: sm, selModel: sm,
handler: function(btn, event, rec) { handler: function(btn, event, rec) {
var win = Ext.create('PVE.dc.PermissionView', { var win = Ext.create('PVE.dc.PermissionView', {
userid: rec.data.userid userid: rec.data.userid,
}); });
win.show(); win.show();
} },
}); });
var tbar = [ var tbar = [
@ -111,13 +111,13 @@ Ext.define('PVE.dc.UserView', {
text: gettext('Add'), text: gettext('Add'),
disabled: !caps.access['User.Modify'], disabled: !caps.access['User.Modify'],
handler: function() { handler: function() {
var win = Ext.create('PVE.dc.UserEdit',{ var win = Ext.create('PVE.dc.UserEdit', {
}); });
win.on('destroy', reload); win.on('destroy', reload);
win.show(); win.show();
} },
}, },
edit_btn, remove_btn, pwchange_btn, tfachange_btn, perm_btn edit_btn, remove_btn, pwchange_btn, tfachange_btn, perm_btn,
]; ];
var render_username = function(userid) { var render_username = function(userid) {
@ -133,7 +133,7 @@ Ext.define('PVE.dc.UserView', {
selModel: sm, selModel: sm,
tbar: tbar, tbar: tbar,
viewConfig: { viewConfig: {
trackOver: false trackOver: false,
}, },
columns: [ columns: [
{ {
@ -141,35 +141,35 @@ Ext.define('PVE.dc.UserView', {
width: 200, width: 200,
sortable: true, sortable: true,
renderer: render_username, renderer: render_username,
dataIndex: 'userid' dataIndex: 'userid',
}, },
{ {
header: gettext('Realm'), header: gettext('Realm'),
width: 100, width: 100,
sortable: true, sortable: true,
renderer: render_realm, renderer: render_realm,
dataIndex: 'userid' dataIndex: 'userid',
}, },
{ {
header: gettext('Enabled'), header: gettext('Enabled'),
width: 80, width: 80,
sortable: true, sortable: true,
renderer: Proxmox.Utils.format_boolean, renderer: Proxmox.Utils.format_boolean,
dataIndex: 'enable' dataIndex: 'enable',
}, },
{ {
header: gettext('Expire'), header: gettext('Expire'),
width: 80, width: 80,
sortable: true, sortable: true,
renderer: Proxmox.Utils.format_expire, renderer: Proxmox.Utils.format_expire,
dataIndex: 'expire' dataIndex: 'expire',
}, },
{ {
header: gettext('Name'), header: gettext('Name'),
width: 150, width: 150,
sortable: true, sortable: true,
renderer: PVE.Utils.render_full_name, renderer: PVE.Utils.render_full_name,
dataIndex: 'firstname' dataIndex: 'firstname',
}, },
{ {
header: 'TFA', header: 'TFA',
@ -185,24 +185,24 @@ Ext.define('PVE.dc.UserView', {
return tfa_type; return tfa_type;
} }
}, },
dataIndex: 'keys' dataIndex: 'keys',
}, },
{ {
header: gettext('Comment'), header: gettext('Comment'),
sortable: false, sortable: false,
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
dataIndex: 'comment', dataIndex: 'comment',
flex: 1 flex: 1,
} },
], ],
listeners: { listeners: {
activate: reload, activate: reload,
itemdblclick: run_editor itemdblclick: run_editor,
} },
}); });
me.callParent(); me.callParent();
Proxmox.Utils.monStoreErrors(me, store); Proxmox.Utils.monStoreErrors(me, store);
} },
}); });

View File

@ -18,5 +18,5 @@ Ext.define('PVE.form.ACMEAccountSelector', {
isEmpty: function() { isEmpty: function() {
return this.getStore().getData().length === 0; return this.getStore().getData().length === 0;
} },
}); });

View File

@ -19,7 +19,7 @@ Ext.define('PVE.form.AgentFeatureSelector', {
bind: { bind: {
disabled: '{!enabled.checked}', disabled: '{!enabled.checked}',
}, },
disabled: true disabled: true,
}, },
{ {
xtype: 'displayfield', xtype: 'displayfield',
@ -43,7 +43,7 @@ Ext.define('PVE.form.AgentFeatureSelector', {
['virtio', 'VirtIO'], ['virtio', 'VirtIO'],
['isa', 'ISA'], ['isa', 'ISA'],
], ],
} },
], ],
onGetValues: function(values) { onGetValues: function(values) {
@ -54,5 +54,5 @@ Ext.define('PVE.form.AgentFeatureSelector', {
setValues: function(values) { setValues: function(values) {
let res = PVE.Parser.parsePropertyString(values.agent, 'enabled'); let res = PVE.Parser.parsePropertyString(values.agent, 'enabled');
this.callParent([res]); this.callParent([res]);
} },
}); });

View File

@ -4,6 +4,6 @@ Ext.define('PVE.form.BackupModeSelector', {
comboItems: [ comboItems: [
['snapshot', gettext('Snapshot')], ['snapshot', gettext('Snapshot')],
['suspend', gettext('Suspend')], ['suspend', gettext('Suspend')],
['stop', gettext('Stop')] ['stop', gettext('Stop')],
] ],
}); });

View File

@ -10,14 +10,14 @@ Ext.define('PVE.form.BandwidthField', {
}, },
formulas: { formulas: {
unitlabel: (get) => get('unit') + '/s', unitlabel: (get) => get('unit') + '/s',
} },
}, },
emptyText: '', emptyText: '',
layout: 'hbox', layout: 'hbox',
defaults: { defaults: {
hideLabel: true hideLabel: true,
}, },
units: { units: {

View File

@ -5,6 +5,6 @@ Ext.define('PVE.form.Boolean', {
comboItems: [ comboItems: [
['__default__', gettext('Default')], ['__default__', gettext('Default')],
[1, gettext('Yes')], [1, gettext('Yes')],
[0, gettext('No')] [0, gettext('No')],
] ],
}); });

View File

@ -10,9 +10,9 @@ Ext.define('PVE.form.BridgeSelector', {
sorters: [ sorters: [
{ {
property : 'iface', property : 'iface',
direction: 'ASC' direction: 'ASC',
} },
] ],
}, },
valueField: 'iface', valueField: 'iface',
displayField: 'iface', displayField: 'iface',
@ -22,21 +22,21 @@ Ext.define('PVE.form.BridgeSelector', {
header: gettext('Bridge'), header: gettext('Bridge'),
dataIndex: 'iface', dataIndex: 'iface',
hideable: false, hideable: false,
width: 100 width: 100,
}, },
{ {
header: gettext('Active'), header: gettext('Active'),
width: 60, width: 60,
dataIndex: 'active', dataIndex: 'active',
renderer: Proxmox.Utils.format_boolean renderer: Proxmox.Utils.format_boolean,
}, },
{ {
header: gettext('Comment'), header: gettext('Comment'),
dataIndex: 'comments', dataIndex: 'comments',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
} },
] ],
}, },
setNodename: function(nodename) { setNodename: function(nodename) {
@ -51,7 +51,7 @@ Ext.define('PVE.form.BridgeSelector', {
me.store.setProxy({ me.store.setProxy({
type: 'proxmox', type: 'proxmox',
url: '/api2/json/nodes/' + me.nodename + '/network?type=' + url: '/api2/json/nodes/' + me.nodename + '/network?type=' +
me.bridgeType me.bridgeType,
}); });
me.store.load(); me.store.load();
@ -66,6 +66,6 @@ Ext.define('PVE.form.BridgeSelector', {
me.callParent(); me.callParent();
me.setNodename(nodename); me.setNodename(nodename);
} },
}); });

View File

@ -16,5 +16,5 @@ Ext.define('PVE.form.BusTypeSelector', {
me.comboItems.push(['scsi', 'SCSI']); me.comboItems.push(['scsi', 'SCSI']);
me.callParent(); me.callParent();
} },
}); });

View File

@ -4,8 +4,8 @@ Ext.define('PVE.data.CPUModel', {
{name: 'name'}, {name: 'name'},
{name: 'vendor'}, {name: 'vendor'},
{name: 'custom'}, {name: 'custom'},
{name: 'displayname'} {name: 'displayname'},
] ],
}); });
Ext.define('PVE.form.CPUModelSelector', { Ext.define('PVE.form.CPUModelSelector', {
@ -32,17 +32,17 @@ Ext.define('PVE.form.CPUModelSelector', {
dataIndex: 'displayname', dataIndex: 'displayname',
hideable: false, hideable: false,
sortable: true, sortable: true,
flex: 3 flex: 3,
}, },
{ {
header: gettext('Vendor'), header: gettext('Vendor'),
dataIndex: 'vendor', dataIndex: 'vendor',
hideable: false, hideable: false,
sortable: true, sortable: true,
flex: 2 flex: 2,
} },
], ],
width: 360 width: 360,
}, },
store: { store: {
@ -50,7 +50,7 @@ Ext.define('PVE.form.CPUModelSelector', {
model: 'PVE.data.CPUModel', model: 'PVE.data.CPUModel',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json/nodes/localhost/cpu' url: '/api2/json/nodes/localhost/cpu',
}, },
sorters: [ sorters: [
{ {
@ -71,8 +71,8 @@ Ext.define('PVE.form.CPUModelSelector', {
// Within same vendor, sort alphabetically // Within same vendor, sort alphabetically
return a.name.localeCompare(b.name); return a.name.localeCompare(b.name);
}, },
direction: 'ASC' direction: 'ASC',
} },
], ],
listeners: { listeners: {
load: function(store, records, success) { load: function(store, records, success) {
@ -98,7 +98,7 @@ Ext.define('PVE.form.CPUModelSelector', {
store.sort(); store.sort();
} }
} },
} },
} },
}); });

View File

@ -7,6 +7,6 @@ Ext.define('PVE.form.CacheTypeSelector', {
['writethrough', 'Write through'], ['writethrough', 'Write through'],
['writeback', 'Write back'], ['writeback', 'Write back'],
['unsafe', 'Write back (' + gettext('unsafe') + ')'], ['unsafe', 'Write back (' + gettext('unsafe') + ')'],
['none', gettext('No cache')] ['none', gettext('No cache')],
] ],
}); });

View File

@ -16,20 +16,20 @@ Ext.define('PVE.form.CalendarEvent', {
{ value: '2,22:30', text: gettext("Every day") + " 02:30, 22:30"}, { value: '2,22:30', text: gettext("Every day") + " 02:30, 22:30"},
{ value: 'mon..fri', text: gettext("Monday to Friday") + " 00:00"}, { value: 'mon..fri', text: gettext("Monday to Friday") + " 00:00"},
{ value: 'mon..fri */1:00', text: gettext("Monday to Friday") + ': ' + gettext("hourly")}, { value: 'mon..fri */1:00', text: gettext("Monday to Friday") + ': ' + gettext("hourly")},
{ value: 'sun 01:00', text: gettext("Sunday") + " 01:00"} { value: 'sun 01:00', text: gettext("Sunday") + " 01:00"},
] ],
}, },
tpl: [ tpl: [
'<ul class="x-list-plain"><tpl for=".">', '<ul class="x-list-plain"><tpl for=".">',
'<li role="option" class="x-boundlist-item">{text}</li>', '<li role="option" class="x-boundlist-item">{text}</li>',
'</tpl></ul>' '</tpl></ul>',
], ],
displayTpl: [ displayTpl: [
'<tpl for=".">', '<tpl for=".">',
'{value}', '{value}',
'</tpl>' '</tpl>',
] ],
}); });

View File

@ -20,12 +20,12 @@ Ext.define('PVE.form.CephPoolSelector', {
sorters: 'name', sorters: 'name',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json/nodes/' + me.nodename + '/ceph/pools' url: '/api2/json/nodes/' + me.nodename + '/ceph/pools',
} },
}); });
Ext.apply(me, { Ext.apply(me, {
store: store store: store,
}); });
me.callParent(); me.callParent();
@ -35,8 +35,8 @@ Ext.define('PVE.form.CephPoolSelector', {
if (success && rec.length > 0) { if (success && rec.length > 0) {
me.select(rec[0]); me.select(rec[0]);
} }
} },
}); });
} },
}); });

View File

@ -6,5 +6,5 @@ Ext.define('PVE.form.CompressionSelector', {
['lzo', 'LZO (' + gettext('fast') + ')'], ['lzo', 'LZO (' + gettext('fast') + ')'],
['gzip', 'GZIP (' + gettext('good') + ')'], ['gzip', 'GZIP (' + gettext('good') + ')'],
['zstd', 'ZSTD (' + gettext('fast and good') + ')'], ['zstd', 'ZSTD (' + gettext('fast and good') + ')'],
] ],
}); });

View File

@ -18,5 +18,5 @@ Ext.define('PVE.form.ContentTypeSelector', {
}); });
me.callParent(); me.callParent();
} },
}); });

View File

@ -75,7 +75,7 @@ clist_loop:
fieldLabel: gettext('Bus/Device'), fieldLabel: gettext('Bus/Device'),
layout: 'hbox', layout: 'hbox',
defaults: { defaults: {
hideLabel: true hideLabel: true,
}, },
items: [ items: [
{ {
@ -93,8 +93,8 @@ clist_loop:
var field = me.down('field[name=deviceid]'); var field = me.down('field[name=deviceid]');
field.setMaxValue(PVE.Utils.diskControllerMaxIDs[value]); field.setMaxValue(PVE.Utils.diskControllerMaxIDs[value]);
field.validate(); field.validate();
} },
} },
}, },
{ {
xtype: 'proxmoxintegerfield', xtype: 'proxmoxintegerfield',
@ -115,11 +115,11 @@ clist_loop:
return "This device is already in use."; return "This device is already in use.";
} }
return true; return true;
} },
} },
] ],
}); });
me.callParent(); me.callParent();
} },
}); });

View File

@ -11,8 +11,8 @@ Ext.define('PVE.form.DayOfWeekSelector', {
['thu', Ext.util.Format.htmlDecode(Ext.Date.dayNames[4])], ['thu', Ext.util.Format.htmlDecode(Ext.Date.dayNames[4])],
['fri', Ext.util.Format.htmlDecode(Ext.Date.dayNames[5])], ['fri', Ext.util.Format.htmlDecode(Ext.Date.dayNames[5])],
['sat', Ext.util.Format.htmlDecode(Ext.Date.dayNames[6])], ['sat', Ext.util.Format.htmlDecode(Ext.Date.dayNames[6])],
['sun', Ext.util.Format.htmlDecode(Ext.Date.dayNames[0])] ['sun', Ext.util.Format.htmlDecode(Ext.Date.dayNames[0])],
]; ];
this.callParent(); this.callParent();
} },
}); });

View File

@ -4,6 +4,6 @@ Ext.define('PVE.form.DiskFormatSelector', {
comboItems: [ comboItems: [
['raw', gettext('Raw disk image') + ' (raw)'], ['raw', gettext('Raw disk image') + ' (raw)'],
['qcow2', gettext('QEMU image format') + ' (qcow2)'], ['qcow2', gettext('QEMU image format') + ' (qcow2)'],
['vmdk', gettext('VMware image format') + ' (vmdk)'] ['vmdk', gettext('VMware image format') + ' (vmdk)'],
] ],
}); });

View File

@ -4,7 +4,7 @@ Ext.define('PVE.form.DiskStorageSelector', {
layout: 'fit', layout: 'fit',
defaults: { defaults: {
margin: '0 0 5 0' margin: '0 0 5 0',
}, },
// the fieldLabel for the storageselector // the fieldLabel for the storageselector
@ -119,9 +119,9 @@ Ext.define('PVE.form.DiskStorageSelector', {
listeners: { listeners: {
change: { change: {
fn: me.changeStorage, fn: me.changeStorage,
scope: me scope: me,
} },
} },
}, },
{ {
xtype: 'pveFileSelector', xtype: 'pveFileSelector',
@ -131,7 +131,7 @@ Ext.define('PVE.form.DiskStorageSelector', {
fieldLabel: gettext('Disk image'), fieldLabel: gettext('Disk image'),
nodename: me.nodename, nodename: me.nodename,
disabled: true, disabled: true,
hidden: true hidden: true,
}, },
{ {
xtype: 'numberfield', xtype: 'numberfield',
@ -145,7 +145,7 @@ Ext.define('PVE.form.DiskStorageSelector', {
maxValue: 128*1024, maxValue: 128*1024,
decimalPrecision: 3, decimalPrecision: 3,
value: me.defaultSize, value: me.defaultSize,
allowBlank: false allowBlank: false,
}, },
{ {
xtype: 'pveDiskFormatSelector', xtype: 'pveDiskFormatSelector',
@ -157,13 +157,13 @@ Ext.define('PVE.form.DiskStorageSelector', {
disabled: true, disabled: true,
hidden: me.storageContent === 'rootdir', hidden: me.storageContent === 'rootdir',
value: 'qcow2', value: 'qcow2',
allowBlank: false allowBlank: false,
} },
]; ];
// use it to disable the children but not ourself // use it to disable the children but not ourself
me.disabled = false; me.disabled = false;
me.callParent(); me.callParent();
} },
}); });

View File

@ -3,6 +3,6 @@ Ext.define('PVE.form.EmailNotificationSelector', {
alias: ['widget.pveEmailNotificationSelector'], alias: ['widget.pveEmailNotificationSelector'],
comboItems: [ comboItems: [
['always', gettext('Always')], ['always', gettext('Always')],
['failure', gettext('On failure only')] ['failure', gettext('On failure only')],
] ],
}); });

View File

@ -12,7 +12,7 @@ Ext.define('PVE.form.FileSelector', {
if (!me.disabled) { if (!me.disabled) {
me.setStorage(me.storage, me.nodename); me.setStorage(me.storage, me.nodename);
} }
} },
}, },
setStorage: function(storage, nodename) { setStorage: function(storage, nodename) {
@ -40,7 +40,7 @@ Ext.define('PVE.form.FileSelector', {
me.store.setProxy({ me.store.setProxy({
type: 'proxmox', type: 'proxmox',
url: url url: url,
}); });
me.store.removeAll(); me.store.removeAll();
@ -52,7 +52,7 @@ Ext.define('PVE.form.FileSelector', {
}, },
store: { store: {
model: 'pve-storage-content' model: 'pve-storage-content',
}, },
allowBlank: false, allowBlank: false,
@ -67,19 +67,19 @@ Ext.define('PVE.form.FileSelector', {
header: gettext('Name'), header: gettext('Name'),
dataIndex: 'text', dataIndex: 'text',
hideable: false, hideable: false,
flex: 1 flex: 1,
}, },
{ {
header: gettext('Format'), header: gettext('Format'),
width: 60, width: 60,
dataIndex: 'format' dataIndex: 'format',
}, },
{ {
header: gettext('Size'), header: gettext('Size'),
width: 100, width: 100,
dataIndex: 'size', dataIndex: 'size',
renderer: Proxmox.Utils.format_size renderer: Proxmox.Utils.format_size,
} },
] ],
} },
}); });

View File

@ -4,6 +4,6 @@ Ext.define('PVE.form.FirewallPolicySelector', {
comboItems: [ comboItems: [
['ACCEPT', 'ACCEPT'], ['ACCEPT', 'ACCEPT'],
['REJECT', 'REJECT'], ['REJECT', 'REJECT'],
[ 'DROP', 'DROP'] [ 'DROP', 'DROP'],
] ],
}); });

View File

@ -28,19 +28,19 @@ Ext.define('PVE.form.GlobalSearchField', {
scrollable: { scrollable: {
xtype: 'scroller', xtype: 'scroller',
y: true, y: true,
x:false x:false,
}, },
store: { store: {
model: 'PVEResources', model: 'PVEResources',
proxy:{ proxy:{
type: 'proxmox', type: 'proxmox',
url: '/api2/extjs/cluster/resources' url: '/api2/extjs/cluster/resources',
} },
}, },
plugins: { plugins: {
ptype: 'bufferedrenderer', ptype: 'bufferedrenderer',
trailingBufferZone: 20, trailingBufferZone: 20,
leadingBufferZone: 20 leadingBufferZone: 20,
}, },
hideMe: function() { hideMe: function() {
@ -70,9 +70,9 @@ Ext.define('PVE.form.GlobalSearchField', {
}, },
/* because of lint */ /* because of lint */
focusleave: { focusleave: {
fn: 'hideMe' fn: 'hideMe',
}, },
focusenter: 'setFocus' focusenter: 'setFocus',
}, },
columns: [ columns: [
@ -80,29 +80,29 @@ Ext.define('PVE.form.GlobalSearchField', {
text: gettext('Type'), text: gettext('Type'),
dataIndex: 'type', dataIndex: 'type',
width: 100, width: 100,
renderer: PVE.Utils.render_resource_type renderer: PVE.Utils.render_resource_type,
}, },
{ {
text: gettext('Description'), text: gettext('Description'),
flex: 1, flex: 1,
dataIndex: 'text' dataIndex: 'text',
}, },
{ {
text: gettext('Node'), text: gettext('Node'),
dataIndex: 'node' dataIndex: 'node',
}, },
{ {
text: gettext('Pool'), text: gettext('Pool'),
dataIndex: 'pool' dataIndex: 'pool',
} },
] ],
}, },
customFilter: function(item) { customFilter: function(item) {
var me = this; var me = this;
var match = 0; var match = 0;
var fieldArr = []; var fieldArr = [];
var i,j, fields; var i, j, fields;
// different types of objects have different fields to search // different types of objects have different fields to search
// for example, a node will never have a pool and vice versa // for example, a node will never have a pool and vice versa
@ -208,14 +208,14 @@ Ext.define('PVE.form.GlobalSearchField', {
listeners: { listeners: {
change: { change: {
fn: 'updateFilter', fn: 'updateFilter',
buffer: 250 buffer: 250,
}, },
specialkey: 'onKey', specialkey: 'onKey',
focusenter: 'loadValues', focusenter: 'loadValues',
focusleave: { focusleave: {
fn: 'hideGrid', fn: 'hideGrid',
delay: 100 delay: 100,
} },
}, },
toggleFocus: function() { toggleFocus: function() {
@ -248,13 +248,13 @@ Ext.define('PVE.form.GlobalSearchField', {
ctrl: true, ctrl: true,
shift: true, shift: true,
fn: me.toggleFocus, fn: me.toggleFocus,
scope: me scope: me,
},{ }, {
key:' ', key:' ',
ctrl: true, ctrl: true,
fn: me.toggleFocus, fn: me.toggleFocus,
scope: me scope: me,
}] }],
}); });
// always select first item and // always select first item and
@ -263,9 +263,9 @@ Ext.define('PVE.form.GlobalSearchField', {
me.grid.getSelectionModel().select(0); me.grid.getSelectionModel().select(0);
me.grid.store.sort({ me.grid.store.sort({
property: 'relevance', property: 'relevance',
direction: 'DESC' direction: 'DESC',
}); });
}); });
} },
}); });

View File

@ -3,9 +3,9 @@ Ext.define('pve-groups', {
fields: [ 'groupid', 'comment', 'users' ], fields: [ 'groupid', 'comment', 'users' ],
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/access/groups" url: "/api2/json/access/groups",
}, },
idProperty: 'groupid' idProperty: 'groupid',
}); });
Ext.define('PVE.form.GroupSelector', { Ext.define('PVE.form.GroupSelector', {
@ -22,23 +22,23 @@ Ext.define('PVE.form.GroupSelector', {
header: gettext('Group'), header: gettext('Group'),
sortable: true, sortable: true,
dataIndex: 'groupid', dataIndex: 'groupid',
flex: 1 flex: 1,
}, },
{ {
header: gettext('Comment'), header: gettext('Comment'),
sortable: false, sortable: false,
dataIndex: 'comment', dataIndex: 'comment',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
}, },
{ {
header: gettext('Users'), header: gettext('Users'),
sortable: false, sortable: false,
dataIndex: 'users', dataIndex: 'users',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
} },
] ],
}, },
initComponent: function() { initComponent: function() {
@ -47,16 +47,16 @@ Ext.define('PVE.form.GroupSelector', {
var store = new Ext.data.Store({ var store = new Ext.data.Store({
model: 'pve-groups', model: 'pve-groups',
sorters: [{ sorters: [{
property: 'groupid' property: 'groupid',
}] }],
}); });
Ext.apply(me, { Ext.apply(me, {
store: store store: store,
}); });
me.callParent(); me.callParent();
store.load(); store.load();
} },
}); });

View File

@ -70,10 +70,10 @@ Ext.define('PVE.form.GuestIDSelector', {
failure: function(response, opts) { failure: function(response, opts) {
me.exists = true; me.exists = true;
me.validate(); me.validate();
} },
}); });
} },
} },
}); });
me.callParent(); me.callParent();
@ -84,8 +84,8 @@ Ext.define('PVE.form.GuestIDSelector', {
method: 'GET', method: 'GET',
success: function(response, opts) { success: function(response, opts) {
me.setRawValue(response.result.data); me.setRawValue(response.result.data);
} },
}); });
} }
} },
}); });

View File

@ -7,32 +7,32 @@ Ext.define('PVE.form.HotplugFeatureSelector', {
defaults: { defaults: {
name: 'hotplugCbGroup', name: 'hotplugCbGroup',
submitValue: false submitValue: false,
}, },
items: [ items: [
{ {
boxLabel: gettext('Disk'), boxLabel: gettext('Disk'),
inputValue: 'disk', inputValue: 'disk',
checked: true checked: true,
}, },
{ {
boxLabel: gettext('Network'), boxLabel: gettext('Network'),
inputValue: 'network', inputValue: 'network',
checked: true checked: true,
}, },
{ {
boxLabel: 'USB', boxLabel: 'USB',
inputValue: 'usb', inputValue: 'usb',
checked: true checked: true,
}, },
{ {
boxLabel: gettext('Memory'), boxLabel: gettext('Memory'),
inputValue: 'memory' inputValue: 'memory',
}, },
{ {
boxLabel: gettext('CPU'), boxLabel: gettext('CPU'),
inputValue: 'cpu' inputValue: 'cpu',
} },
], ],
setValue: function(value) { setValue: function(value) {
@ -64,6 +64,6 @@ Ext.define('PVE.form.HotplugFeatureSelector', {
} else { } else {
return { 'hotplug': data.join(',') }; return { 'hotplug': data.join(',') };
} }
} },
}); });

View File

@ -10,23 +10,23 @@ Ext.define('PVE.form.IPProtocolSelector', {
dataIndex: 'p', dataIndex: 'p',
hideable: false, hideable: false,
sortable: false, sortable: false,
width: 100 width: 100,
}, },
{ {
header: gettext('Number'), header: gettext('Number'),
dataIndex: 'n', dataIndex: 'n',
hideable: false, hideable: false,
sortable: false, sortable: false,
width: 50 width: 50,
}, },
{ {
header: gettext('Description'), header: gettext('Description'),
dataIndex: 'd', dataIndex: 'd',
hideable: false, hideable: false,
sortable: false, sortable: false,
flex: 1 flex: 1,
} },
] ],
}, },
store: { store: {
fields: [ 'p', 'd', 'n'], fields: [ 'p', 'd', 'n'],
@ -81,7 +81,7 @@ Ext.define('PVE.form.IPProtocolSelector', {
{ p: 'hip', n: 139, d: 'Host Identity Protocol' }, { p: 'hip', n: 139, d: 'Host Identity Protocol' },
{ p: 'shim6', n: 140, d: 'Shim6 Protocol [RFC5533]' }, { p: 'shim6', n: 140, d: 'Shim6 Protocol [RFC5533]' },
{ p: 'wesp', n: 141, d: 'Wrapped Encapsulating Security Payload' }, { p: 'wesp', n: 141, d: 'Wrapped Encapsulating Security Payload' },
{ p: 'rohc', n: 142, d: 'Robust Header Compression' } { p: 'rohc', n: 142, d: 'Robust Header Compression' },
] ],
} },
}); });

View File

@ -30,12 +30,12 @@ Ext.define('PVE.form.IPRefSelector', {
idProperty: 'ref', idProperty: 'ref',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: url url: url,
}, },
sorters: { sorters: {
property: 'ref', property: 'ref',
order: 'DESC' order: 'DESC',
} },
}); });
var disable_query_for_ips = function(f, value) { var disable_query_for_ips = function(f, value) {
@ -54,7 +54,7 @@ Ext.define('PVE.form.IPRefSelector', {
header: gettext('Type'), header: gettext('Type'),
dataIndex: 'type', dataIndex: 'type',
hideable: false, hideable: false,
width: 60 width: 60,
}); });
} }
@ -63,24 +63,24 @@ Ext.define('PVE.form.IPRefSelector', {
header: gettext('Name'), header: gettext('Name'),
dataIndex: 'ref', dataIndex: 'ref',
hideable: false, hideable: false,
width: 140 width: 140,
}, },
{ {
header: gettext('Comment'), header: gettext('Comment'),
dataIndex: 'comment', dataIndex: 'comment',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
} },
); );
Ext.apply(me, { Ext.apply(me, {
store: store, store: store,
listConfig: { columns: columns } listConfig: { columns: columns },
}); });
me.on('change', disable_query_for_ips); me.on('change', disable_query_for_ips);
me.callParent(); me.callParent();
} },
}); });

View File

@ -3,14 +3,14 @@ Ext.define('PVE.form.MDevSelector', {
xtype: 'pveMDevSelector', xtype: 'pveMDevSelector',
store: { store: {
fields: [ 'type','available', 'description' ], fields: [ 'type', 'available', 'description' ],
filterOnLoad: true, filterOnLoad: true,
sorters: [ sorters: [
{ {
property : 'type', property : 'type',
direction: 'ASC' direction: 'ASC',
} },
] ],
}, },
autoSelect: false, autoSelect: false,
valueField: 'type', valueField: 'type',
@ -20,12 +20,12 @@ Ext.define('PVE.form.MDevSelector', {
{ {
header: gettext('Type'), header: gettext('Type'),
dataIndex: 'type', dataIndex: 'type',
flex: 1 flex: 1,
}, },
{ {
header: gettext('Available'), header: gettext('Available'),
dataIndex: 'available', dataIndex: 'available',
width: 80 width: 80,
}, },
{ {
header: gettext('Description'), header: gettext('Description'),
@ -37,9 +37,9 @@ Ext.define('PVE.form.MDevSelector', {
} }
return value.split('\n').join('<br>'); return value.split('\n').join('<br>');
} },
} },
] ],
}, },
setPciID: function(pciid, force) { setPciID: function(pciid, force) {
@ -69,7 +69,7 @@ Ext.define('PVE.form.MDevSelector', {
var me = this; var me = this;
me.store.setProxy({ me.store.setProxy({
type: 'proxmox', type: 'proxmox',
url: '/api2/json/nodes/' + me.nodename + '/hardware/pci/' + me.pciid + '/mdev' url: '/api2/json/nodes/' + me.nodename + '/hardware/pci/' + me.pciid + '/mdev',
}); });
me.store.load(); me.store.load();
}, },
@ -86,6 +86,6 @@ Ext.define('PVE.form.MDevSelector', {
if (me.pciid) { if (me.pciid) {
me.setPciID(me.pciid, true); me.setPciID(me.pciid, true);
} }
} },
}); });

View File

@ -83,5 +83,5 @@ Ext.define('PVE.form.MemoryField', {
} }
me.callParent(); me.callParent();
} },
}); });

View File

@ -5,6 +5,6 @@ Ext.define('PVE.form.NetworkCardSelector', {
['e1000', 'Intel E1000'], ['e1000', 'Intel E1000'],
['virtio', 'VirtIO (' + gettext('paravirtualized') + ')'], ['virtio', 'VirtIO (' + gettext('paravirtualized') + ')'],
['rtl8139', 'Realtek RTL8139'], ['rtl8139', 'Realtek RTL8139'],
['vmxnet3', 'VMware vmxnet3'] ['vmxnet3', 'VMware vmxnet3'],
] ],
}); });

View File

@ -22,18 +22,18 @@ Ext.define('PVE.form.NodeSelector', {
fields: [ 'node', 'cpu', 'maxcpu', 'mem', 'maxmem', 'uptime' ], fields: [ 'node', 'cpu', 'maxcpu', 'mem', 'maxmem', 'uptime' ],
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: '/api2/json/nodes' url: '/api2/json/nodes',
}, },
sorters: [ sorters: [
{ {
property : 'node', property : 'node',
direction: 'ASC' direction: 'ASC',
}, },
{ {
property : 'mem', property : 'mem',
direction: 'DESC' direction: 'DESC',
} },
] ],
}, },
listConfig: { listConfig: {
@ -43,23 +43,23 @@ Ext.define('PVE.form.NodeSelector', {
dataIndex: 'node', dataIndex: 'node',
sortable: true, sortable: true,
hideable: false, hideable: false,
flex: 1 flex: 1,
}, },
{ {
header: gettext('Memory usage') + " %", header: gettext('Memory usage') + " %",
renderer: PVE.Utils.render_mem_usage_percent, renderer: PVE.Utils.render_mem_usage_percent,
sortable: true, sortable: true,
width: 100, width: 100,
dataIndex: 'mem' dataIndex: 'mem',
}, },
{ {
header: gettext('CPU usage'), header: gettext('CPU usage'),
renderer: PVE.Utils.render_cpu, renderer: PVE.Utils.render_cpu,
sortable: true, sortable: true,
width: 100, width: 100,
dataIndex: 'cpu' dataIndex: 'cpu',
} },
] ],
}, },
validator: function(value) { validator: function(value) {
@ -108,11 +108,11 @@ Ext.define('PVE.form.NodeSelector', {
} else { } else {
return true; return true;
} }
} },
})); }));
me.mon(me.getStore(), 'load', function(){ me.mon(me.getStore(), 'load', function(){
me.isValid(); me.isValid();
}); });
} },
}); });

View File

@ -3,14 +3,14 @@ Ext.define('PVE.form.PCISelector', {
xtype: 'pvePCISelector', xtype: 'pvePCISelector',
store: { store: {
fields: [ 'id','vendor_name', 'device_name', 'vendor', 'device', 'iommugroup', 'mdev' ], fields: [ 'id', 'vendor_name', 'device_name', 'vendor', 'device', 'iommugroup', 'mdev' ],
filterOnLoad: true, filterOnLoad: true,
sorters: [ sorters: [
{ {
property : 'id', property : 'id',
direction: 'ASC' direction: 'ASC',
} },
] ],
}, },
autoSelect: false, autoSelect: false,
@ -27,22 +27,22 @@ Ext.define('PVE.form.PCISelector', {
{ {
header: 'ID', header: 'ID',
dataIndex: 'id', dataIndex: 'id',
width: 100 width: 100,
}, },
{ {
header: gettext('IOMMU Group'), header: gettext('IOMMU Group'),
dataIndex: 'iommugroup', dataIndex: 'iommugroup',
width: 50 width: 50,
}, },
{ {
header: gettext('Vendor'), header: gettext('Vendor'),
dataIndex: 'vendor_name', dataIndex: 'vendor_name',
flex: 2 flex: 2,
}, },
{ {
header: gettext('Device'), header: gettext('Device'),
dataIndex: 'device_name', dataIndex: 'device_name',
flex: 6 flex: 6,
}, },
{ {
header: gettext('Mediated Devices'), header: gettext('Mediated Devices'),
@ -50,9 +50,9 @@ Ext.define('PVE.form.PCISelector', {
flex: 1, flex: 1,
renderer: function(val) { renderer: function(val) {
return Proxmox.Utils.format_boolean(!!val); return Proxmox.Utils.format_boolean(!!val);
} },
} },
] ],
}, },
setNodename: function(nodename) { setNodename: function(nodename) {
@ -66,7 +66,7 @@ Ext.define('PVE.form.PCISelector', {
me.store.setProxy({ me.store.setProxy({
type: 'proxmox', type: 'proxmox',
url: '/api2/json/nodes/' + me.nodename + '/hardware/pci' url: '/api2/json/nodes/' + me.nodename + '/hardware/pci',
}); });
me.store.load(); me.store.load();
@ -85,6 +85,6 @@ Ext.define('PVE.form.PCISelector', {
} }
me.setNodename(nodename); me.setNodename(nodename);
} },
}); });

View File

@ -8,6 +8,6 @@ Ext.define('PVE.form.PermPathSelector', {
queryMode: 'local', queryMode: 'local',
store: { store: {
type: 'pvePermPath' type: 'pvePermPath',
} },
}); });

View File

@ -11,7 +11,7 @@ Ext.define('PVE.form.PoolSelector', {
var store = new Ext.data.Store({ var store = new Ext.data.Store({
model: 'pve-pools', model: 'pve-pools',
sorters: 'poolid' sorters: 'poolid',
}); });
Ext.apply(me, { Ext.apply(me, {
@ -23,23 +23,23 @@ Ext.define('PVE.form.PoolSelector', {
header: gettext('Pool'), header: gettext('Pool'),
sortable: true, sortable: true,
dataIndex: 'poolid', dataIndex: 'poolid',
flex: 1 flex: 1,
}, },
{ {
header: gettext('Comment'), header: gettext('Comment'),
sortable: false, sortable: false,
dataIndex: 'comment', dataIndex: 'comment',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
} },
] ],
} },
}); });
me.callParent(); me.callParent();
store.load(); store.load();
} },
}, function() { }, function() {
@ -48,9 +48,9 @@ Ext.define('PVE.form.PoolSelector', {
fields: [ 'poolid', 'comment' ], fields: [ 'poolid', 'comment' ],
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/pools" url: "/api2/json/pools",
}, },
idProperty: 'poolid' idProperty: 'poolid',
}); });
}); });

View File

@ -23,13 +23,13 @@ Ext.define('PVE.form.PrivilegesSelector', {
me.store.sort({ me.store.sort({
property: 'key', property: 'key',
direction: 'ASC' direction: 'ASC',
}); });
}, },
failure: function (response, opts) { failure: function (response, opts) {
Ext.Msg.alert(gettext('Error'), response.htmlStatus); Ext.Msg.alert(gettext('Error'), response.htmlStatus);
} },
}); });
} },
}); });

View File

@ -8,9 +8,9 @@ Ext.define('PVE.form.QemuBiosSelector', {
me.comboItems = [ me.comboItems = [
['__default__', PVE.Utils.render_qemu_bios('')], ['__default__', PVE.Utils.render_qemu_bios('')],
['seabios', PVE.Utils.render_qemu_bios('seabios')], ['seabios', PVE.Utils.render_qemu_bios('seabios')],
['ovmf', PVE.Utils.render_qemu_bios('ovmf')] ['ovmf', PVE.Utils.render_qemu_bios('ovmf')],
]; ];
me.callParent(); me.callParent();
} },
}); });

View File

@ -13,7 +13,7 @@ Ext.define('PVE.form.SDNControllerSelector', {
model: 'pve-sdn-controller', model: 'pve-sdn-controller',
sorters: { sorters: {
property: 'controller', property: 'controller',
order: 'DESC' order: 'DESC',
}, },
}); });
@ -26,16 +26,16 @@ Ext.define('PVE.form.SDNControllerSelector', {
header: gettext('Controller'), header: gettext('Controller'),
sortable: true, sortable: true,
dataIndex: 'controller', dataIndex: 'controller',
flex: 1 flex: 1,
}, },
] ],
} },
}); });
me.callParent(); me.callParent();
store.load(); store.load();
} },
}, function() { }, function() {
@ -44,9 +44,9 @@ Ext.define('PVE.form.SDNControllerSelector', {
fields: [ 'controller' ], fields: [ 'controller' ],
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/cluster/sdn/controllers" url: "/api2/json/cluster/sdn/controllers",
}, },
idProperty: 'controller' idProperty: 'controller',
}); });
}); });

View File

@ -13,7 +13,7 @@ Ext.define('PVE.form.SDNZoneSelector', {
model: 'pve-sdn-zone', model: 'pve-sdn-zone',
sorters: { sorters: {
property: 'zone', property: 'zone',
order: 'DESC' order: 'DESC',
}, },
}); });
@ -26,16 +26,16 @@ Ext.define('PVE.form.SDNZoneSelector', {
header: gettext('Zone'), header: gettext('Zone'),
sortable: true, sortable: true,
dataIndex: 'zone', dataIndex: 'zone',
flex: 1 flex: 1,
}, },
] ],
} },
}); });
me.callParent(); me.callParent();
store.load(); store.load();
} },
}, function() { }, function() {
@ -44,9 +44,9 @@ Ext.define('PVE.form.SDNZoneSelector', {
fields: [ 'zone' ], fields: [ 'zone' ],
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/cluster/sdn/zones" url: "/api2/json/cluster/sdn/zones",
}, },
idProperty: 'zone' idProperty: 'zone',
}); });
}); });

View File

@ -8,6 +8,6 @@ Ext.define('PVE.form.ScsiHwSelector', {
['megasas', PVE.Utils.render_scsihw('megasas')], ['megasas', PVE.Utils.render_scsihw('megasas')],
['virtio-scsi-pci', PVE.Utils.render_scsihw('virtio-scsi-pci')], ['virtio-scsi-pci', PVE.Utils.render_scsihw('virtio-scsi-pci')],
['virtio-scsi-single', PVE.Utils.render_scsihw('virtio-scsi-single')], ['virtio-scsi-single', PVE.Utils.render_scsihw('virtio-scsi-single')],
['pvscsi', PVE.Utils.render_scsihw('pvscsi')] ['pvscsi', PVE.Utils.render_scsihw('pvscsi')],
] ],
}); });

View File

@ -13,12 +13,12 @@ Ext.define('PVE.form.SecurityGroupsSelector', {
idProperty: 'group', idProperty: 'group',
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/cluster/firewall/groups" url: "/api2/json/cluster/firewall/groups",
}, },
sorters: { sorters: {
property: 'group', property: 'group',
order: 'DESC' order: 'DESC',
} },
}); });
Ext.apply(me, { Ext.apply(me, {
@ -29,19 +29,19 @@ Ext.define('PVE.form.SecurityGroupsSelector', {
header: gettext('Security Group'), header: gettext('Security Group'),
dataIndex: 'group', dataIndex: 'group',
hideable: false, hideable: false,
width: 100 width: 100,
}, },
{ {
header: gettext('Comment'), header: gettext('Comment'),
dataIndex: 'comment', dataIndex: 'comment',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
} },
] ],
} },
}); });
me.callParent(); me.callParent();
} },
}); });

View File

@ -22,7 +22,7 @@ Ext.define('PVE.form.SnapshotSelector', {
me.store.setProxy({ me.store.setProxy({
type: 'proxmox', type: 'proxmox',
url: '/api2/json/nodes/' + me.nodename + '/' + me.guestType + '/' + me.vmid +'/snapshot' url: '/api2/json/nodes/' + me.nodename + '/' + me.guestType + '/' + me.vmid +'/snapshot',
}); });
me.store.load(); me.store.load();
@ -45,7 +45,7 @@ Ext.define('PVE.form.SnapshotSelector', {
var store = Ext.create('Ext.data.Store', { var store = Ext.create('Ext.data.Store', {
fields: [ 'name'], fields: [ 'name'],
filterOnLoad: true filterOnLoad: true,
}); });
Ext.apply(me, { Ext.apply(me, {
@ -56,14 +56,14 @@ Ext.define('PVE.form.SnapshotSelector', {
header: gettext('Snapshot'), header: gettext('Snapshot'),
dataIndex: 'name', dataIndex: 'name',
hideable: false, hideable: false,
flex: 1 flex: 1,
} },
] ],
} },
}); });
me.callParent(); me.callParent();
me.loadStore(me.nodename, me.vmid); me.loadStore(me.nodename, me.vmid);
} },
}); });

View File

@ -39,8 +39,8 @@ Ext.define('PVE.form.SpiceEnhancementSelector', {
value: gettext('Make sure the SPICE WebDav daemon is installed in the VM.'), value: gettext('Make sure the SPICE WebDav daemon is installed in the VM.'),
bind: { bind: {
hidden: '{!foldersharing.checked}', hidden: '{!foldersharing.checked}',
} },
} },
], ],
onGetValues: function(values) { onGetValues: function(values) {

View File

@ -12,26 +12,26 @@ Ext.define('PVE.form.StorageSelector', {
header: gettext('Name'), header: gettext('Name'),
dataIndex: 'storage', dataIndex: 'storage',
hideable: false, hideable: false,
flex: 1 flex: 1,
}, },
{ {
header: gettext('Type'), header: gettext('Type'),
width: 75, width: 75,
dataIndex: 'type' dataIndex: 'type',
}, },
{ {
header: gettext('Avail'), header: gettext('Avail'),
width: 90, width: 90,
dataIndex: 'avail', dataIndex: 'avail',
renderer: Proxmox.Utils.format_size renderer: Proxmox.Utils.format_size,
}, },
{ {
header: gettext('Capacity'), header: gettext('Capacity'),
width: 90, width: 90,
dataIndex: 'total', dataIndex: 'total',
renderer: Proxmox.Utils.format_size renderer: Proxmox.Utils.format_size,
} },
] ],
}, },
reloadStorageList: function() { reloadStorageList: function() {
@ -41,7 +41,7 @@ Ext.define('PVE.form.StorageSelector', {
} }
var params = { var params = {
format: 1 format: 1,
}; };
var url = '/api2/json/nodes/' + me.nodename + '/storage'; var url = '/api2/json/nodes/' + me.nodename + '/storage';
if (me.storageContent) { if (me.storageContent) {
@ -54,7 +54,7 @@ Ext.define('PVE.form.StorageSelector', {
me.store.setProxy({ me.store.setProxy({
type: 'proxmox', type: 'proxmox',
url: url, url: url,
extraParams: params extraParams: params,
}); });
me.store.load(); me.store.load();
@ -95,12 +95,12 @@ Ext.define('PVE.form.StorageSelector', {
model: 'pve-storage-status', model: 'pve-storage-status',
sorters: { sorters: {
property: 'storage', property: 'storage',
order: 'DESC' order: 'DESC',
} },
}); });
Ext.apply(me, { Ext.apply(me, {
store: store store: store,
}); });
me.callParent(); me.callParent();
@ -108,13 +108,13 @@ Ext.define('PVE.form.StorageSelector', {
if (nodename) { if (nodename) {
me.setNodename(nodename); me.setNodename(nodename);
} }
} },
}, function() { }, function() {
Ext.define('pve-storage-status', { Ext.define('pve-storage-status', {
extend: 'Ext.data.Model', extend: 'Ext.data.Model',
fields: [ 'storage', 'active', 'type', 'avail', 'total' ], fields: [ 'storage', 'active', 'type', 'avail', 'total' ],
idProperty: 'storage' idProperty: 'storage',
}); });
}); });

View File

@ -45,16 +45,16 @@ Ext.define('PVE.form.TokenSelector', {
sortable: true, sortable: true,
dataIndex: 'id', dataIndex: 'id',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
}, },
{ {
header: gettext('Comment'), header: gettext('Comment'),
sortable: false, sortable: false,
dataIndex: 'comment', dataIndex: 'comment',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
} },
] ],
}, },
}, function() { }, function() {
Ext.define('pve-tokens', { Ext.define('pve-tokens', {
@ -62,8 +62,8 @@ Ext.define('PVE.form.TokenSelector', {
fields: [ fields: [
'id', 'userid', 'tokenid', 'comment', 'id', 'userid', 'tokenid', 'comment',
{ type: 'boolean', name: 'privsep' }, { type: 'boolean', name: 'privsep' },
{ type: 'date', dateFormat: 'timestamp', name: 'expire' } { type: 'date', dateFormat: 'timestamp', name: 'expire' },
], ],
idProperty: 'id' idProperty: 'id',
}); });
}); });

View File

@ -45,8 +45,8 @@ Ext.define('PVE.form.USBSelector', {
filters: [ filters: [
function (item) { function (item) {
return !!item.data.usbpath && !!item.data.prodid && item.data['class'] != 9; return !!item.data.usbpath && !!item.data.prodid && item.data['class'] != 9;
} },
] ],
}); });
let emptyText = ''; let emptyText = '';
if (me.type === 'device') { if (me.type === 'device') {
@ -65,19 +65,19 @@ Ext.define('PVE.form.USBSelector', {
header: (me.type === 'device')?gettext('Device'):gettext('Port'), header: (me.type === 'device')?gettext('Device'):gettext('Port'),
sortable: true, sortable: true,
dataIndex: 'usbid', dataIndex: 'usbid',
width: 80 width: 80,
}, },
{ {
header: gettext('Manufacturer'), header: gettext('Manufacturer'),
sortable: true, sortable: true,
dataIndex: 'manufacturer', dataIndex: 'manufacturer',
width: 150 width: 150,
}, },
{ {
header: gettext('Product'), header: gettext('Product'),
sortable: true, sortable: true,
dataIndex: 'product', dataIndex: 'product',
flex: 1 flex: 1,
}, },
{ {
header: gettext('Speed'), header: gettext('Speed'),
@ -93,16 +93,16 @@ Ext.define('PVE.form.USBSelector', {
"1.5": "USB 1.x", "1.5": "USB 1.x",
}; };
return speed_map[value] || value + " Mbps"; return speed_map[value] || value + " Mbps";
} },
} },
] ],
}, },
}); });
me.callParent(); me.callParent();
store.load(); store.load();
} },
}, function() { }, function() {
@ -116,14 +116,14 @@ Ext.define('PVE.form.USBSelector', {
return val; return val;
} }
return data.get('vendid') + ':' + data.get('prodid'); return data.get('vendid') + ':' + data.get('prodid');
} },
}, },
'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath', 'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
{ name: 'port' , type: 'number' }, { name: 'port', type: 'number' },
{ name: 'level' , type: 'number' }, { name: 'level', type: 'number' },
{ name: 'class' , type: 'number' }, { name: 'class', type: 'number' },
{ name: 'devnum' , type: 'number' }, { name: 'devnum', type: 'number' },
{ name: 'busnum' , type: 'number' }, { name: 'busnum', type: 'number' },
{ {
name: 'product_and_id', name: 'product_and_id',
type: 'string', type: 'string',
@ -133,7 +133,7 @@ Ext.define('PVE.form.USBSelector', {
return res; return res;
}, },
}, },
] ],
}); });
Ext.define('pve-usb-port', { Ext.define('pve-usb-port', {
@ -141,19 +141,19 @@ Ext.define('PVE.form.USBSelector', {
fields: [ fields: [
{ {
name: 'usbid', name: 'usbid',
convert: function(val,data) { convert: function(val, data) {
if (val) { if (val) {
return val; return val;
} }
return data.get('busnum') + '-' + data.get('usbpath'); return data.get('busnum') + '-' + data.get('usbpath');
} },
}, },
'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath', 'speed', 'product', 'manufacturer', 'vendid', 'prodid', 'usbpath',
{ name: 'port' , type: 'number' }, { name: 'port', type: 'number' },
{ name: 'level' , type: 'number' }, { name: 'level', type: 'number' },
{ name: 'class' , type: 'number' }, { name: 'class', type: 'number' },
{ name: 'devnum' , type: 'number' }, { name: 'devnum', type: 'number' },
{ name: 'busnum' , type: 'number' }, { name: 'busnum', type: 'number' },
{ {
name: 'product_and_id', name: 'product_and_id',
type: 'string', type: 'string',
@ -163,6 +163,6 @@ Ext.define('PVE.form.USBSelector', {
return res; return res;
}, },
}, },
] ],
}); });
}); });

View File

@ -17,8 +17,8 @@ Ext.define('PVE.form.UserSelector', {
var store = new Ext.data.Store({ var store = new Ext.data.Store({
model: 'pve-users', model: 'pve-users',
sorters: [{ sorters: [{
property: 'userid' property: 'userid',
}] }],
}); });
Ext.apply(me, { Ext.apply(me, {
@ -30,45 +30,45 @@ Ext.define('PVE.form.UserSelector', {
sortable: true, sortable: true,
dataIndex: 'userid', dataIndex: 'userid',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
}, },
{ {
header: gettext('Name'), header: gettext('Name'),
sortable: true, sortable: true,
renderer: PVE.Utils.render_full_name, renderer: PVE.Utils.render_full_name,
dataIndex: 'firstname', dataIndex: 'firstname',
flex: 1 flex: 1,
}, },
{ {
header: gettext('Comment'), header: gettext('Comment'),
sortable: false, sortable: false,
dataIndex: 'comment', dataIndex: 'comment',
renderer: Ext.String.htmlEncode, renderer: Ext.String.htmlEncode,
flex: 1 flex: 1,
} },
] ],
} },
}); });
me.callParent(); me.callParent();
store.load({ params: { enabled: 1 }}); store.load({ params: { enabled: 1 }});
} },
}, function() { }, function() {
Ext.define('pve-users', { Ext.define('pve-users', {
extend: 'Ext.data.Model', extend: 'Ext.data.Model',
fields: [ fields: [
'userid', 'firstname', 'lastname' , 'email', 'comment', 'userid', 'firstname', 'lastname', 'email', 'comment',
{ type: 'boolean', name: 'enable' }, { type: 'boolean', name: 'enable' },
{ type: 'date', dateFormat: 'timestamp', name: 'expire' } { type: 'date', dateFormat: 'timestamp', name: 'expire' },
], ],
proxy: { proxy: {
type: 'proxmox', type: 'proxmox',
url: "/api2/json/access/users" url: "/api2/json/access/users",
}, },
idProperty: 'userid' idProperty: 'userid',
}); });
}); });

View File

@ -32,9 +32,9 @@ Ext.define('PVE.form.VlanField', {
Ext.apply(me, { Ext.apply(me, {
minValue: 1, minValue: 1,
maxValue: 4094 maxValue: 4094,
}); });
me.callParent(); me.callParent();
} },
}); });

View File

@ -3,7 +3,7 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
alias: 'widget.vmcpuflagselector', alias: 'widget.vmcpuflagselector',
mixins: { mixins: {
field: 'Ext.form.field.Field' field: 'Ext.form.field.Field',
}, },
disableSelection: true, disableSelection: true,
@ -32,13 +32,13 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
{ flag: 'pdpe1gb', desc: 'Allow guest OS to use 1GB size pages, if host HW supports it' }, { flag: 'pdpe1gb', desc: 'Allow guest OS to use 1GB size pages, if host HW supports it' },
{ flag: 'hv-tlbflush', desc: 'Improve performance in overcommitted Windows guests. May lead to guest bluescreens on old CPUs.' }, { flag: 'hv-tlbflush', desc: 'Improve performance in overcommitted Windows guests. May lead to guest bluescreens on old CPUs.' },
{ flag: 'hv-evmcs', desc: 'Improve performance for nested virtualization. Only supported on Intel CPUs.' }, { flag: 'hv-evmcs', desc: 'Improve performance for nested virtualization. Only supported on Intel CPUs.' },
{ flag: 'aes', desc: 'Activate AES instruction set for HW acceleration.' } { flag: 'aes', desc: 'Activate AES instruction set for HW acceleration.' },
], ],
listeners: { listeners: {
update: function() { update: function() {
this.commitChanges(); this.commitChanges();
} },
} },
}, },
getValue: function() { getValue: function() {
@ -105,7 +105,7 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
default: return 'Unknown'; default: return 'Unknown';
} }
}, },
width: 65 width: 65,
}, },
{ {
xtype: 'widgetcolumn', xtype: 'widgetcolumn',
@ -131,34 +131,34 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
view.dirty = view.getValue() !== view.originalValue; view.dirty = view.getValue() !== view.originalValue;
view.checkDirty(); view.checkDirty();
//view.checkChange(); //view.checkChange();
} },
}, },
items: [ items: [
{ {
boxLabel: '-', boxLabel: '-',
boxLabelAlign: 'before', boxLabelAlign: 'before',
inputValue: '-' inputValue: '-',
}, },
{ {
checked: true, checked: true,
inputValue: '=' inputValue: '=',
}, },
{ {
boxLabel: '+', boxLabel: '+',
inputValue: '+' inputValue: '+',
} },
] ],
} },
}, },
{ {
dataIndex: 'flag', dataIndex: 'flag',
width: 100 width: 100,
}, },
{ {
dataIndex: 'desc', dataIndex: 'desc',
cellWrap: true, cellWrap: true,
flex: 1 flex: 1,
} },
], ],
initComponent: function() { initComponent: function() {
@ -172,5 +172,5 @@ Ext.define('PVE.form.VMCPUFlagSelector', {
me.value = me.originalValue = ''; me.value = me.originalValue = '';
me.callParent(arguments); me.callParent(arguments);
} },
}); });

View File

@ -4,7 +4,7 @@ Ext.define('PVE.form.VMSelector', {
alias: 'widget.vmselector', alias: 'widget.vmselector',
mixins: { mixins: {
field: 'Ext.form.field.Field' field: 'Ext.form.field.Field',
}, },
allowBlank: true, allowBlank: true,
@ -19,8 +19,8 @@ Ext.define('PVE.form.VMSelector', {
sorters: 'vmid', sorters: 'vmid',
filters: [{ filters: [{
property: 'type', property: 'type',
value: /lxc|qemu/ value: /lxc|qemu/,
}] }],
}, },
columns: [ columns: [
{ {
@ -28,34 +28,34 @@ Ext.define('PVE.form.VMSelector', {
dataIndex: 'vmid', dataIndex: 'vmid',
width: 80, width: 80,
filter: { filter: {
type: 'number' type: 'number',
} },
}, },
{ {
header: gettext('Node'), header: gettext('Node'),
dataIndex: 'node' dataIndex: 'node',
}, },
{ {
header: gettext('Status'), header: gettext('Status'),
dataIndex: 'status', dataIndex: 'status',
filter: { filter: {
type: 'list' type: 'list',
} },
}, },
{ {
header: gettext('Name'), header: gettext('Name'),
dataIndex: 'name', dataIndex: 'name',
flex: 1, flex: 1,
filter: { filter: {
type: 'string' type: 'string',
} },
}, },
{ {
header: gettext('Pool'), header: gettext('Pool'),
dataIndex: 'pool', dataIndex: 'pool',
filter: { filter: {
type: 'list' type: 'list',
} },
}, },
{ {
header: gettext('Type'), header: gettext('Type'),
@ -75,41 +75,41 @@ Ext.define('PVE.form.VMSelector', {
store: { store: {
data: [ data: [
{id: 'qemu', text: gettext('Virtual Machine')}, {id: 'qemu', text: gettext('Virtual Machine')},
{id: 'lxc', text: gettext('LXC Container')} {id: 'lxc', text: gettext('LXC Container')},
], ],
// due to EXTJS-18711 // due to EXTJS-18711
// we have to do a static list via a store // we have to do a static list via a store
// but to avoid creating an object, // but to avoid creating an object,
// we have to have a pseudo un function // we have to have a pseudo un function
un: function(){} un: function(){},
} },
} },
}, },
{ {
header: 'HA ' + gettext('Status'), header: 'HA ' + gettext('Status'),
dataIndex: 'hastate', dataIndex: 'hastate',
flex: 1, flex: 1,
filter: { filter: {
type: 'list' type: 'list',
} },
} },
], ],
selModel: { selModel: {
selType: 'checkboxmodel', selType: 'checkboxmodel',
mode: 'SIMPLE' mode: 'SIMPLE',
}, },
checkChangeEvents: [ checkChangeEvents: [
'selectionchange', 'selectionchange',
'change' 'change',
], ],
listeners: { listeners: {
selectionchange: function() { selectionchange: function() {
// to trigger validity and error checks // to trigger validity and error checks
this.checkChange(); this.checkChange();
} },
}, },
getValue: function() { getValue: function() {
@ -138,7 +138,7 @@ Ext.define('PVE.form.VMSelector', {
var store = me.getStore(); var store = me.getStore();
value.forEach(function(item) { value.forEach(function(item) {
var rec = store.findRecord('vmid',item, 0, false, true, true); var rec = store.findRecord('vmid', item, 0, false, true, true);
console.log(store); console.log(store);
if (rec) { if (rec) {
@ -156,11 +156,11 @@ Ext.define('PVE.form.VMSelector', {
var me = this; var me = this;
if (me.allowBlank === false && if (me.allowBlank === false &&
me.getSelectionModel().getCount() === 0) { me.getSelectionModel().getCount() === 0) {
me.addBodyCls(['x-form-trigger-wrap-default','x-form-trigger-wrap-invalid']); me.addBodyCls(['x-form-trigger-wrap-default', 'x-form-trigger-wrap-invalid']);
return [gettext('No VM selected')]; return [gettext('No VM selected')];
} }
me.removeBodyCls(['x-form-trigger-wrap-default','x-form-trigger-wrap-invalid']); me.removeBodyCls(['x-form-trigger-wrap-default', 'x-form-trigger-wrap-invalid']);
return []; return [];
}, },
@ -173,7 +173,7 @@ Ext.define('PVE.form.VMSelector', {
me.store.filters.add({ me.store.filters.add({
property: 'node', property: 'node',
exactMatch: true, exactMatch: true,
value: me.nodename value: me.nodename,
}); });
} }
@ -191,12 +191,12 @@ Ext.define('PVE.form.VMSelector', {
if (statusfilter !== '') { if (statusfilter !== '') {
me.store.filters.add({ me.store.filters.add({
property: 'template', property: 'template',
value: 0 value: 0,
},{ }, {
id: 'x-gridfilter-status', id: 'x-gridfilter-status',
operator: 'in', operator: 'in',
property: 'status', property: 'status',
value: [statusfilter] value: [statusfilter],
}); });
} }
} }
@ -205,11 +205,11 @@ Ext.define('PVE.form.VMSelector', {
var sm = me.getSelectionModel(); var sm = me.getSelectionModel();
if (me.selectAll) { if (me.selectAll) {
me.mon(store,'load', function(){ me.mon(store, 'load', function(){
me.getSelectionModel().selectAll(false); me.getSelectionModel().selectAll(false);
}); });
} }
} },
}); });
@ -231,8 +231,8 @@ Ext.define('PVE.form.VMComboSelector', {
sorters: 'vmid', sorters: 'vmid',
filters: [{ filters: [{
property: 'type', property: 'type',
value: /lxc|qemu/ value: /lxc|qemu/,
}] }],
}, },
listConfig: { listConfig: {
@ -244,35 +244,35 @@ Ext.define('PVE.form.VMComboSelector', {
dataIndex: 'vmid', dataIndex: 'vmid',
width: 80, width: 80,
filter: { filter: {
type: 'number' type: 'number',
} },
}, },
{ {
header: gettext('Name'), header: gettext('Name'),
dataIndex: 'name', dataIndex: 'name',
flex: 1, flex: 1,
filter: { filter: {
type: 'string' type: 'string',
} },
}, },
{ {
header: gettext('Node'), header: gettext('Node'),
dataIndex: 'node' dataIndex: 'node',
}, },
{ {
header: gettext('Status'), header: gettext('Status'),
dataIndex: 'status', dataIndex: 'status',
filter: { filter: {
type: 'list' type: 'list',
} },
}, },
{ {
header: gettext('Pool'), header: gettext('Pool'),
dataIndex: 'pool', dataIndex: 'pool',
hidden: true, hidden: true,
filter: { filter: {
type: 'list' type: 'list',
} },
}, },
{ {
header: gettext('Type'), header: gettext('Type'),
@ -292,11 +292,11 @@ Ext.define('PVE.form.VMComboSelector', {
store: { store: {
data: [ data: [
{id: 'qemu', text: gettext('Virtual Machine')}, {id: 'qemu', text: gettext('Virtual Machine')},
{id: 'lxc', text: gettext('LXC Container')} {id: 'lxc', text: gettext('LXC Container')},
], ],
un: function(){} // due to EXTJS-18711 un: function(){}, // due to EXTJS-18711
} },
} },
}, },
{ {
header: 'HA ' + gettext('Status'), header: 'HA ' + gettext('Status'),
@ -304,9 +304,9 @@ Ext.define('PVE.form.VMComboSelector', {
hidden: true, hidden: true,
flex: 1, flex: 1,
filter: { filter: {
type: 'list' type: 'list',
} },
} },
] ],
} },
}); });

View File

@ -1,5 +1,5 @@
Ext.define('PVE.form.VNCKeyboardSelector', { Ext.define('PVE.form.VNCKeyboardSelector', {
extend: 'Proxmox.form.KVComboBox', extend: 'Proxmox.form.KVComboBox',
alias: ['widget.VNCKeyboardSelector'], alias: ['widget.VNCKeyboardSelector'],
comboItems: PVE.Utils.kvm_keymap_array() comboItems: PVE.Utils.kvm_keymap_array(),
}); });

View File

@ -20,18 +20,18 @@ Ext.define('PVE.form.ViewSelector', {
var default_views = { var default_views = {
server: { server: {
text: gettext('Server View'), text: gettext('Server View'),
groups: ['node'] groups: ['node'],
}, },
folder: { folder: {
text: gettext('Folder View'), text: gettext('Folder View'),
groups: ['type'] groups: ['type'],
}, },
storage: { storage: {
text: gettext('Storage View'), text: gettext('Storage View'),
groups: ['node'], groups: ['node'],
filterfn: function(node) { filterfn: function(node) {
return node.data.type === 'storage' || node.data.type === 'node'; return node.data.type === 'storage' || node.data.type === 'node';
} },
}, },
pool: { pool: {
text: gettext('Pool View'), text: gettext('Pool View'),
@ -40,8 +40,8 @@ Ext.define('PVE.form.ViewSelector', {
filterfn: function(node) { filterfn: function(node) {
return node.data.type === 'qemu' || node.data.type === 'lxc' || node.data.type === 'openvz' || return node.data.type === 'qemu' || node.data.type === 'lxc' || node.data.type === 'openvz' ||
node.data.type === 'pool'; node.data.type === 'pool';
} },
} },
}; };
var groupdef = []; var groupdef = [];
@ -53,10 +53,10 @@ Ext.define('PVE.form.ViewSelector', {
model: 'KeyValue', model: 'KeyValue',
proxy: { proxy: {
type: 'memory', type: 'memory',
reader: 'array' reader: 'array',
}, },
data: groupdef, data: groupdef,
autoload: true autoload: true,
}); });
Ext.apply(me, { Ext.apply(me, {
@ -86,7 +86,7 @@ Ext.define('PVE.form.ViewSelector', {
stateEvents: [ 'select' ], stateEvents: [ 'select' ],
stateful: true, stateful: true,
stateId: 'pveview', stateId: 'pveview',
id: 'view' id: 'view',
}); });
me.callParent(); me.callParent();
@ -99,5 +99,5 @@ Ext.define('PVE.form.ViewSelector', {
var sp = Ext.state.Manager.getProvider(); var sp = Ext.state.Manager.getProvider();
me.mon(sp, 'statechange', statechange, me); me.mon(sp, 'statechange', statechange, me);
} },
}); });

View File

@ -5,6 +5,6 @@ Ext.define('PVE.form.iScsiProviderSelector', {
['comstar', 'Comstar'], ['comstar', 'Comstar'],
[ 'istgt', 'istgt'], [ 'istgt', 'istgt'],
[ 'iet', 'IET'], [ 'iet', 'IET'],
[ 'LIO', 'LIO'] [ 'LIO', 'LIO'],
] ],
}); });

View File

@ -43,7 +43,7 @@ Ext.define('PVE.grid.BackupView', {
property: 'volid', property: 'volid',
value: '', value: '',
anyMatch: true, anyMatch: true,
caseSensitive: false caseSensitive: false,
}; };
var vmidFilter = { var vmidFilter = {
@ -56,13 +56,13 @@ Ext.define('PVE.grid.BackupView', {
model: 'pve-storage-content', model: 'pve-storage-content',
sorters: { sorters: {
property: 'volid', property: 'volid',
order: 'DESC' order: 'DESC',
}, },
filters: [ filters: [
vmtypeFilter, vmtypeFilter,
searchFilter, searchFilter,
vmidFilter, vmidFilter,
] ],
}); });
let updateFilter = function() { let updateFilter = function() {
@ -85,7 +85,7 @@ Ext.define('PVE.grid.BackupView', {
me.store.setProxy({ me.store.setProxy({
type: 'proxmox', type: 'proxmox',
url: url url: url,
}); });
reload(); reload();
@ -110,8 +110,8 @@ Ext.define('PVE.grid.BackupView', {
}); });
} }
setStorage(value); setStorage(value);
} },
} },
}); });
var storagefilter = Ext.create('Ext.form.field.Text', { var storagefilter = Ext.create('Ext.form.field.Text', {
@ -126,8 +126,8 @@ Ext.define('PVE.grid.BackupView', {
me.store.clearFilter(true); me.store.clearFilter(true);
searchFilter.value = field.getValue(); searchFilter.value = field.getValue();
updateFilter(); updateFilter();
} },
} },
}); });
var vmidfilterCB = Ext.create('Ext.form.field.Checkbox', { var vmidfilterCB = Ext.create('Ext.form.field.Checkbox', {
@ -155,11 +155,11 @@ Ext.define('PVE.grid.BackupView', {
listeners : { listeners : {
close: function() { close: function() {
reload(); reload();
} },
} },
}); });
win.show(); win.show();
} },
}); });
var restore_btn = Ext.create('Proxmox.button.Button', { var restore_btn = Ext.create('Proxmox.button.Button', {
@ -175,11 +175,11 @@ Ext.define('PVE.grid.BackupView', {
vmid: vmid, vmid: vmid,
volid: rec.data.volid, volid: rec.data.volid,
volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec), volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
vmtype: vmtype vmtype: vmtype,
}); });
win.show(); win.show();
win.on('destroy', reload); win.on('destroy', reload);
} },
}); });
var delete_btn = Ext.create('Proxmox.button.StdRemoveButton', { var delete_btn = Ext.create('Proxmox.button.StdRemoveButton', {
@ -199,7 +199,7 @@ Ext.define('PVE.grid.BackupView', {
}, },
callback: function() { callback: function() {
reload(); reload();
} },
}); });
var config_btn = Ext.create('Proxmox.button.Button', { var config_btn = Ext.create('Proxmox.button.Button', {
@ -217,11 +217,11 @@ Ext.define('PVE.grid.BackupView', {
var win = Ext.create('PVE.window.BackupConfig', { var win = Ext.create('PVE.window.BackupConfig', {
volume: rec.data.volid, volume: rec.data.volid,
pveSelNode: me.pveSelNode pveSelNode: me.pveSelNode,
}); });
win.show(); win.show();
} },
}); });
Ext.apply(me, { Ext.apply(me, {
@ -278,7 +278,7 @@ Ext.define('PVE.grid.BackupView', {
storagesel, storagesel,
'-', '-',
vmidfilterCB, vmidfilterCB,
storagefilter storagefilter,
], ],
}, },
columns: [ columns: [
@ -287,7 +287,7 @@ Ext.define('PVE.grid.BackupView', {
flex: 2, flex: 2,
sortable: true, sortable: true,
renderer: PVE.Utils.render_storage_content, renderer: PVE.Utils.render_storage_content,
dataIndex: 'volid' dataIndex: 'volid',
}, },
{ {
header: gettext('Notes'), header: gettext('Notes'),
@ -298,18 +298,18 @@ Ext.define('PVE.grid.BackupView', {
{ {
header: gettext('Date'), header: gettext('Date'),
width: 150, width: 150,
dataIndex: 'vdate' dataIndex: 'vdate',
}, },
{ {
header: gettext('Format'), header: gettext('Format'),
width: 100, width: 100,
dataIndex: 'format' dataIndex: 'format',
}, },
{ {
header: gettext('Size'), header: gettext('Size'),
width: 100, width: 100,
renderer: Proxmox.Utils.format_size, renderer: Proxmox.Utils.format_size,
dataIndex: 'size' dataIndex: 'size',
}, },
{ {
header: gettext('VMID'), header: gettext('VMID'),
@ -325,10 +325,10 @@ Ext.define('PVE.grid.BackupView', {
header: gettext('Verify State'), header: gettext('Verify State'),
dataIndex: 'verification', dataIndex: 'verification',
renderer: PVE.Utils.render_backup_verification, renderer: PVE.Utils.render_backup_verification,
} },
] ],
}); });
me.callParent(); me.callParent();
} },
}); });

Some files were not shown because too many files have changed in this diff Show More