]> git.proxmox.com Git - pmg-gui.git/blob - js/ObjectGroup.js
ObjectGroup: fire dblclickOGInfo on double click
[pmg-gui.git] / js / ObjectGroup.js
1 Ext.define('PMG.ObjectGroup', {
2 extend: 'Ext.grid.GridPanel',
3 alias: 'widget.pmgObjectGroup',
4
5 baseurl: undefined,
6
7 otype_list: [],
8
9 hideGroupInfo: false,
10 showDirection: false, // only important for SMTP Whitelist
11
12 ogdata: undefined,
13
14 setBaseUrl: function(baseurl) {
15 var me = this;
16
17 me.baseurl = baseurl;
18
19 me.store.setProxy({
20 type: 'proxmox',
21 url: '/api2/json' + me.baseurl + '/objects'
22 });
23
24 me.store.load(function() {
25 me.down('#addMenuButton').setDisabled(false);
26
27 });
28 },
29
30 setObjectInfo: function(ogdata) {
31 var me = this;
32
33 me.ogdata = ogdata;
34
35 var html = '<b>' + Ext.String.htmlEncode(me.ogdata.name) + '</b>';
36 html += "<br><br>";
37 html += Ext.String.htmlEncode(Ext.String.trim(me.ogdata.info));
38
39 me.down('#oginfo').update(html);
40 me.down('#ogdata').setHidden(false);
41 },
42
43 initComponent : function() {
44 var me = this;
45
46 me.store = new Ext.data.Store({
47 model: 'pmg-object-list',
48 sorters: [
49 {
50 property : 'receivertest',
51 },
52 {
53 property : 'otype',
54 direction: 'ASC'
55 }
56 ]
57 });
58
59 me.columns = [{
60 header: gettext('Type'),
61 dataIndex: 'otype',
62 renderer: PMG.Utils.format_otype,
63 width: 200
64 }];
65
66 if (me.showDirection) {
67 me.columns.push({
68 header: gettext('Direction'),
69 dataIndex: 'receivertest',
70 renderer: function(value) {
71 return value ? PMG.Utils.receiverText : PMG.Utils.senderText;
72 }
73 });
74 }
75
76 me.columns.push({
77 header: gettext('Value'),
78 dataIndex: 'descr',
79 renderer: Ext.String.htmlEncode,
80 flex: 1
81 })
82
83 var reload = function() {
84 me.store.load();
85 };
86
87 me.selModel = Ext.create('Ext.selection.RowModel', {});
88
89 var remove_btn = Ext.createWidget('proxmoxButton', {
90 text: gettext('Remove'),
91 disabled: true,
92 selModel: me.selModel,
93 confirmMsg: function (rec) {
94 return Ext.String.format(
95 gettext('Are you sure you want to remove entry {0}'),
96 "'" + PMG.Utils.format_otype(rec.data.otype) +
97 ': ' + rec.data.descr + "'");
98 },
99 handler: function(btn, event, rec) {
100 Proxmox.Utils.API2Request({
101 url: me.baseurl + '/objects/'+ rec.data.id,
102 method: 'DELETE',
103 waitMsgTarget: me,
104 callback: function() {
105 reload();
106 },
107 failure: function (response, opts) {
108 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
109 }
110 });
111 }
112 });
113
114 var full_subject = function(subject, receivertest) {
115 if (me.showDirection) {
116 var direction = receivertest ?
117 PMG.Utils.receiverText : PMG.Utils.senderText;
118
119 return subject + ' (' + direction + ')';
120 } else {
121 return subject;
122 }
123 };
124
125 var run_editor = function() {
126 var rec = me.selModel.getSelection()[0];
127 if (!rec) {
128 return;
129 }
130
131 var editor = PMG.Utils.object_editors[rec.data.otype];
132 if (!editor) {
133 return;
134 }
135
136 var config = Ext.apply({ method: 'PUT' }, editor);
137 config.subject = full_subject(editor.subject, rec.data.receivertest);
138 config.url = me.baseurl + '/' + editor.subdir + '/' + rec.data.id;
139
140 var win = Ext.createWidget('proxmoxWindowEdit', config);
141
142 win.load();
143 win.on('destroy', reload);
144 win.show();
145 };
146
147 var menu_items = [];
148
149 Ext.Array.each(me.otype_list, function(otype) {
150
151 var editor = PMG.Utils.object_editors[otype];
152
153 var config = Ext.apply({ method: 'POST' }, editor);
154 config.subject = full_subject(editor.subject, editor.receivertest);
155
156 menu_items.push({
157 text: config.subject,
158 handler: function() {
159 if (me.baseurl == undefined) {
160 return;
161 }
162 config.url = me.baseurl + '/' + editor.subdir;
163 var win = Ext.createWidget('proxmoxWindowEdit', config);
164 win.on('destroy', reload);
165 win.show();
166 }
167 });
168 });
169
170 me.dockedItems = [];
171
172 me.dockedItems.push({
173 xtype: 'toolbar',
174 dock: 'top',
175 items: [
176 {
177 text: gettext('Add'),
178 disabled: true,
179 itemId: 'addMenuButton',
180 menu: new Ext.menu.Menu({
181 items: menu_items
182 })
183 },
184 {
185 xtype: 'proxmoxButton',
186 text: gettext('Edit'),
187 disabled: true,
188 selModel: me.selModel,
189 handler: run_editor
190 },
191 remove_btn
192 ]
193 });
194
195 me.dockedItems.push({
196 dock: 'top',
197 border: 1,
198 layout: 'anchor',
199 hidden: me.hideGroupInfo ? true : false,
200 itemId: 'ogdata',
201 items: [
202 {
203 xtype: 'component',
204 anchor: '100%',
205 itemId: 'oginfo',
206 style: { 'white-space': 'pre' },
207 padding: 10,
208 html: gettext('Please select an object.'),
209 listeners: {
210 dblclick: {
211 fn: function(e, t) {
212 if (me.ogdata === undefined) { return; }
213 me.fireEvent('dblclickOGInfo', me, e, t, me.ogdata);
214 },
215 element: 'el',
216 scope: this,
217 }
218 }
219 }
220 ]
221 });
222
223 Ext.apply(me, {
224 listeners: {
225 itemdblclick: run_editor,
226 activate: reload
227 }
228 });
229
230 me.callParent();
231
232 if (me.baseurl) {
233 me.setBaseUrl(me.baseurl); // configure store, load()
234 }
235 }
236 });