From 8b35d171729f59a27b001cb16cef7de1e1c46fd0 Mon Sep 17 00:00:00 2001 From: Sunjay Cauligi Date: Fri, 5 Apr 2013 18:47:40 -0700 Subject: [PATCH] Added functionality for navigation without opening articles and toggling expansion of headlines --- include/functions.php | 3 +++ js/tt-rss.js | 16 +++++++++++++ js/viewfeed.js | 56 ++++++++++++++++++++++++++++++++----------- 3 files changed, 61 insertions(+), 14 deletions(-) diff --git a/include/functions.php b/include/functions.php index dc67b028a..d328ea19d 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1912,6 +1912,8 @@ "prev_article" => __("Open previous article"), "next_article_noscroll" => __("Open next article (don't scroll long articles)"), "prev_article_noscroll" => __("Open previous article (don't scroll long articles)"), + "next_article_noexpand" => __("Move to next article (don't expand or mark read)"), + "prev_article_noexpand" => __("Move to previous article (don't expand or mark read)"), "search_dialog" => __("Show search dialog")), __("Article") => array( "toggle_mark" => __("Toggle starred"), @@ -1928,6 +1930,7 @@ "select_article_cursor" => __("Select article under cursor"), "email_article" => __("Email article"), "close_article" => __("Close/collapse article"), + "toggle_expand" => __("Toggle article expansion (combined mode)"), "toggle_widescreen" => __("Toggle widescreen mode"), "toggle_embed_original" => __("Toggle embed original")), __("Article selection") => array( diff --git a/js/tt-rss.js b/js/tt-rss.js index 51257a693..8c5a65749 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -282,6 +282,12 @@ function init() { hotkey_actions["prev_article_noscroll"] = function() { moveToPost('prev', true); }; + hotkey_actions["next_article_noexpand"] = function() { + moveToPost('next', true, true); + }; + hotkey_actions["prev_article_noexpand"] = function() { + moveToPost('prev', true, true); + }; hotkey_actions["collapse_article"] = function() { var id = getActiveArticleId(); var elem = $("CICD-"+id); @@ -292,6 +298,16 @@ function init() { cdmExpandArticle(id); } }; + hotkey_actions["toggle_expand"] = function() { + var id = getActiveArticleId(); + var elem = $("CICD-"+id); + if(elem.visible()) { + cdmUnexpandArticle(null, id); + } + else { + cdmExpandArticle(id); + } + }; hotkey_actions["search_dialog"] = function() { search(); }; diff --git a/js/viewfeed.js b/js/viewfeed.js index 76f9bbaee..db1a4bf94 100644 --- a/js/viewfeed.js +++ b/js/viewfeed.js @@ -241,7 +241,7 @@ function render_article(article) { } } -function showArticleInHeadlines(id) { +function showArticleInHeadlines(id, noexpand) { try { selectArticles("none"); @@ -252,7 +252,8 @@ function showArticleInHeadlines(id) { var article_is_unread = crow.hasClassName("Unread"); - crow.removeClassName("Unread"); + if (!noexpand) + crow.removeClassName("Unread"); crow.addClassName("active"); selectArticles('none'); @@ -268,7 +269,7 @@ function showArticleInHeadlines(id) { markHeadline(id); - if (article_is_unread) + if (article_is_unread && !noexpand) _force_scheduled_update = true; } catch (e) { @@ -336,7 +337,7 @@ function article_callback2(transport, id) { } } -function view(id) { +function view(id, activefeed, noexpand) { try { var oldrow = $("RROW-" + getActiveArticleId()); if (oldrow) oldrow.removeClassName("active"); @@ -344,6 +345,11 @@ function view(id) { var crow = $("RROW-" + id); if (!crow) return; + if (noexpand) { + setActiveArticleId(id); + showArticleInHeadlines(id, noexpand); + return; + } console.log("loading article: " + id); @@ -499,7 +505,7 @@ function togglePub(id, client_only, no_effects, note) { } } -function moveToPost(mode, noscroll) { +function moveToPost(mode, noscroll, noexpand) { try { @@ -546,13 +552,13 @@ function moveToPost(mode, noscroll) { scrollArticle(ctr.offsetHeight/4); } else if (next_id) { - cdmExpandArticle(next_id); + cdmExpandArticle(next_id, noexpand); cdmScrollToArticleId(next_id, true); } } else if (next_id) { correctHeadlinesOffset(next_id); - view(next_id, getActiveFeedId()); + view(next_id, getActiveFeedId(), noexpand); } } } @@ -570,7 +576,7 @@ function moveToPost(mode, noscroll) { if (!noscroll && article.offsetTop < ctr.scrollTop) { scrollArticle(-ctr.offsetHeight/4); } else { - cdmExpandArticle(prev_id); + cdmExpandArticle(prev_id, noexpand); cdmScrollToArticleId(prev_id, true); } } else { @@ -579,17 +585,17 @@ function moveToPost(mode, noscroll) { scrollArticle(-ctr.offsetHeight/3); } else if (!noscroll && prev_article && prev_article.offsetTop < ctr.scrollTop) { - cdmExpandArticle(prev_id); + cdmExpandArticle(prev_id, noexpand); scrollArticle(-ctr.offsetHeight/4); } else if (prev_id) { - cdmExpandArticle(prev_id); + cdmExpandArticle(prev_id, noexpand); cdmScrollToArticleId(prev_id, noscroll); } } } else if (prev_id) { correctHeadlinesOffset(prev_id); - view(prev_id, getActiveFeedId()); + view(prev_id, getActiveFeedId(), noexpand); } } } @@ -1375,7 +1381,28 @@ function cdmCollapseArticle(event, id) { } } -function cdmExpandArticle(id) { +function cdmUnexpandArticle(event, id) { + try { + var row = $("RROW-" + id); + var elem = $("CICD-" + id); + + if (elem && row) { + var collapse = $$("div#RROW-" + id + + " span[class='collapseBtn']")[0]; + + Element.hide(elem); + Element.show("CEXC-" + id); + Element.hide(collapse); + + if (event) Event.stop(event); + } + + } catch (e) { + exception_error("cdmUnexpandArticle", e); + } +} + +function cdmExpandArticle(id, noexpand) { try { console.log("cdmExpandArticle " + id); @@ -1412,7 +1439,7 @@ function cdmExpandArticle(id) { var cencw = $("CENCW-" + id); - if (!Element.visible(elem)) { + if (!Element.visible(elem) && !noexpand) { if (cencw) { cencw.innerHTML = htmlspecialchars_decode(cencw.innerHTML); cencw.setAttribute('id', ''); @@ -1429,7 +1456,8 @@ function cdmExpandArticle(id) { if (old_offset > new_offset) $("headlines-frame").scrollTop -= (old_offset-new_offset); - toggleUnread(id, 0, true); + if (!noexpand) + toggleUnread(id, 0, true); toggleSelected(id); $("RROW-" + id).addClassName("active");