summaryrefslogtreecommitdiff
path: root/js
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2013-02-27 22:27:49 +0400
committerAndrew Dolgov <[email protected]>2013-02-27 22:27:49 +0400
commit104e5c6557707b13307802dd3b9c87d0209d4a92 (patch)
treed1f7c2b1974af5148f6fe40e82c9504064449643 /js
parent1ebf3b979ecb697285edd3bec284290bd305647d (diff)
moveToPost: implement more natural next/prev moving in combined mode
Diffstat (limited to 'js')
-rw-r--r--js/viewfeed.js38
1 files changed, 30 insertions, 8 deletions
diff --git a/js/viewfeed.js b/js/viewfeed.js
index 07af91a67..6f88f7eac 100644
--- a/js/viewfeed.js
+++ b/js/viewfeed.js
@@ -549,13 +549,23 @@ function moveToPost(mode) {
}
if (mode == "next") {
- if (next_id) {
+ if (next_id || active_post_id) {
if (isCdmMode()) {
- cdmExpandArticle(next_id);
- cdmScrollToArticleId(next_id);
+ var article = $("RROW-" + active_post_id);
+ var ctr = $("headlines-frame");
- } else {
+ if (article && article.offsetTop + article.offsetHeight >
+ ctr.scrollTop + ctr.offsetHeight) {
+
+ scrollArticle(ctr.offsetHeight/2);
+
+ } else if (next_id) {
+ cdmExpandArticle(next_id);
+ cdmScrollToArticleId(next_id);
+ }
+
+ } else if (next_id) {
correctHeadlinesOffset(next_id);
view(next_id, getActiveFeedId());
}
@@ -563,11 +573,23 @@ function moveToPost(mode) {
}
if (mode == "prev") {
- if (prev_id) {
+ if (prev_id || active_post_id) {
if (isCdmMode()) {
- cdmExpandArticle(prev_id);
- cdmScrollToArticleId(prev_id);
- } else {
+
+ var article = $("RROW-" + active_post_id);
+ var prev_article = $("RROW-" + prev_id);
+ var ctr = $("headlines-frame");
+
+ if (article && article.offsetTop < ctr.scrollTop) {
+ scrollArticle(-ctr.offsetHeight/2);
+ } else if (prev_article && prev_article.offsetTop < ctr.scrollTop) {
+ cdmExpandArticle(prev_id);
+ scrollArticle(-ctr.offsetHeight/2);
+ } else if (prev_id) {
+ cdmExpandArticle(prev_id);
+ cdmScrollToArticleId(prev_id);
+ }
+ } else if (prev_id) {
correctHeadlinesOffset(prev_id);
view(prev_id, getActiveFeedId());
}