]>
Commit | Line | Data |
---|---|---|
8f17b496 | 1 | /*jslint confusion: true*/ |
755b9083 TL |
2 | Ext.define('PVE.dc.OptionView', { |
3 | extend: 'Proxmox.grid.ObjectGrid', | |
4 | alias: ['widget.pveDcOptionView'], | |
bb2948de | 5 | |
755b9083 | 6 | onlineHelp: 'datacenter_configuration_file', |
bb2948de | 7 | |
755b9083 | 8 | monStoreErrors: true, |
bb2948de | 9 | |
8f17b496 TL |
10 | add_inputpanel_row: function(name, text, opts) { |
11 | var me = this; | |
12 | ||
13 | opts = opts || {}; | |
14 | me.rows = me.rows || {}; | |
15 | ||
16 | var canEdit = (opts.caps === undefined || opts.caps); | |
17 | me.rows[name] = { | |
18 | required: true, | |
19 | defaultValue: opts.defaultValue, | |
20 | header: text, | |
21 | renderer: opts.renderer, | |
22 | editor: canEdit ? { | |
23 | xtype: 'proxmoxWindowEdit', | |
61c2b434 | 24 | width: opts.width || 350, |
8f17b496 TL |
25 | subject: text, |
26 | fieldDefaults: { | |
27 | labelWidth: opts.labelWidth || 100 | |
28 | }, | |
29 | setValues: function(values) { | |
bb469a11 | 30 | // FIXME: run through parsePropertyString if not an object? |
8f17b496 TL |
31 | var edit_value = values[name]; |
32 | Ext.Array.each(this.query('inputpanel'), function(panel) { | |
33 | panel.setValues(edit_value); | |
34 | }); | |
35 | }, | |
36 | url: opts.url, | |
37 | items: [{ | |
38 | xtype: 'inputpanel', | |
39 | onGetValues: function(values) { | |
40 | if (values === undefined || Object.keys(values).length === 0) { | |
41 | return { 'delete': name }; | |
42 | } | |
43 | var ret_val = {}; | |
44 | ret_val[name] = PVE.Parser.printPropertyString(values); | |
45 | return ret_val; | |
46 | }, | |
47 | items: opts.items | |
48 | }] | |
49 | } : undefined | |
50 | }; | |
51 | }, | |
52 | ||
bb2948de DM |
53 | initComponent : function() { |
54 | var me = this; | |
55 | ||
8f17b496 TL |
56 | var caps = Ext.state.Manager.get('GuiCap'); |
57 | ||
755b9083 TL |
58 | me.add_combobox_row('keyboard', gettext('Keyboard Layout'), { |
59 | renderer: PVE.Utils.render_kvm_language, | |
60 | comboItems: PVE.Utils.kvm_keymap_array(), | |
61 | defaultValue: '__default__', | |
62 | deleteEmpty: true | |
bb2948de | 63 | }); |
755b9083 TL |
64 | me.add_text_row('http_proxy', gettext('HTTP proxy'), { |
65 | defaultValue: Proxmox.Utils.noneText, | |
66 | vtype: 'HttpProxy', | |
67 | deleteEmpty: true | |
bb2948de | 68 | }); |
755b9083 TL |
69 | me.add_combobox_row('console', gettext('Console Viewer'), { |
70 | renderer: PVE.Utils.render_console_viewer, | |
71 | comboItems: PVE.Utils.console_viewer_array(), | |
72 | defaultValue: '__default__', | |
73 | deleteEmpty: true | |
bb2948de | 74 | }); |
755b9083 TL |
75 | me.add_text_row('email_from', gettext('Email from address'), { |
76 | deleteEmpty: true, | |
21026cce | 77 | vtype: 'proxmoxMail', |
755b9083 | 78 | defaultValue: 'root@$hostname' |
bb2948de | 79 | }); |
755b9083 | 80 | me.add_text_row('mac_prefix', gettext('MAC address prefix'), { |
3f2cccbc | 81 | deleteEmpty: true, |
755b9083 TL |
82 | vtype: 'MacPrefix', |
83 | defaultValue: Proxmox.Utils.noneText | |
4050aade | 84 | }); |
bb469a11 TL |
85 | me.add_inputpanel_row('migration', gettext('Migration Settings'), { |
86 | renderer: PVE.Utils.render_dc_ha_opts, | |
87 | caps: caps.vms['Sys.Modify'], | |
88 | labelWidth: 120, | |
89 | url: "/api2/extjs/cluster/options", | |
90 | defaultKey: 'type', | |
91 | items: [{ | |
92 | xtype: 'displayfield', | |
93 | name: 'type', | |
94 | fieldLabel: gettext('Type'), | |
95 | value: 'secure', | |
96 | submitValue: true, | |
bb469a11 | 97 | }, { |
6619af8d | 98 | xtype: 'proxmoxNetworkSelector', |
bb469a11 TL |
99 | name: 'network', |
100 | fieldLabel: gettext('Network'), | |
8144a0dd | 101 | value: null, |
bb469a11 | 102 | emptyText: Proxmox.Utils.defaultText, |
6619af8d TL |
103 | autoSelect: false, |
104 | skipEmptyText: true | |
bb469a11 TL |
105 | }] |
106 | }); | |
8f17b496 TL |
107 | me.add_inputpanel_row('ha', gettext('HA Settings'), { |
108 | renderer: PVE.Utils.render_dc_ha_opts, | |
109 | caps: caps.vms['Sys.Modify'], | |
110 | labelWidth: 120, | |
111 | url: "/api2/extjs/cluster/options", | |
112 | items: [{ | |
113 | xtype: 'proxmoxKVComboBox', | |
114 | name: 'shutdown_policy', | |
115 | fieldLabel: gettext('Shutdown Policy'), | |
116 | deleteEmpty: false, | |
117 | value: '__default__', | |
118 | comboItems: [ | |
bb469a11 | 119 | ['__default__', Proxmox.Utils.defaultText + ' (conditional)' ], |
8f17b496 TL |
120 | ['freeze', 'freeze'], |
121 | ['failover', 'failover'], | |
e86024b7 | 122 | ['migrate', 'migrate'], |
8f17b496 TL |
123 | ['conditional', 'conditional'] |
124 | ], | |
125 | defaultValue: '__default__' | |
126 | }] | |
127 | }); | |
61c2b434 TL |
128 | me.add_inputpanel_row('u2f', gettext('U2F Settings'), { |
129 | renderer: PVE.Utils.render_dc_ha_opts, | |
130 | caps: caps.vms['Sys.Modify'], | |
131 | width: 450, | |
132 | url: "/api2/extjs/cluster/options", | |
133 | items: [{ | |
134 | xtype: 'textfield', | |
135 | name: 'appid', | |
136 | fieldLabel: gettext('U2F AppID URL'), | |
137 | emptyText: gettext('Defaults to origin'), | |
138 | value: '', | |
139 | skipEmptyText: true, | |
140 | deleteEmpty: true, | |
141 | submitEmptyText: false, | |
142 | skipEmptyText: true, | |
143 | }, { | |
144 | xtype: 'textfield', | |
145 | name: 'origin', | |
146 | fieldLabel: gettext('U2F Origin'), | |
147 | emptyText: gettext('Defaults to requesting host URI'), | |
148 | value: '', | |
149 | deleteEmpty: true, | |
150 | skipEmptyText: true, | |
151 | submitEmptyText: false, | |
152 | }, | |
153 | { | |
154 | xtype: 'displayfield', | |
155 | userCls: 'pmx-hint', | |
156 | value: gettext('NOTE: Changing an AppID breaks existing U2F registrations!'), | |
157 | }] | |
158 | }); | |
8f17b496 | 159 | |
8144a0dd | 160 | // TODO: bwlimits, u2f? |
4050aade | 161 | |
755b9083 | 162 | me.selModel = Ext.create('Ext.selection.RowModel', {}); |
bb2948de | 163 | |
bc5d0cf8 | 164 | Ext.apply(me, { |
755b9083 TL |
165 | tbar: [{ |
166 | text: gettext('Edit'), | |
167 | xtype: 'proxmoxButton', | |
168 | disabled: true, | |
169 | handler: function() { me.run_editor(); }, | |
170 | selModel: me.selModel | |
171 | }], | |
bb2948de | 172 | url: "/api2/json/cluster/options", |
755b9083 TL |
173 | editorConfig: { |
174 | url: "/api2/extjs/cluster/options" | |
175 | }, | |
176 | interval: 5000, | |
177 | cwidth1: 200, | |
bb2948de | 178 | listeners: { |
755b9083 | 179 | itemdblclick: me.run_editor |
bb2948de DM |
180 | } |
181 | }); | |
182 | ||
183 | me.callParent(); | |
755b9083 | 184 | |
5dc48aa8 DC |
185 | // set the new value for the default console |
186 | me.mon(me.rstore, 'load', function(store, records, success) { | |
187 | if (!success) { | |
188 | return; | |
189 | } | |
190 | ||
191 | var rec = store.getById('console'); | |
192 | PVE.VersionInfo.console = rec.data.value; | |
193 | if (rec.data.value === '__default__') { | |
194 | delete PVE.VersionInfo.console; | |
195 | } | |
196 | }); | |
197 | ||
755b9083 TL |
198 | me.on('activate', me.rstore.startUpdate); |
199 | me.on('destroy', me.rstore.stopUpdate); | |
200 | me.on('deactivate', me.rstore.stopUpdate); | |
bb2948de DM |
201 | } |
202 | }); |