summaryrefslogtreecommitdiff
path: root/plugins/quickrules/quickrules.js
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/quickrules/quickrules.js')
-rw-r--r--plugins/quickrules/quickrules.js169
1 files changed, 169 insertions, 0 deletions
diff --git a/plugins/quickrules/quickrules.js b/plugins/quickrules/quickrules.js
new file mode 100644
index 000000000..7b8702330
--- /dev/null
+++ b/plugins/quickrules/quickrules.js
@@ -0,0 +1,169 @@
+/**
+ * QuickRules plugin script
+ */
+
+function rcmail_quickrules() {
+ if (!rcmail.env.uid && (!rcmail.message_list || !rcmail.message_list.get_selection().length))
+ return;
+
+ var uids = rcmail.env.uid ? rcmail.env.uid : rcmail.message_list.get_selection().join(',');
+
+ var lock = rcmail.set_busy(true, 'loading');
+ rcmail.http_post('plugin.quickrules.add', '_uid='+uids+'&_mbox='+urlencode(rcmail.env.mailbox), lock);
+}
+
+function quickrules_add_filter() {
+ rcmail.command('plugin.sieverules.add');
+}
+
+function quickrules_setup_rules() {
+ var rulesTable = rcube_find_object('rules-table');
+ var actsTable = rcube_find_object('actions-table');
+
+ if (rcmail_quickrules_rules.length < 1)
+ return;
+
+ for (i = 1; i < rcmail_quickrules_rules.length; i++)
+ rcmail.command('plugin.sieverules.add_rule','', rulesTable.tBodies[0].rows[0]);
+
+ var headers = document.getElementsByName('_selheader[]');
+ var ops = document.getElementsByName('_operator[]');
+ var targets = document.getElementsByName('_target[]');
+ var otherHeaders = document.getElementsByName('_header[]');
+ var headerParts = "";
+
+ for (var i = 1; i < headers.length; i++) {
+ $(headers[i]).val(rcmail_quickrules_rules[i-1].header);
+ $(ops[i]).val(rcmail_quickrules_rules[i-1].op);
+ headerParts = "";
+
+ // other headers
+ if (rcmail_quickrules_rules[i-1].header.indexOf('other') == 0) {
+ headerParts = rcmail_quickrules_rules[i-1].header.split('::');
+ rcmail_quickrules_rules[i-1].header = 'header::other'
+ $(headers[i]).val(rcmail_quickrules_rules[i-1].header);
+ }
+
+ // check values set ok before adding rule
+ if ($(headers[i]).val() == rcmail_quickrules_rules[i-1].header && $(ops[i]).val() == rcmail_quickrules_rules[i-1].op) {
+ rcmail.sieverules_header_select(headers[i]);
+
+ if (headerParts)
+ $(otherHeaders[i]).val(headerParts[1]);
+
+ // set the op again (header onchange resets it)
+ $(ops[i]).val(rcmail_quickrules_rules[i-1].op);
+ rcmail.sieverules_rule_op_select(ops[i]);
+
+ targets[i].value = rcmail_quickrules_rules[i-1].target;
+ }
+ else {
+ headers[i].selectedIndex = 0;
+ ops[i].selectedIndex = 0;
+ }
+ }
+
+ if (rcmail_quickrules_actions.length < 1)
+ return;
+
+ for (i = 1; i < rcmail_quickrules_actions.length; i++)
+ rcmail.command('plugin.sieverules.add_action','', actsTable.tBodies[0].rows[0]);
+
+ var acts = document.getElementsByName('_act[]');
+ var folders = document.getElementsByName('_folder[]');
+ var flags = document.getElementsByName('_imapflags[]');
+
+ for (var i = 1; i < acts.length; i++) {
+ $(acts[i]).val(rcmail_quickrules_actions[i-1].act);
+
+ // check for imap4flags
+ if (rcmail_quickrules_actions[i-1].act == 'imapflags') {
+ if ($(acts[i]).val() != rcmail_quickrules_actions[i-1].act)
+ $(acts[i]).val('imap4flags');
+
+ // check values set ok before adding action
+ if ($(acts[i]).val() == rcmail_quickrules_actions[i-1].act) {
+ rcmail.sieverules_action_select(acts[i]);
+ $(flags[i]).val(rcmail_quickrules_actions[i-1].props);
+ }
+ else {
+ acts[i].selectedIndex = 0;
+ }
+ }
+ else {
+ // check values set ok before adding action
+ if ($(acts[i]).val() == rcmail_quickrules_actions[i-1].act) {
+ rcmail.sieverules_action_select(acts[i]);
+ $(folders[i]).val(rcmail_quickrules_actions[i-1].props);
+ }
+ else {
+ acts[i].selectedIndex = 0;
+ }
+ }
+ }
+}
+
+function rcmail_quickrules_status(command) {
+ switch (command) {
+ case 'beforedelete':
+ if (!rcmail.env.flag_for_deletion && rcmail.env.trash_mailbox &&
+ rcmail.env.mailbox != rcmail.env.trash_mailbox &&
+ (rcmail.message_list && !rcmail.message_list.shiftkey))
+ rcmail.enable_command('plugin.quickrules.create', false);
+
+ break;
+ case 'beforemove':
+ case 'beforemoveto':
+ rcmail.enable_command('plugin.quickrules.create', false);
+ break;
+ case 'aftermove':
+ case 'aftermoveto':
+ if (rcmail.env.action == 'show')
+ rcmail.enable_command('plugin.quickrules.create', true);
+
+ break;
+ case 'afterpurge':
+ case 'afterexpunge':
+ if (!rcmail.env.messagecount && rcmail.task == 'mail')
+ rcmail.enable_command('plugin.quickrules.create', false);
+
+ break;
+ }
+}
+
+function rcmail_quickrules_init() {
+ if (rcmail.env.action == 'plugin.sieverules')
+ quickrules_add_filter();
+
+ if (rcmail.env.action == 'plugin.sieverules.add')
+ quickrules_setup_rules();
+
+ if (window.rcm_contextmenu_register_command)
+ rcm_contextmenu_register_command('quickrules', 'rcmail_quickrules', rcmail.gettext('quickrules.createfilter'), 'moveto', 'after', false);
+}
+
+$(document).ready(function() {
+ if (window.rcmail) {
+ rcmail.addEventListener('init', function(evt) {
+ // register command (directly enable in message view mode)
+ rcmail.register_command('plugin.quickrules.create', rcmail_quickrules, rcmail.env.uid);
+
+ if (rcmail.message_list && rcmail.env.junk_mailbox) {
+ rcmail.message_list.addEventListener('select', function(list) {
+ rcmail.enable_command('plugin.quickrules.create', list.get_single_selection() != null);
+ });
+ }
+ });
+
+ rcmail.add_onload('rcmail_quickrules_init()');
+
+ // update button activation after external events
+ rcmail.addEventListener('beforedelete', function(props) { rcmail_quickrules_status('beforedelete'); } );
+ rcmail.addEventListener('beforemove', function(props) { rcmail_quickrules_status('beforemove'); } );
+ rcmail.addEventListener('beforemoveto', function(props) { rcmail_quickrules_status('beforemoveto'); } );
+ rcmail.addEventListener('aftermove', function(props) { rcmail_quickrules_status('aftermove'); } );
+ rcmail.addEventListener('aftermoveto', function(props) { rcmail_quickrules_status('aftermoveto'); } );
+ rcmail.addEventListener('afterpurge', function(props) { rcmail_quickrules_status('afterpurge'); } );
+ rcmail.addEventListener('afterexpunge', function(props) { rcmail_quickrules_status('afterexpunge'); } );
+ }
+}); \ No newline at end of file