]> git.proxmox.com Git - pmg-gui.git/blame - js/RuleInfo.js
change ruleconfiguration to mvvm model
[pmg-gui.git] / js / RuleInfo.js
CommitLineData
ad834b6f
DM
1Ext.define('PMG.RuleInfo', {
2 extend: 'Ext.grid.GridPanel',
3 alias: 'widget.pmgRuleInfo',
4
5 baseurl: undefined,
6
7 ruledata: undefined,
8
9 emptyText: gettext('Please select a rule.'),
10
11 setBaseUrl: function(baseurl) {
12 var me = this;
13
14 me.baseurl = baseurl;
15
16 me.reload();
17 },
18
19 reload: function() {
20 var me = this;
21
22 if (!me.baseurl) {
23 me.setRuleInfo(undefined);
24 return;
25 }
26
27 Proxmox.Utils.API2Request({
28 url: me.baseurl + "/config",
29 method: 'GET',
30 waitMsgTarget: me,
31 success: function(response, opts) {
32 me.setRuleInfo(response.result.data);
ad834b6f
DM
33 },
34 failure: function (response, opts) {
35 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
36 }
37 });
38 },
39
40 setRuleInfo: function(ruledata) {
41 var me = this;
42
43 me.ruledata = ruledata;
44
f71626c2
DM
45 me.down('#addFromButton').setDisabled(me.ruledata === undefined);
46 me.down('#addToButton').setDisabled(me.ruledata === undefined);
47 me.down('#addWhenButton').setDisabled(me.ruledata === undefined);
48 me.down('#addWhatButton').setDisabled(me.ruledata === undefined);
39700611 49 me.down('#addActionButton').setDisabled(me.ruledata === undefined);
f71626c2 50
ad834b6f
DM
51 if (me.ruledata === undefined) {
52
53 me.store.setData([]);
54 me.down('#ruleinfo').update(me.emtpyText);
55 me.down('#ruledata').setHidden(true);
56
57 } else {
58
59 var html = '<b>' + Ext.String.htmlEncode(me.ruledata.name) + '</b>';
60 html += '<br><br>';
61 html += 'Priority: ' + me.ruledata.priority + '<br>';
62 html += 'Direction: ' + PMG.Utils.format_rule_direction(me.ruledata.direction) + '<br>';
63 html += 'Active: ' + Proxmox.Utils.format_boolean(me.ruledata.active) + '<br>';
64
65 var data = [];
66 Ext.Array.each(['from', 'to', 'when', 'what', 'action'], function(oc) {
67 var list = ruledata[oc];
68 if (list === undefined) { return; }
69 Ext.Array.each(list, function(og) {
70 data.push({ oclass: oc, name: og.name, id: og.id });
71 });
72 });
73
74 me.store.setData(data);
75
76 me.down('#ruleinfo').update(html);
77 me.down('#ruledata').setHidden(false);
78 }
79 },
80
81 initComponent : function() {
82 var me = this;
83
84 me.store = new Ext.data.Store({
85 fields: [ 'oclass', 'name' ]
86 });
87
88 me.columns = [
89 {
90 header: gettext('Type'),
91 dataIndex: 'oclass',
92 },
93 {
94 header: gettext('name'),
95 dataIndex: 'name',
96 flex: 1
97 }
98 ];
99
100 me.selModel = Ext.create('Ext.selection.RowModel', {});
101
b357057e 102 var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
ad834b6f 103 selModel: me.selModel,
b357057e
DM
104 getUrl: function(rec) {
105 return me.baseurl + '/' + rec.data.oclass + '/'+ rec.data.id;
ad834b6f 106 },
b357057e
DM
107 callback: function() { me.reload(); },
108 getRecordName: function(rec) { return rec.data.name; },
109 waitMsgTarget: me
ad834b6f
DM
110 });
111
f71626c2
DM
112 var add_object_group = function(url, ogroupId) {
113 Proxmox.Utils.API2Request({
114 url: url,
115 params: { ogroup: ogroupId },
116 method: 'POST',
117 waitMsgTarget: me,
118 callback: function() {
119 me.reload();
120 },
121 failure: function (response, opts) {
122 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
123 }
124 });
125 };
126
ad834b6f
DM
127 me.dockedItems = [];
128
129 me.dockedItems.push({
130 xtype: 'toolbar',
131 dock: 'top',
132 items: [
133 {
134 text: gettext('From'),
135 disabled: true,
136 itemId: 'addFromButton',
137 handler: function() {
f71626c2
DM
138 var win = Ext.create('PMG.ObjectGroupSelector', {
139 rulegroup: 'from',
140 listeners: {
141 selectObjectGroup: function(view, rec) {
142 win.destroy();
143 add_object_group(me.baseurl + '/from', rec.data.id);
144 }
145 }
146 });
147 win.show();
148 }
149 },
150 {
151 text: gettext('To'),
152 disabled: true,
153 itemId: 'addToButton',
154 handler: function() {
155 var win = Ext.create('PMG.ObjectGroupSelector', {
156 rulegroup: 'to',
157 listeners: {
158 selectObjectGroup: function(view, rec) {
159 win.destroy();
160 add_object_group(me.baseurl + '/to', rec.data.id);
161 }
162 }
163 });
164 win.show();
165 }
166 },
167 {
168 text: gettext('When'),
169 disabled: true,
170 itemId: 'addWhenButton',
171 handler: function() {
172 var win = Ext.create('PMG.ObjectGroupSelector', {
173 rulegroup: 'when',
174 listeners: {
175 selectObjectGroup: function(view, rec) {
176 win.destroy();
177 add_object_group(me.baseurl + '/when', rec.data.id);
178 }
179 }
180 });
181 win.show();
182 }
183 },
184 {
185 text: gettext('What'),
186 disabled: true,
187 itemId: 'addWhatButton',
188 handler: function() {
189 var win = Ext.create('PMG.ObjectGroupSelector', {
190 rulegroup: 'what',
191 listeners: {
192 selectObjectGroup: function(view, rec) {
193 win.destroy();
194 add_object_group(me.baseurl + '/what', rec.data.id);
ad834b6f
DM
195 }
196 }
197 });
198 win.show();
199 }
200 },
39700611
DM
201 {
202 text: gettext('Action'),
203 disabled: true,
204 itemId: 'addActionButton',
205 handler: function() {
206 var win = Ext.create('PMG.ObjectGroupSelector', {
207 rulegroup: 'action',
208 listeners: {
209 selectObjectGroup: function(view, rec) {
210 win.destroy();
211 add_object_group(me.baseurl + '/action', rec.data.ogroup);
212 }
213 }
214 });
215 win.show();
216 }
217 },
ad834b6f
DM
218 remove_btn
219 ]
220 });
221
222 me.dockedItems.push({
223 dock: 'top',
224 border: 1,
225 layout: 'anchor',
226 itemId: 'ruledata',
227 items: [
228 {
229 xtype: 'component',
230 anchor: '100%',
231 itemId: 'ruleinfo',
232 style: { 'white-space': 'pre' },
233 padding: 10,
234 html: me.emptyText,
235 listeners: {
236 dblclick: {
237 fn: function(e, t) {
238 if (me.ruledata === undefined) { return; }
239 me.fireEvent('dblclickRuleInfo', me, e, t, me.ruledata);
240 },
241 element: 'el',
242 scope: this,
243 }
244 }
245 }
246 ]
247 });
248
249 Ext.apply(me, {
250 listeners: {
251 activate: function() { me.reload() }
252 }
253 });
254
255 me.callParent();
256
257 if (me.baseurl) {
258 me.reload();
259 }
260 }
261});