]>
Commit | Line | Data |
---|---|---|
ff735274 | 1 | /*global Proxmox*/ |
d75b37b8 DC |
2 | Ext.define('pmg-rule-list', { |
3 | extend: 'Ext.data.Model', | |
4 | fields: [ | |
5 | 'id', 'name', | |
6 | { name: 'active', type: 'boolean' }, | |
7 | { name: 'direction', type: 'integer' }, | |
8 | { name: 'priority', type: 'integer' } | |
9 | ], | |
10 | idProperty: 'id' | |
11 | }); | |
f1e32362 | 12 | |
d75b37b8 DC |
13 | Ext.define('PMG.RulesConfiguration', { |
14 | extend: 'Ext.container.Container', | |
15 | xtype: 'pmgRuleConfiguration', | |
f1e32362 | 16 | |
d75b37b8 | 17 | layout: 'border', |
13fe6e87 | 18 | border: false, |
d75b37b8 | 19 | defaults: { |
771bd0b9 | 20 | border: false |
d75b37b8 DC |
21 | }, |
22 | ||
23 | controller: { | |
24 | xclass: 'Ext.app.ViewController', | |
25 | ||
26 | selectedRuleChange: function(grid, selected, eOpts) { | |
27 | var me = this; | |
28 | var infoPanel = me.lookupReference('infopanel'); | |
29 | var baseurl = undefined; | |
30 | ||
31 | if (selected.length > 0) { | |
32 | baseurl = '/config/ruledb/rules/' + selected[0].data.id; | |
33 | } | |
34 | ||
35 | infoPanel.getController().setBaseUrl(baseurl); | |
36 | }, | |
66636ecf | 37 | |
d75b37b8 DC |
38 | editIconClick: function(gridView, rowindex, colindex, column, e, record) { |
39 | var me = this; | |
40 | me.showEditWindow(gridView, record); | |
41 | }, | |
42 | ||
43 | showEditWindow: function(gridView, record) { | |
44 | var me = this; | |
45 | var win = Ext.create('PMG.RuleEditor', { | |
46 | url: '/api2/extjs/config/ruledb/rules/' + record.data.id + '/config', | |
47 | listeners: { | |
48 | destroy: function() { | |
49 | gridView.getStore().load(); | |
66636ecf | 50 | } |
13fe6e87 | 51 | } |
d75b37b8 DC |
52 | }); |
53 | win.load(); | |
54 | win.show(); | |
55 | }, | |
56 | ||
57 | toggleIconClick: function(gridView, rowindex, colindex, column, e, record) { | |
58 | var me = this; | |
59 | Proxmox.Utils.API2Request({ | |
60 | url: '/config/ruledb/rules/' + record.data.id + '/config', | |
61 | params: { | |
62 | active: record.data.active ? 0 : 1 | |
63 | }, | |
64 | method: 'PUT', | |
65 | callback: function() { | |
66 | gridView.getStore().load(); | |
67 | }, | |
68 | failure: function(response, opts) { | |
69 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
70 | } | |
71 | }); | |
72 | }, | |
73 | ||
74 | reload: function(){ | |
75 | var me = this; | |
76 | me.lookupReference('rulegrid').getStore().load(); | |
77 | }, | |
66636ecf | 78 | |
d75b37b8 DC |
79 | addRule: function() { |
80 | var me = this; | |
81 | var win = Ext.create('PMG.RuleEditor', { | |
82 | url: '/api2/extjs/config/ruledb/rules/', | |
83 | method: 'POST', | |
84 | create: true, | |
85 | listeners: { | |
86 | destroy: function() { | |
87 | me.lookupReference('rulegrid').getStore().load(); | |
88 | } | |
89 | } | |
90 | }); | |
91 | win.load(); | |
92 | win.show(); | |
93 | }, | |
ad834b6f | 94 | |
9114dc42 DM |
95 | init: function(view) { |
96 | var grid = this.lookupReference('rulegrid'); | |
2f8fe1a3 | 97 | Proxmox.Utils.monStoreErrors(grid, grid.getStore(), true); |
9114dc42 DM |
98 | }, |
99 | ||
d75b37b8 DC |
100 | control: { |
101 | 'grid[reference=rulegrid]': { | |
102 | itemdblclick: 'showEditWindow', | |
103 | selectionchange: 'selectedRuleChange' | |
104 | }, | |
105 | 'button[reference=addButton]': { | |
106 | click: 'addRule' | |
13fe6e87 | 107 | } |
d75b37b8 DC |
108 | } |
109 | }, | |
110 | ||
111 | viewModel: { | |
112 | data: { | |
113 | selectedRule: undefined, | |
114 | baseUrl: '/config/ruledb/rules' | |
771bd0b9 | 115 | } |
d75b37b8 | 116 | }, |
66636ecf | 117 | |
d75b37b8 DC |
118 | items: [ |
119 | { | |
120 | xtype: 'grid', | |
121 | layout: 'fit', | |
122 | title: 'Rules', | |
123 | reference: 'rulegrid', | |
124 | region: 'center', | |
125 | ||
126 | bind: { | |
127 | selection: '{selectedRule}' | |
128 | }, | |
129 | ||
130 | dockedItems:{ | |
131 | xtype: 'toolbar', | |
132 | reference: 'mytb', | |
133 | items: [ | |
134 | { | |
135 | xtype: 'button', | |
136 | text: gettext('Add'), | |
137 | iconCls: 'fa fa-plus-circle', | |
771bd0b9 | 138 | reference: 'addButton' |
d75b37b8 DC |
139 | }, |
140 | { | |
141 | xtype: 'proxmoxStdRemoveButton', | |
142 | text: gettext('Remove'), | |
143 | iconCls: 'fa fa-minus-circle', | |
144 | reference: 'removeButton', | |
145 | callback: 'reload', | |
146 | getRecordName: function(rec) { return rec.data.name }, | |
147 | bind: { | |
148 | baseurl: '{baseUrl}' | |
149 | } | |
150 | } | |
151 | ] | |
152 | }, | |
66636ecf | 153 | |
d75b37b8 DC |
154 | viewConfig: { |
155 | getRowClass: function(record, rowIndex) { | |
156 | return record.get('active') ? 'enabled' : 'disabled'; | |
157 | } | |
158 | }, | |
159 | ||
160 | store: { | |
161 | autoLoad: true, | |
162 | model: 'pmg-rule-list', | |
163 | reference: 'rulesStore', | |
164 | proxy: { | |
165 | type: 'proxmox', | |
166 | url: '/api2/json/config/ruledb/rules' | |
167 | }, | |
168 | sorters: [ | |
169 | { | |
170 | property: 'priority', | |
171 | direction: 'DESC' | |
172 | }, | |
173 | { | |
771bd0b9 | 174 | property: 'name' |
d75b37b8 DC |
175 | } |
176 | ] | |
177 | }, | |
178 | ||
179 | sortableColumns: false, | |
180 | columns: [ | |
181 | { | |
182 | text: 'Active', | |
183 | dataIndex: 'active', | |
771bd0b9 | 184 | hidden : true |
d75b37b8 DC |
185 | }, |
186 | { | |
187 | text: 'Name', | |
188 | dataIndex: 'name', | |
771bd0b9 | 189 | flex: 1 |
d75b37b8 DC |
190 | }, |
191 | { | |
192 | text: 'Priority', | |
771bd0b9 | 193 | dataIndex: 'priority' |
d75b37b8 DC |
194 | }, |
195 | { | |
196 | text: 'Direction', | |
197 | dataIndex: 'direction', | |
198 | renderer: PMG.Utils.format_rule_direction | |
199 | }, | |
200 | { | |
1f639768 | 201 | text: '', |
d75b37b8 | 202 | xtype: 'actioncolumn', |
1f639768 DC |
203 | align: 'center', |
204 | width: 70, | |
d75b37b8 DC |
205 | items: [ |
206 | { | |
2b97521b | 207 | iconCls: 'fa fa-fw fa-pencil', |
d75b37b8 DC |
208 | tooltip: 'Edit', |
209 | handler: 'editIconClick' | |
210 | }, | |
211 | { | |
212 | getClass: function(val, meta, rec) { | |
2b97521b | 213 | return 'fa fa-fw fa-' + (rec.get('active') ? 'toggle-on' : 'toggle-off'); |
d75b37b8 DC |
214 | }, |
215 | getTip: function(val, meta, rec) { | |
216 | return (rec.get('active') ? 'Deactivate' : 'Activate'); | |
217 | }, | |
218 | handler: 'toggleIconClick' | |
771bd0b9 | 219 | } |
d75b37b8 DC |
220 | ] |
221 | } | |
9114dc42 | 222 | ] |
d75b37b8 DC |
223 | }, |
224 | { | |
225 | region: 'east', | |
226 | reference: 'infopanel', | |
227 | xtype: 'pmgRuleInfo', | |
228 | split: true, | |
771bd0b9 | 229 | width: 440 |
d75b37b8 DC |
230 | } |
231 | ] | |
66636ecf | 232 | }); |