diff options
author | Hugues Hiegel <root@paranoid> | 2014-08-05 16:46:22 +0200 |
---|---|---|
committer | Hugues Hiegel <root@paranoid> | 2014-08-05 16:46:22 +0200 |
commit | 59478e06c25303a790a0840ab2ac30662c4ef781 (patch) | |
tree | 8d5e964a8f94adaef41efebb0597629f11495c42 /plugins/markasjunk2/markasjunk2.js | |
parent | 7c494b677f9e470ee0d32e62cfa8dc709f39e748 (diff) |
c'est la merde..working
Diffstat (limited to 'plugins/markasjunk2/markasjunk2.js')
-rw-r--r-- | plugins/markasjunk2/markasjunk2.js | 199 |
1 files changed, 199 insertions, 0 deletions
diff --git a/plugins/markasjunk2/markasjunk2.js b/plugins/markasjunk2/markasjunk2.js new file mode 100644 index 000000000..5dc141f6a --- /dev/null +++ b/plugins/markasjunk2/markasjunk2.js @@ -0,0 +1,199 @@ +/** + * MarkAsJunk2 plugin script + */ + +function rcmail_markasjunk2(prop) { + if (!rcmail.env.uid && (!rcmail.message_list || !rcmail.message_list.get_selection().length)) + return; + + if (!prop || prop == 'markasjunk2') + prop = 'junk'; + + var prev_sel = null; + + // also select childs of (collapsed) threads + if (rcmail.message_list) { + if (rcmail.env.uid) { + if (rcmail.message_list.rows[rcmail.env.uid].has_children && !rcmail.message_list.rows[rcmail.env.uid].expanded) { + if (!rcmail.message_list.in_selection(rcmail.env.uid)) { + prev_sel = rcmail.message_list.get_selection(); + rcmail.message_list.select_row(rcmail.env.uid); + } + + rcmail.message_list.select_childs(rcmail.env.uid); + rcmail.env.uid = null; + } + else if (rcmail.message_list.get_single_selection() == rcmail.env.uid) { + rcmail.env.uid = null; + } + } + else { + selection = rcmail.message_list.get_selection(); + for (var i in selection) { + if (rcmail.message_list.rows[selection[i]].has_children && !rcmail.message_list.rows[selection[i]].expanded) + rcmail.message_list.select_childs(selection[i]); + } + } + } + + 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.markasjunk2.' + prop, '_uid='+uids+'&_mbox='+urlencode(rcmail.env.mailbox), lock); + + if (prev_sel) { + rcmail.message_list.clear_selection(); + + for (var i in prev_sel) + rcmail.message_list.select_row(prev_sel[i], CONTROL_KEY); + } +} + +function rcmail_markasjunk2_notjunk(prop) { + rcmail_markasjunk2('not_junk'); +} + +rcube_webmail.prototype.rcmail_markasjunk2_move = function(mbox, uid) { + var prev_uid = rcmail.env.uid; + var prev_sel = null; + var a_uids = uid.split(","); + + if (rcmail.message_list && a_uids.length == 1 && !rcmail.message_list.rows[a_uids[0]]) { + rcmail.env.uid = a_uids[0]; + } + else if (rcmail.message_list && a_uids.length == 1 && !rcmail.message_list.in_selection(a_uids[0]) && !rcmail.env.threading) { + rcmail.env.uid = a_uids[0]; + rcmail.message_list.remove_row(rcmail.env.uid, false); + } + else if (rcmail.message_list && (!rcmail.message_list.in_selection(a_uids[0]) || a_uids.length != rcmail.message_list.selection.length)) { + prev_sel = rcmail.message_list.get_selection(); + rcmail.message_list.clear_selection(); + + for (var i in a_uids) + rcmail.message_list.select_row(a_uids[i], CONTROL_KEY); + } + + if (mbox) + rcmail.move_messages(mbox); + else + rcmail.delete_messages(); + + rcmail.env.uid = prev_uid; + + if (prev_sel) { + rcmail.message_list.clear_selection(); + + for (var i in prev_sel) { + if (prev_sel[i] != uid) + rcmail.message_list.select_row(prev_sel[i], CONTROL_KEY); + } + } +} + +function rcmail_markasjunk2_init() { + if (window.rcm_contextmenu_register_command) { + rcm_contextmenu_register_command('markasjunk2', 'rcmail_markasjunk2', rcmail.gettext('markasjunk2.markasjunk'), 'reply', null, true, null, null, 'markmessage markasjunk2'); + rcm_contextmenu_register_command('markasnotjunk2', 'rcmail_markasjunk2_notjunk', rcmail.gettext('markasjunk2.markasnotjunk'), 'reply', null, true, null, null, 'markmessage markasnotjunk2'); + $('#rcmContextMenu li.unflagged').removeClass('separator_below'); + $('#rcmContextMenu li.reply').addClass('separator_above'); + } +} + +function rcmail_markasjunk2_update() { + var spamobj = $('#' + rcmail.buttons['plugin.markasjunk2.junk'][0].id); + var hamobj = $('#' + rcmail.buttons['plugin.markasjunk2.not_junk'][0].id); + + if (spamobj.parent('li').length > 0) { + spamobj = spamobj.parent(); + hamobj = hamobj.parent(); + } + + if (!rcmail.env.markasjunk2_override && rcmail.env.markasjunk2_spam_mailbox && rcmail.env.mailbox != rcmail.env.markasjunk2_spam_mailbox) { + $('#rcmContextMenu li.markasjunk2').show(); + $('#rcmContextMenu li.markasnotjunk2').hide(); + spamobj.show(); + hamobj.hide(); + } + else if (!rcmail.env.markasjunk2_override) { + $('#rcmContextMenu li.markasjunk2').hide(); + $('#rcmContextMenu li.markasnotjunk2').show(); + spamobj.hide(); + hamobj.show(); + } +} + +function rcmail_markasjunk2_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.markasjunk2.junk', 'plugin.markasjunk2.not_junk', false); + + break; + case 'beforemove': + case 'beforemoveto': + rcmail.enable_command('plugin.markasjunk2.junk', 'plugin.markasjunk2.not_junk', false); + break; + case 'aftermove': + case 'aftermoveto': + if (rcmail.env.action == 'show') + rcmail.enable_command('plugin.markasjunk2.junk', 'plugin.markasjunk2.not_junk', true); + + break; + case 'afterpurge': + case 'afterexpunge': + if (!rcmail.env.messagecount && rcmail.task == 'mail') + rcmail.enable_command('plugin.markasjunk2.junk', 'plugin.markasjunk2.not_junk', false); + + break; + } +} + +$(document).ready(function() { + if (window.rcmail) { + rcmail.addEventListener('init', function(evt) { + // register command (directly enable in message view mode) + rcmail.register_command('plugin.markasjunk2.junk', rcmail_markasjunk2, rcmail.env.uid); + rcmail.register_command('plugin.markasjunk2.not_junk', rcmail_markasjunk2_notjunk, rcmail.env.uid); + + if (rcmail.message_list) { + rcmail.message_list.addEventListener('select', function(list) { + rcmail.enable_command('plugin.markasjunk2.junk', list.get_selection().length > 0); + rcmail.enable_command('plugin.markasjunk2.not_junk', list.get_selection().length > 0); + }); + } + }); + + rcmail.add_onload('rcmail_markasjunk2_init()'); + rcmail.addEventListener('listupdate', function(props) { rcmail_markasjunk2_update(); } ); + + rcmail.addEventListener('beforemoveto', function(mbox) { + if (mbox && typeof mbox === 'object') + mbox = mbox.id; + + // check if destination mbox equals junk box (and we're not already in the junk box) + if (rcmail.env.markasjunk2_move_spam && mbox && mbox == rcmail.env.markasjunk2_spam_mailbox && mbox != rcmail.env.mailbox) { + rcmail_markasjunk2(); + return false; + + } + // or if destination mbox equals ham box and we are in the junk box + else if (rcmail.env.markasjunk2_move_ham && mbox && mbox == rcmail.env.markasjunk2_ham_mailbox && rcmail.env.mailbox == rcmail.env.markasjunk2_spam_mailbox) { + rcmail_markasjunk2_notjunk(); + return false; + } + + return; + } ); + + // update button activation after external events + rcmail.addEventListener('beforedelete', function(props) { rcmail_markasjunk2_status('beforedelete'); } ); + rcmail.addEventListener('beforemove', function(props) { rcmail_markasjunk2_status('beforemove'); } ); + rcmail.addEventListener('beforemoveto', function(props) { rcmail_markasjunk2_status('beforemoveto'); } ); + rcmail.addEventListener('aftermove', function(props) { rcmail_markasjunk2_status('aftermove'); } ); + rcmail.addEventListener('aftermoveto', function(props) { rcmail_markasjunk2_status('aftermoveto'); } ); + rcmail.addEventListener('afterpurge', function(props) { rcmail_markasjunk2_status('afterpurge'); } ); + rcmail.addEventListener('afterexpunge', function(props) { rcmail_markasjunk2_status('afterexpunge'); } ); + } +});
\ No newline at end of file |