]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/window/Settings.js
Enable "Discard" option for IDE and SATA drives
[pve-manager.git] / www / manager6 / window / Settings.js
CommitLineData
ce11a8af
DC
1Ext.define('PVE.window.Settings', {
2 extend: 'Ext.window.Window',
3
d9ace13c 4 width: '800px',
ce11a8af
DC
5 title: gettext('My Settings'),
6 iconCls: 'fa fa-gear',
7 modal: true,
8 bodyPadding: 10,
9 resizable: false,
10
11 buttons: [{
12 text: gettext('Close'),
13 handler: function() {
14 this.up('window').close();
15 }
16 }],
17
18 layout: {
d9ace13c
DC
19 type: 'hbox',
20 align: 'top'
ce11a8af
DC
21 },
22
23 controller: {
24 xclass: 'Ext.app.ViewController',
25
d9ace13c
DC
26 init: function(view) {
27 var me = this;
28 var sp = Ext.state.Manager.getProvider();
29
30 var username = sp.get('login-username') || Proxmox.Utils.noneText;
31 me.lookupReference('savedUserName').setValue(username);
32
33 var settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
d9ace13c
DC
34 settings.forEach(function(setting) {
35 var val = localStorage.getItem('pve-xterm-' + setting);
36 if (val !== undefined && val !== null) {
37 var field = me.lookup(setting);
38 field.setValue(val);
2b0bdc46 39 field.resetOriginalValue();
d9ace13c
DC
40 }
41 });
2b0bdc46
DC
42 },
43
44 set_button_status: function() {
45 var me = this;
46
47 var form = me.lookup('xtermform');
48 var valid = form.isValid();
49 var dirty = form.isDirty();
d9ace13c 50
2b0bdc46
DC
51 var hasvalues = false;
52 var values = form.getValues();
53 Ext.Object.eachValue(values, function(value) {
54 if (value) {
55 hasvalues = true;
56 return false;
57 }
58 });
59
60 me.lookup('xtermsave').setDisabled(!dirty || !valid);
61 me.lookup('xtermreset').setDisabled(!hasvalues);
d9ace13c
DC
62 },
63
ce11a8af 64 control: {
2b0bdc46
DC
65 '#xtermjs form': {
66 dirtychange: 'set_button_status',
67 validitychange: 'set_button_status'
d9ace13c
DC
68 },
69 '#xtermjs button': {
70 click: function(button) {
71 var me = this;
72 var settings = ['fontSize', 'fontFamily', 'letterSpacing', 'lineHeight'];
73 settings.forEach(function(setting) {
74 var field = me.lookup(setting);
75 if (button.reference === 'xtermsave') {
76 var value = field.getValue();
77 if (value) {
78 localStorage.setItem('pve-xterm-' + setting, value);
79 } else {
80 localStorage.removeItem('pve-xterm-' + setting);
81 }
82 } else if (button.reference === 'xtermreset') {
83 field.setValue(undefined);
84 localStorage.removeItem('pve-xterm-' + setting);
85 }
2b0bdc46 86 field.resetOriginalValue();
d9ace13c 87 });
2b0bdc46 88 me.set_button_status();
ce11a8af
DC
89 }
90 },
91 'button[name=reset]': {
92 click: function () {
2488c226 93 var blacklist = ['GuiCap', 'login-username', 'dash-storages'];
ce11a8af
DC
94 var sp = Ext.state.Manager.getProvider();
95 var state;
96 for (state in sp.state) {
97 if (sp.state.hasOwnProperty(state)) {
98 if (blacklist.indexOf(state) !== -1) {
99 continue;
100 }
101
102 sp.clear(state);
103 }
104 }
105
106 window.location.reload();
107 }
108 },
109 'button[name=clear-username]': {
110 click: function () {
111 var me = this;
112 var usernamefield = me.lookupReference('savedUserName');
113 var sp = Ext.state.Manager.getProvider();
114
e7ade592 115 usernamefield.setValue(Proxmox.Utils.noneText);
ce11a8af
DC
116 sp.clear('login-username');
117 }
2488c226
DC
118 },
119 'grid[reference=dashboard-storages]': {
120 selectionchange: function(grid, selected) {
121 var me = this;
122 var sp = Ext.state.Manager.getProvider();
123
124 // saves the selected storageids as
125 // "id1,id2,id3,..."
126 // or clears the variable
127 if (selected.length > 0) {
128 sp.set('dash-storages',
129 Ext.Array.pluck(selected, 'id').join(','));
130 } else {
131 sp.clear('dash-storages');
132 }
133 },
134 afterrender: function(grid) {
135 var me = grid;
136 var sp = Ext.state.Manager.getProvider();
137 var store = me.getStore();
138 var items = [];
139 me.suspendEvent('selectionchange');
140 var storages = sp.get('dash-storages') || '';
141 storages.split(',').forEach(function(storage){
142 // we have to get the records
143 // to be able to select them
144 if (storage !== '') {
145 var item = store.getById(storage);
146 if (item) {
147 items.push(item);
148 }
149 }
150 });
151 me.getSelectionModel().select(items);
152 me.resumeEvent('selectionchange');
153 }
ce11a8af
DC
154 }
155 }
156 },
157
158 items: [{
159 xtype: 'fieldset',
d9ace13c
DC
160 width: '50%',
161 title: gettext('Webinterface Settings'),
162 margin: '5',
ce11a8af
DC
163 layout: {
164 type: 'vbox',
61516423 165 align: 'left'
ce11a8af
DC
166 },
167 defaults: {
168 width: '100%',
169 margin: '0 0 10 0'
170 },
171 items: [
2488c226
DC
172 {
173 xtype: 'displayfield',
174 fieldLabel: gettext('Dashboard Storages'),
175 labelAlign: 'left',
176 labelWidth: '50%'
177 },
178 {
179 xtype: 'grid',
180 maxHeight: 150,
181 reference: 'dashboard-storages',
182 selModel: {
183 selType: 'checkboxmodel'
184 },
185 columns: [{
186 header: gettext('Name'),
187 dataIndex: 'storage',
188 flex: 1
189 },{
190 header: gettext('Node'),
191 dataIndex: 'node',
192 flex: 1
193 }],
194 store: {
195 type: 'diff',
196 field: ['type', 'storage', 'id', 'node'],
197 rstore: PVE.data.ResourceStore,
198 filters: [{
199 property: 'type',
200 value: 'storage'
201 }],
202 sorters: [ 'node','storage']
203 }
204 },
205 {
206 xtype: 'box',
207 autoEl: { tag: 'hr'}
208 },
ce11a8af
DC
209 {
210 xtype: 'displayfield',
211 fieldLabel: gettext('Saved User name'),
212 labelAlign: 'left',
213 labelWidth: '50%',
ce11a8af
DC
214 stateId: 'login-username',
215 reference: 'savedUserName',
216 value: ''
217 },
218 {
219 xtype: 'button',
672a6270 220 cls: 'x-btn-default-toolbar-small proxmox-inline-button',
ce11a8af
DC
221 text: gettext('Clear User name'),
222 width: 'auto',
223 name: 'clear-username'
224 },
225 {
226 xtype: 'box',
227 autoEl: { tag: 'hr'}
228 },
229 {
230 xtype: 'displayfield',
231 fieldLabel: gettext('Layout'),
232 labelAlign: 'left',
233 labelWidth: '50%'
234 },
235 {
236 xtype: 'button',
672a6270 237 cls: 'x-btn-default-toolbar-small proxmox-inline-button',
ce11a8af
DC
238 text: gettext('Reset Layout'),
239 width: 'auto',
240 name: 'reset'
241 }
242 ]
d9ace13c
DC
243 },{
244 xtype: 'fieldset',
245 itemId: 'xtermjs',
246 width: '50%',
247 margin: '5',
2b0bdc46
DC
248 title: gettext('xterm.js Settings'),
249 items: [{
250 xtype: 'form',
251 reference: 'xtermform',
252 border: false,
253 layout: {
254 type: 'vbox',
255 algin: 'left'
d9ace13c 256 },
2b0bdc46
DC
257 defaults: {
258 width: '100%',
259 margin: '0 0 10 0'
d9ace13c 260 },
2b0bdc46
DC
261 items: [
262 {
263 xtype: 'textfield',
264 name: 'fontFamily',
265 reference: 'fontFamily',
266 emptyText: Proxmox.Utils.defaultText,
267 fieldLabel: gettext('Font-Family')
268 },
269 {
270 xtype: 'proxmoxintegerfield',
271 emptyText: Proxmox.Utils.defaultText,
272 name: 'fontSize',
273 reference: 'fontSize',
274 minValue: 1,
275 fieldLabel: gettext('Font-Size')
276 },
277 {
278 xtype: 'numberfield',
279 name: 'letterSpacing',
280 reference: 'letterSpacing',
281 emptyText: Proxmox.Utils.defaultText,
282 fieldLabel: gettext('Letter Spacing')
d9ace13c 283 },
2b0bdc46
DC
284 {
285 xtype: 'numberfield',
286 name: 'lineHeight',
287 minValue: 0.1,
288 reference: 'lineHeight',
289 emptyText: Proxmox.Utils.defaultText,
290 fieldLabel: gettext('Line Height')
291 },
292 {
293 xtype: 'container',
294 layout: {
295 type: 'hbox',
296 pack: 'end'
d9ace13c 297 },
2b0bdc46
DC
298 items: [
299 {
300 xtype: 'button',
301 reference: 'xtermreset',
302 disabled: true,
303 text: gettext('Reset')
304 },
305 {
306 xtype: 'button',
307 reference: 'xtermsave',
308 disabled: true,
309 text: gettext('Save')
310 }
311 ]
312 }
313 ]
314 }]
ce11a8af
DC
315 }],
316
317 onShow: function() {
318 var me = this;
319 me.callParent();
320
321 }
322});