| | |
| | | |
| | | case 'menu-open': |
| | | case 'menu-save': |
| | | this.triggerEvent(command, {props:props}); |
| | | return false; |
| | | this.triggerEvent(command, {props:props}); |
| | | return false; |
| | | break; |
| | | |
| | | case 'open': |
| | |
| | | break; |
| | | |
| | | case 'select-all': |
| | | this.select_all_mode = props ? false : true; |
| | | if (props == 'invert') |
| | | this.message_list.invert_selection(); |
| | | else |
| | | this.message_list.select_all(props); |
| | | this.message_list.select_all(props == 'page' ? '' : props); |
| | | break; |
| | | |
| | | case 'select-none': |
| | |
| | | this.command('delete'); |
| | | else if (list.key_pressed == list.BACKSPACE_KEY) |
| | | this.command('delete'); |
| | | else if (list.key_pressed == 33) |
| | | this.command('previouspage'); |
| | | else if (list.key_pressed == 34) |
| | | this.command('nextpage'); |
| | | else |
| | | list.shiftkey = false; |
| | | }; |
| | |
| | | |
| | | // unselect selected messages |
| | | this.last_selected = 0; |
| | | if (this.message_list) |
| | | if (this.message_list) { |
| | | this.message_list.clear_selection(); |
| | | |
| | | this.select_all_mode = false; |
| | | } |
| | | this.select_folder(mbox, this.env.mailbox); |
| | | this.env.mailbox = mbox; |
| | | |
| | |
| | | if (!this.env.threading) |
| | | return; |
| | | |
| | | var root = this.find_thread_root(uid); |
| | | var root = this.message_list.find_root(uid); |
| | | |
| | | if (uid == root) |
| | | return; |
| | |
| | | this.set_unread_children(root); |
| | | }; |
| | | |
| | | // finds root message for specified thread |
| | | this.find_thread_root = function(uid) |
| | | { |
| | | var r = this.message_list.rows[uid]; |
| | | |
| | | if (r.parent_uid) |
| | | return this.find_thread_root(r.parent_uid); |
| | | else |
| | | return uid; |
| | | } |
| | | |
| | | // update thread indicators for all messages in a thread below the specified message |
| | | // return number of removed/added root level messages |
| | | this.update_thread = function (uid) |
| | |
| | | count--; |
| | | else if (row.unread) { |
| | | // update unread_children for thread root |
| | | var parent = this.find_thread_root(uid); |
| | | var parent = this.message_list.find_root(uid); |
| | | rows[parent].unread_children--; |
| | | this.set_unread_children(parent); |
| | | } |
| | |
| | | |
| | | // delete selected messages from the current mailbox |
| | | this.delete_messages = function() |
| | | { |
| | | var selection = this.message_list ? this.message_list.get_selection() : new Array(); |
| | | { |
| | | var selection = this.message_list ? $.merge([], this.message_list.get_selection()) : new Array(); |
| | | |
| | | // exit if no mailbox specified or if selection is empty |
| | | if (!this.env.uid && !selection.length) |
| | | return; |
| | | |
| | | |
| | | // also select childs of collapsed rows |
| | | for (var uid, i=0; i < selection.length; i++) { |
| | | uid = selection[i]; |
| | | if (this.message_list.rows[uid].has_children && !this.message_list.rows[uid].expanded) |
| | | this.message_list.select_childs(uid); |
| | | } |
| | | |
| | | // if config is set to flag for deletion |
| | | if (this.env.flag_for_deletion) { |
| | | this.mark_message('delete'); |
| | | return false; |
| | | } |
| | | } |
| | | // if there isn't a defined trash mailbox or we are in it |
| | | else if (!this.env.trash_mailbox || this.env.mailbox == this.env.trash_mailbox) |
| | | this.permanently_remove_messages(); |
| | | // if there is a trash mailbox defined and we're not currently in it |
| | | else { |
| | | // if shift was pressed delete it immediately |
| | | if (this.message_list && this.message_list.shiftkey) |
| | | { |
| | | if (this.message_list && this.message_list.shiftkey) { |
| | | if (confirm(this.get_label('deletemessagesconfirm'))) |
| | | this.permanently_remove_messages(); |
| | | } |
| | | } |
| | | else |
| | | this.move_messages(this.env.trash_mailbox); |
| | | } |
| | | } |
| | | |
| | | return true; |
| | | }; |
| | |
| | | // @private |
| | | this._with_selected_messages = function(action, lock, add_url) |
| | | { |
| | | var a_uids = new Array(); |
| | | var count = 0; |
| | | var a_uids = new Array(), |
| | | count = 0; |
| | | |
| | | if (this.env.uid) |
| | | a_uids[0] = this.env.uid; |
| | |
| | | for (var n=0; n<selection.length; n++) { |
| | | id = selection[n]; |
| | | a_uids[a_uids.length] = id; |
| | | count += this.update_thread(id); |
| | | count += this.update_thread(id); |
| | | this.message_list.remove_row(id, (this.env.display_next && n == selection.length-1)); |
| | | } |
| | | // make sure there are no selected rows |
| | |
| | | // remove threads from the end of the list |
| | | this.delete_excessive_thread_rows(); |
| | | |
| | | add_url += '&_uid='+this.uids_to_list(a_uids); |
| | | |
| | | // send request to server |
| | | this.http_post(action, '_uid='+a_uids.join(',')+'&_mbox='+urlencode(this.env.mailbox)+add_url, lock); |
| | | this.http_post(action, '_mbox='+urlencode(this.env.mailbox)+add_url, lock); |
| | | }; |
| | | |
| | | // set a specific flag to one or more messages |
| | |
| | | for (var i=0; i<a_uids.length; i++) |
| | | this.set_message(a_uids[i], 'unread', (flag=='unread' ? true : false)); |
| | | |
| | | this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag='+flag); |
| | | this.http_post('mark', '_uid='+this.uids_to_list(a_uids)+'&_flag='+flag); |
| | | |
| | | for (var i=0; i<a_uids.length; i++) |
| | | this.update_thread_root(a_uids[i], flag); |
| | |
| | | for (var i=0; i<a_uids.length; i++) |
| | | this.set_message(a_uids[i], 'flagged', (flag=='flagged' ? true : false)); |
| | | |
| | | this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag='+flag); |
| | | this.http_post('mark', '_uid='+this.uids_to_list(a_uids)+'&_flag='+flag); |
| | | }; |
| | | |
| | | // mark all message rows as deleted/undeleted |
| | |
| | | for (var i=0; i<a_uids.length; i++) |
| | | this.set_message(a_uids[i], 'deleted', false); |
| | | |
| | | this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag=undelete'); |
| | | this.http_post('mark', '_uid='+this.uids_to_list(a_uids)+'&_flag=undelete'); |
| | | return true; |
| | | }; |
| | | |
| | | this.flag_as_deleted = function(a_uids) |
| | | { |
| | | var add_url = ''; |
| | | var r_uids = new Array(); |
| | | var rows = this.message_list ? this.message_list.rows : new Array(); |
| | | var count = 0; |
| | | var add_url = '', |
| | | r_uids = new Array(), |
| | | rows = this.message_list ? this.message_list.rows : new Array(), |
| | | count = 0; |
| | | |
| | | for (var i=0; i<a_uids.length; i++) |
| | | { |
| | | for (var i=0; i<a_uids.length; i++) { |
| | | uid = a_uids[i]; |
| | | if (rows[uid]) |
| | | { |
| | | if (rows[uid]) { |
| | | if (rows[uid].unread) |
| | | r_uids[r_uids.length] = uid; |
| | | |
| | | if (this.env.skip_deleted) { |
| | | count += this.update_thread(uid); |
| | | if (this.env.skip_deleted) { |
| | | count += this.update_thread(uid); |
| | | this.message_list.remove_row(uid, (this.env.display_next && i == this.message_list.selection.length-1)); |
| | | } |
| | | else |
| | | this.set_message(uid, 'deleted', true); |
| | | } |
| | | } |
| | | else |
| | | this.set_message(uid, 'deleted', true); |
| | | } |
| | | } |
| | | |
| | | // make sure there are no selected rows |
| | | if (this.env.skip_deleted && this.message_list) { |
| | | if(!this.env.display_next) |
| | | this.message_list.clear_selection(); |
| | | this.message_list.clear_selection(); |
| | | if (count < 0) |
| | | add_url += '&_count='+(count*-1); |
| | | else if (count > 0) |
| | | // remove threads from the end of the list |
| | | this.delete_excessive_thread_rows(); |
| | | } |
| | | } |
| | | |
| | | add_url = '&_from='+(this.env.action ? this.env.action : ''); |
| | | |
| | | // ?? |
| | | if (r_uids.length) |
| | | add_url += '&_ruid='+r_uids.join(','); |
| | | add_url += '&_ruid='+this.uids_to_list(r_uids); |
| | | |
| | | if (this.env.skip_deleted) { |
| | | // also send search request to get the right messages |
| | |
| | | add_url += '&_next_uid='+this.env.next_uid; |
| | | } |
| | | |
| | | this.http_post('mark', '_uid='+a_uids.join(',')+'&_flag=delete'+add_url); |
| | | this.http_post('mark', '_uid='+this.uids_to_list(a_uids)+'&_flag=delete'+add_url); |
| | | return true; |
| | | }; |
| | | |
| | |
| | | // argument should be a coma-separated list of uids |
| | | this.flag_deleted_as_read = function(uids) |
| | | { |
| | | var icn_src; |
| | | var rows = this.message_list ? this.message_list.rows : new Array(); |
| | | var str = String(uids); |
| | | var a_uids = new Array(); |
| | | var icn_src, uid, |
| | | rows = this.message_list ? this.message_list.rows : new Array(), |
| | | str = String(uids), |
| | | a_uids = str.split(','); |
| | | |
| | | a_uids = str.split(','); |
| | | |
| | | for (var uid, i=0; i<a_uids.length; i++) |
| | | { |
| | | for (var i=0; i<a_uids.length; i++) { |
| | | uid = a_uids[i]; |
| | | if (rows[uid]) |
| | | this.set_message(uid, 'unread', false); |
| | | } |
| | | }; |
| | | |
| | | // Converts array of message UIDs to comma-separated list for use in URL |
| | | // with select_all mode checking |
| | | this.uids_to_list = function(uids) |
| | | { |
| | | return this.select_all_mode ? '*' : uids.join(','); |
| | | }; |
| | | |
| | | |
| | | /*********************************************************/ |
| | | /********* mailbox folders methods *********/ |