]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/storage/TemplateView.js
f7b5efe854aecad5a0d2097269f96f5680156cb0
[pve-manager.git] / www / manager6 / storage / TemplateView.js
1 Ext.define('PVE.grid.TemplateSelector', {
2 extend: 'Ext.grid.GridPanel',
3
4 alias: 'widget.pveTemplateSelector',
5
6 stateful: true,
7 stateId: 'grid-template-selector',
8 viewConfig: {
9 trackOver: false
10 },
11 initComponent : function() {
12 var me = this;
13
14 if (!me.nodename) {
15 throw "no node name specified";
16 }
17
18 var baseurl = "/nodes/" + me.nodename + "/aplinfo";
19 var store = new Ext.data.Store({
20 model: 'pve-aplinfo',
21 groupField: 'section',
22 proxy: {
23 type: 'proxmox',
24 url: '/api2/json' + baseurl
25 }
26 });
27
28 var sm = Ext.create('Ext.selection.RowModel', {});
29
30 var groupingFeature = Ext.create('Ext.grid.feature.Grouping',{
31 groupHeaderTpl: '{[ "Section: " + values.name ]} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})'
32 });
33
34 var reload = function() {
35 store.load();
36 };
37
38 Proxmox.Utils.monStoreErrors(me, store);
39
40 Ext.apply(me, {
41 store: store,
42 selModel: sm,
43 tbar: [
44 '->',
45 gettext('Search'),
46 {
47 xtype: 'textfield',
48 width: 200,
49 enableKeyEvents: true,
50 listeners: {
51 buffer: 500,
52 keyup: function(field) {
53 var value = field.getValue().toLowerCase();
54 store.clearFilter(true);
55 store.filterBy(function(rec) {
56 return (rec.data['package'].toLowerCase().indexOf(value) !== -1)
57 || (rec.data.headline.toLowerCase().indexOf(value) !== -1);
58 });
59 }
60 }
61 }
62 ],
63 features: [ groupingFeature ],
64 columns: [
65 {
66 header: gettext('Type'),
67 width: 80,
68 dataIndex: 'type'
69 },
70 {
71 header: gettext('Package'),
72 flex: 1,
73 dataIndex: 'package'
74 },
75 {
76 header: gettext('Version'),
77 width: 80,
78 dataIndex: 'version'
79 },
80 {
81 header: gettext('Description'),
82 flex: 1.5,
83 renderer: Ext.String.htmlEncode,
84 dataIndex: 'headline'
85 }
86 ],
87 listeners: {
88 afterRender: reload
89 }
90 });
91
92 me.callParent();
93 }
94
95 }, function() {
96
97 Ext.define('pve-aplinfo', {
98 extend: 'Ext.data.Model',
99 fields: [
100 'template', 'type', 'package', 'version', 'headline', 'infopage',
101 'description', 'os', 'section'
102 ],
103 idProperty: 'template'
104 });
105
106 });
107
108 Ext.define('PVE.storage.TemplateDownload', {
109 extend: 'Ext.window.Window',
110 alias: 'widget.pveTemplateDownload',
111
112 modal: true,
113 title: gettext('Templates'),
114 layout: 'fit',
115 width: 900,
116 height: 600,
117 initComponent : function() {
118 var me = this;
119
120 var grid = Ext.create('PVE.grid.TemplateSelector', {
121 border: false,
122 scrollable: true,
123 nodename: me.nodename
124 });
125
126 var sm = grid.getSelectionModel();
127
128 var submitBtn = Ext.create('Proxmox.button.Button', {
129 text: gettext('Download'),
130 disabled: true,
131 selModel: sm,
132 handler: function(button, event, rec) {
133 Proxmox.Utils.API2Request({
134 url: '/nodes/' + me.nodename + '/aplinfo',
135 params: {
136 storage: me.storage,
137 template: rec.data.template
138 },
139 method: 'POST',
140 failure: function (response, opts) {
141 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
142 },
143 success: function(response, options) {
144 var upid = response.result.data;
145
146 Ext.create('Proxmox.window.TaskViewer', {
147 upid: upid,
148 listeners: {
149 destroy: me.reloadGrid
150 }
151 }).show();
152
153 me.close();
154 }
155 });
156 }
157 });
158
159 Ext.apply(me, {
160 items: grid,
161 buttons: [ submitBtn ]
162 });
163
164 me.callParent();
165 }
166 });
167
168 Ext.define('PVE.storage.TemplateView', {
169 extend: 'PVE.storage.ContentView',
170
171 alias: 'widget.pveStorageTemplateView',
172
173 initComponent: function() {
174 var me = this;
175
176 var nodename = me.nodename = me.pveSelNode.data.node;
177 if (!nodename) {
178 throw "no node name specified";
179 }
180
181 var storage = me.storage = me.pveSelNode.data.storage;
182 if (!storage) {
183 throw "no storage ID specified";
184 }
185
186 me.content = 'vztmpl';
187
188 var sm = me.sm = Ext.create('Ext.selection.RowModel', {});
189
190 var reload = function() {
191 me.store.load();
192 }
193
194 var templateButton = Ext.create('Proxmox.button.Button',{
195 itemId: 'tmpl-btn',
196 text: gettext('Templates'),
197 handler: function() {
198 var win = Ext.create('PVE.storage.TemplateDownload', {
199 nodename: nodename,
200 storage: storage,
201 reloadGrid: reload
202 });
203 win.show();
204 }
205 });
206
207 me.tbar = [ templateButton ];
208 me.useUploadButton = true;
209
210 me.callParent();
211 },
212 });