]> git.proxmox.com Git - pmg-gui.git/blame - js/ActionList.js
spamdetector: add extract_text option
[pmg-gui.git] / js / ActionList.js
CommitLineData
f5de8682
DM
1Ext.define('pmg-action-list', {
2 extend: 'Ext.data.Model',
3 fields: [
e0e9a1be 4 'id', 'name', 'info', 'descr', 'editable',
c87d46fb 5 { name: 'otype', type: 'integer' },
f5de8682 6 ],
c87d46fb 7 idProperty: 'id',
f5de8682
DM
8});
9
39700611 10Ext.define('PMG.ActionList', {
f5de8682 11 extend: 'Ext.grid.GridPanel',
39700611 12 alias: ['widget.pmgActionList'],
f5de8682 13
acc1fede 14 title: PMG.Utils.oclass_text.action,
f2ca0a1a 15 border: false,
f5de8682
DM
16
17 baseurl: '/config/ruledb/action',
18
628eccdb 19 otype_list: [4002, 4003, 4005, 4007, 4009],
f5de8682 20
39700611
DM
21 enableButtons: true,
22
c87d46fb 23 initComponent: function() {
f5de8682
DM
24 var me = this;
25
26 me.store = new Ext.data.Store({
27 model: 'pmg-action-list',
28 proxy: {
29 type: 'proxmox',
c87d46fb 30 url: "/api2/json" + me.baseurl + '/objects',
f5de8682
DM
31 },
32 sorters: {
33 property: 'name',
18722987 34 direction: 'ASC',
c87d46fb 35 },
f5de8682
DM
36 });
37
38 me.selModel = Ext.create('Ext.selection.RowModel', {});
39
40 var reload = function() {
41 me.store.load();
42 };
43
44 var run_editor = function() {
45 var rec = me.selModel.getSelection()[0];
46 if (!rec) {
47 return;
48 }
49
50 var editor = PMG.Utils.object_editors[rec.data.otype];
51 if (!editor) {
52 return;
53 }
54
55 var config = Ext.apply({ method: 'PUT' }, editor);
39700611 56
f5de8682
DM
57 config.url = me.baseurl + '/' + editor.subdir + '/' + rec.data.id;
58
59 var win = Ext.createWidget('proxmoxWindowEdit', config);
60
61 win.load();
62 win.on('destroy', reload);
63 win.show();
64 };
65
b357057e 66 var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
f5de8682 67 selModel: me.selModel,
b357057e
DM
68 getUrl: function(rec) {
69 return me.baseurl + '/objects/' + rec.data.id;
f5de8682 70 },
e0e9a1be 71 enableFn: rec => !!rec.data.editable,
b357057e
DM
72 callback: reload,
73 getRecordName: function(rec) { return rec.data.descr; },
c87d46fb 74 waitMsgTarget: me,
f5de8682
DM
75 });
76
77 var menu_items = [];
78
79 Ext.Array.each(me.otype_list, function(otype) {
f5de8682
DM
80 var editor = PMG.Utils.object_editors[otype];
81
82 var config = Ext.apply({ method: 'POST' }, editor);
83
18b5b6ad 84 config.isCreate = true;
f5de8682
DM
85 menu_items.push({
86 text: config.subject,
87 handler: function() {
28eb60c0 88 if (me.baseurl === undefined) {
f5de8682
DM
89 return;
90 }
91 config.url = me.baseurl + '/' + editor.subdir;
92 var win = Ext.createWidget('proxmoxWindowEdit', config);
93 win.on('destroy', reload);
94 win.show();
c87d46fb 95 },
f5de8682
DM
96 });
97 });
98
99 var tbar = [
100 {
101 text: gettext('Add'),
102 menu: new Ext.menu.Menu({
c87d46fb
TL
103 items: menu_items,
104 }),
f5de8682
DM
105 },
106 {
107 xtype: 'proxmoxButton',
108 text: gettext('Edit'),
109 disabled: true,
110 selModel: me.selModel,
e0e9a1be 111 enableFn: rec => !!rec.data.editable,
c87d46fb 112 handler: run_editor,
f5de8682 113 },
c87d46fb 114 remove_btn,
f5de8682
DM
115 ];
116
2f8fe1a3 117 Proxmox.Utils.monStoreErrors(me, me.store, true);
f5de8682 118
39700611
DM
119 if (me.enableButtons) {
120 me.tbar = tbar;
121 }
122
f5de8682 123 Ext.apply(me, {
01e0e5e5 124 run_editor: run_editor,
f5de8682
DM
125 columns: [
126 {
127 header: gettext('Name'),
128 sortable: true,
129 width: 200,
130 dataIndex: 'name',
c87d46fb 131 renderer: Ext.String.htmlEncode,
f5de8682
DM
132 },
133 {
134 header: gettext('Description'),
135 sortable: true,
136 width: 300,
137 dataIndex: 'descr',
c87d46fb 138 renderer: Ext.String.htmlEncode,
f5de8682
DM
139 },
140 {
141 header: gettext('Comment'),
142 sortable: false,
143 flex: 1,
144 dataIndex: 'info',
c87d46fb 145 renderer: Ext.String.htmlEncode,
e0e9a1be
DC
146 },
147 {
148 header: gettext('Editable'),
149 dataIndex: 'editable',
150 renderer: Proxmox.Utils.format_boolean,
c87d46fb 151 },
f5de8682
DM
152 ],
153 listeners: {
39700611
DM
154 itemdblclick: function() {
155 if (me.enableButtons) {
156 run_editor();
157 }
158 },
c87d46fb
TL
159 activate: reload,
160 },
f5de8682
DM
161 });
162
163 me.callParent();
164
165 reload(); // initial load
c87d46fb 166 },
f5de8682 167});