]> git.proxmox.com Git - pmg-gui.git/blame - js/Who.js
rename ObjectGroup to ObjectGroupList
[pmg-gui.git] / js / Who.js
CommitLineData
56b0691b
DM
1Ext.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});