You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
4.9 KiB
JavaScript
133 lines
4.9 KiB
JavaScript
/**
|
|
* Mark-as-Junk plugin script
|
|
*
|
|
* @licstart The following is the entire license notice for the
|
|
* JavaScript code in this file.
|
|
*
|
|
* Copyright (c) 2013-2018 The Roundcube Dev Team
|
|
* Copyright (C) 2009-2018 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.rcmail_markasjunk_move = function(mbox, uids) {
|
|
var prev_uid = this.env.uid, a_uids = $.isArray(uids) ? uids : uids.split(",");
|
|
|
|
if (this.message_list && a_uids.length == 1 && !this.message_list.in_selection([a_uids[0]]))
|
|
this.env.uid = a_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('beforemoveto', function(mbox) {
|
|
if (mbox && typeof mbox === 'object')
|
|
mbox = mbox.id;
|
|
|
|
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 && 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 && 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;
|
|
}
|
|
});
|
|
}
|