]> git.proxmox.com Git - pve-manager.git/blame - www/manager/lxc/Resources.js
disable animation of charts on load
[pve-manager.git] / www / manager / lxc / Resources.js
CommitLineData
6dba2f98
DM
1/*jslint confusion: true */
2Ext.define('PVE.lxc.RessourceView', {
3 extend: 'PVE.grid.ObjectGrid',
4 alias: ['widget.pveLxcRessourceView'],
5
21855147
WL
6 renderKey: function(key, metaData, rec, rowIndex, colIndex, store) {
7 var me = this;
8 var rows = me.rows;
9 var rowdef = rows[key] || {};
10
11 metaData.tdAttr = "valign=middle";
12
13 if (rowdef.tdCls) {
14 metaData.tdCls = rowdef.tdCls;
15 if (rowdef.tdCls == 'pve-itype-icon-storage') {
16 var value = me.getObjectValue(key, '', true);
17 }
18 }
19 return rowdef.header || key;
20 },
21
6dba2f98
DM
22 initComponent : function() {
23 var me = this;
24 var i, confid;
25
26 var nodename = me.pveSelNode.data.node;
27 if (!nodename) {
28 throw "no node name specified";
29 }
30
31 var vmid = me.pveSelNode.data.vmid;
32 if (!vmid) {
33 throw "no VM ID specified";
34 }
35
36 var caps = Ext.state.Manager.get('GuiCap');
37
946eb8cd
WB
38 var mpeditor = caps.vms['VM.Config.Disk'] ? 'PVE.lxc.MountPointEdit' : undefined;
39
6dba2f98
DM
40 var rows = {
41 memory: {
42 header: gettext('Memory'),
34782e26 43 editor: caps.vms['VM.Config.Memory'] ? 'PVE.lxc.MemoryEdit' : undefined,
6dba2f98 44 never_delete: true,
21855147
WL
45 defaultValue: 512,
46 tdCls: 'pve-itype-icon-memory',
6dba2f98
DM
47 renderer: function(value) {
48 return PVE.Utils.format_size(value*1024*1024);
49 }
50 },
51 swap: {
52 header: gettext('Swap'),
34782e26 53 editor: caps.vms['VM.Config.Memory'] ? 'PVE.lxc.MemoryEdit' : undefined,
6dba2f98 54 never_delete: true,
21855147
WL
55 defaultValue: 512,
56 tdCls: 'pve-itype-icon-swap',
6dba2f98
DM
57 renderer: function(value) {
58 return PVE.Utils.format_size(value*1024*1024);
59 }
60 },
08d1d263
DM
61 cpulimit: {
62 header: gettext('CPU limit'),
6dba2f98 63 never_delete: true,
34782e26 64 editor: caps.vms['VM.Config.CPU'] ? 'PVE.lxc.CPUEdit' : undefined,
6dba2f98 65 defaultValue: 1,
21855147 66 tdCls: 'pve-itype-icon-processor',
6dba2f98 67 renderer: function(value) {
30164175 68 if (value) { return value; }
6dba2f98
DM
69 return gettext('unlimited');
70 }
71 },
08d1d263
DM
72 cpuunits: {
73 header: gettext('CPU units'),
74 never_delete: true,
34782e26 75 editor: caps.vms['VM.Config.CPU'] ? 'PVE.lxc.CPUEdit' : undefined,
21855147
WL
76 defaultValue: 1024,
77 tdCls: 'pve-itype-icon-processor'
d807e210
WL
78 },
79 rootfs: {
80 header: gettext('Root Disk'),
81 defaultValue: PVE.Utils.noneText,
946eb8cd 82 editor: mpeditor,
d807e210 83 tdCls: 'pve-itype-icon-storage'
6dba2f98
DM
84 }
85 };
86
f99124fb
WL
87 for (i = 0; i < 10; i++) {
88 confid = "mp" + i;
89 rows[confid] = {
90 group: 1,
91 tdCls: 'pve-itype-icon-storage',
946eb8cd 92 editor: mpeditor,
30164175 93 header: gettext('Mount Point') + ' (' + confid + ')'
f99124fb
WL
94 };
95 }
96
946eb8cd
WB
97 for (i = 0; i < 8; i++) {
98 confid = "unused" + i;
99 rows[confid] = {
100 group: 1,
101 tdCls: 'pve-itype-icon-storage',
102 editor: mpeditor,
30164175 103 header: gettext('Unused Disk') + ' ' + i
946eb8cd
WB
104 };
105 }
106
6dba2f98
DM
107 var reload = function() {
108 me.rstore.load();
109 };
110
111 var baseurl = 'nodes/' + nodename + '/lxc/' + vmid + '/config';
112
113 var sm = Ext.create('Ext.selection.RowModel', {});
114
115 var run_editor = function() {
116 var rec = sm.getSelection()[0];
117 if (!rec) {
118 return;
119 }
120
121 var rowdef = rows[rec.data.key];
122 if (!rowdef.editor) {
123 return;
124 }
125
126 var editor = rowdef.editor;
127
128 var win = Ext.create(editor, {
129 pveSelNode: me.pveSelNode,
130 confid: rec.data.key,
131 url: '/api2/extjs/' + baseurl
132 });
133
134 win.show();
135 win.on('destroy', reload);
136 };
137
c2ee953c
WL
138 var run_resize = function() {
139 var rec = sm.getSelection()[0];
140 if (!rec) {
141 return;
142 }
143
144 var win = Ext.create('PVE.window.MPResize', {
145 disk: rec.data.key,
146 nodename: nodename,
147 vmid: vmid
148 });
149
150 win.show();
151
152 win.on('destroy', reload);
153 };
154
946eb8cd
WB
155 var run_remove = function(b, e, rec) {
156 PVE.Utils.API2Request({
157 url: '/api2/extjs/' + baseurl,
158 waitMsgTarget: me,
159 method: 'PUT',
160 params: {
161 'delete': rec.data.key
162 },
163 callback: function() {
164 reload();
165 },
166 failure: function (response, opts) {
167 Ext.Msg.alert('Error', response.htmlStatus);
168 }
169 });
170 };
171
6dba2f98
DM
172 var edit_btn = new PVE.button.Button({
173 text: gettext('Edit'),
174 selModel: sm,
175 disabled: true,
176 enableFn: function(rec) {
177 if (!rec) {
178 return false;
179 }
180 var rowdef = rows[rec.data.key];
181 return !!rowdef.editor;
182 },
183 handler: run_editor
184 });
185
c2ee953c
WL
186 var resize_btn = new PVE.button.Button({
187 text: gettext('Resize disk'),
188 selModel: sm,
189 disabled: true,
190 handler: run_resize
191 });
192
946eb8cd
WB
193 var remove_btn = new PVE.button.Button({
194 text: gettext('Remove'),
195 selModel: sm,
196 disabled: true,
197 dangerous: true,
198 confirmMsg: function(rec) {
199 var msg = Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
200 "'" + me.renderKey(rec.data.key, {}, rec) + "'");
201 if (rec.data.key.match(/^unused\d+$/)) {
202 msg += " " + gettext('This will permanently erase all image data.');
203 }
204
205 return msg;
206 },
207 handler: run_remove
208 });
209
c2ee953c
WL
210 var set_button_status = function() {
211 var sm = me.getSelectionModel();
212 var rec = sm.getSelection()[0];
213
214 if (!rec) {
215 edit_btn.disable();
946eb8cd 216 remove_btn.disable();
c2ee953c
WL
217 resize_btn.disable();
218 return;
219 }
220 var key = rec.data.key;
221 var value = rec.data.value;
222 var rowdef = rows[key];
223
224 var isDisk = (rowdef.tdCls == 'pve-itype-icon-storage');
225
4a218fd9
WB
226 var noedit = rec.data['delete'] || !rowdef.editor;
227 if (!noedit && PVE.UserName !== 'root@pam' && key.match(/^mp\d+$/)) {
228 var mp = PVE.Parser.parseLxcMountPoint(value);
30164175 229 if (mp.type !== 'volume') {
4a218fd9 230 noedit = true;
30164175 231 }
4a218fd9
WB
232 }
233 edit_btn.setDisabled(noedit);
c2ee953c 234
946eb8cd 235 remove_btn.setDisabled(!isDisk || rec.data.key === 'rootfs');
c2ee953c
WL
236 resize_btn.setDisabled(!isDisk);
237
238 };
239
6dba2f98
DM
240 Ext.applyIf(me, {
241 url: '/api2/json/' + baseurl,
242 selModel: sm,
243 cwidth1: 170,
946eb8cd
WB
244 tbar: [
245 {
246 text: gettext('Add'),
247 menu: new Ext.menu.Menu({
248 items: [
249 {
250 text: gettext('Mount Point'),
251 iconCls: 'pve-itype-icon-storage',
252 disabled: !caps.vms['VM.Config.Disk'],
253 handler: function() {
254 var win = Ext.create('PVE.lxc.MountPointEdit', {
255 url: '/api2/extjs/' + baseurl,
256 pveSelNode: me.pveSelNode
257 });
258 win.on('destroy', reload);
259 win.show();
260 }
30164175 261 }
946eb8cd
WB
262 ]
263 })
264 },
265 edit_btn,
266 remove_btn,
30164175 267 resize_btn
946eb8cd 268 ],
6dba2f98
DM
269 rows: rows,
270 listeners: {
271 show: reload,
c2ee953c
WL
272 itemdblclick: run_editor,
273 selectionchange: set_button_status
6dba2f98
DM
274 }
275 });
276
277 me.callParent();
278 }
279});