From b509d64e960fd527a35366f44ee022ce831ae9f8 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 19 Nov 2010 21:05:28 +0300 Subject: [PATCH] rework headlines menu and openArticleInNewWindow() --- backend.php | 17 +++++++ functions.php | 16 +------ modules/backend-rpc.php | 17 ------- viewfeed.js | 104 +++++++++++++++++++++++----------------- 4 files changed, 80 insertions(+), 74 deletions(-) diff --git a/backend.php b/backend.php index c17344a7..8110d437 100644 --- a/backend.php +++ b/backend.php @@ -201,6 +201,23 @@ break; // feeds + case "la": + $id = db_escape_string($_REQUEST['id']); + + $result = db_query($link, "SELECT link FROM ttrss_entries, ttrss_user_entries + WHERE id = '$id' AND id = ref_id AND owner_uid = '".$_SESSION['uid']."'"); + + if (db_num_rows($result) == 1) { + $article_url = db_fetch_result($result, 0, 'link'); + + header("Location: $article_url"); + return; + + } else { + print_error(__("Article not found.")); + } + break; + case "view": $id = db_escape_string($_REQUEST["id"]); diff --git a/functions.php b/functions.php index 5f4a5522..da1171a0 100644 --- a/functions.php +++ b/functions.php @@ -4127,9 +4127,8 @@ ""; # print ""; - print ""; - - print_labels_headlines_dropdown($link, $feed_id); + //print ""; + //print_labels_headlines_dropdown($link, $feed_id); print ""; @@ -5048,17 +5047,6 @@ print "
"; - print "
"; - print "
".__('View article')."
"; - print "
".__('View in a new tab')."
"; - print "
"; - print "
".__('Open original article')."
"; - print "
"; - print "
$update_pic
"; print "
"; diff --git a/modules/backend-rpc.php b/modules/backend-rpc.php index 65f689a3..e7c1f572 100644 --- a/modules/backend-rpc.php +++ b/modules/backend-rpc.php @@ -380,23 +380,6 @@ return; } - if ($subop == "getArticleLink") { - - $id = db_escape_string($_REQUEST["id"]); - - $result = db_query($link, "SELECT link FROM ttrss_entries, ttrss_user_entries - WHERE id = '$id' AND id = ref_id AND owner_uid = '".$_SESSION['uid']."'"); - - if (db_num_rows($result) == 1) { - $link = htmlspecialchars(strip_tags(db_fetch_result($result, 0, "link"))); - print "$link$id"; - } else { - print "Article not found"; - } - - return; - } - if ($subop == "setArticleTags") { global $memcache; diff --git a/viewfeed.js b/viewfeed.js index 3914c757..dbcbaa29 100644 --- a/viewfeed.js +++ b/viewfeed.js @@ -104,6 +104,8 @@ function headlines_callback2(transport, feed_cur_page) { dijit.byId("headlines-toolbar").attr('content', headlines_toolbar.firstChild.nodeValue); + initHeadlinesMenu(); + var cache_prefix = ""; if (is_cat) { @@ -143,6 +145,8 @@ function headlines_callback2(transport, feed_cur_page) { markHeadline(ids[i]); } + initHeadlinesMenu(); + } else { console.log("no new headlines received"); } @@ -2113,49 +2117,8 @@ function getLastVisibleHeadlineId() { } function openArticleInNewWindow(id) { - try { - console.log("openArticleInNewWindow: " + id); - - var query = "?op=rpc&subop=getArticleLink&id=" + id; - var wname = "ttrss_article_" + id; - - console.log(query + " " + wname); - - var w = window.open("", wname); - - if (!w) notify_error("Failed to open window for the article"); - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - - var link = transport.responseXML.getElementsByTagName("link")[0]; - var id = transport.responseXML.getElementsByTagName("id")[0]; - - console.log("open_article received link: " + link); - - if (link && id) { - - var wname = "ttrss_article_" + id.firstChild.nodeValue; - - console.log("link url: " + link.firstChild.nodeValue + ", wname " + wname); - - var w = window.open(link.firstChild.nodeValue, wname); - - if (!w) { notify_error("Failed to load article in new window"); } - - if (id) { - id = id.firstChild.nodeValue; - window.setTimeout("toggleUnread(" + id + ", 0)", 100); - } - } else { - notify_error("Can't open article: received invalid article link"); - } - } }); - - } catch (e) { - exception_error("openArticleInNewWindow", e); - } + toggleUnread(id, 0, false); + window.open("backend.php?op=la&id=" + id); } function isCdmMode() { @@ -2256,3 +2219,58 @@ function closeArticlePanel() { dijit.byId("content-insert")); } } + +function initHeadlinesMenu() { + try { + if (dijit.byId("headlinesMenu")) + dijit.byId("headlinesMenu").destroyRecursive(); + + var ids = []; + var nodes = $$("#headlines-frame > div[id*=RROW]"); + + 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]); + + }); + + menu.addChild(new dijit.MenuItem({ + label: __("View article"), + onClick: function(event) { + view(this.getParent().callerRowId); + }})); + + menu.addChild(new dijit.MenuItem({ + label: __("View in a new tab"), + onClick: function(event) { + hlOpenInNewTab(event, this.getParent().callerRowId); + }})); + + menu.addChild(new dijit.MenuItem({ + label: __("Open original article"), + onClick: function(event) { + openArticleInNewWindow(this.getParent().callerRowId); + }})); + + menu.startup(); + + } catch (e) { + exception_error("initHeadlinesMenu", e); + } +}