]>
git.proxmox.com Git - pve-manager.git/blob - www/manager/storage/ContentView.js
71864f34058404205cc72576bcf9d51bb2bb3649
1 Ext
.define('PVE.grid.TemplateSelector', {
2 extend
: 'Ext.grid.GridPanel',
4 alias
: ['widget.pveTemplateSelector'],
6 initComponent : function() {
10 throw "no node name specified";
13 var baseurl
= "/nodes/" + me
.nodename
+ "/aplinfo";
14 var store
= new Ext
.data
.Store({
16 groupField
: 'section',
19 url
: '/api2/json' + baseurl
23 var sm
= Ext
.create('Ext.selection.RowModel', {});
25 var groupingFeature
= Ext
.create('Ext.grid.feature.Grouping',{
26 groupHeaderTpl
: '{[ "Section: " + values.name ]} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})'
29 var reload = function() {
33 PVE
.Utils
.monStoreErrors(me
, store
);
42 features
: [ groupingFeature
],
45 header
: gettext('Type'),
50 header
: gettext('Package'),
55 header
: gettext('Version'),
60 header
: gettext('Description'),
75 Ext
.define('pve-aplinfo', {
76 extend
: 'Ext.data.Model',
78 'template', 'type', 'package', 'version', 'headline', 'infopage',
79 'description', 'os', 'section'
81 idProperty
: 'template'
86 Ext
.define('PVE.storage.TemplateDownload', {
87 extend
: 'Ext.window.Window',
88 alias
: ['widget.pveTemplateDownload'],
92 initComponent : function() {
93 /*jslint confusion: true */
96 var grid
= Ext
.create('PVE.grid.TemplateSelector', {
102 var sm
= grid
.getSelectionModel();
104 var submitBtn
= Ext
.create('PVE.button.Button', {
105 text
: gettext('Download'),
108 handler: function(button
, event
, rec
) {
109 PVE
.Utils
.API2Request({
110 url
: '/nodes/' + me
.nodename
+ '/aplinfo',
113 template
: rec
.data
.template
116 failure: function (response
, opts
) {
117 Ext
.Msg
.alert('Error', response
.htmlStatus
);
119 success: function(response
, options
) {
120 var upid
= response
.result
.data
;
122 var win
= Ext
.create('PVE.window.TaskViewer', {
133 title
: gettext('Templates'),
138 buttons
: [ submitBtn
]
145 Ext
.define('PVE.storage.Upload', {
146 extend
: 'Ext.window.Window',
147 alias
: ['widget.pveStorageUpload'],
153 initComponent : function() {
154 /*jslint confusion: true */
160 throw "no node name specified";
164 throw "no storage ID specified";
167 var baseurl
= "/nodes/" + me
.nodename
+ "/storage/" + me
.storage
+ "/upload";
169 var pbar
= Ext
.create('Ext.ProgressBar', {
174 me
.formPanel
= Ext
.create('Ext.form.Panel', {
186 xtype
: 'pveKVComboBox',
188 ['iso', 'ISO image'],
189 ['backup', 'VZDump backup file'],
190 ['vztmpl', 'OpenVZ template']
192 fieldLabel
: gettext('Content'),
199 buttonText
: gettext('Select File...'),
206 var form
= me
.formPanel
.getForm();
208 var doStandardSubmit = function() {
210 url
: "/api2/htmljs" + baseurl
,
211 waitMsg
: gettext('Uploading file...'),
212 success: function(f
, action
) {
215 failure: function(f
, action
) {
216 var msg
= PVE
.Utils
.extractFormActionError(action
);
217 Ext
.Msg
.alert(gettext('Error'), msg
);
222 var updateProgress = function(per
, bytes
) {
223 var text
= (per
* 100).toFixed(2) + '%';
225 text
+= " (" + PVE
.Utils
.format_size(bytes
) + ')';
227 pbar
.updateProgress(per
, text
);
230 var abortBtn
= Ext
.create('Ext.Button', {
231 text
: gettext('Abort'),
233 handler: function() {
238 var submitBtn
= Ext
.create('Ext.Button', {
239 text
: gettext('Upload'),
241 handler: function(button
) {
250 button
.setDisabled(true);
251 abortBtn
.setDisabled(false);
253 var field
= form
.findField('content');
254 fd
.append("content", field
.getValue());
255 field
.setDisabled(true);
257 field
= form
.findField('filename');
258 var file
= field
.fileInputEl
.dom
;
259 fd
.append("filename", file
.files
[0]);
260 field
.setDisabled(true);
262 pbar
.setVisible(true);
265 xhr
= new XMLHttpRequest();
267 xhr
.addEventListener("load", function(e
) {
268 if (xhr
.status
== 200) {
271 var msg
= "Error " + xhr
.status
.toString() + ": " + Ext
.htmlEncode(xhr
.statusText
);
272 var result
= Ext
.decode(xhr
.responseText
);
273 result
.message
= msg
;
274 var htmlStatus
= PVE
.Utils
.extractRequestError(result
, true);
275 Ext
.Msg
.alert(gettext('Error'), htmlStatus
, function(btn
) {
282 xhr
.addEventListener("error", function(e
) {
283 var msg
= "Error " + e
.target
.status
.toString() + " occurred while receiving the document.";
284 Ext
.Msg
.alert(gettext('Error'), msg
, function(btn
) {
289 xhr
.upload
.addEventListener("progress", function(evt
) {
290 if (evt
.lengthComputable
) {
291 var percentComplete
= evt
.loaded
/ evt
.total
;
292 updateProgress(percentComplete
, evt
.loaded
);
296 xhr
.open("POST", "/api2/json" + baseurl
, true);
301 form
.on('validitychange', function(f
, valid
) {
302 submitBtn
.setDisabled(!valid
);
306 title
: gettext('Upload'),
308 buttons
: [ abortBtn
, submitBtn
],
322 Ext
.define('PVE.storage.ContentView', {
323 extend
: 'Ext.grid.GridPanel',
325 alias
: ['widget.pveStorageContentView'],
327 initComponent : function() {
330 var nodename
= me
.pveSelNode
.data
.node
;
332 throw "no node name specified";
335 var storage
= me
.pveSelNode
.data
.storage
;
337 throw "no storage ID specified";
340 var baseurl
= "/nodes/" + nodename
+ "/storage/" + storage
+ "/content";
341 var store
= new Ext
.data
.Store({
342 model
: 'pve-storage-content',
343 groupField
: 'content',
346 url
: '/api2/json' + baseurl
354 var sm
= Ext
.create('Ext.selection.RowModel', {});
356 var groupingFeature
= Ext
.create('Ext.grid.feature.Grouping',{
357 groupHeaderTpl
: '{[ PVE.Utils.format_content_types(values.name) ]} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})'
360 var reload = function() {
364 PVE
.Utils
.monStoreErrors(me
, store
);
373 features
: [ groupingFeature
],
377 text
: gettext('Restore'),
380 enableFn: function(rec
) {
381 return rec
&& rec
.data
.content
=== 'backup';
383 handler: function(b
, e
, rec
) {
385 if (rec
.data
.volid
.match(/vzdump-qemu-/)) {
387 } else if (rec
.data
.volid
.match(/vzdump-openvz-/)) {
393 var win
= Ext
.create('PVE.window.Restore', {
395 volid
: rec
.data
.volid
,
396 volidText
: PVE
.Utils
.render_storage_content(rec
.data
.volid
, {}, rec
),
400 win
.on('destroy', reload
);
405 text
: gettext('Remove'),
408 confirmMsg: function(rec
) {
409 return Ext
.String
.format(gettext('Are you sure you want to remove entry {0}'),
410 "'" + rec
.data
.volid
+ "'");
412 enableFn: function(rec
) {
413 return rec
&& rec
.data
.content
!== 'images';
415 handler: function(b
, e
, rec
) {
416 PVE
.Utils
.API2Request({
417 url
: baseurl
+ '/' + rec
.data
.volid
,
420 callback: function() {
423 failure: function (response
, opts
) {
424 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
430 text
: gettext('Templates'),
431 handler: function() {
432 var win
= Ext
.create('PVE.storage.TemplateDownload', {
437 win
.on('destroy', reload
);
441 text
: gettext('Upload'),
442 handler: function() {
443 var win
= Ext
.create('PVE.storage.Upload', {
448 win
.on('destroy', reload
);
454 header
: gettext('Name'),
457 renderer
: PVE
.Utils
.render_storage_content
,
461 header
: gettext('Format'),
466 header
: gettext('Size'),
468 renderer
: PVE
.Utils
.format_size
,
481 Ext
.define('pve-storage-content', {
482 extend
: 'Ext.data.Model',
484 'volid', 'content', 'format', 'size', 'used', 'vmid',
485 'channel', 'id', 'lun',
488 convert: function(value
, record
) {
492 return PVE
.Utils
.render_storage_content(value
, {}, record
);