X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=js%2Fviewfeed.js;h=28d4ea8ec5feff0e4abf36d90ae3e47611ea22fe;hb=f820f205d0ec1c5ce9027e49755fc8642b0c5b42;hp=4c6d903660cc2279d5c01214b4b007b685baad76;hpb=77accf45df3072bf0e3fe1e919bb75fc14313119;p=tt-rss.git diff --git a/js/viewfeed.js b/js/viewfeed.js index 4c6d9036..28d4ea8e 100644 --- a/js/viewfeed.js +++ b/js/viewfeed.js @@ -13,6 +13,8 @@ var catchup_timeout_id = false; var cids_requested = []; var loaded_article_ids = []; +var _post_preview_timeout = false; + var has_storage = 'sessionStorage' in window && window['sessionStorage'] !== null; function headlines_callback2(transport, offset, background, infscroll_req) { @@ -205,6 +207,8 @@ function headlines_callback2(transport, offset, background, infscroll_req) { _infscroll_request_sent = 0; + unpackVisibleHeadlines(); + notify(""); } catch (e) { @@ -313,7 +317,7 @@ function article_callback2(transport, id) { var unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length request_counters(unread_in_buffer == 0); - headlines_scroll_handler($("headlines-frame")); + //headlines_scroll_handler($("headlines-frame")); /* try { if (!_infscroll_disable && @@ -343,8 +347,6 @@ function view(id) { console.log("cache check result: " + (cached_article != false)); - hideAuxDlg(); - var query = "?op=article&method=view&id=" + param_escape(id); var neighbor_ids = getRelativePostIds(id); @@ -395,7 +397,7 @@ function view(id) { console.warn(e); } */ - headlines_scroll_handler($("headlines-frame")); + //headlines_scroll_handler($("headlines-frame")); return; } @@ -537,11 +539,11 @@ function moveToPost(mode, noscroll) { if (!noscroll && article && article.offsetTop + article.offsetHeight > ctr.scrollTop + ctr.offsetHeight) { - scrollArticle(ctr.offsetHeight/2); + scrollArticle(ctr.offsetHeight/4); } else if (next_id) { cdmExpandArticle(next_id); - cdmScrollToArticleId(next_id, noscroll); + cdmScrollToArticleId(next_id, true); } } else if (next_id) { @@ -560,8 +562,13 @@ function moveToPost(mode, noscroll) { var ctr = $("headlines-frame"); if (!getInitParam("cdm_expanded")) { - cdmExpandArticle(prev_id); - cdmScrollToArticleId(prev_id, true); + + if (!noscroll && article.offsetTop < ctr.scrollTop) { + scrollArticle(-ctr.offsetHeight/4); + } else { + cdmExpandArticle(prev_id); + cdmScrollToArticleId(prev_id, true); + } } else { if (!noscroll && article && article.offsetTop < ctr.scrollTop) { @@ -569,7 +576,7 @@ function moveToPost(mode, noscroll) { } else if (!noscroll && prev_article && prev_article.offsetTop < ctr.scrollTop) { cdmExpandArticle(prev_id); - scrollArticle(-ctr.offsetHeight/3); + scrollArticle(-ctr.offsetHeight/4); } else if (prev_id) { cdmExpandArticle(prev_id); cdmScrollToArticleId(prev_id, noscroll); @@ -972,9 +979,9 @@ function deleteSelection() { var str; if (getActiveFeedId() != 0) { - str = __("Delete %d selected articles in %s?"); + str = ngettext("Delete %d selected article in %s?", "Delete %d selected articles in %s?" , rows.length); } else { - str = __("Delete %d selected articles?"); + str = ngettext("Delete %d selected article?", "Delete %d selected articles?", rows.length); } str = str.replace("%d", rows.length); @@ -1016,10 +1023,10 @@ function archiveSelection() { var op; if (getActiveFeedId() != 0) { - str = __("Archive %d selected articles in %s?"); + str = ngettext("Archive %d selected article in %s?", "Archive %d selected articles in %s?", rows.length); op = "archive"; } else { - str = __("Move %d archived articles back?"); + str = ngettext("Move %d archived article back?", "Move %d archived articles back?", rows.length); op = "unarchive"; } @@ -1063,7 +1070,7 @@ function catchupSelection() { var fn = getFeedName(getActiveFeedId(), activeFeedIsCat()); - var str = __("Mark %d selected articles in %s as read?"); + var str = ngettext("Mark %d selected article in %s as read?", "Mark %d selected articles in %s as read?", rows.length); str = str.replace("%d", rows.length); str = str.replace("%s", fn); @@ -1159,18 +1166,90 @@ function getActiveArticleId() { return _active_article_id; } -function postMouseIn(id) { +function postMouseIn(e, id) { post_under_pointer = id; + + if (_post_preview_timeout) window.clearTimeout(_post_preview_timeout); + + if (!isCdmMode() || !getInitParam("cdm_expanded")) { + _post_preview_timeout = window.setTimeout(function() { + displaySmallArticlePreview(e, id); + }, 1000); + } +} + +function displaySmallArticlePreview(e, id) { + try { + var query = "?op=rpc&method=cdmarticlepreview&id=" + id; + + new Ajax.Request("backend.php", { + parameters: query, + onComplete: function(transport) { + cexc = $("CEXC-" + id); + preview = $("small_article_preview"); + row = $("RROW-" + id); + ctr = $("headlines-frame"); + + if (id != getActiveArticleId() && (!isCdmMode() || (cexc && Element.visible(cexc))) && row && preview) { + preview.innerHTML = transport.responseText; + new Effect.Appear(preview, {duration:0.2}); + + preview.setStyle({ + left: (e.clientX + 20) + 'px', + top: (row.offsetTop + row.offsetHeight*2 + 20 - ctr.scrollTop) + 'px' }); + + } + + } }); + + + } catch (e) { + exception_error("displaySmallArticlePreview", e); + } } function postMouseOut(id) { post_under_pointer = false; + + if (_post_preview_timeout) window.clearTimeout(_post_preview_timeout); + + if (Element.visible("small_article_preview")) + Element.hide("small_article_preview"); +} + +function unpackVisibleHeadlines() { + try { + + if (!isCdmMode()) return; + + $$("#headlines-frame > div[id*=RROW]").each( + function(child) { + if (child.offsetTop <= $("headlines-frame").scrollTop + + $("headlines-frame").offsetHeight) { + + var cencw = $("CENCW-" + child.id.replace("RROW-", "")); + + if (cencw) { + cencw.innerHTML = htmlspecialchars_decode(cencw.innerHTML); + cencw.setAttribute('id', ''); + Element.show(cencw); + } + } + } + ); + + + } catch (e) { + exception_error("unpackVisibleHeadlines", e); + } } function headlines_scroll_handler(e) { try { var hsp = $("headlines-spacer"); + unpackVisibleHeadlines(); + if (!_infscroll_disable) { if ((hsp && e.scrollTop + e.offsetHeight >= hsp.offsetTop - hsp.offsetHeight) || (e.scrollHeight != 0 && @@ -1192,7 +1271,7 @@ function headlines_scroll_handler(e) { $$("#headlines-frame > div[id*=RROW][class*=Unread]").each( function(child) { - if ($("headlines-frame").scrollTop > + if (child.hasClassName("Unread") && $("headlines-frame").scrollTop > (child.offsetTop + child.offsetHeight/2)) { var id = child.id.replace("RROW-", ""); @@ -1209,7 +1288,7 @@ function headlines_scroll_handler(e) { if (!_infscroll_request_sent) { catchup_timeout_id = window.setTimeout('catchupBatchedArticles()', - 2000); + 500); } } } @@ -1293,7 +1372,7 @@ function catchupRelativeToArticle(below, id) { if (ids_to_mark.length == 0) { alert(__("No articles found to mark")); } else { - var msg = __("Mark %d article(s) as read?").replace("%d", ids_to_mark.length); + var msg = ngettext("Mark %d article as read?", "Mark %d articles as read?", ids_to_mark.length).replace("%d", ids_to_mark.length); if (getInitParam("confirm_feed_catchup") != 1 || confirm(msg)) { @@ -1348,10 +1427,9 @@ function cdmCollapseArticle(event, id) { function cdmExpandArticle(id) { try { - console.log("cdmExpandArticle " + id); - hideAuxDlg(); + if (!$("RROW-" + id)) return false; var elem = $("CICD-" + getActiveArticleId()); @@ -1369,14 +1447,11 @@ function cdmExpandArticle(id) { Element.hide(elem); Element.show("CEXC-" + getActiveArticleId()); Element.hide(collapse); + $("RROW-" + getActiveArticleId()).removeClassName("active"); } setActiveArticleId(id); - if (!getInitParam("cdm_expanded")) { - cdmScrollToArticleId(id, true); - } - elem = $("CICD-" + id); var collapse = $$("div#RROW-" + id + @@ -1388,19 +1463,19 @@ function cdmExpandArticle(id) { if (cencw) { cencw.innerHTML = htmlspecialchars_decode(cencw.innerHTML); cencw.setAttribute('id', ''); + Element.show(cencw); } Element.show(elem); Element.hide("CEXC-" + id); Element.show(collapse); + $("RROW-" + id).addClassName("active"); } - /* var new_offset = $("RROW-" + id).offsetTop; + var new_offset = $("RROW-" + id).offsetTop; - $("headlines-frame").scrollTop += (new_offset-old_offset); - - if ($("RROW-" + id).offsetTop != old_offset) - $("headlines-frame").scrollTop = new_offset; */ + if (old_offset > new_offset) + $("headlines-frame").scrollTop -= (old_offset-new_offset); toggleUnread(id, 0, true); toggleSelected(id); @@ -1564,8 +1639,6 @@ function cdmClicked(event, id) { try { //var shift_key = event.shiftKey; - hideAuxDlg(); - if (!event.ctrlKey) { if (!getInitParam("cdm_expanded")) { @@ -1806,6 +1879,12 @@ function initHeadlinesMenu() { openArticleInNewWindow(this.getParent().callerRowId); }})); + menu.addChild(new dijit.MenuItem({ + label: __("Display article URL"), + onClick: function(event) { + displayArticleUrl(this.getParent().callerRowId); + }})); + menu.addChild(new dijit.MenuSeparator()); menu.addChild(new dijit.MenuItem({ @@ -1835,7 +1914,7 @@ function initHeadlinesMenu() { var bare_id = id.substr(id.indexOf(":")+1); var name = label.name[0]; - bare_id = -11-bare_id; + bare_id = feed_to_label_id(bare_id); labelAddMenu.addChild(new dijit.MenuItem({ label: name, @@ -2017,3 +2096,22 @@ function changeScore(id, pic) { exception_error("changeScore", e); } } + +function displayArticleUrl(id) { + try { + var query = "op=rpc&method=getlinktitlebyid&id=" + param_escape(id); + + new Ajax.Request("backend.php", { + parameters: query, + onComplete: function(transport) { + var reply = JSON.parse(transport.responseText); + + if (reply && reply.link) { + prompt(__("Article URL:"), reply.link); + } + } }); + } catch (e) { + exception_error("changeScore", e); + } +} +