onlineHelp: 'pct_options',
- initComponent : function() {
+ initComponent: function() {
var me = this;
- var i;
var nodename = me.pveSelNode.data.node;
if (!nodename) {
name: 'onboot',
uncheckedValue: 0,
defaultValue: 0,
- fieldLabel: gettext('Start at boot')
- }
- } : undefined
+ fieldLabel: gettext('Start at boot'),
+ },
+ } : undefined,
},
startup: {
header: gettext('Start/Shutdown order'),
defaultValue: '',
renderer: PVE.Utils.render_kvm_startup,
- editor: caps.vms['VM.Config.Options'] && caps.nodes['Sys.Modify'] ?
- {
+ editor: caps.vms['VM.Config.Options'] && caps.nodes['Sys.Modify']
+ ? {
xtype: 'pveWindowStartupEdit',
- onlineHelp: 'pct_startup_and_shutdown'
- } : undefined
+ onlineHelp: 'pct_startup_and_shutdown',
+ } : undefined,
},
ostype: {
header: gettext('OS Type'),
- defaultValue: Proxmox.Utils.unknownText
+ defaultValue: Proxmox.Utils.unknownText,
},
arch: {
header: gettext('Architecture'),
- defaultValue: Proxmox.Utils.unknownText
+ defaultValue: Proxmox.Utils.unknownText,
},
console: {
header: '/dev/console',
defaultValue: 1,
deleteDefaultValue: true,
checked: true,
- fieldLabel: '/dev/console'
- }
- } : undefined
+ fieldLabel: '/dev/console',
+ },
+ } : undefined,
},
tty: {
header: gettext('TTY count'),
value: 2,
fieldLabel: gettext('TTY count'),
emptyText: gettext('Default'),
- deleteEmpty: true
- }
- } : undefined
+ deleteEmpty: true,
+ },
+ } : undefined,
},
cmode: {
header: gettext('Console mode'),
['__default__', Proxmox.Utils.defaultText + " (tty)"],
['tty', "/dev/tty[X]"],
['console', "/dev/console"],
- ['shell', "shell"]
+ ['shell', "shell"],
],
- fieldLabel: gettext('Console mode')
- }
- } : undefined
+ fieldLabel: gettext('Console mode'),
+ },
+ } : undefined,
},
protection: {
header: gettext('Protection'),
uncheckedValue: 0,
defaultValue: 0,
deleteDefaultValue: true,
- fieldLabel: gettext('Enabled')
- }
- } : undefined
+ fieldLabel: gettext('Enabled'),
+ },
+ } : undefined,
},
unprivileged: {
header: gettext('Unprivileged container'),
renderer: Proxmox.Utils.format_boolean,
- defaultValue: 0
+ defaultValue: 0,
},
features: {
header: gettext('Features'),
defaultValue: Proxmox.Utils.noneText,
- editor: Proxmox.UserName === 'root@pam' ?
- 'PVE.lxc.FeaturesEdit' : undefined
+ editor: 'PVE.lxc.FeaturesEdit',
},
hookscript: {
- header: gettext('Hookscript')
- }
+ header: gettext('Hookscript'),
+ },
};
var baseurl = 'nodes/' + nodename + '/lxc/' + vmid + '/config';
var rowdef = rows[rec.data.key];
return !!rowdef.editor;
},
- handler: function() { me.run_editor(); }
+ handler: function() { me.run_editor(); },
});
var revert_btn = new PVE.button.PendingRevert();
var set_button_status = function() {
- var sm = me.getSelectionModel();
- var rec = sm.getSelection()[0];
+ let button_sm = me.getSelectionModel();
+ let rec = button_sm.getSelection()[0];
if (!rec) {
edit_btn.disable();
}
var key = rec.data.key;
- var pending = rec.data['delete'] || me.hasPendingChanges(key);
+ var pending = rec.data.delete || me.hasPendingChanges(key);
var rowdef = rows[key];
- edit_btn.setDisabled(!rowdef.editor);
+ if (key === 'features') {
+ let unprivileged = me.getStore().getById('unprivileged').data.value;
+ let root = Proxmox.UserName === 'root@pam';
+ let vmalloc = caps.vms['VM.Allocate'];
+ edit_btn.setDisabled(!(root || (vmalloc && unprivileged)));
+ } else {
+ edit_btn.setDisabled(!rowdef.editor);
+ }
+
revert_btn.setDisabled(!pending);
};
url: "/api2/json/nodes/" + nodename + "/lxc/" + vmid + "/pending",
selModel: sm,
interval: 5000,
- tbar: [ edit_btn, revert_btn ],
+ tbar: [edit_btn, revert_btn],
rows: rows,
editorConfig: {
- url: '/api2/extjs/' + baseurl
+ url: '/api2/extjs/' + baseurl,
},
listeners: {
itemdblclick: me.run_editor,
- selectionchange: set_button_status
- }
+ selectionchange: set_button_status,
+ },
});
me.callParent();
me.mon(me.getStore(), 'datachanged', function() {
set_button_status();
});
-
- }
+ },
});