Made Scroll to Last Read Post optional. Close #1009

Fix a bug where it attempted to scroll to a hidden post without stub, effectively scrolling to the end of
the thread.
This commit is contained in:
Nicolas Stepien 2013-04-14 00:15:38 +02:00
parent f4bf9b5413
commit 344e1aaa19
3 changed files with 15 additions and 8 deletions

View File

@ -1,3 +1,4 @@
- `Scroll to Last Read Post` is now optional, enabled by default.
- The QR won't auto-hide when auto-hide is enabled and one of its input is focused. Doesn't work on Firefox.
- Fix QR remembering the file spoiler state when it shouldn't.
- Fix QR cooldown in Opera.

View File

@ -39,6 +39,7 @@ Config =
'Unread Count': [true, 'Show the unread posts count in the tab title.']
'Unread Tab Icon': [true, 'Show a different favicon when there are unread posts.']
'Unread Line': [true, 'Show a line to distinguish read posts from unread ones.']
'Scroll to Last Read Post': [true, 'Scroll back to the last read post when reopening a thread.']
'Thread Excerpt': [true, 'Show an excerpt of the thread in the tab title.']
'Thread Stats': [true, 'Display reply and image count.']
'Thread Watcher': [true, 'Bookmark threads.']

View File

@ -160,6 +160,7 @@ Header =
(if hide then $.addClass else $.rmClass) Header.bar, 'autohide'
hashScroll: ->
return unless post = $.id @location.hash[1..]
return if (Get.postFromRoot post).isHidden
Header.scrollToPost post
scrollToPost: (post) ->
{top} = post.getBoundingClientRect()
@ -3709,18 +3710,22 @@ Unread =
threadID: @ID
defaultValue: 0
Unread.addPosts posts
if (hash = location.hash.match /\d+/) and post = @posts[hash[0]]
Header.scrollToPost post.nodes.root
else if Unread.posts.length
# Scroll to before the first unread post.
$.x('preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root).scrollIntoView false
else if posts.length
# Scroll to the last read post.
Header.scrollToPost posts[posts.length - 1].nodes.root
$.on d, 'ThreadUpdate', Unread.onUpdate
$.on d, 'scroll visibilitychange', Unread.read
$.on d, 'visibilitychange', Unread.setLine if Conf['Unread Line']
return unless Conf['Scroll to Last Read Post']
# Let the header's onload callback handle it.
return if (hash = location.hash.match /\d+/) and hash[0] of @posts
if Unread.posts.length
# Scroll to before the first unread post.
while root = $.x 'preceding-sibling::div[contains(@class,"postContainer")][1]', Unread.posts[0].nodes.root
break unless (Get.postFromRoot root).isHidden
root.scrollIntoView false
else if posts.length
# Scroll to the last read post.
Header.scrollToPost posts[posts.length - 1].nodes.root
sync: ->
lastReadPost = Unread.db.get
boardID: Unread.thread.board.ID