summaryrefslogtreecommitdiff
path: root/plugins/markasjunk2/markasjunk2.js
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/markasjunk2/markasjunk2.js')
-rw-r--r--plugins/markasjunk2/markasjunk2.js199
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