pmg-gui/js/AttachmentQuarantine.js
Stefan Sterz 9bcb553cfb quarantines: add support for a theme toggle
this allows toggling the presentation of the email previews depending
on the current theme. in the default "light" mode the toggle is hidden
to avoid clutter. enable the toggle in other themes to allow switching
back to the original way the email was rendered.

this requires a bump of the widget toolkit. the toolkit provides the
styles necessary for the toggle to work.

Signed-off-by: Stefan Sterz <s.sterz@proxmox.com>
Reviewed-by: Dominik Csapak <d.csapak@proxmox.com>
Tested-by:  Dominik Csapak <d.csapak@proxmox.com>
2023-03-15 15:38:54 +01:00

160 lines
3.4 KiB
JavaScript

Ext.define('pmg-attachment-list', {
extend: 'Ext.data.Model',
fields: ['id', 'envelope_sender', 'from', 'sender', 'receiver', 'subject',
{ type: 'integer', name: 'bytes' },
{ type: 'date', dateFormat: 'timestamp', name: 'time' },
{
type: 'string',
name: 'day',
convert: function(v, rec) {
return Ext.Date.format(rec.get('time'), 'Y-m-d');
}, depends: ['time'],
},
],
proxy: {
type: 'proxmox',
url: "/api2/json/quarantine/attachment",
},
idProperty: 'id',
});
Ext.define('PMG.AttachmentQuarantine', {
extend: 'Ext.container.Container',
xtype: 'pmgAttachmentQuarantine',
border: false,
layout: { type: 'border' },
defaults: { border: false },
viewModel: {
parent: null,
data: {
mailid: '',
},
formulas: {
downloadMailURL: get => '/api2/json/quarantine/download?mailid=' + encodeURIComponent(get('mailid')),
},
},
controller: 'quarantine',
items: [
{
title: gettext('Attachment Quarantine'),
xtype: 'pmgQuarantineList',
emptyText: gettext('No data in database'),
selModel: 'checkboxmodel',
quarantineType: 'attachment',
reference: 'list',
region: 'west',
width: 500,
split: true,
collapsible: false,
store: {
model: 'pmg-attachment-list',
groupField: 'day',
groupDir: 'DESC',
sorters: [{
property: 'time',
direction: 'DESC',
}],
},
columns: [
{
header: `${gettext('Sender')}/${gettext('Receiver')}/${gettext('Subject')}`,
dataIndex: 'subject',
renderer: PMG.Utils.render_sender_receiver,
flex: 1,
},
{
header: gettext('Size') + ' (KB)',
renderer: v => Ext.Number.toFixed(v/1024, 0),
dataIndex: 'bytes',
align: 'right',
width: 90,
},
{
header: gettext('Date'),
dataIndex: 'day',
hidden: true,
},
{
xtype: 'datecolumn',
header: gettext('Time'),
dataIndex: 'time',
format: 'H:i:s',
},
],
},
{
title: gettext('Selected Mail'),
border: false,
region: 'center',
layout: 'fit',
split: true,
reference: 'preview',
disabled: true,
dockedItems: [
{
xtype: 'toolbar',
overflowHandler: 'scroller',
dock: 'top',
items: [
{
xtype: 'button',
reference: 'raw',
text: gettext('Toggle Raw'),
enableToggle: true,
iconCls: 'fa fa-file-code-o',
},
{
xtype: 'button',
reference: 'themeToggle',
text: gettext('Toggle Theme'),
enableToggle: true,
iconCls: 'fa fa-paint-brush',
},
'->',
{
xtype: 'button',
reference: 'download',
text: gettext('Download'),
setDownload: function(id) {
this.el.dom.download = id + ".eml";
},
bind: {
href: '{downloadMailURL}',
download: '{mailid}',
},
iconCls: 'fa fa-download',
},
{
reference: 'deliver',
text: gettext('Deliver'),
iconCls: 'fa fa-paper-plane-o info-blue',
handler: 'btnHandler',
},
{
reference: 'delete',
text: gettext('Delete'),
iconCls: 'fa fa-trash-o critical',
handler: 'btnHandler',
},
],
},
{
xtype: 'pmgMailInfo',
hidden: true,
reference: 'mailinfo',
},
{
xtype: 'pmgAttachmentGrid',
reference: 'attachmentlist',
dock: 'bottom',
collapsible: false,
},
],
},
],
});