diff options
-rw-r--r-- | program/js/app.js | 152 |
1 files changed, 111 insertions, 41 deletions
diff --git a/program/js/app.js b/program/js/app.js index da7d18c9a..a6b43cb8e 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -29,6 +29,7 @@ function rcube_webmail() this.commands = new Object(); this.selection = new Array(); this.last_selected = 0; + this.in_message_list = false; // create public reference to myself rcube_webmail_client = this; @@ -256,8 +257,8 @@ function rcube_webmail() // reset last clicked if user clicks on anything other than the message table this.reset_click = function() { - this.in_message_list = false; - }; + this.in_message_list = false; + }; this.click_on_list = function(e) { @@ -328,8 +329,12 @@ function rcube_webmail() for(var r=0; r<msg_list.tBodies[0].childNodes.length; r++) { row = msg_list.tBodies[0].childNodes[r]; + while (row && (row.nodeType != 1 || row.style.display == 'none')) { + row = row.nextSibling; + r++; + } //row = msg_list.tBodies[0].rows[r]; - this.init_message_row(row); + if (row) this.init_message_row(row); } } @@ -989,7 +994,7 @@ function rcube_webmail() // set command enabled or disabled this.enable_command = function() { - var args = this.enable_command.arguments; + var args = arguments; if(!args.length) return -1; var command; @@ -1001,6 +1006,7 @@ function rcube_webmail() this.commands[command] = enable; this.set_button(command, (enable ? 'act' : 'pas')); } + return true; }; @@ -1355,9 +1361,11 @@ function rcube_webmail() // reset selection first this.clear_selection(); - for (var n in this.list_rows) + for (var n in this.list_rows) { if (!filter || this.list_rows[n][filter]==true) - this.highlight_row(n, true); + this.highlight_row(n, true); + } + return true; }; @@ -1520,6 +1528,7 @@ function rcube_webmail() // send request to server var url = '_mbox='+escape(mbox); this.http_request('purge', url+add_url, lock); + return true; }; @@ -1611,10 +1620,11 @@ function rcube_webmail() this.permanently_remove_messages(); // if there isn't a defined trash mailbox and the config is set to flag for deletion else if (!this.env.trash_mailbox && this.env.flag_for_deletion) { - this.mark_message('delete',this.env.uid); + flag = 'delete'; + this.mark_message(flag); if(this.env.action=="show"){ this.command('nextmessage','',this); - } else { + } else if (this.selection.length == 1) { next_row = this.get_next_row(); prev_row = this.get_prev_row(); new_row = (next_row) ? next_row : prev_row; @@ -1653,11 +1663,9 @@ function rcube_webmail() break; case 'delete': case 'undelete': - this.toggle_delete_status(flag,a_uids); + this.toggle_delete_status(a_uids); break; } - // send request to server - this.http_request('mark', '_uid='+a_uids.join(',')+'&_flag='+flag); }; // set class to read/unread @@ -1694,10 +1702,11 @@ function rcube_webmail() this.message_rows[uid].icon.src = icn_src; } } + this.http_request('mark', '_uid='+a_uids.join(',')+'&_flag='+flag); } // mark all message rows as deleted/undeleted - this.toggle_delete_status = function(flag, a_uids) { + this.toggle_delete_status = function(a_uids) { if (this.env.read_when_deleted) { this.toggle_read_status('read',a_uids); } @@ -1705,41 +1714,86 @@ function rcube_webmail() if (this.env.action == "show") return false; + if (a_uids.length==1){ + if(this.message_rows[uid].classname.indexOf('deleted') < 0 ){ + this.flag_as_deleted(a_uids) + } else { + this.flag_as_undeleted(a_uids) + } + return true; + } + + var all_deleted = true; + + for (var i=0; i<a_uids.length; i++) { + uid = a_uids[i]; + if (this.message_rows[uid]) { + if (this.message_rows[uid].classname.indexOf('deleted')<0) { + all_deleted = false; + break; + } + } + } + + if (all_deleted) + this.flag_as_undeleted(a_uids); + else + this.flag_as_deleted(a_uids); + + return true; + } + + this.flag_as_undeleted = function(a_uids){ + // if deleting message from "view message" don't bother with delete icon + if (this.env.action == "show") + return false; + var icn_src; - for (var i=0; i<a_uids.length; i++) - { + + for (var i=0; i<a_uids.length; i++) { uid = a_uids[i]; - if (this.message_rows[uid]) - { - this.message_rows[uid].deleted = (flag=='undelete' ? false : true); + if (this.message_rows[uid]) { + this.message_rows[uid].deleted = false; - if (this.message_rows[uid].classname.indexOf('deleted')<0 && this.message_rows[uid].deleted) - { - this.message_rows[uid].classname += ' deleted'; - this.set_classname(this.message_rows[uid].obj, 'deleted', true); - - if (this.env.deletedicon) - icn_src = this.env.deletedicon; - } - else if (!this.message_rows[uid].deleted) - { + if (this.message_rows[uid].classname.indexOf('deleted') > 0) { this.message_rows[uid].classname = this.message_rows[uid].classname.replace(/\s*deleted/, ''); this.set_classname(this.message_rows[uid].obj, 'deleted', false); - - if (this.message_rows[uid].unread && this.env.unreadicon) - icn_src = this.env.unreadicon; - else if (this.message_rows[uid].replied && this.env.repliedicon) - icn_src = this.env.repliedicon; - else if (this.env.messageicon) - icn_src = this.env.messageicon; - } - + } + if (this.message_rows[uid].unread && this.env.unreadicon) + icn_src = this.env.unreadicon; + else if (this.message_rows[uid].replied && this.env.repliedicon) + icn_src = this.env.repliedicon; + else if (this.env.messageicon) + icn_src = this.env.messageicon; if (this.message_rows[uid].icon && icn_src) this.message_rows[uid].icon.src = icn_src; - } } + } + this.http_request('mark', '_uid='+a_uids.join(',')+'&_flag=undelete'); + return true; } + + this.flag_as_deleted = function(a_uids) { + // if deleting message from "view message" don't bother with delete icon + if (this.env.action == "show") + return false; + for (var i=0; i<a_uids.length; i++) { + uid = a_uids[i]; + if (this.message_rows[uid]) { + this.message_rows[uid].deleted = true; + + if (this.message_rows[uid].classname.indexOf('deleted')<0) { + this.message_rows[uid].classname += ' deleted'; + this.set_classname(this.message_rows[uid].obj, 'deleted', true); + } + if (this.message_rows[uid].icon && this.env.deletedicon) + this.message_rows[uid].icon.src = this.env.deletedicon; + } + } + this.http_request('mark', '_uid='+a_uids.join(',')+'&_flag=delete'); + return true; + } /*********************************************************/ /********* message compose methods *********/ @@ -1853,6 +1907,7 @@ function rcube_webmail() input_message.value = message; this.env.identity = id; + return true; }; @@ -1880,6 +1935,8 @@ function rcube_webmail() // clear upload form if (!a && this.gui_objects.attachmentform && this.gui_objects.attachmentform!=this.gui_objects.messageform) this.gui_objects.attachmentform.reset(); + + return true; }; @@ -1929,6 +1986,7 @@ function rcube_webmail() // set reference to the form object this.gui_objects.attachmentform = form; + return true; }; @@ -1942,6 +2000,7 @@ function rcube_webmail() var li = document.createElement('LI'); li.innerHTML = name; this.gui_objects.attachmentlist.appendChild(li); + return true; }; @@ -1950,6 +2009,8 @@ function rcube_webmail() { if (value) this.http_request('addcontact', '_address='+value); + + return true; }; // send remote request to search mail @@ -1961,6 +2022,7 @@ function rcube_webmail() this.set_busy(true, 'searching'); this.http_request('search', '_search='+value+'&_mbox='+mbox, true); } + return true; }; // reset quick-search form @@ -1970,6 +2032,7 @@ function rcube_webmail() this.gui_objects.qsearchbox.value = ''; this.env.search_request = null; + return true; }; @@ -2271,6 +2334,7 @@ function rcube_webmail() this.set_busy(true); target.location.href = this.env.comm_path+'&_action='+action+'&_cid='+cid+add_url; } + return true; }; @@ -2307,6 +2371,7 @@ function rcube_webmail() // send request to server this.http_request('delete', '_cid='+a_cids.join(',')+'&_from='+(this.env.action ? this.env.action : '')); + return true; }; @@ -2317,10 +2382,11 @@ function rcube_webmail() return false; var row = this.contact_rows[cid].obj; - for (var c=0; c<cols_arr.length; c++) + for (var c=0; c<cols_arr.length; c++){ if (row.cells[c]) row.cells[c].innerHTML = cols_arr[c]; - + } + return true; }; @@ -2341,6 +2407,8 @@ function rcube_webmail() if (action == 'ldappublicsearch') target.location.href = this.env.comm_path+'&_action='+action+add_url; + + return true; }; // add ldap contacts to address book @@ -2378,7 +2446,7 @@ function rcube_webmail() this.load_identity = function(id, action) { if (action=='edit-identity' && (!id || id==this.env.iid)) - return; + return false; var add_url = ''; var target = window; @@ -2394,6 +2462,7 @@ function rcube_webmail() this.set_busy(true); target.location.href = this.env.comm_path+'&_action='+action+'&_iid='+id+add_url; } + return true; }; @@ -2418,9 +2487,10 @@ function rcube_webmail() // if (this.env.framed && id) this.set_busy(true); - location.href = this.env.comm_path+'&_action=delete-identity&_iid='+id; + location.href = this.env.comm_path+'&_action=delete-identity&_iid='+id; // else if (id) // this.http_request('delete-identity', '_iid='+id); + return true; }; |