/** * Mark-as-Junk plugin script * * @licstart The following is the entire license notice for the * JavaScript code in this file. * * Copyright (c) The Roundcube Dev Team * Copyright (C) Philip Weir * * The JavaScript code in this page is free software: you can redistribute it * and/or modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * @licend The above is the entire license notice * for the JavaScript code in this file. */ rcube_webmail.prototype.markasjunk_mark = function (is_spam) { var uids = this.env.uid ? [this.env.uid] : this.message_list.get_selection(); if (!uids) { return; } var lock = this.set_busy(true, 'loading'); this.http_post('plugin.markasjunk.' + (is_spam ? 'junk' : 'not_junk'), this.selection_post_data({ _uid: uids }), lock); }; rcube_webmail.prototype.markasjunk_move = function (mbox, uids) { var prev_uid = this.env.uid; if (this.message_list && uids.length == 1 && !this.message_list.in_selection(uids[0])) { this.env.uid = uids[0]; } if (mbox) { this.move_messages(mbox); } else if (this.env.markasjunk_permanently_remove == true) { this.permanently_remove_messages(); } else { this.delete_messages(); } this.env.uid = prev_uid; }; rcube_webmail.prototype.markasjunk_toggle_button = function () { var spamobj = $('a.junk'), hamobj = $('a.notjunk'), disp = { spam: true, ham: true }; if (this.env.markasjunk_spam_only) { disp.ham = false; } else if (!this.is_multifolder_listing() && this.env.markasjunk_spam_mailbox) { if (this.env.mailbox != this.env.markasjunk_spam_mailbox) { disp.ham = false; } else { disp.spam = false; } } // if only 1 button is visible make sure its the last one (for styling) // allow for multiple instances of the buttons, eg toolbar and contextmenu $.each(spamobj, function (i) { var cur_spamobj = spamobj.eq(i), cur_hamobj = hamobj.eq(i), cur_index = spamobj.eq(i).index(); if (cur_spamobj.parent('li').length > 0) { cur_spamobj = cur_spamobj.parent(); cur_hamobj = cur_hamobj.parent(); } var evt_rtn = rcmail.triggerEvent('markasjunk-update', { objs: { spamobj: cur_spamobj, hamobj: cur_hamobj }, disp: disp }); if (evt_rtn && evt_rtn.abort) { return; } disp = evt_rtn ? evt_rtn.disp : disp; disp.spam ? cur_spamobj.show() : cur_spamobj.hide(); disp.ham ? cur_hamobj.show() : cur_hamobj.hide(); if (disp.spam && !disp.ham) { if (cur_index < cur_hamobj.index()) { cur_spamobj.insertAfter(cur_hamobj); } } else if (cur_index > cur_hamobj.index()) { cur_hamobj.insertAfter(cur_spamobj); } }); }; rcube_webmail.prototype.markasjunk_is_spam_mbox = function () { return !this.is_multifolder_listing() && this.env.mailbox == this.env.markasjunk_spam_mailbox; }; if (window.rcmail) { rcmail.addEventListener('init', function () { // register command (directly enable in message view mode) rcmail.register_command('plugin.markasjunk.junk', function () { rcmail.markasjunk_mark(true); }, !rcmail.markasjunk_is_spam_mbox() && rcmail.env.uid); rcmail.register_command('plugin.markasjunk.not_junk', function () { rcmail.markasjunk_mark(false); }, rcmail.env.uid); if (rcmail.message_list) { rcmail.message_list.addEventListener('select', function (list) { rcmail.enable_command('plugin.markasjunk.junk', !rcmail.markasjunk_is_spam_mbox() && list.get_selection(false).length > 0); rcmail.enable_command('plugin.markasjunk.not_junk', list.get_selection(false).length > 0); }); } // make sure the correct icon is displayed even when there is no listupdate event rcmail.markasjunk_toggle_button(); }); rcmail.addEventListener('listupdate', function () { rcmail.markasjunk_toggle_button(); }); rcmail.addEventListener('beforemove', function (mbox) { if (mbox && typeof mbox === 'object') { mbox = mbox.id; } if (!mbox) { return; } var is_spam = null; // check if destination mbox equals junk box (and we're not already in the junk box) if (rcmail.env.markasjunk_move_spam && mbox == rcmail.env.markasjunk_spam_mailbox && mbox != rcmail.env.mailbox) { is_spam = true; } // or if destination mbox equals ham box and we are in the junk box else if (rcmail.env.markasjunk_move_ham && mbox == rcmail.env.markasjunk_ham_mailbox && rcmail.env.mailbox == rcmail.env.markasjunk_spam_mailbox) { is_spam = false; } if (is_spam !== null) { rcmail.markasjunk_mark(is_spam); return false; } }); }