Fix autoscroll to use ui.message_viewport_info().

This will make it automatically work if we add new tab
bar like things.  The current version of ui.message_viewport_info()
is slightly broken; that's a separate fix.

(imported from commit fa1906b738433223831250e3191dfd8e87d67daf)
This commit is contained in:
Steve Howell 2013-05-20 15:09:21 -04:00 committed by Leo Franchi
parent de3ba5a038
commit 33dd01885a
1 changed files with 9 additions and 4 deletions

View File

@ -430,6 +430,10 @@ MessageList.prototype = {
var viewport_offset = viewport.scrollTop(); var viewport_offset = viewport.scrollTop();
var new_messages_height = 0; var new_messages_height = 0;
// TODO: This scrolling strategy won't always get the last element on to
// the page. The future plan is that we aggressively just figure
// out how much it takes to get the last element on to the page, rather
// than adding up the height of new messages. Talk to Steve.
$.each(rendered_elems, function() { $.each(rendered_elems, function() {
// Sometimes there are non-DOM elements in rendered_elems; only // Sometimes there are non-DOM elements in rendered_elems; only
// try to get the heights of actual trs. // try to get the heights of actual trs.
@ -439,15 +443,16 @@ MessageList.prototype = {
}); });
var selected_row_offset = selected_row.offset().top; var selected_row_offset = selected_row.offset().top;
var available_space_for_scroll = selected_row_offset - viewport_offset - var info = ui.message_viewport_info();
$("#floating_recipient_bar").height() - $("#searchbox_form").height(); var available_space_for_scroll = selected_row_offset - info.visible_top;
var amount_we_want_to_scroll = new_messages_height;
if (available_space_for_scroll > 0) { if (available_space_for_scroll > 0) {
var scroll_amount = Math.min(available_space_for_scroll, amount_we_want_to_scroll);
suppress_scroll_pointer_update = true; // Gets set to false in the scroll handler. suppress_scroll_pointer_update = true; // Gets set to false in the scroll handler.
// viewport (which is window) doesn't have a scrollTop, so scroll // viewport (which is window) doesn't have a scrollTop, so scroll
// the closest concept that does. // the closest concept that does.
$("html, body").animate({scrollTop: viewport_offset + $("html, body").animate({scrollTop: viewport_offset + scroll_amount});
Math.min(new_messages_height, available_space_for_scroll)});
} }
} }
}, },