| | |
| | | | Licensed under the GNU GPL | |
| | | | | |
| | | +-----------------------------------------------------------------------+ |
| | | | Author: Thomas Bruederli <roundcube@gmail.com> | |
| | | | Authors: Thomas Bruederli <roundcube@gmail.com> | |
| | | | Charles McNulty <charles@charlesmcnulty.com> | |
| | | +-----------------------------------------------------------------------+ |
| | | |
| | | $Id$ |
| | |
| | | } |
| | | |
| | | // enable mail commands |
| | | this.enable_command('list', 'compose', 'add-contact', true); |
| | | this.enable_command('list', 'compose', 'add-contact', 'search', 'reset-search', true); |
| | | |
| | | if (this.env.action=='show') |
| | | { |
| | |
| | | |
| | | if (this.env.messagecount) |
| | | this.enable_command('select-all', 'select-none', 'sort', 'expunge', true); |
| | | |
| | | if (this.env.messagecount && this.env.mailbox==this.env.trash_mailbox) |
| | | this.enable_command('purge', true); |
| | | |
| | | this.set_page_buttons(); |
| | | |
| | |
| | | this.enable_command('logout', true); |
| | | |
| | | // disable browser's contextmenus |
| | | //document.oncontextmenu = function(){ return false; } |
| | | // document.oncontextmenu = function(){ return false; } |
| | | |
| | | // load body click event |
| | | document.onmousedown = function(){ return rcube_webmail_client.reset_click(); }; |
| | |
| | | // start interval for keep-alive/recent_check signal |
| | | if (this.kepp_alive_interval && this.task=='mail' && this.gui_objects.messagelist) |
| | | this.kepp_alive_int = setInterval(this.ref+'.check_for_recent()', this.kepp_alive_interval); |
| | | else |
| | | else if (this.task!='login') |
| | | this.kepp_alive_int = setInterval(this.ref+'.send_keep_alive()', this.kepp_alive_interval); |
| | | }; |
| | | |
| | |
| | | |
| | | this.in_message_list = true; |
| | | e.cancelBubble = true; |
| | | if (e.stopPropagation) e.stopPropagation(); |
| | | }; |
| | | |
| | | // reset last clicked if user clicks on anything other than the message table |
| | |
| | | var keyCode = document.layers ? e.which : document.all ? event.keyCode : document.getElementById ? e.keyCode : 0; |
| | | var mod_key = this.get_modifier(e); |
| | | var scroll_to = 0; |
| | | |
| | | |
| | | var last_selected_row = this.list_rows[this.last_selected]; |
| | | |
| | | if (keyCode == 40) { // down arrow key pressed |
| | |
| | | } |
| | | if (!new_row) return false; |
| | | scroll_to = new_row.offsetTop; |
| | | } else {return false}; |
| | | } else {return true;} |
| | | |
| | | if (mod_key != CONTROL_KEY) |
| | | this.select_row(new_row.uid,mod_key); |
| | |
| | | this.list_rows = this.contact_rows; |
| | | |
| | | if (this.env.cid) |
| | | this.select(this.env.cid); |
| | | this.highlight_row(this.env.cid); |
| | | }; |
| | | |
| | | |
| | |
| | | this.list_rows = this.identity_rows; |
| | | |
| | | if (this.env.iid) |
| | | this.select(this.env.iid); |
| | | this.highlight_row(this.env.iid); |
| | | }; |
| | | |
| | | |
| | |
| | | // misc list commands |
| | | case 'list': |
| | | if (this.task=='mail') |
| | | { |
| | | if (this.env.search_request<0 || (this.env.search_request && props != this.env.mailbox)) |
| | | this.reset_qsearch(); |
| | | this.list_mailbox(props); |
| | | } |
| | | else if (this.task=='addressbook') |
| | | this.list_contacts(); |
| | | break; |
| | |
| | | this.expunge_mailbox(this.env.mailbox); |
| | | break; |
| | | |
| | | case 'clear-mailbox': |
| | | //if (this.env.messagecount) |
| | | //this.clear_mailbox(this.env.mailbox); |
| | | case 'purge': |
| | | case 'empty-mailbox': |
| | | if (this.env.messagecount) |
| | | this.purge_mailbox(this.env.mailbox); |
| | | break; |
| | | |
| | | |
| | |
| | | this.add_contact(props); |
| | | break; |
| | | |
| | | // mail quicksearch |
| | | case 'search': |
| | | if (!props && this.gui_objects.qsearchbox) |
| | | props = this.gui_objects.qsearchbox.value; |
| | | if (props) |
| | | this.qsearch(escape(props), this.env.mailbox); |
| | | break; |
| | | |
| | | // reset quicksearch |
| | | case 'reset-search': |
| | | var s = this.env.search_request; |
| | | this.reset_qsearch(); |
| | | |
| | | if (s) |
| | | this.list_mailbox(this.env.mailbox); |
| | | break; |
| | | |
| | | // ldap search |
| | | case 'ldappublicsearch': |
| | |
| | | // onmouseup-handler of message list row |
| | | this.click_row = function(e, id) |
| | | { |
| | | var mod_key = this.get_modifier(e); |
| | | |
| | | // don't do anything (another action processed before) |
| | | if (this.dont_select) |
| | |
| | | } |
| | | |
| | | // unselects currently selected row |
| | | if (!this.drag_active && this.in_selection_before==id) { |
| | | var mod_key = this.get_modifier(e); |
| | | if (!this.drag_active && this.in_selection_before==id) |
| | | this.select_row(id,mod_key); |
| | | } |
| | | |
| | | this.drag_start = false; |
| | | this.in_selection_before = false; |
| | | |
| | | // row was double clicked |
| | | if (this.task=='mail' && this.list_rows && this.list_rows[id].clicked) |
| | | if (this.task=='mail' && this.list_rows && this.list_rows[id].clicked && !mod_key) |
| | | { |
| | | this.show_message(id); |
| | | return false; |
| | |
| | | |
| | | for (var n in this.list_rows) |
| | | if (!filter || this.list_rows[n][filter]==true) |
| | | this.select(n, true); |
| | | this.highlight_row(n, true); |
| | | }; |
| | | |
| | | |
| | |
| | | this.env.current_page = page; |
| | | this.clear_selection(); |
| | | } |
| | | |
| | | // also send search request to get the right messages |
| | | if (this.env.search_request) |
| | | add_url += '&_search='+this.env.search_request; |
| | | |
| | | if (this.env.mailbox!=mbox) |
| | | this.select_mailbox(mbox); |
| | |
| | | this.http_request('expunge', url+add_url, lock); |
| | | }; |
| | | |
| | | |
| | | this.purge_mailbox = function(mbox) |
| | | { |
| | | var lock = false; |
| | | var add_url = ''; |
| | | |
| | | if (!confirm(this.get_label('purgefolderconfirm'))) |
| | | return false; |
| | | |
| | | // lock interface if it's the active mailbox |
| | | if (mbox == this.env.mailbox) |
| | | { |
| | | lock = true; |
| | | this.set_busy(true, 'loading'); |
| | | add_url = '&_reload=1'; |
| | | } |
| | | |
| | | // send request to server |
| | | var url = '_mbox='+escape(mbox); |
| | | this.http_request('purge', url+add_url, lock); |
| | | }; |
| | | |
| | | |
| | | // move selected messages to the specified mailbox |
| | | this.move_messages = function(mbox) |
| | |
| | | this.http_request('addcontact', '_address='+value); |
| | | }; |
| | | |
| | | // send remote request to search mail |
| | | this.qsearch = function(value, mbox) |
| | | { |
| | | if (value && mbox) |
| | | { |
| | | this.clear_message_list(); |
| | | this.set_busy(true, 'searching'); |
| | | this.http_request('search', '_search='+value+'&_mbox='+mbox, true); |
| | | } |
| | | }; |
| | | |
| | | // reset quick-search form |
| | | this.reset_qsearch = function() |
| | | { |
| | | if (this.gui_objects.qsearchbox) |
| | | this.gui_objects.qsearchbox.value = ''; |
| | | |
| | | this.env.search_request = null; |
| | | }; |
| | | |
| | | |
| | | /*********************************************************/ |
| | | /********* keyboard live-search methods *********/ |
| | |
| | | return false; |
| | | |
| | | //if (this.env.framed && add_url=='') |
| | | |
| | | // add_url = '&_framed=1'; |
| | | |
| | | if (action && (cid || action=='add')) |
| | |
| | | this.delete_contacts = function() |
| | | { |
| | | // exit if no mailbox specified or if selection is empty |
| | | if (!(this.selection.length || this.env.cid)) |
| | | if (!(this.selection.length || this.env.cid) || !confirm(this.get_label('deletecontactconfirm'))) |
| | | return; |
| | | |
| | | |
| | | var a_cids = new Array(); |
| | | |
| | | if (this.env.cid) |
| | |
| | | this.set_page_buttons(); |
| | | }; |
| | | |
| | | // replace content of quota display |
| | | this.set_quota = function(text) |
| | | { |
| | | if (this.gui_objects.quotadisplay) |
| | | this.gui_objects.quotadisplay.innerHTML = text; |
| | | }; |
| | | |
| | | |
| | | // update the mailboxlist |
| | | this.set_unread_count = function(mbox, count, set_title) |
| | |
| | | } |
| | | |
| | | // set unread count to window title |
| | | if (set_title && document.title) |
| | | reg = /^\([0-9]+\)\s+/i; |
| | | if (set_title && count && document.title) |
| | | { |
| | | var doc_title = String(document.title); |
| | | reg = /^\([0-9]+\)\s+/i; |
| | | |
| | | if (count && doc_title.match(reg)) |
| | | document.title = doc_title.replace(reg, '('+count+') '); |
| | |
| | | document.title = '('+count+') '+doc_title; |
| | | else |
| | | document.title = doc_title.replace(reg, ''); |
| | | } |
| | | // remove unread count from window title |
| | | else if (document.title) |
| | | { |
| | | document.title = document.title.replace(reg, ''); |
| | | } |
| | | }; |
| | | |
| | |
| | | if (request_obj.__lock) |
| | | this.set_busy(false); |
| | | |
| | | console(request_obj.responseText); |
| | | console(request_obj.get_text()); |
| | | |
| | | // if we get javascript code from server -> execute it |
| | | if (request_obj.get_text() && (ctype=='text/javascript' || ctype=='application/x-javascript')) |
| | |
| | | break; |
| | | |
| | | case 'list': |
| | | if (this.env.messagecount) |
| | | this.enable_command('purge', (this.env.mailbox==this.env.trash_mailbox)); |
| | | |
| | | case 'expunge': |
| | | this.enable_command('select-all', 'select-none', 'expunge', this.env.messagecount ? true : false); |
| | | break; |
| | | break; |
| | | } |
| | | |
| | | request_obj.reset(); |
| | |
| | | }; |
| | | |
| | | |
| | | /* deprecated methods |
| | | |
| | | // check if Shift-key is pressed on event |
| | | this.check_shiftkey = function(e) |
| | | { |
| | |
| | | else |
| | | return false; |
| | | } |
| | | */ |
| | | |
| | | |
| | | // returns modifier key (constants defined at top of file) |
| | | // returns modifier key (constants defined at top of file) |
| | | this.get_modifier = function(e) |
| | | { |
| | | var opcode = 0; |
| | | if (e = e || window.event) |
| | | { |
| | | e = e || window.event; |
| | | |
| | | if (bw.mac && e) |
| | | { |
| | | opcode += (e.metaKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY); |
| | | return opcode; |
| | | } |
| | | if (e) |
| | | { |
| | | opcode += (e.ctrlKey && CONTROL_KEY) + (e.shiftKey && SHIFT_KEY); |
| | | return opcode; |
| | | } |
| | | return opcode; |
| | | } |
| | | if (e.cancelBubble) |
| | | { |
| | | { |
| | | e.cancelBubble = true; |
| | | e.returnValue = false; |
| | | } |
| | | } |
| | | else if (e.preventDefault) |
| | | e.preventDefault(); |
| | | } |