summaryrefslogtreecommitdiff
path: root/program/js
diff options
context:
space:
mode:
authoralecpl <alec@alec.pl>2010-03-25 16:29:02 +0000
committeralecpl <alec@alec.pl>2010-03-25 16:29:02 +0000
commitfb7ec576ab3a353b6eb99614e9636a9096462807 (patch)
tree9397ede61815ac232bedddc728a973e1b67f0c11 /program/js
parent5ffceb790602cb00f92acd8f275fe8246cb36222 (diff)
- Added possibility to select all messages in a folder (#1484756)
Diffstat (limited to 'program/js')
-rw-r--r--program/js/app.js81
1 files changed, 44 insertions, 37 deletions
diff --git a/program/js/app.js b/program/js/app.js
index 1f7290913..0fc5e7675 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -489,8 +489,8 @@ function rcube_webmail()
case 'menu-open':
case 'menu-save':
- this.triggerEvent(command, {props:props});
- return false;
+ this.triggerEvent(command, {props:props});
+ return false;
break;
case 'open':
@@ -753,10 +753,11 @@ function rcube_webmail()
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':
@@ -1833,9 +1834,10 @@ function rcube_webmail()
// 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;
@@ -2254,8 +2256,8 @@ function rcube_webmail()
// @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;
@@ -2287,8 +2289,10 @@ function rcube_webmail()
// 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
@@ -2355,7 +2359,7 @@ function rcube_webmail()
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);
@@ -2368,7 +2372,7 @@ function rcube_webmail()
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
@@ -2412,49 +2416,48 @@ function rcube_webmail()
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
@@ -2464,7 +2467,7 @@ function rcube_webmail()
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;
};
@@ -2472,21 +2475,25 @@ function rcube_webmail()
// 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 *********/