summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--backend.php17
-rw-r--r--functions.php16
-rw-r--r--modules/backend-rpc.php17
-rw-r--r--viewfeed.js104
4 files changed, 80 insertions, 74 deletions
diff --git a/backend.php b/backend.php
index c17344a79..8110d4370 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 5f4a55229..da1171a01 100644
--- a/functions.php
+++ b/functions.php
@@ -4127,9 +4127,8 @@
"</option>";
# print "<optgroup label=\"".__("Assign label:")."\">";
- print "<option>----------</option>";
-
- print_labels_headlines_dropdown($link, $feed_id);
+ //print "<option>----------</option>";
+ //print_labels_headlines_dropdown($link, $feed_id);
print "<option>----------</option>";
@@ -5048,17 +5047,6 @@
print "<div class='$class' id='RROW-$id' $mouseover_attrs>";
- print "<div dojoType=\"dijit.Menu\" style=\"display: none;\"
- targetNodeIds=\"RROW-$id\">";
- print "<div onclick=\"view($id)\"
- dojoType=\"dijit.MenuItem\">".__('View article')."</div>";
- print "<div onclick=\"hlOpenInNewTab(event, $id)\"
- dojoType=\"dijit.MenuItem\">".__('View in a new tab')."</div>";
- print "<div dojoType=\"dijit.MenuSeparator\"></div>";
- print "<div onclick=\"openArticleInNewWindow($id)\"
- dojoType=\"dijit.MenuItem\">".__('Open original article')."</div>";
- print "</div>";
-
print "<div class='hlUpdPic'>$update_pic</div>";
print "<div class='hlLeft'>";
diff --git a/modules/backend-rpc.php b/modules/backend-rpc.php
index 65f689a36..e7c1f5721 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 "<rpc-reply><link>$link</link><id>$id</id></rpc-reply>";
- } else {
- print "<rpc-reply><error>Article not found</error></rpc-reply>";
- }
-
- return;
- }
-
if ($subop == "setArticleTags") {
global $memcache;
diff --git a/viewfeed.js b/viewfeed.js
index 3914c757d..dbcbaa29e 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);
+ }
+}