diff options
author | alecpl <alec@alec.pl> | 2008-09-18 10:14:16 +0000 |
---|---|---|
committer | alecpl <alec@alec.pl> | 2008-09-18 10:14:16 +0000 |
commit | 095d05ef00674553be1d8ee693cfee26fc544510 (patch) | |
tree | d8139cd553931c3d5575a090a1957e68b37b757d | |
parent | 9281884ff0c2e15118e559d666c243512208ebfd (diff) |
#1484805: fix next/last page buttons when new message is added to the list + remove last message
-rw-r--r-- | program/js/app.js | 8 | ||||
-rw-r--r-- | program/js/list.js | 53 | ||||
-rw-r--r-- | program/steps/mail/check_recent.inc | 2 |
3 files changed, 52 insertions, 11 deletions
diff --git a/program/js/app.js b/program/js/app.js index 0f074f375..6ebc55669 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -3559,6 +3559,14 @@ function rcube_webmail() row.appendChild(col); this.message_list.insert_row(row, attop); + + // remove 'old' row + if (attop && this.env.pagesize && this.message_list.rowcount > this.env.pagesize) + { + var uid = this.message_list.get_last_row(); + this.message_list.remove_row(uid); + this.message_list.clear_selection(uid); + } }; diff --git a/program/js/list.js b/program/js/list.js index 926d98aa7..6abe6a023 100644 --- a/program/js/list.js +++ b/program/js/list.js @@ -290,7 +290,7 @@ click_row: function(e, id) /** - * get next and previous rows that are not hidden + * get next/previous/last rows that are not hidden */ get_next_row: function() { @@ -318,8 +318,24 @@ get_prev_row: function() return new_row; }, +get_last_row: function() +{ + if (this.rowcount) + { + var rows = this.list.tBodies[0].rows; + + for(var i=rows.length-1; i>=0; i--) + if(rows[i].id && String(rows[i].id).match(/rcmrow([a-z0-9\-_=]+)/i) && this.rows[RegExp.$1] != null) + return RegExp.$1; + } + + return null; +}, + -// selects or unselects the proper row depending on the modifier key pressed +/** + * selects or unselects the proper row depending on the modifier key pressed + */ select_row: function(id, mod_key, with_mouse) { var select_before = this.selection.join(','); @@ -482,21 +498,36 @@ select_all: function(filter) /** - * Unselect all selected rows + * Unselect selected row(s) */ -clear_selection: function() +clear_selection: function(id) { var num_select = this.selection.length; - for (var n=0; n<this.selection.length; n++) - if (this.rows[this.selection[n]]) + + // one row + if (id) { - this.set_classname(this.rows[this.selection[n]].obj, 'selected', false); - this.set_classname(this.rows[this.selection[n]].obj, 'unfocused', false); + for (var n=0; n<this.selection.length; n++) + if (this.selection[n] == id) + { + this.selection.splice(n,1); + break; + } + } + // all rows + else + { + for (var n=0; n<this.selection.length; n++) + if (this.rows[this.selection[n]]) + { + this.set_classname(this.rows[this.selection[n]].obj, 'selected', false); + this.set_classname(this.rows[this.selection[n]].obj, 'unfocused', false); + } + + this.selection = new Array(); } - this.selection = new Array(); - - if (num_select) + if (num_select && !this.selection.length) this.trigger_event('select'); }, diff --git a/program/steps/mail/check_recent.inc b/program/steps/mail/check_recent.inc index dee8ca61b..e84d7ba9e 100644 --- a/program/steps/mail/check_recent.inc +++ b/program/steps/mail/check_recent.inc @@ -35,6 +35,8 @@ foreach ($a_mailboxes as $mbox_name) $unread_count = $IMAP->messagecount(NULL, 'UNSEEN', TRUE); $OUTPUT->set_env('messagecount', $IMAP->messagecount()); + $OUTPUT->set_env('pagesize', $IMAP->page_size); + $OUTPUT->set_env('pagecount', ceil($IMAP->messagecount()/$IMAP->page_size)); $OUTPUT->command('set_unread_count', $mbox_name, $unread_count, ($mbox_name == 'INBOX')); $OUTPUT->command('set_rowcount', rcmail_get_messagecount_text()); $OUTPUT->command('set_quota', rcmail_quota_content($IMAP->get_quota())); |