]>
Commit | Line | Data |
---|---|---|
13d7dfcc FE |
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: { | |
f6710aac | 9 | trackOver: false, |
13d7dfcc | 10 | }, |
8058410f | 11 | initComponent: function() { |
13d7dfcc FE |
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', | |
f6710aac TL |
24 | url: '/api2/json' + baseurl, |
25 | }, | |
13d7dfcc FE |
26 | }); |
27 | ||
28 | var sm = Ext.create('Ext.selection.RowModel', {}); | |
29 | ||
f6710aac TL |
30 | var groupingFeature = Ext.create('Ext.grid.feature.Grouping', { |
31 | groupHeaderTpl: '{[ "Section: " + values.name ]} ({rows.length} Item{[values.rows.length > 1 ? "s" : ""]})', | |
13d7dfcc FE |
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) { | |
8058410f TL |
56 | return (rec.data['package'].toLowerCase().indexOf(value) !== -1) || |
57 | (rec.data.headline.toLowerCase().indexOf(value) !== -1); | |
13d7dfcc | 58 | }); |
f6710aac TL |
59 | }, |
60 | }, | |
61 | }, | |
13d7dfcc | 62 | ], |
8058410f | 63 | features: [groupingFeature], |
13d7dfcc FE |
64 | columns: [ |
65 | { | |
66 | header: gettext('Type'), | |
67 | width: 80, | |
f6710aac | 68 | dataIndex: 'type', |
13d7dfcc FE |
69 | }, |
70 | { | |
71 | header: gettext('Package'), | |
72 | flex: 1, | |
f6710aac | 73 | dataIndex: 'package', |
13d7dfcc FE |
74 | }, |
75 | { | |
76 | header: gettext('Version'), | |
77 | width: 80, | |
f6710aac | 78 | dataIndex: 'version', |
13d7dfcc FE |
79 | }, |
80 | { | |
81 | header: gettext('Description'), | |
82 | flex: 1.5, | |
83 | renderer: Ext.String.htmlEncode, | |
f6710aac TL |
84 | dataIndex: 'headline', |
85 | }, | |
13d7dfcc FE |
86 | ], |
87 | listeners: { | |
f6710aac TL |
88 | afterRender: reload, |
89 | }, | |
13d7dfcc FE |
90 | }); |
91 | ||
92 | me.callParent(); | |
f6710aac | 93 | }, |
13d7dfcc FE |
94 | |
95 | }, function() { | |
13d7dfcc FE |
96 | Ext.define('pve-aplinfo', { |
97 | extend: 'Ext.data.Model', | |
98 | fields: [ | |
99 | 'template', 'type', 'package', 'version', 'headline', 'infopage', | |
f6710aac | 100 | 'description', 'os', 'section', |
13d7dfcc | 101 | ], |
f6710aac | 102 | idProperty: 'template', |
13d7dfcc | 103 | }); |
13d7dfcc FE |
104 | }); |
105 | ||
106 | Ext.define('PVE.storage.TemplateDownload', { | |
107 | extend: 'Ext.window.Window', | |
108 | alias: 'widget.pveTemplateDownload', | |
109 | ||
110 | modal: true, | |
111 | title: gettext('Templates'), | |
112 | layout: 'fit', | |
113 | width: 900, | |
114 | height: 600, | |
8058410f | 115 | initComponent: function() { |
13d7dfcc FE |
116 | var me = this; |
117 | ||
118 | var grid = Ext.create('PVE.grid.TemplateSelector', { | |
119 | border: false, | |
120 | scrollable: true, | |
f6710aac | 121 | nodename: me.nodename, |
13d7dfcc FE |
122 | }); |
123 | ||
124 | var sm = grid.getSelectionModel(); | |
125 | ||
126 | var submitBtn = Ext.create('Proxmox.button.Button', { | |
127 | text: gettext('Download'), | |
128 | disabled: true, | |
129 | selModel: sm, | |
130 | handler: function(button, event, rec) { | |
131 | Proxmox.Utils.API2Request({ | |
132 | url: '/nodes/' + me.nodename + '/aplinfo', | |
133 | params: { | |
134 | storage: me.storage, | |
f6710aac | 135 | template: rec.data.template, |
13d7dfcc FE |
136 | }, |
137 | method: 'POST', | |
8058410f | 138 | failure: function(response, opts) { |
13d7dfcc FE |
139 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); |
140 | }, | |
141 | success: function(response, options) { | |
142 | var upid = response.result.data; | |
143 | ||
144 | Ext.create('Proxmox.window.TaskViewer', { | |
145 | upid: upid, | |
146 | listeners: { | |
f6710aac TL |
147 | destroy: me.reloadGrid, |
148 | }, | |
13d7dfcc FE |
149 | }).show(); |
150 | ||
151 | me.close(); | |
f6710aac | 152 | }, |
13d7dfcc | 153 | }); |
f6710aac | 154 | }, |
13d7dfcc FE |
155 | }); |
156 | ||
157 | Ext.apply(me, { | |
158 | items: grid, | |
8058410f | 159 | buttons: [submitBtn], |
13d7dfcc FE |
160 | }); |
161 | ||
162 | me.callParent(); | |
f6710aac | 163 | }, |
13d7dfcc FE |
164 | }); |
165 | ||
166 | Ext.define('PVE.storage.TemplateView', { | |
167 | extend: 'PVE.storage.ContentView', | |
168 | ||
169 | alias: 'widget.pveStorageTemplateView', | |
170 | ||
13d7dfcc FE |
171 | initComponent: function() { |
172 | var me = this; | |
173 | ||
174 | var nodename = me.nodename = me.pveSelNode.data.node; | |
175 | if (!nodename) { | |
176 | throw "no node name specified"; | |
177 | } | |
178 | ||
179 | var storage = me.storage = me.pveSelNode.data.storage; | |
180 | if (!storage) { | |
181 | throw "no storage ID specified"; | |
182 | } | |
183 | ||
184 | me.content = 'vztmpl'; | |
185 | ||
186 | var sm = me.sm = Ext.create('Ext.selection.RowModel', {}); | |
187 | ||
188 | var reload = function() { | |
189 | me.store.load(); | |
8058410f | 190 | }; |
13d7dfcc | 191 | |
f6710aac | 192 | var templateButton = Ext.create('Proxmox.button.Button', { |
13d7dfcc FE |
193 | itemId: 'tmpl-btn', |
194 | text: gettext('Templates'), | |
195 | handler: function() { | |
196 | var win = Ext.create('PVE.storage.TemplateDownload', { | |
197 | nodename: nodename, | |
198 | storage: storage, | |
f6710aac | 199 | reloadGrid: reload, |
13d7dfcc FE |
200 | }); |
201 | win.show(); | |
f6710aac | 202 | }, |
13d7dfcc FE |
203 | }); |
204 | ||
8058410f | 205 | me.tbar = [templateButton]; |
13d7dfcc FE |
206 | me.useUploadButton = true; |
207 | ||
208 | me.callParent(); | |
209 | }, | |
210 | }); |