X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=js%2Fviewfeed.js;h=a786904e39d48859b8f0cf3d925435a294cb35e1;hb=86f32020f6a06af52eb226bf95c6515cb2537663;hp=1c5811fe75a721ccac3ab25828c5e3d73b49decd;hpb=d1754390cc1c45eb469daf0221e235ca1a02d555;p=tt-rss.git diff --git a/js/viewfeed.js b/js/viewfeed.js index 1c5811fe..a786904e 100644 --- a/js/viewfeed.js +++ b/js/viewfeed.js @@ -8,6 +8,7 @@ var post_under_pointer = false; var last_requested_article = false; var catchup_id_batch = []; +var catchup_go_next = false; var catchup_timeout_id = false; var cids_requested = []; @@ -87,8 +88,12 @@ function headlines_callback2(transport, offset, background, infscroll_req) { dijit.byId("headlines-frame").attr('content', reply['headlines']['content']); - dijit.byId("headlines-toolbar").attr('content', - reply['headlines']['toolbar']); + //dijit.byId("headlines-toolbar").attr('content', + // reply['headlines']['toolbar']); + + dojo.html.set($("headlines-toolbar"), + reply['headlines']['toolbar'], + {parseContent: true}); $$("#headlines-frame > div[id*=RROW]").each(function(row) { if (loaded_article_ids.indexOf(row.id) != -1) { @@ -190,14 +195,11 @@ function headlines_callback2(transport, offset, background, infscroll_req) { else request_counters(true); - } else if (transport.responseText) { + } else { 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; @@ -314,13 +316,11 @@ function article_callback2(transport, id) { // return; // } - } else if (transport.responseText) { + } else { 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); } var unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length @@ -835,6 +835,8 @@ function selectionToggleUnread(set_state, callback, no_error, ids) { } } + updateFloatingTitle(true); + if (rows.length > 0) { var cmode = ""; @@ -959,10 +961,12 @@ function getLoadedArticleIds() { } // mode = all,none,unread,invert,marked,published -function selectArticles(mode) { +function selectArticles(mode, query) { try { - var children = $$("#headlines-frame > div[id*=RROW]"); + if (!query) query = "#headlines-frame > div[id*=RROW]"; + + var children = $$(query); children.each(function(child) { var id = child.id.replace("RROW-", ""); @@ -1241,7 +1245,7 @@ function postMouseOut(id) { function unpackVisibleHeadlines() { try { - if (!isCdmMode()) return; + if (!isCdmMode() || !getInitParam("cdm_expanded")) return; $$("#headlines-frame > div[id*=RROW]").each( function(child) { @@ -1273,14 +1277,15 @@ function headlines_scroll_handler(e) { unpackVisibleHeadlines(); // set topmost child in the buffer as active - if (getInitParam("cdm_auto_catchup") == 1 && - (!isCdmMode() || getInitParam("cdm_expanded"))) { + if (isCdmMode() && getInitParam("cdm_auto_catchup") == 1 && + getSelectedArticleIds2().length <= 1 && + getInitParam("cdm_expanded")) { var rows = $$("#headlines-frame > div[id*=RROW]"); for (var i = 0; i < rows.length; i++) { var child = rows[i]; - if ($("headlines-frame").scrollTop < child.offsetTop && + if ($("headlines-frame").scrollTop <= child.offsetTop && child.offsetTop - $("headlines-frame").scrollTop < 100 && child.id.replace("RROW-", "") != _active_article_id) { @@ -1314,7 +1319,7 @@ function headlines_scroll_handler(e) { if (hsp) hsp.innerHTML = ""; } - if (getInitParam("cdm_expanded") && isCdmMode()) { + if (isCdmMode()) { updateFloatingTitle(); } @@ -1324,6 +1329,8 @@ function headlines_scroll_handler(e) { var ts = new Date().getTime(); if (ts - _last_headlines_update < 100) return; + var atend = true; + $$("#headlines-frame > div[id*=RROW][class*=Unread]").each( function(child) { if (child.hasClassName("Unread") && $("headlines-frame").scrollTop > @@ -1335,10 +1342,18 @@ function headlines_scroll_handler(e) { catchup_id_batch.push(id); //console.log("auto_catchup_batch: " + catchup_id_batch.toString()); + } else { + atend = false; } }); + if (atend) { + if (getInitParam("on_catchup_show_next_feed") == "1") { + catchup_go_next = true; + } + } + if (catchup_id_batch.length > 0) { window.clearTimeout(catchup_timeout_id); @@ -1380,8 +1395,16 @@ function catchupBatchedArticles() { catchup_id_batch.remove(id); }); + updateFloatingTitle(true); + } }); } + if (catchup_go_next) { + catchup_go_next = false; + var is_cat = activeFeedIsCat(); + var nuf = getNextUnreadFeed(getActiveFeedId(), is_cat); + if (nuf) viewfeed(nuf, '', is_cat); + } } catch (e) { exception_error("catchupBatchedArticles", e); @@ -1488,6 +1511,12 @@ function cdmCollapseArticle(event, id, unmark) { if (event) Event.stop(event); PluginHost.run(PluginHost.HOOK_ARTICLE_COLLAPSED, id); + + if (row.offsetTop < $("headlines-frame").scrollTop) + scrollToRowId(row.id); + + Element.hide("floatingTitle"); + $("floatingTitle").setAttribute("rowid", false); } } catch (e) { @@ -1592,9 +1621,9 @@ function show_labels_in_headlines(transport) { if (data) { data['info-for-headlines'].each(function(elem) { - var ctr = $("HLLCTR-" + elem.id); - - if (ctr) ctr.innerHTML = elem.labels; + $$(".HLLCTR-" + elem.id).each(function(ctr) { + ctr.innerHTML = elem.labels; + }); }); } } catch (e) { @@ -1735,6 +1764,7 @@ function cdmClicked(event, id) { if (article_is_unread) { decrementFeedCounter(getActiveFeedId(), activeFeedIsCat()); + updateFloatingTitle(true); } var query = "?op=rpc&method=catchupSelected" + @@ -1749,7 +1779,8 @@ function cdmClicked(event, id) { return !event.shiftKey; } - } else { + } else if (event.target.parents(".cdmHeader").length > 0) { + toggleSelected(id, true); var elem = $("RROW-" + id); @@ -1909,58 +1940,39 @@ function closeArticlePanel() { dijit.byId("content-insert")); } -function initHeadlinesMenu() { +function initFloatingMenu() { try { - if (dijit.byId("headlinesMenu")) - dijit.byId("headlinesMenu").destroyRecursive(); - - var ids = []; - - if (!isCdmMode()) { - nodes = $$("#headlines-frame > div[id*=RROW]"); - } else { - nodes = $$("#headlines-frame span[id*=RTITLE]"); - } - - nodes.each(function(node) { - ids.push(node.id); - }); - - var menu = new dijit.Menu({ - id: "headlinesMenu", - targetNodeIds: ids, - }); + if (dijit.byId("floatingMenu")) + dijit.byId("floatingMenu").destroyRecursive(); - var tmph = dojo.connect(menu, '_openMyself', function (event) { - var callerNode = event.target, match = null, tries = 0; + var menu = new dijit.Menu({ + id: "floatingMenu", + targetNodeIds: ["floatingTitle"] + }); - while (match == null && callerNode && tries <= 3) { - match = callerNode.id.match("^[A-Z]+[-]([0-9]+)$"); - callerNode = callerNode.parentNode; - ++tries; - } + var id = $("floatingTitle").getAttribute("rowid").replace("RROW-", ""); - if (match) this.callerRowId = parseInt(match[1]); + headlinesMenuCommon(menu, id); - }); + menu.startup(); + } catch (e) { + exception_error("initFloatingMenu", e); + } +} -/* if (!isCdmMode()) - menu.addChild(new dijit.MenuItem({ - label: __("View article"), - onClick: function(event) { - view(this.getParent().callerRowId); - }})); */ +function headlinesMenuCommon(menu, base_id) { + try { menu.addChild(new dijit.MenuItem({ label: __("Open original article"), onClick: function(event) { - openArticleInNewWindow(this.getParent().callerRowId); + openArticleInNewWindow(base_id ? base_id : this.getParent().callerRowId); }})); menu.addChild(new dijit.MenuItem({ label: __("Display article URL"), onClick: function(event) { - displayArticleUrl(this.getParent().callerRowId); + displayArticleUrl(base_id ? base_id : this.getParent().callerRowId); }})); menu.addChild(new dijit.MenuSeparator()); @@ -1970,7 +1982,7 @@ function initHeadlinesMenu() { onClick: function(event) { var ids = getSelectedArticleIds2(); // cast to string - var id = this.getParent().callerRowId + ""; + var id = (base_id ? base_id : this.getParent().callerRowId) + ""; ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id]; selectionToggleUnread(undefined, false, true, ids); @@ -1981,7 +1993,7 @@ function initHeadlinesMenu() { onClick: function(event) { var ids = getSelectedArticleIds2(); // cast to string - var id = this.getParent().callerRowId + ""; + var id = (base_id ? base_id : this.getParent().callerRowId) + ""; ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id]; selectionToggleMarked(undefined, false, true, ids); @@ -1992,7 +2004,7 @@ function initHeadlinesMenu() { onClick: function(event) { var ids = getSelectedArticleIds2(); // cast to string - var id = this.getParent().callerRowId + ""; + var id = (base_id ? base_id : this.getParent().callerRowId) + ""; ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id]; selectionTogglePublished(undefined, false, true, ids); @@ -2003,13 +2015,13 @@ function initHeadlinesMenu() { menu.addChild(new dijit.MenuItem({ label: __("Mark above as read"), onClick: function(event) { - catchupRelativeToArticle(0, this.getParent().callerRowId); + catchupRelativeToArticle(0, base_id ? base_id : this.getParent().callerRowId); }})); menu.addChild(new dijit.MenuItem({ label: __("Mark below as read"), onClick: function(event) { - catchupRelativeToArticle(1, this.getParent().callerRowId); + catchupRelativeToArticle(1, base_id ? base_id : this.getParent().callerRowId); }})); @@ -2035,7 +2047,7 @@ function initHeadlinesMenu() { onClick: function(event) { var ids = getSelectedArticleIds2(); // cast to string - var id = this.getParent().ownerMenu.callerRowId + ""; + var id = (base_id ? base_id : this.getParent().ownerMenu.callerRowId) + ""; ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id]; @@ -2048,7 +2060,7 @@ function initHeadlinesMenu() { onClick: function(event) { var ids = getSelectedArticleIds2(); // cast to string - var id = this.getParent().ownerMenu.callerRowId + ""; + var id = (base_id ? base_id : this.getParent().ownerMenu.callerRowId) + ""; ids = ids.size() != 0 && ids.indexOf(id) != -1 ? ids : [id]; @@ -2069,8 +2081,117 @@ function initHeadlinesMenu() { } + + } catch (e) { + exception_error("headlinesMenuCommon", e); + } +} + +function initHeadlinesMenu() { + try { + if (dijit.byId("headlinesMenu")) + dijit.byId("headlinesMenu").destroyRecursive(); + + var ids = []; + + if (!isCdmMode()) { + nodes = $$("#headlines-frame > div[id*=RROW]"); + } else { + nodes = $$("#headlines-frame span[id*=RTITLE]"); + } + + nodes.each(function(node) { + ids.push(node.id); + }); + + var menu = new dijit.Menu({ + id: "headlinesMenu", + targetNodeIds: ids, + }); + + var tmph = dojo.connect(menu, '_openMyself', function (event) { + var callerNode = event.target, match = null, tries = 0; + + while (match == null && callerNode && tries <= 3) { + match = callerNode.id.match("^[A-Z]+[-]([0-9]+)$"); + callerNode = callerNode.parentNode; + ++tries; + } + + if (match) this.callerRowId = parseInt(match[1]); + + }); + + headlinesMenuCommon(menu, false); + menu.startup(); + /* vgroup feed title menu */ + + var nodes = $$("#headlines-frame > div[class='cdmFeedTitle']"); + var ids = []; + + nodes.each(function(node) { + ids.push(node.id); + }); + + if (ids.length > 0) { + if (dijit.byId("headlinesFeedTitleMenu")) + dijit.byId("headlinesFeedTitleMenu").destroyRecursive(); + + var menu = new dijit.Menu({ + id: "headlinesFeedTitleMenu", + targetNodeIds: ids, + }); + + var tmph = dojo.connect(menu, '_openMyself', function (event) { + var callerNode = event.target, match = null, tries = 0; + + while (match == null && callerNode && tries <= 3) { + console.log(callerNode.id); + + match = callerNode.id.match("^[A-Z]+[-]([0-9]+)$"); + callerNode = callerNode.parentNode; + ++tries; + + console.log(match[1]); + } + + if (match) this.callerRowId = parseInt(match[1]); + + }); + + menu.addChild(new dijit.MenuItem({ + label: __("Select articles in group"), + onClick: function(event) { + selectArticles("all", + "#headlines-frame > div[id*=RROW]"+ + "[orig-feed-id='"+menu.callerRowId+"']"); + + }})); + + menu.addChild(new dijit.MenuItem({ + label: __("Mark group as read"), + onClick: function(event) { + selectArticles("none"); + selectArticles("all", + "#headlines-frame > div[id*=RROW]"+ + "[orig-feed-id='"+menu.callerRowId+"']"); + + catchupSelection(); + }})); + + + menu.addChild(new dijit.MenuItem({ + label: __("Mark feed as read"), + onClick: function(event) { + catchupFeedInGroup(menu.callerRowId); + }})); + + menu.startup(); + + } + } catch (e) { exception_error("initHeadlinesMenu", e); } @@ -2214,25 +2335,65 @@ function openSelectedAttachment(elem) { } } -function updateFloatingTitle() { +function scrollToRowId(id) { + try { + var row = $(id); + + if (row) + $("headlines-frame").scrollTop = row.offsetTop; + + } catch (e) { + exception_error("scrollToRowId", e); + } +} + +function updateFloatingTitle(unread_only) { try { + if (!isCdmMode()) return; + var hf = $("headlines-frame"); - var child = $("RROW-" + _active_article_id); - if (child && child.offsetTop + child.offsetHeight > hf.scrollTop) { + var elems = $$("#headlines-frame > div[id*=RROW]"); - var header = child.getElementsByClassName("cdmHeader")[0]; + for (var i = 0; i < elems.length; i++) { - if (child.id != $("floatingTitle").getAttribute("rowid")) { - $("floatingTitle").setAttribute("rowid", child.id); - $("floatingTitle").innerHTML = header.innerHTML; - } + var child = elems[i]; - if (child.offsetTop < hf.scrollTop - header.offsetHeight - 100 && - child.offsetTop + child.offsetHeight - hf.scrollTop > 100) - Element.show("floatingTitle"); - else - Element.hide("floatingTitle"); + if (child && child.offsetTop + child.offsetHeight > hf.scrollTop) { + + var header = child.getElementsByClassName("cdmHeader")[0]; + + if (unread_only || child.id != $("floatingTitle").getAttribute("rowid")) { + if (child.id != $("floatingTitle").getAttribute("rowid")) { + $("floatingTitle").setAttribute("rowid", child.id); + $("floatingTitle").innerHTML = header.innerHTML; + $("floatingTitle").firstChild.innerHTML = "" + $("floatingTitle").firstChild.innerHTML; + + initFloatingMenu(); + + var cb = $$("#floatingTitle .dijitCheckBox")[0]; + + if (cb) + cb.parentNode.removeChild(cb); + } + + if (child.hasClassName("Unread")) + $("floatingTitle").addClassName("Unread"); + else + $("floatingTitle").removeClassName("Unread"); + + PluginHost.run(PluginHost.HOOK_FLOATING_TITLE, child); + } + + if (child.offsetTop < hf.scrollTop - header.offsetHeight && + child.offsetTop + child.offsetHeight - hf.scrollTop > header.offsetHeight) + Element.show("floatingTitle"); + else + Element.hide("floatingTitle"); + + return; + + } } } catch (e) {