]> git.proxmox.com Git - pmg-gui.git/blame - js/RuleConfiguration.js
jslint: add Proxmox global to files
[pmg-gui.git] / js / RuleConfiguration.js
CommitLineData
ff735274 1/*global Proxmox*/
d75b37b8
DC
2Ext.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
13Ext.define('PMG.RulesConfiguration', {
14 extend: 'Ext.container.Container',
15 xtype: 'pmgRuleConfiguration',
f1e32362 16
d75b37b8 17 layout: 'border',
13fe6e87 18 border: false,
d75b37b8
DC
19 defaults: {
20 border: false,
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'
115 },
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',
138 reference: 'addButton',
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 {
174 property: 'name',
175 }
176 ]
177 },
178
179 sortableColumns: false,
180 columns: [
181 {
182 text: 'Active',
183 dataIndex: 'active',
184 hidden : true,
185 },
186 {
187 text: 'Name',
188 dataIndex: 'name',
189 flex: 1,
190 },
191 {
192 text: 'Priority',
193 dataIndex: 'priority',
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'
219 },
220 ]
221 }
9114dc42 222 ]
d75b37b8
DC
223 },
224 {
225 region: 'east',
226 reference: 'infopanel',
227 xtype: 'pmgRuleInfo',
228 split: true,
229 width: 440,
230 }
231 ]
66636ecf 232});