]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/storage/ContentView.js
1 Ext
.define('PVE.storage.ContentView', {
2 extend
: 'Ext.grid.GridPanel',
4 alias
: 'widget.pveStorageContentView',
6 itemdblclick
: Ext
.emptyFn
,
12 initComponent: function() {
16 me
.nodename
= me
.pveSelNode
.data
.node
;
18 throw "no node name specified";
21 const nodename
= me
.nodename
;
24 me
.storage
= me
.pveSelNode
.data
.storage
;
26 throw "no storage ID specified";
29 const storage
= me
.storage
;
31 var content
= me
.content
;
33 throw "no content type specified";
36 const baseurl
= `/nodes/${nodename}/storage/${storage}/content`;
37 let store
= me
.store
= Ext
.create('Ext.data.Store', {
38 model
: 'pve-storage-content',
41 url
: '/api2/json' + baseurl
,
53 me
.sm
= Ext
.create('Ext.selection.RowModel', {});
57 let reload
= () => store
.load();
59 Proxmox
.Utils
.monStoreErrors(me
, store
);
61 let tbar
= me
.tbar
? [...me
.tbar
] : [];
62 if (me
.useUploadButton
) {
66 text
: gettext('Upload'),
67 disabled
: !me
.enableUploadButton
,
69 Ext
.create('PVE.window.UploadToStorage', {
74 taskDone
: () => reload(),
80 text
: gettext('Download from URL'),
81 disabled
: !me
.enableDownloadUrlButton
,
83 Ext
.create('PVE.window.DownloadUrlToStorage', {
88 taskDone
: () => reload(),
95 if (!me
.useCustomRemoveButton
) {
97 xtype
: 'proxmoxStdRemoveButton',
99 enableFn
: rec
=> !rec
?.data
?.protected,
101 callback
: () => reload(),
102 baseurl
: baseurl
+ '/',
107 gettext('Search') + ':',
112 enableKeyEvents
: true,
113 emptyText
: content
=== 'backup' ? gettext('Name, Format, Notes') : gettext('Name, Format'),
117 fn: function(field
) {
118 let needle
= field
.getValue().toLocaleLowerCase();
119 store
.clearFilter(true);
122 filterFn
: ({ data
}) =>
123 data
.text
?.toLocaleLowerCase().includes(needle
) ||
124 data
.notes
?.toLocaleLowerCase().includes(needle
),
129 change: function(field
, newValue
, oldValue
) {
130 if (newValue
!== this.originalValue
) {
131 this.triggers
.clear
.setVisible(true);
137 cls
: 'pmx-clear-trigger',
140 handler: function() {
141 this.triggers
.clear
.setVisible(false);
142 this.setValue(this.originalValue
);
150 let availableColumns
= {
152 header
: gettext('Name'),
155 renderer
: PVE
.Utils
.render_storage_content
,
159 header
: gettext('Notes'),
161 renderer
: Ext
.htmlEncode
,
165 header
: `<i class="fa fa-shield"></i>`,
166 tooltip
: gettext('Protected'),
168 renderer
: v
=> v
? `<i data-qtip="${gettext('Protected')}" class="fa fa-shield"></i>` : '',
169 sorter
: (a
, b
) => (b
.data
.protected || 0) - (a
.data
.protected || 0),
170 dataIndex
: 'protected',
173 header
: gettext('Date'),
178 header
: gettext('Format'),
183 header
: gettext('Size'),
185 renderer
: Proxmox
.Utils
.format_size
,
190 let showColumns
= me
.showColumns
|| ['name', 'date', 'format', 'size'];
192 Object
.keys(availableColumns
).forEach(function(key
) {
193 if (!showColumns
.includes(key
)) {
194 delete availableColumns
[key
];
198 if (me
.extraColumns
&& typeof me
.extraColumns
=== 'object') {
199 Object
.assign(availableColumns
, me
.extraColumns
);
201 const columns
= Object
.values(availableColumns
);
210 itemdblclick
: (view
, record
) => me
.itemdblclick(view
, record
),
217 Ext
.define('pve-storage-content', {
218 extend
: 'Ext.data.Model',
220 'volid', 'content', 'format', 'size', 'used', 'vmid',
221 'channel', 'id', 'lun', 'notes', 'verification',
224 convert: function(value
, record
) {
225 // check for volid, because if you click on a grouping header,
226 // it calls convert (but with an empty volid)
227 if (value
|| record
.data
.volid
=== null) {
230 return PVE
.Utils
.render_storage_content(value
, {}, record
);
235 convert: function(value
, record
) {
236 // check for volid, because if you click on a grouping header,
237 // it calls convert (but with an empty volid)
238 if (value
|| record
.data
.volid
=== null) {
241 let t
= record
.data
.content
;
242 if (t
=== "backup") {
243 let v
= record
.data
.volid
;
244 let match
= v
.match(/(\d{4}_\d{2}_\d{2})-(\d{2}_\d{2}_\d{2})/);
246 let date
= match
[1].replace(/_
/g
, '-');
247 let time
= match
[2].replace(/_
/g
, ':');
248 return date
+ " " + time
;
251 if (record
.data
.ctime
) {
252 let ctime
= new Date(record
.data
.ctime
* 1000);
253 return Ext
.Date
.format(ctime
, 'Y-m-d H:i:s');