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