]> git.proxmox.com Git - pmg-gui.git/blob - js/SpamQuarantine.js
fix #5251: login: set autocomplete on password and user
[pmg-gui.git] / js / SpamQuarantine.js
1 Ext.define('pmg-spam-archive', {
2 extend: 'Ext.data.Model',
3 fields: [
4 { type: 'number', name: 'spamavg' },
5 { type: 'integer', name: 'count' },
6 { type: 'date', dateFormat: 'timestamp', name: 'day' },
7 ],
8 proxy: {
9 type: 'proxmox',
10 url: "/api2/json/quarantine/spam",
11 },
12 idProperty: 'day',
13 });
14
15 Ext.define('pmg-spam-list', {
16 extend: 'Ext.data.Model',
17 fields: ['id', 'envelope_sender', 'from', 'sender', 'receiver', 'subject',
18 { type: 'number', name: 'spamlevel' },
19 { type: 'integer', name: 'bytes' },
20 { type: 'date', dateFormat: 'timestamp', name: 'time' },
21 {
22 type: 'string',
23 name: 'day',
24 convert: function(v, rec) {
25 return Ext.Date.format(rec.get('time'), 'Y-m-d');
26 }, depends: ['time'],
27 },
28 ],
29 proxy: {
30 type: 'proxmox',
31 url: "/api2/json/quarantine/spam",
32 },
33 idProperty: 'id',
34 });
35
36 Ext.define('PMG.SpamQuarantineController', {
37 extend: 'PMG.controller.QuarantineController',
38 xtype: 'pmgSpamQuarantineController',
39 alias: 'controller.spamquarantine',
40
41 updatePreview: function(raw, rec) {
42 let me = this;
43 me.lookupReference('spam').setDisabled(false);
44
45 me.callParent(arguments);
46 },
47
48 multiSelect: function(selection) {
49 let me = this;
50 let spam = me.lookupReference('spam');
51 spam.setDisabled(true);
52 spam.setPressed(false);
53 me.lookupReference('spaminfo').setVisible(false);
54 me.callParent(arguments);
55 },
56
57 toggleSpamInfo: function(btn) {
58 var grid = this.lookupReference('spaminfo');
59 grid.setVisible(!grid.isVisible());
60 },
61
62 openContextMenu: function(table, record, tr, index, event) {
63 event.stopEvent();
64 let me = this;
65 let list = me.lookup('list');
66 Ext.create('PMG.menu.SpamContextMenu', {
67 callback: action => me.doAction(action, list.getSelection()),
68 }).showAt(event.getXY());
69 },
70
71 keyPress: function(table, record, item, index, event) {
72 var me = this;
73 var list = me.lookup('list');
74 var key = event.getKey();
75 var action = '';
76 switch (key) {
77 case event.DELETE:
78 case 127:
79 action = 'delete';
80 break;
81 case Ext.event.Event.D:
82 case Ext.event.Event.D + 32:
83 action = 'deliver';
84 break;
85 case Ext.event.Event.W:
86 case Ext.event.Event.W + 32:
87 action = 'whitelist';
88 break;
89 case Ext.event.Event.B:
90 case Ext.event.Event.B + 32:
91 action = 'blacklist';
92 break;
93 }
94
95 if (action !== '') {
96 me.doAction(action, list.getSelection());
97 }
98 },
99
100 init: function(view) {
101 this.lookup('list').cselect = view.cselect;
102 },
103
104 control: {
105 'button[reference=raw]': {
106 click: 'toggleRaw',
107 },
108 'button[reference=spam]': {
109 click: 'toggleSpamInfo',
110 },
111 'pmgQuarantineList': {
112 itemkeypress: 'keyPress',
113 rowcontextmenu: 'openContextMenu',
114 },
115 },
116 });
117
118 Ext.define('PMG.SpamQuarantine', {
119 extend: 'Ext.container.Container',
120 xtype: 'pmgSpamQuarantine',
121
122 border: false,
123 layout: { type: 'border' },
124
125 defaults: { border: false },
126
127 // from mail link
128 cselect: undefined,
129
130 viewModel: {
131 parent: null,
132 data: {
133 mailid: '',
134 },
135 formulas: {
136 downloadMailURL: get => '/api2/json/quarantine/download?mailid=' + encodeURIComponent(get('mailid')),
137 },
138 },
139 controller: 'spamquarantine',
140
141 items: [
142 {
143 title: gettext('Spam Quarantine'),
144 xtype: 'pmgQuarantineList',
145 selModel: 'checkboxmodel',
146 reference: 'list',
147 region: 'west',
148 width: 500,
149 split: true,
150 collapsible: false,
151 store: {
152 model: 'pmg-spam-list',
153 groupField: 'day',
154 groupDir: 'DESC',
155 sorters: [{
156 property: 'time',
157 direction: 'DESC',
158 }],
159 },
160
161 columns: [
162 {
163 header: gettext('Sender/Subject'),
164 dataIndex: 'subject',
165 renderer: PMG.Utils.render_sender,
166 flex: 1,
167 },
168 {
169 header: gettext('Score'),
170 dataIndex: 'spamlevel',
171 align: 'right',
172 width: 70,
173 },
174 {
175 header: gettext('Size') + ' (KB)',
176 renderer: v => Ext.Number.toFixed(v/1024, 0),
177 dataIndex: 'bytes',
178 align: 'right',
179 width: 90,
180 },
181 {
182 header: gettext('Date'),
183 dataIndex: 'day',
184 hidden: true,
185 },
186 {
187 xtype: 'datecolumn',
188 header: gettext('Time'),
189 dataIndex: 'time',
190 format: 'H:i:s',
191 },
192 ],
193 },
194 {
195 title: gettext('Selected Mail'),
196 border: false,
197 region: 'center',
198 layout: 'fit',
199 split: true,
200 reference: 'preview',
201 disabled: true,
202 dockedItems: [
203 {
204 xtype: 'toolbar',
205 dock: 'top',
206 overflowHandler: 'scroller',
207 style: {
208 // docked items have set the bottom with to 0px with '! important'
209 // but we still want one here, so we can remove the borders of the grids
210 'border-bottom-width': '1px ! important',
211 },
212 items: [
213 {
214 xtype: 'button',
215 reference: 'raw',
216 text: gettext('Toggle Raw'),
217 enableToggle: true,
218 iconCls: 'fa fa-file-code-o',
219 },
220 {
221 xtype: 'button',
222 reference: 'spam',
223 text: gettext('Toggle Spam Info'),
224 enableToggle: true,
225 iconCls: 'fa fa-bullhorn',
226 },
227 {
228 xtype: 'tbseparator',
229 reference: 'themeCheckSep',
230 },
231 {
232 xtype: 'proxmoxcheckbox',
233 reference: 'themeCheck',
234 checked: true,
235 boxLabel: gettext('Dark-mode filter'),
236 iconCls: 'fa fa-paint-brush',
237 },
238 '->',
239 {
240 xtype: 'button',
241 reference: 'download',
242 text: gettext('Download'),
243 setDownload: function(id) {
244 this.el.dom.download = id + ".eml";
245 },
246 bind: {
247 href: '{downloadMailURL}',
248 download: '{mailid}',
249 },
250 iconCls: 'fa fa-download',
251 },
252 '-',
253 {
254 reference: 'whitelist',
255 text: gettext('Whitelist'),
256 iconCls: 'fa fa-check',
257 handler: 'btnHandler',
258 },
259 {
260 reference: 'blacklist',
261 text: gettext('Blacklist'),
262 iconCls: 'fa fa-times',
263 handler: 'btnHandler',
264 },
265 {
266 reference: 'deliver',
267 text: gettext('Deliver'),
268 iconCls: 'fa fa-paper-plane-o info-blue',
269 handler: 'btnHandler',
270 },
271 {
272 reference: 'delete',
273 text: gettext('Delete'),
274 iconCls: 'fa fa-trash-o critical',
275 handler: 'btnHandler',
276 },
277 ],
278 },
279 {
280 xtype: 'pmgSpamInfoGrid',
281 reference: 'spaminfo',
282 border: false,
283 },
284 {
285 xtype: 'pmgMailInfo',
286 hidden: true,
287 reference: 'mailinfo',
288 border: false,
289 },
290 {
291 xtype: 'pmgAttachmentGrid',
292 reference: 'attachmentlist',
293 showDownloads: false,
294 border: false,
295 dock: 'bottom',
296 },
297 ],
298 },
299 ],
300 });