From e1f7b05b52904210e00ee452294e55564fcd956b Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 22 Jan 2017 19:20:23 +0300 Subject: [PATCH] reuse menu objects while appending headline rows --- js/viewfeed.js | 182 ++++++++++++++++++++++++++++--------------------- 1 file changed, 106 insertions(+), 76 deletions(-) diff --git a/js/viewfeed.js b/js/viewfeed.js index 007728a1..2f91af12 100755 --- a/js/viewfeed.js +++ b/js/viewfeed.js @@ -150,6 +150,8 @@ function headlines_callback2(transport, offset, background, infscroll_req) { tmp.innerHTML = reply['headlines']['content']; dojo.parser.parse(tmp); + var new_rows = []; + while (tmp.hasChildNodes()) { var row = tmp.removeChild(tmp.firstChild); @@ -157,6 +159,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) { dijit.byId("headlines-frame").domNode.appendChild(row); loaded_article_ids.push(row.id); + new_rows.push(row); } } @@ -171,7 +174,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) { markHeadline(ids[i]); } - initHeadlinesMenu(); + initHeadlinesMenu(new_rows); if (_infscroll_disable) { hsp.innerHTML = "" + @@ -1978,61 +1981,27 @@ function headlinesMenuCommon(menu) { } } -function initHeadlinesMenu() { +function initHeadlinesMenu(append_rows) { 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); - }); + if (!append_rows) { - 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; + if (dijit.byId("headlinesMenu")) + dijit.byId("headlinesMenu").destroyRecursive(); - while (match == null && callerNode && tries <= 3) { + var ids = []; - match = callerNode.getAttribute("data-article-id") - callerNode = callerNode.parentNode; - ++tries; + if (!isCdmMode()) { + nodes = $$("#headlines-frame > div[id*=RROW]"); + } else { + nodes = $$("#headlines-frame span[id*=RTITLE]"); } - if (match) this.callerRowId = match; - - }); - - headlinesMenuCommon(menu); - - 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(); + nodes.each(function (node) { + ids.push(node.id); + }); var menu = new dijit.Menu({ - id: "headlinesFeedTitleMenu", + id: "headlinesMenu", targetNodeIds: ids }); @@ -2040,7 +2009,8 @@ function initHeadlinesMenu() { var callerNode = event.target, match = null, tries = 0; while (match == null && callerNode && tries <= 3) { - match = callerNode.getAttribute("data-feed-id") + + match = callerNode.getAttribute("data-article-id") callerNode = callerNode.parentNode; ++tries; } @@ -2049,41 +2019,101 @@ function initHeadlinesMenu() { }); - menu.addChild(new dijit.MenuItem({ - label: __("Select articles in group"), - onClick: function(event) { - selectArticles("all", - "#headlines-frame > div[id*=RROW]"+ - "[data-orig-feed-id='"+menu.callerRowId+"']"); + headlinesMenuCommon(menu); - }})); + menu.startup(); - menu.addChild(new dijit.MenuItem({ - label: __("Mark group as read"), - onClick: function(event) { - selectArticles("none"); - selectArticles("all", - "#headlines-frame > div[id*=RROW]"+ - "[data-orig-feed-id='"+menu.callerRowId+"']"); + } else { + var menu = dijit.byId("headlinesMenu"); - catchupSelection(); - }})); + append_rows.each(function (row) { + if (!row.hasClassName("cdmFeedTitle")) { + menu.bindDomNode(row); + } + }); + } + /* vgroup feed title menu */ - menu.addChild(new dijit.MenuItem({ - label: __("Mark feed as read"), - onClick: function(event) { - catchupFeedInGroup(menu.callerRowId); - }})); + if (!append_rows) { - menu.addChild(new dijit.MenuItem({ - label: __("Edit feed"), - onClick: function(event) { - editFeed(menu.callerRowId); - }})); + var nodes = $$("#headlines-frame > div[class='cdmFeedTitle']"); + var ids = []; - menu.startup(); + 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) { + match = callerNode.getAttribute("data-feed-id") + callerNode = callerNode.parentNode; + ++tries; + } + + if (match) this.callerRowId = match; + + }); + + menu.addChild(new dijit.MenuItem({ + label: __("Select articles in group"), + onClick: function (event) { + selectArticles("all", + "#headlines-frame > div[id*=RROW]" + + "[data-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]" + + "[data-orig-feed-id='" + menu.callerRowId + "']"); + + catchupSelection(); + } + })); + + menu.addChild(new dijit.MenuItem({ + label: __("Mark feed as read"), + onClick: function (event) { + catchupFeedInGroup(menu.callerRowId); + } + })); + + menu.addChild(new dijit.MenuItem({ + label: __("Edit feed"), + onClick: function (event) { + editFeed(menu.callerRowId); + } + })); + + menu.startup(); + } + } else { + var menu = dijit.byId("headlinesFeedTitleMenu"); + + console.log(append_rows); + + append_rows.each(function (row) { + if (row.hasClassName("cdmFeedTitle")) { + menu.bindDomNode(row); + } + }); } } catch (e) { -- 2.39.5