]>
Commit | Line | Data |
---|---|---|
56b0691b DM |
1 | Ext.define('PMG.Who', { |
2 | extend: 'Ext.grid.GridPanel', | |
3 | ||
4 | baseurl: undefined, | |
5 | ||
6 | otype_list: [], | |
7 | ||
8 | columns: [ | |
9 | { | |
10 | header: gettext('Type'), | |
11 | dataIndex: 'otype', | |
12 | renderer: PMG.Utils.format_otype, | |
13 | width: 200 | |
14 | }, | |
15 | { | |
16 | header: gettext('Value'), | |
17 | dataIndex: 'descr', | |
18 | renderer: Ext.String.htmlEncode, | |
19 | flex: 1 | |
20 | } | |
21 | ], | |
22 | ||
23 | setBaseUrl: function(baseurl) { | |
24 | var me = this; | |
25 | ||
26 | me.baseurl = baseurl; | |
27 | ||
28 | me.store.setProxy({ | |
29 | type: 'proxmox', | |
30 | url: '/api2/json' + me.baseurl + '/objects' | |
31 | }); | |
32 | ||
33 | me.store.load(function() { | |
34 | me.down('#addMenuButton').setDisabled(false); | |
35 | ||
36 | }); | |
37 | }, | |
38 | ||
39 | setObjectInfo: function(name, info) { | |
40 | var me = this; | |
41 | ||
42 | var html = '<b>' + Ext.String.htmlEncode(name) + '</b>'; | |
43 | html += "<br><br>"; | |
44 | html += Ext.String.htmlEncode(info); | |
45 | ||
46 | me.down('#oginfo').update(html); | |
47 | me.down('#ogdata').setHidden(false); | |
48 | }, | |
49 | ||
50 | initComponent : function() { | |
51 | var me = this; | |
52 | ||
53 | me.store = new Ext.data.Store({ | |
54 | model: 'pmg-object-list', | |
55 | sorters: [ | |
56 | { | |
57 | property : 'otype', | |
58 | direction: 'ASC' | |
59 | } | |
60 | ] | |
61 | }); | |
62 | ||
63 | var reload = function() { | |
64 | me.store.load(); | |
65 | }; | |
66 | ||
67 | me.selModel = Ext.create('Ext.selection.RowModel', {}); | |
68 | ||
69 | var remove_btn = Ext.createWidget('proxmoxButton', { | |
70 | text: gettext('Remove'), | |
71 | disabled: true, | |
72 | selModel: me.selModel, | |
73 | confirmMsg: function (rec) { | |
74 | return Ext.String.format( | |
75 | gettext('Are you sure you want to remove entry {0}'), | |
76 | "'" + PMG.Utils.format_otype(rec.data.otype) + | |
77 | ': ' + rec.data.descr + "'"); | |
78 | }, | |
79 | handler: function(btn, event, rec) { | |
80 | Proxmox.Utils.API2Request({ | |
81 | url: me.baseurl + '/objects/'+ rec.data.id, | |
82 | method: 'DELETE', | |
83 | waitMsgTarget: me, | |
84 | callback: function() { | |
85 | reload(); | |
86 | }, | |
87 | failure: function (response, opts) { | |
88 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
89 | } | |
90 | }); | |
91 | } | |
92 | }); | |
93 | ||
94 | var run_editor = function() { | |
95 | var rec = me.selModel.getSelection()[0]; | |
96 | if (!rec) { | |
97 | return; | |
98 | } | |
99 | ||
100 | var editor = PMG.Utils.object_editors[rec.data.otype]; | |
101 | if (!editor) { | |
102 | return; | |
103 | } | |
104 | ||
105 | var config = Ext.apply({ method: 'PUT' }, editor); | |
106 | ||
107 | config.url = me.baseurl + '/' + editor.subdir + '/' + rec.data.id; | |
108 | ||
109 | var win = Ext.createWidget('proxmoxWindowEdit', config); | |
110 | ||
111 | win.load(); | |
112 | win.on('destroy', reload); | |
113 | win.show(); | |
114 | }; | |
115 | ||
116 | var menu_items = []; | |
117 | ||
118 | Ext.Array.each(me.otype_list, function(otype) { | |
119 | ||
120 | var editor = PMG.Utils.object_editors[otype]; | |
121 | ||
122 | var config = Ext.apply({ method: 'POST' }, editor); | |
123 | ||
124 | menu_items.push({ | |
125 | text: config.subject, | |
126 | handler: function() { | |
127 | if (me.baseurl == undefined) { | |
128 | return; | |
129 | } | |
130 | config.url = me.baseurl + '/' + editor.subdir; | |
131 | var win = Ext.createWidget('proxmoxWindowEdit', config); | |
132 | win.on('destroy', reload); | |
133 | win.show(); | |
134 | } | |
135 | }); | |
136 | }); | |
137 | ||
138 | me.dockedItems = []; | |
139 | ||
140 | me.dockedItems.push({ | |
141 | xtype: 'toolbar', | |
142 | dock: 'top', | |
143 | items: [ | |
144 | { | |
145 | text: gettext('Add'), | |
146 | disabled: true, | |
147 | itemId: 'addMenuButton', | |
148 | menu: new Ext.menu.Menu({ | |
149 | items: menu_items | |
150 | }) | |
151 | }, | |
152 | { | |
153 | xtype: 'proxmoxButton', | |
154 | text: gettext('Edit'), | |
155 | disabled: true, | |
156 | selModel: me.selModel, | |
157 | handler: run_editor | |
158 | }, | |
159 | remove_btn | |
160 | ] | |
161 | }); | |
162 | ||
163 | me.dockedItems.push({ | |
164 | dock: 'top', | |
165 | border: 1, | |
166 | layout: 'anchor', | |
167 | //hidden: true, | |
168 | itemId: 'ogdata', | |
169 | items: [ | |
170 | { | |
171 | xtype: 'component', | |
172 | anchor: '100%', | |
173 | itemId: 'oginfo', | |
174 | padding: 10, | |
175 | html: gettext('Please select an object.') | |
176 | } | |
177 | ] | |
178 | }); | |
179 | ||
180 | ||
181 | Ext.apply(me, { | |
182 | listeners: { | |
183 | itemdblclick: run_editor, | |
184 | activate: reload | |
185 | } | |
186 | }); | |
187 | ||
188 | me.callParent(); | |
189 | } | |
190 | }); |