summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsvncommit <devs@roundcube.net>2006-05-24 18:25:47 +0000
committersvncommit <devs@roundcube.net>2006-05-24 18:25:47 +0000
commit1c585394b5d08124451340b0e75df060c3f6a23a (patch)
treecf0c5cf8c653869bd22e5eb88e58a2dd18843d30
parenta0939d4f33394762cd09af777bbeb60abe29df0d (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
-rw-r--r--program/js/app.js152
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;
};