From ec02d34af9771a819d5e85ba0f63b0643eafb2b5 Mon Sep 17 00:00:00 2001 From: JC Brand Date: Sat, 18 Jul 2015 09:20:13 +0200 Subject: [PATCH] Improvement. Don't lose your place with infinite upscroll. updates #306 --- converse.js | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/converse.js b/converse.js index 9efb67708..997f2465f 100644 --- a/converse.js +++ b/converse.js @@ -1396,13 +1396,15 @@ // That way we could probably also better show day indicators. // That code should perhaps go into onMessageAdded if (num_messages && msg_time.isBefore(this.model.messages.at(0).get('time'))) { - if (! has_scrollbar || $content.scrollTop() !== 0) { - insertMessage = _.compose(this.scrollDown.bind(this), $content.prepend.bind($content)); - } else { - insertMessage = $content.prepend.bind($content); - } + insertMessage = _.compose( + this.scrollDownMessageHeight.bind(this), + function ($el) { + $content.prepend($el); + return $el; + } + ); } else { - insertMessage = _.compose(this.scrollDown.bind(this), $content.append.bind($content)); + insertMessage = _.compose(_.debounce(this.scrollDown.bind(this), 50), $content.append.bind($content)); } if ((match) && (match[1] === 'me')) { text = text.replace(/^\/me/, ''); @@ -1969,6 +1971,14 @@ return this; }, + scrollDownMessageHeight: function ($message) { + var $content = this.$('.chat-content'); + if ($content.is(':visible')) { + $content.scrollTop($content.scrollTop() + $message[0].scrollHeight); + } + return this; + }, + scrollDown: function () { var $content = this.$('.chat-content'); if ($content.is(':visible')) {