]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/storage/ContentView.js
3a19012d4025cb8bfaeca38673e8072087275059
1 Ext
.define('PVE.storage.ContentView', {
2 extend
: 'Ext.grid.GridPanel',
4 alias
: 'widget.pveStorageContentView',
10 initComponent: function() {
14 me
.nodename
= me
.pveSelNode
.data
.node
;
16 throw "no node name specified";
19 const nodename
= me
.nodename
;
22 me
.storage
= me
.pveSelNode
.data
.storage
;
24 throw "no storage ID specified";
27 const storage
= me
.storage
;
29 var content
= me
.content
;
31 throw "no content type specified";
34 const baseurl
= `/nodes/${nodename}/storage/${storage}/content`;
35 let store
= me
.store
= Ext
.create('Ext.data.Store', {
36 model
: 'pve-storage-content',
39 url
: '/api2/json' + baseurl
,
51 me
.sm
= Ext
.create('Ext.selection.RowModel', {});
55 let reload
= () => store
.load();
57 Proxmox
.Utils
.monStoreErrors(me
, store
);
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
: gettext('Name, Format'),
117 fn: function(field
) {
118 store
.clearFilter(true);
122 value
: field
.getValue(),
124 caseSensitive
: false,
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
);
216 Ext
.define('pve-storage-content', {
217 extend
: 'Ext.data.Model',
219 'volid', 'content', 'format', 'size', 'used', 'vmid',
220 'channel', 'id', 'lun', 'notes', 'verification',
223 convert: function(value
, record
) {
224 // check for volid, because if you click on a grouping header,
225 // it calls convert (but with an empty volid)
226 if (value
|| record
.data
.volid
=== null) {
229 return PVE
.Utils
.render_storage_content(value
, {}, record
);
234 convert: function(value
, record
) {
235 // check for volid, because if you click on a grouping header,
236 // it calls convert (but with an empty volid)
237 if (value
|| record
.data
.volid
=== null) {
240 let t
= record
.data
.content
;
241 if (t
=== "backup") {
242 let v
= record
.data
.volid
;
243 let match
= v
.match(/(\d{4}_\d{2}_\d{2})-(\d{2}_\d{2}_\d{2})/);
245 let date
= match
[1].replace(/_
/g
, '-');
246 let time
= match
[2].replace(/_
/g
, ':');
247 return date
+ " " + time
;
250 if (record
.data
.ctime
) {
251 let ctime
= new Date(record
.data
.ctime
* 1000);
252 return Ext
.Date
.format(ctime
, 'Y-m-d H:i:s');