summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcmcnulty <cmcnulty@208e9e7b-5314-0410-a742-e7e81cd9613c>2006-05-24 18:25:47 +0000
committercmcnulty <cmcnulty@208e9e7b-5314-0410-a742-e7e81cd9613c>2006-05-24 18:25:47 +0000
commit8e3f2dba9a02bf9d57e162d74a7a5efef53436e5 (patch)
tree8fe86b5e3e58ff3c68a4ae5d280233b68b237f1b
parent51cc840118714882b582e828857c98564769e68b (diff)
Fixed bug with toggling new status of message after it had been marked as deleted
Addded undelete functionality that works like Thunderbird (pressing delete icon/key on deleted message undeletes) fixed many but not all of the 'strict' javascript error messages git-svn-id: https://svn.roundcube.net/trunk@243 208e9e7b-5314-0410-a742-e7e81cd9613c
-rw-r--r--roundcubemail/program/js/app.js152
1 files changed, 111 insertions, 41 deletions
diff --git a/roundcubemail/program/js/app.js b/roundcubemail/program/js/app.js
index da7d18c9a..a6b43cb8e 100644
--- a/roundcubemail/program/js/app.js
+++ b/roundcubemail/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;
};