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