X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=js%2Fviewfeed.js;h=28d4ea8ec5feff0e4abf36d90ae3e47611ea22fe;hb=f820f205d0ec1c5ce9027e49755fc8642b0c5b42;hp=ff09c0a5ac4defa2c9b606ab363ddcf7529a85b2;hpb=7fdf8eca9900ae626291b9acc65aef2197af1a94;p=tt-rss.git diff --git a/js/viewfeed.js b/js/viewfeed.js index ff09c0a5..28d4ea8e 100644 --- a/js/viewfeed.js +++ b/js/viewfeed.js @@ -1,7 +1,7 @@ -var active_post_id = false; - var article_cache = new Array(); +var _active_article_id = 0; + var vgroup_last_feed = false; var post_under_pointer = false; @@ -9,10 +9,11 @@ var last_requested_article = false; var catchup_id_batch = []; var catchup_timeout_id = false; -var feed_precache_timeout_id = false; -var precache_idle_timeout_id = false; var cids_requested = []; +var loaded_article_ids = []; + +var _post_preview_timeout = false; var has_storage = 'sessionStorage' in window && window['sessionStorage'] !== null; @@ -46,8 +47,6 @@ function headlines_callback2(transport, offset, background, infscroll_req) { if (getInitParam("cdm_auto_catchup") == 1) { content = content + "
"; } - - cache_headlines(feed_id, is_cat, reply['headlines']['toolbar'], content); return; } @@ -58,7 +57,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) { is_cat || feed_id <= 0); try { - if (offset == 0 && infscroll_req == false) { + if (infscroll_req == false) { $("headlines-frame").scrollTop = 0; } } catch (e) { }; @@ -77,7 +76,9 @@ function headlines_callback2(transport, offset, background, infscroll_req) { var articles = reply['articles']; //var runtime_info = reply['runtime-info']; - if (offset == 0 && infscroll_req == false) { + if (infscroll_req == false) { + loaded_article_ids = []; + dijit.byId("headlines-frame").attr('content', reply['headlines']['content']); @@ -85,8 +86,10 @@ function headlines_callback2(transport, offset, background, infscroll_req) { reply['headlines']['toolbar']); $$("#headlines-frame > div[id*=RROW]").each(function(row) { - if ($$("#headlines-frame DIV[id="+row.id+"]").length > 1) { + if (loaded_article_ids.indexOf(row.id) != -1) { row.parentNode.removeChild(row); + } else { + loaded_article_ids.push(row.id); } }); @@ -98,6 +101,12 @@ function headlines_callback2(transport, offset, background, infscroll_req) { initHeadlinesMenu(); + if (_search_query) { + $("feed_title").innerHTML += "" + + " (" + __("Cancel search") + ")" + + ""; + } + } else { if (headlines_count > 0 && feed_id == getActiveFeedId() && is_cat == activeFeedIsCat()) { @@ -105,7 +114,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) { var c = dijit.byId("headlines-frame"); var ids = getSelectedArticleIds2(); - var num_added = 0; + var new_elems = []; $("headlines-tmp").innerHTML = reply['headlines']['content']; @@ -116,15 +125,14 @@ function headlines_callback2(transport, offset, background, infscroll_req) { $$("#headlines-tmp > div").each(function(row) { if (row.className == 'cdmFeedTitle') { - row.addClassName('new'); row.style.display = 'none'; c.domNode.appendChild(row); - ++num_added; - } else if ($$("#headlines-frame DIV[id="+row.id+"]").length == 0) { + new_elems.push(row); + } else if (loaded_article_ids.indexOf(row.id) == -1) { row.style.display = 'none'; - row.addClassName('new'); c.domNode.appendChild(row); - ++num_added; + new_elems.push(row); + loaded_article_ids.push(row.id); } else { row.parentNode.removeChild(row); } @@ -138,9 +146,9 @@ function headlines_callback2(transport, offset, background, infscroll_req) { c.domNode.appendChild(hsp); } - console.log("added " + num_added + " headlines"); + console.log("added " + new_elems.size() + " headlines"); - if (num_added == 0) + if (new_elems.size() == 0) _infscroll_disable = true; console.log("restore selected ids: " + ids); @@ -151,11 +159,17 @@ function headlines_callback2(transport, offset, background, infscroll_req) { initHeadlinesMenu(); - $$("#headlines-frame > div[class*=new]").each( - function(child) { - child.removeClassName('new'); - if (!Element.visible(child)) - new Effect.Appear(child, { duration : 0.5 }); + new_elems.each(function(child) { + var cb = dijit.byId(child.id.replace("RROW-", "RCHK-")); + + if (!cb) { + dojo.parser.parse(child); + + if (!Element.visible(child)) + new Effect.Appear(child, { duration : 0.5 }); + } else { + c.domNode.removeChild(child); + } }); } else { @@ -167,9 +181,6 @@ function headlines_callback2(transport, offset, background, infscroll_req) { } } - if (headlines_count > 0) - cache_headlines(feed_id, is_cat, reply['headlines']['toolbar'], $("headlines-frame").innerHTML); - if (articles) { for (var i = 0; i < articles.length; i++) { var a_id = articles[i]['id']; @@ -179,24 +190,25 @@ function headlines_callback2(transport, offset, background, infscroll_req) { console.log("no cached articles received"); } - // do not precache stuff after fresh feed - if (feed_id != -3) - precache_headlines(); - if (counters) parse_counters(counters); else - request_counters(); + request_counters(true); - } else { + } else if (transport.responseText) { console.error("Invalid object received: " + transport.responseText); dijit.byId("headlines-frame").attr('content', "
" + __('Could not update headlines (invalid object received - see error console for details)') + "
"); + } else { + //notify_error("Error communicating with server."); + Element.show(dijit.byId("net-alert").domNode); } _infscroll_request_sent = 0; + unpackVisibleHeadlines(); + notify(""); } catch (e) { @@ -244,8 +256,6 @@ function showArticleInHeadlines(id) { selectArticles('none'); - var upd_img_pic = $("FUPDPIC-" + id); - var view_mode = false; try { @@ -255,17 +265,6 @@ function showArticleInHeadlines(id) { // } - if (upd_img_pic && (upd_img_pic.src.match("updated.png") || - upd_img_pic.src.match("fresh_sign.png"))) { - - upd_img_pic.src = "images/blank_icon.gif"; - - cache_headlines(getActiveFeedId(), activeFeedIsCat(), null, $("headlines-frame").innerHTML); - - } else if (article_is_unread && view_mode == "all_articles") { - cache_headlines(getActiveFeedId(), activeFeedIsCat(), null, $("headlines-frame").innerHTML); - } - markHeadline(id); if (article_is_unread) @@ -292,12 +291,8 @@ function article_callback2(transport, id) { if (reply) { - var upic = $('FUPDPIC-' + id); - - if (upic) upic.src = 'images/blank_icon.gif'; - reply.each(function(article) { - if (active_post_id == article['id']) { + if (getActiveArticleId() == article['id']) { render_article(article['content']); } cids_requested.remove(article['id']); @@ -310,16 +305,19 @@ function article_callback2(transport, id) { // return; // } - } else { + } else if (transport.responseText) { console.error("Invalid object received: " + transport.responseText); render_article("
" + __('Could not display article (invalid object received - see error console for details)') + "
"); + } else { + Element.show(dijit.byId("net-alert").domNode); } - request_counters(); + 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 && @@ -339,14 +337,16 @@ function article_callback2(transport, id) { function view(id) { try { + var crow = $("RROW-" + id); + + if (!crow) return; + console.log("loading article: " + id); var cached_article = cache_get("article:" + 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); @@ -367,23 +367,12 @@ function view(id) { query = query + "&cids=" + cids_to_request.toString(); - var crow = $("RROW-" + id); var article_is_unread = crow.hasClassName("Unread"); - active_post_id = id; + setActiveArticleId(id); showArticleInHeadlines(id); - precache_headlines(); - - if (!cached_article) { - - var upic = $('FUPDPIC-' + id); - - if (upic) { - upic.src = getInitParam("sign_progress"); - } - - } else if (cached_article && article_is_unread) { + if (cached_article && article_is_unread) { query = query + "&mode=prefetch"; @@ -408,7 +397,7 @@ function view(id) { console.warn(e); } */ - headlines_scroll_handler($("headlines-frame")); + //headlines_scroll_handler($("headlines-frame")); return; } @@ -454,8 +443,6 @@ function toggleMark(id, client_only) { query = query + "&mark=0"; } - cache_headlines(getActiveFeedId(), activeFeedIsCat(), null, $("headlines-frame").innerHTML); - if (!client_only) { new Ajax.Request("backend.php", { parameters: query, @@ -495,8 +482,6 @@ function togglePub(id, client_only, no_effects, note) { query = query + "&pub=0"; } - cache_headlines(getActiveFeedId(), activeFeedIsCat(), null, $("headlines-frame").innerHTML); - if (!client_only) { new Ajax.Request("backend.php", { parameters: query, @@ -510,7 +495,7 @@ function togglePub(id, client_only, no_effects, note) { } } -function moveToPost(mode) { +function moveToPost(mode, noscroll) { try { @@ -519,22 +504,22 @@ function moveToPost(mode) { var prev_id = false; var next_id = false; - if (!$('RROW-' + active_post_id)) { - active_post_id = false; + if (!$('RROW-' + getActiveArticleId())) { + setActiveArticleId(0); } - if (active_post_id == false) { + if (!getActiveArticleId()) { next_id = rows[0]; prev_id = rows[rows.length-1] } else { for (var i = 0; i < rows.length; i++) { - if (rows[i] == active_post_id) { + if (rows[i] == getActiveArticleId()) { // Account for adjacent identical article ids. if (i > 0) prev_id = rows[i-1]; for (var j = i+1; j < rows.length; j++) { - if (rows[j] != active_post_id) { + if (rows[j] != getActiveArticleId()) { next_id = rows[j]; break; } @@ -545,13 +530,23 @@ function moveToPost(mode) { } if (mode == "next") { - if (next_id) { + if (next_id || getActiveArticleId()) { if (isCdmMode()) { - cdmExpandArticle(next_id); - cdmScrollToArticleId(next_id); + var article = $("RROW-" + getActiveArticleId()); + var ctr = $("headlines-frame"); - } else { + if (!noscroll && article && article.offsetTop + article.offsetHeight > + ctr.scrollTop + ctr.offsetHeight) { + + scrollArticle(ctr.offsetHeight/4); + + } else if (next_id) { + cdmExpandArticle(next_id); + cdmScrollToArticleId(next_id, true); + } + + } else if (next_id) { correctHeadlinesOffset(next_id); view(next_id, getActiveFeedId()); } @@ -559,11 +554,36 @@ function moveToPost(mode) { } if (mode == "prev") { - if (prev_id) { + if (prev_id || getActiveArticleId()) { if (isCdmMode()) { - cdmExpandArticle(prev_id); - cdmScrollToArticleId(prev_id); - } else { + + var article = $("RROW-" + getActiveArticleId()); + var prev_article = $("RROW-" + prev_id); + var ctr = $("headlines-frame"); + + if (!getInitParam("cdm_expanded")) { + + 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) { + scrollArticle(-ctr.offsetHeight/3); + } else if (!noscroll && prev_article && + prev_article.offsetTop < ctr.scrollTop) { + cdmExpandArticle(prev_id); + scrollArticle(-ctr.offsetHeight/4); + } else if (prev_id) { + cdmExpandArticle(prev_id); + cdmScrollToArticleId(prev_id, noscroll); + } + } + + } else if (prev_id) { correctHeadlinesOffset(prev_id); view(prev_id, getActiveFeedId()); } @@ -578,16 +598,16 @@ function moveToPost(mode) { function toggleSelected(id, force_on) { try { - var cb = $("RCHK-" + id); + var cb = dijit.byId("RCHK-" + id); var row = $("RROW-" + id); if (row) { if (row.hasClassName('Selected') && !force_on) { row.removeClassName('Selected'); - if (cb) cb.checked = false; + if (cb) cb.attr("checked", false); } else { row.addClassName('Selected'); - if (cb) cb.checked = true; + if (cb) cb.attr("checked", true); } } } catch (e) { @@ -873,52 +893,52 @@ function selectArticles(mode) { children.each(function(child) { var id = child.id.replace("RROW-", ""); - var cb = $("RCHK-" + id); + var cb = dijit.byId("RCHK-" + id); if (mode == "all") { child.addClassName("Selected"); - cb.checked = true; + if (cb) cb.attr("checked", true); } else if (mode == "unread") { if (child.hasClassName("Unread")) { child.addClassName("Selected"); - cb.checked = true; + if (cb) cb.attr("checked", true); } else { child.removeClassName("Selected"); - cb.checked = false; + if (cb) cb.attr("checked", false); } } else if (mode == "marked") { var img = $("FMPIC-" + child.id.replace("RROW-", "")); if (img && img.src.match("mark_set")) { child.addClassName("Selected"); - cb.checked = true; + if (cb) cb.attr("checked", true); } else { child.removeClassName("Selected"); - cb.checked = false; + if (cb) cb.attr("checked", false); } } else if (mode == "published") { var img = $("FPPIC-" + child.id.replace("RROW-", "")); if (img && img.src.match("pub_set")) { child.addClassName("Selected"); - cb.checked = true; + if (cb) cb.attr("checked", true); } else { child.removeClassName("Selected"); - cb.checked = false; + if (cb) cb.attr("checked", false); } } else if (mode == "invert") { if (child.hasClassName("Selected")) { child.removeClassName("Selected"); - cb.checked = false; + if (cb) cb.attr("checked", false); } else { child.addClassName("Selected"); - cb.checked = true; + if (cb) cb.attr("checked", true); } } else { child.removeClassName("Selected"); - cb.checked = false; + if (cb) cb.attr("checked", false); } }); @@ -959,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); @@ -1003,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"; } @@ -1050,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); @@ -1121,36 +1141,115 @@ function editArticleTags(id) { } -function cdmScrollToArticleId(id) { +function cdmScrollToArticleId(id, force) { try { var ctr = $("headlines-frame"); var e = $("RROW-" + id); if (!e || !ctr) return; - ctr.scrollTop = e.offsetTop; + if (force || e.offsetTop+e.offsetHeight > (ctr.scrollTop+ctr.offsetHeight) || + e.offsetTop < ctr.scrollTop) { + ctr.scrollTop = e.offsetTop; + } } catch (e) { exception_error("cdmScrollToArticleId", e); } } +function setActiveArticleId(id) { + _active_article_id = id; +} + function getActiveArticleId() { - return active_post_id; + 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 && @@ -1172,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-", ""); @@ -1189,7 +1288,7 @@ function headlines_scroll_handler(e) { if (!_infscroll_request_sent) { catchup_timeout_id = window.setTimeout('catchupBatchedArticles()', - 2000); + 500); } } } @@ -1273,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)) { @@ -1299,94 +1398,84 @@ function catchupRelativeToArticle(below, id) { } } -function cdmExpandArticle(id) { +function cdmCollapseArticle(event, id) { try { + var row = $("RROW-" + id); + var elem = $("CICD-" + id); - hideAuxDlg(); + if (elem && row) { + var collapse = $$("div#RROW-" + id + + " span[class='collapseBtn']")[0]; - var elem = $("CICD-" + active_post_id); + Element.hide(elem); + Element.show("CEXC-" + id); + Element.hide(collapse); - var upd_img_pic = $("FUPDPIC-" + id); + markHeadline(id, false); - if (upd_img_pic && (upd_img_pic.src.match("updated.png") || - upd_img_pic.src.match("fresh_sign.png"))) { + if (id == getActiveArticleId()) { + setActiveArticleId(0); + } - upd_img_pic.src = "images/blank_icon.gif"; + if (event) Event.stop(event); } - if (id == active_post_id && Element.visible(elem)) + } catch (e) { + exception_error("cdmCollapseArticle", e); + } +} + +function cdmExpandArticle(id) { + try { + console.log("cdmExpandArticle " + id); + + if (!$("RROW-" + id)) return false; + + var elem = $("CICD-" + getActiveArticleId()); + + if (id == getActiveArticleId() && Element.visible(elem)) return true; selectArticles("none"); var old_offset = $("RROW-" + id).offsetTop; - if (active_post_id && elem && !getInitParam("cdm_expanded")) { + if (getActiveArticleId() && elem && !getInitParam("cdm_expanded")) { + var collapse = $$("div#RROW-" + getActiveArticleId() + + " span[class='collapseBtn']")[0]; + Element.hide(elem); - Element.show("CEXC-" + active_post_id); + Element.show("CEXC-" + getActiveArticleId()); + Element.hide(collapse); + $("RROW-" + getActiveArticleId()).removeClassName("active"); } - active_post_id = id; + setActiveArticleId(id); elem = $("CICD-" + id); - if (!Element.visible(elem)) { - Element.show(elem); - Element.hide("CEXC-" + id); - - if ($("CWRAP-" + id).innerHTML == "") { - - $("FUPDPIC-" + id).src = "images/indicator_tiny.gif"; - - $("CWRAP-" + id).innerHTML = "
" + - __("Loading, please wait...") + "
"; - - var query = "?op=rpc&method=cdmGetArticle&id=" + param_escape(id); - - var neighbor_ids = getRelativePostIds(id); - - /* only request uncached articles */ - var cids_to_request = []; - - for (var i = 0; i < neighbor_ids.length; i++) { - if (cids_requested.indexOf(neighbor_ids[i]) == -1) - if ($("CWRAP-" + neighbor_ids[i]).innerHTML == "") { - cids_to_request.push(neighbor_ids[i]); - cids_requested.push(neighbor_ids[i]); - } - } - - console.log("additional ids: " + cids_to_request.toString()); + var collapse = $$("div#RROW-" + id + + " span[class='collapseBtn']")[0]; - query = query + "&cids=" + cids_to_request.toString(); - - console.log(query); - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - - $("FUPDPIC-" + id).src = 'images/blank_icon.gif'; - - handle_rpc_json(transport); - - var reply = JSON.parse(transport.responseText); - - reply.each(function(article) { - $("CWRAP-" + article['id']).innerHTML = article['content']; - cids_requested.remove(article['id']); - }); - }}); + var cencw = $("CENCW-" + id); + if (!Element.visible(elem)) { + 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; - $("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); @@ -1422,75 +1511,6 @@ function getArticleUnderPointer() { return post_under_pointer; } -function zoomToArticle(event, id) { - try { - var cached_article = cache_get("article: " + id); - - if (dijit.byId("ATAB-" + id)) - if (!event || !event.shiftKey) - return dijit.byId("content-tabs").selectChild(dijit.byId("ATAB-" + id)); - - if (dijit.byId("ATSTRTIP-" + id)) - dijit.byId("ATSTRTIP-" + id).destroyRecursive(); - - if (cached_article) { - //closeArticlePanel(); - - var article_pane = new dijit.layout.ContentPane({ - title: __("Loading...") , content: cached_article, - style: 'padding : 0px;', - id: 'ATAB-' + id, - closable: true }); - - dijit.byId("content-tabs").addChild(article_pane); - - if (!event || !event.shiftKey) - dijit.byId("content-tabs").selectChild(article_pane); - - if ($("PTITLE-" + id)) - article_pane.attr('title', $("PTITLE-" + id).innerHTML); - - } else { - - var query = "?op=rpc&method=getArticles&ids=" + param_escape(id); - - notify_progress("Loading, please wait...", true); - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - notify(''); - - var reply = JSON.parse(transport.responseText); - - if (reply) { - //closeArticlePanel(); - - var content = reply[0]['content']; - - var article_pane = new dijit.layout.ContentPane({ - title: "article-" + id , content: content, - style: 'padding : 0px;', - id: 'ATAB-' + id, - closable: true }); - - dijit.byId("content-tabs").addChild(article_pane); - - if (!event || !event.shiftKey) - dijit.byId("content-tabs").selectChild(article_pane); - - if ($("PTITLE-" + id)) - article_pane.attr('title', $("PTITLE-" + id).innerHTML); - } - - } }); - } - - } catch (e) { - exception_error("zoomToArticle", e); - } -} - function scrollArticle(offset) { try { if (!isCdmMode()) { @@ -1520,50 +1540,12 @@ function show_labels_in_headlines(transport) { if (ctr) ctr.innerHTML = elem.labels; }); - - cache_headlines(getActiveFeedId(), activeFeedIsCat(), null, $("headlines-frame").innerHTML); - } } catch (e) { exception_error("show_labels_in_headlines", e); } } -/* function toggleHeadlineActions() { - try { - var e = $("headlineActionsBody"); - var p = $("headlineActionsDrop"); - - if (!Element.visible(e)) { - Element.show(e); - } else { - Element.hide(e); - } - - e.scrollTop = 0; - e.style.left = (p.offsetLeft + 1) + "px"; - e.style.top = (p.offsetTop + p.offsetHeight + 2) + "px"; - - } catch (e) { - exception_error("toggleHeadlineActions", e); - } -} */ - -/* function publishWithNote(id, def_note) { - try { - if (!def_note) def_note = ''; - - var note = prompt(__("Please enter a note for this article:"), def_note); - - if (note != undefined) { - togglePub(id, false, false, note); - } - - } catch (e) { - exception_error("publishWithNote", e); - } -} */ - function dismissArticle(id) { try { var elem = $("RROW-" + id); @@ -1572,7 +1554,9 @@ function dismissArticle(id) { new Effect.Fade(elem, {duration : 0.5}); - active_post_id = false; + if (id == getActiveArticleId()) { + setActiveArticleId(0); + } } catch (e) { exception_error("dismissArticle", e); @@ -1590,7 +1574,7 @@ function dismissSelectedArticles() { var elem = $("RROW-" + ids[i]); if (elem.className && elem.hasClassName("Selected") && - ids[i] != active_post_id) { + ids[i] != getActiveArticleId()) { new Effect.Fade(elem, {duration : 0.5}); sel.push(ids[i]); } else { @@ -1655,8 +1639,6 @@ function cdmClicked(event, id) { try { //var shift_key = event.shiftKey; - hideAuxDlg(); - if (!event.ctrlKey) { if (!getInitParam("cdm_expanded")) { @@ -1672,15 +1654,7 @@ function cdmClicked(event, id) { if (elem) elem.removeClassName("Unread"); - var upd_img_pic = $("FUPDPIC-" + id); - - if (upd_img_pic && (upd_img_pic.src.match("updated.png") || - upd_img_pic.src.match("fresh_sign.png"))) { - - upd_img_pic.src = "images/blank_icon.gif"; - } - - active_post_id = id; + setActiveArticleId(id); if (article_is_unread) { decrementFeedCounter(getActiveFeedId(), activeFeedIsCat()); @@ -1695,7 +1669,7 @@ function cdmClicked(event, id) { handle_rpc_json(transport); } }); - return true; + return !event.shiftKey; } } else { @@ -1709,9 +1683,13 @@ function cdmClicked(event, id) { } toggleUnread(id, 0, false); - zoomToArticle(event, id); + + openArticleInNewWindow(id); } + var unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length + request_counters(unread_in_buffer == 0); + } catch (e) { exception_error("cdmClicked"); } @@ -1719,45 +1697,18 @@ function cdmClicked(event, id) { return false; } -function postClicked(event, id) { - try { - - if (!event.ctrlKey) { - return true; - } else { - postOpenInNewTab(event, id); - return false; - } - - } catch (e) { - exception_error("postClicked"); - } -} - -function hlOpenInNewTab(event, id) { - toggleUnread(id, 0, false); - zoomToArticle(event, id); -} - -function postOpenInNewTab(event, id) { - closeArticlePanel(id); - zoomToArticle(event, id); -} - function hlClicked(event, id) { try { if (event.which == 2) { view(id); return true; - } else if (event.altKey) { + } else if (event.ctrlKey) { + toggleSelected(id, true); + toggleUnread(id, 0, false); openArticleInNewWindow(id); - } else if (!event.ctrlKey) { - view(id); return false; } else { - toggleSelected(id); - toggleUnread(id, 0, false); - zoomToArticle(event, id); + view(id); return false; } @@ -1786,16 +1737,21 @@ function isCdmMode() { return getInitParam("combined_display_mode"); } -function markHeadline(id) { +function markHeadline(id, marked) { + if (marked == undefined) marked = true; + var row = $("RROW-" + id); if (row) { - var check = $("RCHK-" + id); + var check = dijit.byId("RCHK-" + id); if (check) { - check.checked = true; + check.attr("checked", marked); } - row.addClassName("Selected"); + if (marked) + row.addClassName("Selected"); + else + row.removeClassName("Selected"); } } @@ -1870,17 +1826,9 @@ function headlineActionsChange(elem) { function closeArticlePanel() { - var tabs = dijit.byId("content-tabs"); - var child = tabs.selectedChildWidget; - - if (child && tabs.getIndexOfChild(child) > 0) { - tabs.removeChild(child); - child.destroy(); - } else { - if (dijit.byId("content-insert")) - dijit.byId("headlines-wrap-inner").removeChild( - dijit.byId("content-insert")); - } + if (dijit.byId("content-insert")) + dijit.byId("headlines-wrap-inner").removeChild( + dijit.byId("content-insert")); } function initHeadlinesMenu() { @@ -1932,10 +1880,10 @@ function initHeadlinesMenu() { }})); menu.addChild(new dijit.MenuItem({ - label: __("View in a tt-rss tab"), + label: __("Display article URL"), onClick: function(event) { - hlOpenInNewTab(event, this.getParent().callerRowId); - }})); + displayArticleUrl(this.getParent().callerRowId); + }})); menu.addChild(new dijit.MenuSeparator()); @@ -1966,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, @@ -2068,105 +2016,102 @@ function cache_delete(id) { sessionStorage.removeItem(id); } -function cache_headlines(feed, is_cat, toolbar_obj, content_obj) { - if (toolbar_obj && content_obj) { - cache_set("feed:" + feed + ":" + is_cat, - JSON.stringify({toolbar: toolbar_obj, content: content_obj})); - } else { - try { - obj = cache_get("feed:" + feed + ":" + is_cat); - - if (obj) { - obj = JSON.parse(obj); - - if (toolbar_obj) obj.toolbar = toolbar_obj; - if (content_obj) obj.content = content_obj; - - cache_set("feed:" + feed + ":" + is_cat, JSON.stringify(obj)); - } - - } catch (e) { - console.warn("cache_headlines failed: " + e); - } +function cancelSearch() { + try { + _search_query = ""; + viewCurrentFeed(); + } catch (e) { + exception_error("cancelSearch", e); } } -function render_local_headlines(feed, is_cat, obj) { +function setSelectionScore() { try { + var ids = getSelectedArticleIds2(); - dijit.byId("headlines-toolbar").attr('content', - obj.toolbar); - - dijit.byId("headlines-frame").attr('content', - obj.content); + if (ids.length > 0) { + console.log(ids); - dojo.parser.parse('headlines-toolbar'); - - $("headlines-frame").scrollTop = 0; - selectArticles('none'); - setActiveFeedId(feed, is_cat); - initHeadlinesMenu(); + var score = prompt(__("Please enter new score for selected articles:"), score); - dijit.getEnclosingWidget( - document.forms["main_toolbar_form"].update).attr('disabled', - is_cat || feed <= 0); + if (score != undefined) { + var query = "op=rpc&method=setScore&id=" + param_escape(ids.toString()) + + "&score=" + param_escape(score); - precache_headlines(); + new Ajax.Request("backend.php", { + parameters: query, + onComplete: function(transport) { + var reply = JSON.parse(transport.responseText); + if (reply) { + console.log(ids); + + ids.each(function(id) { + var row = $("RROW-" + id); + + if (row) { + var pic = row.getElementsByClassName("hlScorePic")[0]; + + if (pic) { + pic.src = pic.src.replace(/score_.*?\.png/, + reply["score_pic"]); + pic.setAttribute("score", score); + } + } + }); + } + } }); + } + } else { + alert(__("No articles are selected.")); + } } catch (e) { - exception_error("render_local_headlines", e); + exception_error("setSelectionScore", e); } } -function precache_headlines_idle() { +function changeScore(id, pic) { try { - if (!feed_precache_timeout_id) { - if (get_timestamp() - _viewfeed_last > 120) { + var score = pic.getAttribute("score"); - var feeds = dijit.byId("feedTree").getVisibleUnreadFeeds(); - var uncached = []; + var new_score = prompt(__("Please enter new score for this article:"), score); - feeds.each(function(item) { - if (parseInt(item[0]) > 0 && !cache_get("feed:" + item[0] + ":" + item[1])) - uncached.push(item); - }); + if (new_score != undefined) { - if (uncached.length > 0) { - var rf = uncached[Math.floor(Math.random()*uncached.length)]; - viewfeed(rf[0], '', rf[1], 0, true); - } - } - } - precache_idle_timeout_id = setTimeout("precache_headlines_idle()", 1000*30); + var query = "op=rpc&method=setScore&id=" + param_escape(id) + + "&score=" + param_escape(new_score); + + new Ajax.Request("backend.php", { + parameters: query, + onComplete: function(transport) { + var reply = JSON.parse(transport.responseText); + if (reply) { + pic.src = pic.src.replace(/score_.*?\.png/, reply["score_pic"]); + pic.setAttribute("score", new_score); + } + } }); + } } catch (e) { - exception_error("precache_headlines_idle", e); + exception_error("changeScore", e); } } -function precache_headlines() { +function displayArticleUrl(id) { try { + var query = "op=rpc&method=getlinktitlebyid&id=" + param_escape(id); - if (!feed_precache_timeout_id) { - feed_precache_timeout_id = window.setTimeout(function() { - var nuf = getNextUnreadFeed(getActiveFeedId(), activeFeedIsCat()); - var nf = dijit.byId("feedTree").getNextFeed(getActiveFeedId(), activeFeedIsCat()); - - if (nuf && !cache_get("feed:" + nuf + ":" + activeFeedIsCat())) - viewfeed(nuf, '', activeFeedIsCat(), 0, true); - - if (nf && nf[0] != nuf && !cache_get("feed:" + nf[0] + ":" + nf[1])) - viewfeed(nf[0], '', nf[1], 0, true); - - window.setTimeout(function() { - feed_precache_timeout_id = false; - }, 3000); - }, 1000); - } + 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("precache_headlines", e); + exception_error("changeScore", e); } } -