]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/lxc/Options.js
drop jslint lines
[pve-manager.git] / www / manager6 / lxc / Options.js
1 Ext.define('PVE.lxc.Options', {
2 extend: 'Proxmox.grid.PendingObjectGrid',
3 alias: ['widget.pveLxcOptions'],
4
5 onlineHelp: 'pct_options',
6
7 initComponent : function() {
8 var me = this;
9 var i;
10
11 var nodename = me.pveSelNode.data.node;
12 if (!nodename) {
13 throw "no node name specified";
14 }
15
16 var vmid = me.pveSelNode.data.vmid;
17 if (!vmid) {
18 throw "no VM ID specified";
19 }
20
21 var caps = Ext.state.Manager.get('GuiCap');
22
23 var rows = {
24 onboot: {
25 header: gettext('Start at boot'),
26 defaultValue: '',
27 renderer: Proxmox.Utils.format_boolean,
28 editor: caps.vms['VM.Config.Options'] ? {
29 xtype: 'proxmoxWindowEdit',
30 subject: gettext('Start at boot'),
31 items: {
32 xtype: 'proxmoxcheckbox',
33 name: 'onboot',
34 uncheckedValue: 0,
35 defaultValue: 0,
36 fieldLabel: gettext('Start at boot')
37 }
38 } : undefined
39 },
40 startup: {
41 header: gettext('Start/Shutdown order'),
42 defaultValue: '',
43 renderer: PVE.Utils.render_kvm_startup,
44 editor: caps.vms['VM.Config.Options'] && caps.nodes['Sys.Modify'] ?
45 {
46 xtype: 'pveWindowStartupEdit',
47 onlineHelp: 'pct_startup_and_shutdown'
48 } : undefined
49 },
50 ostype: {
51 header: gettext('OS Type'),
52 defaultValue: Proxmox.Utils.unknownText
53 },
54 arch: {
55 header: gettext('Architecture'),
56 defaultValue: Proxmox.Utils.unknownText
57 },
58 console: {
59 header: '/dev/console',
60 defaultValue: 1,
61 renderer: Proxmox.Utils.format_enabled_toggle,
62 editor: caps.vms['VM.Config.Options'] ? {
63 xtype: 'proxmoxWindowEdit',
64 subject: '/dev/console',
65 items: {
66 xtype: 'proxmoxcheckbox',
67 name: 'console',
68 uncheckedValue: 0,
69 defaultValue: 1,
70 deleteDefaultValue: true,
71 checked: true,
72 fieldLabel: '/dev/console'
73 }
74 } : undefined
75 },
76 tty: {
77 header: gettext('TTY count'),
78 defaultValue: 2,
79 editor: caps.vms['VM.Config.Options'] ? {
80 xtype: 'proxmoxWindowEdit',
81 subject: gettext('TTY count'),
82 items: {
83 xtype: 'proxmoxintegerfield',
84 name: 'tty',
85 minValue: 0,
86 maxValue: 6,
87 value: 2,
88 fieldLabel: gettext('TTY count'),
89 emptyText: gettext('Default'),
90 deleteEmpty: true
91 }
92 } : undefined
93 },
94 cmode: {
95 header: gettext('Console mode'),
96 defaultValue: 'tty',
97 editor: caps.vms['VM.Config.Options'] ? {
98 xtype: 'proxmoxWindowEdit',
99 subject: gettext('Console mode'),
100 items: {
101 xtype: 'proxmoxKVComboBox',
102 name: 'cmode',
103 deleteEmpty: true,
104 value: '__default__',
105 comboItems: [
106 ['__default__', Proxmox.Utils.defaultText + " (tty)"],
107 ['tty', "/dev/tty[X]"],
108 ['console', "/dev/console"],
109 ['shell', "shell"]
110 ],
111 fieldLabel: gettext('Console mode')
112 }
113 } : undefined
114 },
115 protection: {
116 header: gettext('Protection'),
117 defaultValue: false,
118 renderer: Proxmox.Utils.format_boolean,
119 editor: caps.vms['VM.Config.Options'] ? {
120 xtype: 'proxmoxWindowEdit',
121 subject: gettext('Protection'),
122 items: {
123 xtype: 'proxmoxcheckbox',
124 name: 'protection',
125 uncheckedValue: 0,
126 defaultValue: 0,
127 deleteDefaultValue: true,
128 fieldLabel: gettext('Enabled')
129 }
130 } : undefined
131 },
132 unprivileged: {
133 header: gettext('Unprivileged container'),
134 renderer: Proxmox.Utils.format_boolean,
135 defaultValue: 0
136 },
137 features: {
138 header: gettext('Features'),
139 defaultValue: Proxmox.Utils.noneText,
140 editor: Proxmox.UserName === 'root@pam' ?
141 'PVE.lxc.FeaturesEdit' : undefined
142 },
143 hookscript: {
144 header: gettext('Hookscript')
145 }
146 };
147
148 var baseurl = 'nodes/' + nodename + '/lxc/' + vmid + '/config';
149
150 var sm = Ext.create('Ext.selection.RowModel', {});
151
152 var edit_btn = new Proxmox.button.Button({
153 text: gettext('Edit'),
154 disabled: true,
155 selModel: sm,
156 enableFn: function(rec) {
157 var rowdef = rows[rec.data.key];
158 return !!rowdef.editor;
159 },
160 handler: function() { me.run_editor(); }
161 });
162
163 var revert_btn = new PVE.button.PendingRevert();
164
165 var set_button_status = function() {
166 var sm = me.getSelectionModel();
167 var rec = sm.getSelection()[0];
168
169 if (!rec) {
170 edit_btn.disable();
171 return;
172 }
173
174 var key = rec.data.key;
175 var pending = rec.data['delete'] || me.hasPendingChanges(key);
176 var rowdef = rows[key];
177
178 edit_btn.setDisabled(!rowdef.editor);
179 revert_btn.setDisabled(!pending);
180 };
181
182
183 Ext.apply(me, {
184 url: "/api2/json/nodes/" + nodename + "/lxc/" + vmid + "/pending",
185 selModel: sm,
186 interval: 5000,
187 tbar: [ edit_btn, revert_btn ],
188 rows: rows,
189 editorConfig: {
190 url: '/api2/extjs/' + baseurl
191 },
192 listeners: {
193 itemdblclick: me.run_editor,
194 selectionchange: set_button_status
195 }
196 });
197
198 me.callParent();
199
200 me.on('activate', me.rstore.startUpdate);
201 me.on('destroy', me.rstore.stopUpdate);
202 me.on('deactivate', me.rstore.stopUpdate);
203
204 me.mon(me.getStore(), 'datachanged', function() {
205 set_button_status();
206 });
207
208 }
209 });
210