]> git.wh0rd.org - tt-rss.git/commitdiff
rework headlines menu and openArticleInNewWindow()
authorAndrew Dolgov <fox@madoka.volgo-balt.ru>
Fri, 19 Nov 2010 18:05:28 +0000 (21:05 +0300)
committerAndrew Dolgov <fox@madoka.volgo-balt.ru>
Fri, 19 Nov 2010 18:05:28 +0000 (21:05 +0300)
backend.php
functions.php
modules/backend-rpc.php
viewfeed.js

index c17344a790efc178e4ddde26e87786c5f2f79533..8110d4370dfd0890c075d372ef371f2e3dfdff38 100644 (file)
 
                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"]);
index 5f4a55229a08eb22dc0e1d16c6b9edf19adbd1e4..da1171a01f3afb634aaedcbbe8c9f11574de55e4 100644 (file)
                                "</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>";
 
 
                                        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'>";
index 65f689a36ea9f14a412db90901ee0a6e550ef1e7..e7c1f5721f881248c33aea6a3d6ecf3326232dea 100644 (file)
                        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;
index 3914c757d9bee13fc60fd26b57a2b5b1d1dd9e6e..dbcbaa29ef3d80cfbc05b942e3b47c1405722eeb 100644 (file)
@@ -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);
+       }
+}