From 59478e06c25303a790a0840ab2ac30662c4ef781 Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Tue, 5 Aug 2014 16:46:22 +0200 Subject: c'est la merde.. --- plugins/quickrules/quickrules.js | 169 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 169 insertions(+) create mode 100644 plugins/quickrules/quickrules.js (limited to 'plugins/quickrules/quickrules.js') 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 -- cgit v1.2.3