enabledText: gettext('Enabled'),
disabledText: gettext('Disabled'),
noneText: gettext('none'),
+ NoneText: gettext('None'),
errorText: gettext('Error'),
unknownText: gettext('Unknown'),
defaultText: gettext('Default'),
groupText: gettext('Group'),
language_map: {
- zh_CN: 'Chinese (Simplified)',
- zh_TW: 'Chinese (Traditional)',
+ ar: 'Arabic',
ca: 'Catalan',
da: 'Danish',
+ de: 'German',
en: 'English',
+ es: 'Spanish',
eu: 'Euskera (Basque)',
+ fa: 'Persian (Farsi)',
fr: 'French',
- de: 'German',
+ he: 'Hebrew',
it: 'Italian',
- es: 'Spanish',
ja: 'Japanese',
nb: 'Norwegian (Bokmal)',
nn: 'Norwegian (Nynorsk)',
- fa: 'Persian (Farsi)',
pl: 'Polish',
pt_BR: 'Portuguese (Brazil)',
ru: 'Russian',
sl: 'Slovenian',
sv: 'Swedish',
- tr: 'Turkish'
+ tr: 'Turkish',
+ zh_CN: 'Chinese (Simplified)',
+ zh_TW: 'Chinese (Traditional)',
},
render_language: function (value) {
'lacp-balance-tcp': 'LACP (balance-tcp)',
},
- render_bond_mode: function(value) {
- var val = Proxmox.Utils.bond_mode_gettext_map[value];
- if (!val) {
- val = value || '';
- }
- return val;
- },
+ render_bond_mode: value => Proxmox.Utils.bond_mode_gettext_map[value] || value || '',
bond_mode_array: function(modes) {
- var arr = [];
- var i;
- for (i = 0; i < modes.length; i++) {
- arr.push([modes[i], Proxmox.Utils.render_bond_mode(modes[i])]);
- }
- return arr;
+ return modes.map(mode => [mode, Proxmox.Utils.render_bond_mode(mode)]);
},
getNoSubKeyHtml: function(url) {
}
},
+ getResponseErrorMessage: (err) => {
+ if (!err.statusText) {
+ return gettext('Connection error');
+ }
+ let msg = `${err.statusText} (${err.status})`;
+ if (err.response && err.response.responseText) {
+ let txt = err.response.responseText;
+ try {
+ let res = JSON.parse(txt)
+ for (let [key, value] of Object.entries(res.errors)) {
+ msg += `<br>${key}: ${value}`;
+ }
+ } catch (e) { /* TODO? */ }
+ }
+ return msg;
+ },
+
monStoreErrors: function(me, store, clearMaskBeforeLoad) {
if (clearMaskBeforeLoad) {
me.mon(store, 'beforeload', function(s, operation, eOpts) {
return;
}
- var msg;
- /*jslint nomen: true */
- var operation = request._operation;
- var error = operation.getError();
- if (error.statusText) {
- msg = error.statusText + ' (' + error.status + ')';
- } else {
- msg = gettext('Connection error');
- }
+ let error = request._operation.getError();
+ let msg = Proxmox.Utils.getResponseErrorMessage(error);
Proxmox.Utils.setErrorMask(me, msg);
});
},
Ext.Msg.show({
title: gettext('No valid subscription'),
icon: Ext.Msg.WARNING,
- msg: Proxmox.Utils.getNoSubKeyHtml(data.url),
+ message: Proxmox.Utils.getNoSubKeyHtml(data.url),
buttons: Ext.Msg.OK,
callback: function(btn) {
if (btn !== 'ok') {
acmerefresh: [ 'ACME Account', gettext('Refresh') ],
acmerenew: [ 'SRV', gettext('Renew Certificate') ],
acmerevoke: [ 'SRV', gettext('Revoke Certificate') ],
+ 'auth-realm-sync': [ gettext('Realm'), gettext('Sync') ],
+ 'auth-realm-sync-test': [ gettext('Realm'), gettext('Sync Preview')],
'move_volume': [ 'CT', gettext('Move Volume') ],
clustercreate: [ '', gettext('Create Cluster') ],
clusterjoin: [ '', gettext('Join Cluster') ],
qmstop: [ 'VM', gettext('Stop') ],
qmreset: [ 'VM', gettext('Reset') ],
qmshutdown: [ 'VM', gettext('Shutdown') ],
+ qmreboot: [ 'VM', gettext('Reboot') ],
qmsuspend: [ 'VM', gettext('Hibernate') ],
qmpause: [ 'VM', gettext('Pause') ],
qmresume: [ 'VM', gettext('Resume') ],
vzmount: ['CT', gettext('Mount') ],
vzumount: ['CT', gettext('Unmount') ],
vzshutdown: ['CT', gettext('Shutdown') ],
+ vzreboot: ['CT', gettext('Reboot') ],
vzsuspend: [ 'CT', gettext('Suspend') ],
vzresume: [ 'CT', gettext('Resume') ],
+ push_file: ['CT', gettext('Push file')],
+ pull_file: ['CT', gettext('Pull file')],
hamigrate: [ 'HA', gettext('Migrate') ],
hastart: [ 'HA', gettext('Start') ],
hastop: [ 'HA', gettext('Stop') ],
+ hashutdown: [ 'HA', gettext('Shutdown') ],
srvstart: ['SRV', gettext('Start') ],
srvstop: ['SRV', gettext('Stop') ],
srvrestart: ['SRV', gettext('Restart') ],
parse_task_upid: function(upid) {
var task = {};
- var res = upid.match(/^UPID:(\S+):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8,9}):([0-9A-Fa-f]{8}):([^:\s]+):([^:\s]*):([^:\s]+):$/);
+ var res = upid.match(/^UPID:([^\s:]+):([0-9A-Fa-f]{8}):([0-9A-Fa-f]{8,9}):(([0-9A-Fa-f]{8,16}):)?([0-9A-Fa-f]{8}):([^:\s]+):([^:\s]*):([^:\s]+):$/);
if (!res) {
throw "unable to parse upid '" + upid + "'";
}
task.node = res[1];
task.pid = parseInt(res[2], 16);
task.pstart = parseInt(res[3], 16);
- task.starttime = parseInt(res[4], 16);
- task.type = res[5];
- task.id = res[6];
- task.user = res[7];
+ if (res[5] !== undefined) {
+ task.task_id = parseInt(res[5], 16);
+ }
+ task.starttime = parseInt(res[6], 16);
+ task.type = res[7];
+ task.id = res[8];
+ task.user = res[9];
task.desc = Proxmox.Utils.format_task_description(task.type, task.id);
me.HostPort_match = new RegExp("^(" + IPV4_REGEXP + "|" + DnsName_REGEXP + ")(:\\d+)?$");
me.HostPortBrackets_match = new RegExp("^\\[(?:" + IPV6_REGEXP + "|" + IPV4_REGEXP + "|" + DnsName_REGEXP + ")\\](:\\d+)?$");
me.IP6_dotnotation_match = new RegExp("^" + IPV6_REGEXP + "(\\.\\d+)?$");
+ me.Vlan_match = new RegExp('^vlan(\\d+)');
+ me.VlanInterface_match = new RegExp('(\\w+)\\.(\\d+)');
}
});