]> git.wh0rd.org - tt-rss.git/blobdiff - viewfeed.js
add quick action to edit current feed
[tt-rss.git] / viewfeed.js
index 775b40f13522ed2b54809f2a396b38ca1b6a5a1c..70e8aaf0e8822aeb16399458f9b396cd794eca42 100644 (file)
@@ -1,86 +1,97 @@
 var active_post_id = false;
-var total_unread = 0;
-
-var xmlhttp_rpc = false;
+var _catchup_callback_func = false;
+
+function catchup_callback() {
+       if (xmlhttp_rpc.readyState == 4) {
+               try {
+                       debug("catchup_callback");
+                       if (_catchup_callback_func) {
+                               setTimeout(_catchup_callback_func, 100);        
+                       }
+                       all_counters_callback();
+               } catch (e) {
+                       exception_error("catchup_callback", e);
+               }
+       }
+}
 
-/*@cc_on @*/
-/*@if (@_jscript_version >= 5)
-// JScript gives us Conditional compilation, we can cope with old IE versions.
-// and security blocked creation of the objects.
-try {
-       xmlhttp_rpc = new ActiveXObject("Msxml2.XMLHTTP");
-} catch (e) {
-       try {
-               xmlhttp_rpc = new ActiveXObject("Microsoft.XMLHTTP");
-       } catch (E) {
-               xmlhttp_rpc = false;
+function headlines_callback() {
+       if (xmlhttp.readyState == 4) {
+               debug("headlines_callback");
+               var f = document.getElementById("headlines-frame");
+               try {
+                       f.scrollTop = 0;
+               } catch (e) { };
+               f.innerHTML = xmlhttp.responseText;
+               update_all_counters();
+               if (typeof correctPNG != 'undefined') {
+                       correctPNG();
+               }
+               notify("");
        }
 }
-@end @*/
 
-if (!xmlhttp_rpc && typeof XMLHttpRequest!='undefined') {
-       xmlhttp_rpc = new XMLHttpRequest();
+function article_callback() {
+       if (xmlhttp.readyState == 4) {
+               debug("article_callback");
+               var f = document.getElementById("content-frame");
+               try {
+                       f.scrollTop = 0;
+               } catch (e) { };
+               f.innerHTML = xmlhttp.responseText;
+               if (typeof correctPNG != 'undefined') {
+                       correctPNG();
+               }
+               update_all_counters();
+       }
 }
 
 function view(id, feed_id) {
-
-//     p_notify("Loading article...");
-
-       var f_document = parent.frames["feeds-frame"].document;
-       var h_document = document;
-       var m_document = parent.document;
-
-       enableHotkeys();
-
-       var crow = h_document.getElementById("RROW-" + id);
-
-/*     if (crow.className.match("Unread")) {
-               var umark = f_document.getElementById("FEEDU-" + feed_id);
-               
-               umark.innerHTML = umark.innerHTML - 1;
+       
+       try {
+               debug("loading article: " + id + "/" + feed_id);
+       
+               enableHotkeys();
+       
+               var crow = document.getElementById("RROW-" + id);
+       
                crow.className = crow.className.replace("Unread", "");
+       
+               cleanSelected("headlinesList");
+       
+               var upd_img_pic = document.getElementById("FUPDPIC-" + id);
+       
+               if (upd_img_pic) {
+                       upd_img_pic.src = "images/blank_icon.gif";
+               } 
+       
+               active_post_id = id; 
+               //setActiveFeedId(feed_id);
+       
+               var content = document.getElementById("content-frame");
+       
+               selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
+               markHeadline(active_post_id);
 
-               if (umark.innerHTML == "0") {
-                       var feedr = f_document.getElementById("FEEDR-" + feed_id);      
-                       feedr.className = feedr.className.replace("Unread", "");
-
-                       var feedctr = f_document.getElementById("FEEDCTR-" + feed_id);
-
-                       if (feedctr) {
-                               feedctr.className = "invisible";
-                       }
-               }
-
-               total_unread--;
-       }        */
-
-       crow.className = crow.className.replace("Unread", "");
-
-       cleanSelected("headlinesList");
-
-       var upd_img_pic = h_document.getElementById("FUPDPIC-" + id);
-
-       if (upd_img_pic) {
-               upd_img_pic.src = "images/blank_icon.gif";
-       } 
-
-       active_post_id = id; 
-       setActiveFeedId(feed_id);
+               var query = "backend.php?op=view&id=" + param_escape(id) +
+                       "&feed=" + param_escape(feed_id);
 
-       var content = m_document.getElementById("content-frame");
+               if (xmlhttp_ready(xmlhttp)) {
+                       xmlhttp.open("GET", query, true);
+                       xmlhttp.onreadystatechange=article_callback;
+                       xmlhttp.send(null);
+               } else {
+                       debug("xmlhttp busy (@view)");
+                       printLockingError();
+               }  
 
-       if (content) {
-               content.src = "backend.php?op=view&addheader=true&id=" + param_escape(id) +
-                       "&feed=" + param_escape(feed_id);
-               markHeadline(active_post_id);
+       } catch (e) {
+               exception_error("view", e);
        }
-
 }
 
 function toggleMark(id) {
 
-       var f_document = parent.frames["feeds-frame"].document;
-
        if (!xmlhttp_ready(xmlhttp_rpc)) {
                printLockingError();
                return;
@@ -89,15 +100,12 @@ function toggleMark(id) {
        var query = "backend.php?op=rpc&id=" + id + "&subop=mark";
 
        var mark_img = document.getElementById("FMARKPIC-" + id);
-       var vfeedu = f_document.getElementById("FEEDU--1");
+       var vfeedu = document.getElementById("FEEDU--1");
        var crow = document.getElementById("RROW-" + id);
 
-//     alert(vfeedu);
-
        if (mark_img.alt != "Reset mark") {
                mark_img.src = "images/mark_set.png";
                mark_img.alt = "Reset mark";
-               mark_img.setAttribute('onclick', 'javascript:toggleMark('+id+')');
                query = query + "&mark=1";
 
                if (vfeedu && crow.className.match("Unread")) {
@@ -107,7 +115,6 @@ function toggleMark(id) {
        } else {
                mark_img.src = "images/mark_unset.png";
                mark_img.alt = "Set mark";
-               mark_img.setAttribute('onclick', 'javascript:toggleMark('+id+')');
                query = query + "&mark=0";
 
                if (vfeedu && crow.className.match("Unread")) {
@@ -116,8 +123,8 @@ function toggleMark(id) {
 
        }
 
-       var vfeedctr = f_document.getElementById("FEEDCTR--1");
-       var vfeedr = f_document.getElementById("FEEDR--1");
+       var vfeedctr = document.getElementById("FEEDCTR--1");
+       var vfeedr = document.getElementById("FEEDR--1");
 
        if (vfeedu && vfeedctr) {
                if ((+vfeedu.innerHTML) > 0) {
@@ -131,14 +138,18 @@ function toggleMark(id) {
                }
        }
 
-       xmlhttp_rpc.open("GET", query, true);
-       xmlhttp_rpc.onreadystatechange=rpc_pnotify_callback;
-       xmlhttp_rpc.send(null);
+       debug("toggle starred for aid " + id);
+
+       new Ajax.Request(query);
 
 }
 
 function moveToPost(mode) {
 
+       // check for combined mode
+       if (!document.getElementById("headlinesList"))
+               return;
+
        var rows = getVisibleHeadlineIds();
 
        var prev_id;
@@ -169,71 +180,56 @@ function moveToPost(mode) {
        } 
 }
 
-function viewfeed(id) {
-       var f = parent.frames["feeds-frame"];
-       f.viewfeed(id, 0);
-}
-
-function localHotkeyHandler(keycode) {
-
-       if (keycode == 78 || keycode == 40) { // n, down
-               return moveToPost('next');
-       }
-
-       if (keycode == 80 || keycode == 38) { // p, up
-               return moveToPost('prev');
-       } 
-
-       if (keycode == 65) { // a
-               return parent.toggleDispRead();
-       }
-
-       if (keycode == 85) { // u
-               if (parent.getActiveFeedId()) {
-                       return parent.viewfeed(parent.getActiveFeedId(), 0, "ForceUpdate");
+function toggleUnread(id, cmode) {
+       try {
+               if (!xmlhttp_ready(xmlhttp_rpc)) {
+                       printLockingError();
+                       return;
                }
-       }
+       
+               var row = document.getElementById("RROW-" + id);
+               if (row) {
+                       var nc = row.className;
+                       nc = nc.replace("Unread", "");
+                       nc = nc.replace("Selected", "");
+
+                       if (row.className.match("Unread")) {
+                               row.className = nc;
+                       } else {
+                               row.className = nc + "Unread";
+                       }
 
-       if (keycode == 82) { // r
-               return parent.scheduleFeedUpdate(true);
-       }
+                       if (!cmode) cmode = 2;
 
-       var f_doc = parent.frames["feeds-frame"].document;
-       var feedlist = f_doc.getElementById('feedList');
+                       var query = "backend.php?op=rpc&subop=catchupSelected&ids=" +
+                               param_escape(id) + "&cmode=" + param_escape(cmode);
 
-       if (keycode == 74) { // j
-               var feed = getActiveFeedId();
-               var new_feed = getRelativeFeedId(feedlist, feed, 'prev');
-               if (new_feed) viewfeed(new_feed, 0, '');
-       }
+                       xmlhttp_rpc.open("GET", query, true);
+                       xmlhttp_rpc.onreadystatechange=all_counters_callback;
+                       xmlhttp_rpc.send(null);
 
-       if (keycode == 75) { // k
-               var feed = getActiveFeedId();
-               var new_feed = getRelativeFeedId(feedlist, feed, 'next');
-               if (new_feed) viewfeed(new_feed, 0, '');
-       }
+               }
 
-// FIXME
-//     if (keycode == 85) {
-//             return viewfeed(active_feed_id, active_offset, "ForceUpdate");
-//     }
 
-       if (keycode == 83) { // s
-               if (active_post_id) toggleMark(active_post_id);
+       } catch (e) {
+               exception_error("toggleUnread", e);
        }
-       
-//     alert("KC: " + keycode);
-
 }
 
-function selectionToggleUnread() {
+function selectionToggleUnread(cdm_mode, set_state, callback_func) {
        try {
                if (!xmlhttp_ready(xmlhttp_rpc)) {
                        printLockingError();
                        return;
                }
        
-               var rows = getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
+               var rows;
+
+               if (cdm_mode) {
+                       rows = cdmGetSelectedArticles();
+               } else {        
+                       rows = getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
+               }
 
                for (i = 0; i < rows.length; i++) {
                        var row = document.getElementById("RROW-" + rows[i]);
@@ -252,28 +248,46 @@ function selectionToggleUnread() {
 
                if (rows.length > 0) {
 
+                       var cmode = "";
+
+                       if (set_state == undefined) {
+                               cmode = "2";
+                       } else if (set_state == true) {
+                               cmode = "1";
+                       } else if (set_state == false) {
+                               cmode = "0";
+                       }
+
                        var query = "backend.php?op=rpc&subop=catchupSelected&ids=" +
-                               param_escape(rows.toString()) + "&cmode=2";
+                               param_escape(rows.toString()) + "&cmode=" + cmode;
+
+                       _catchup_callback_func = callback_func;
 
                        xmlhttp_rpc.open("GET", query, true);
-                       xmlhttp_rpc.onreadystatechange=all_counters_callback;
+                       xmlhttp_rpc.onreadystatechange=catchup_callback;
                        xmlhttp_rpc.send(null);
 
                }
 
        } catch (e) {
-               exception_error(e);
+               exception_error("selectionToggleUnread", e);
        }
 }
 
-function selectionToggleMarked() {
+function selectionToggleMarked(cdm_mode) {
        try {
                if (!xmlhttp_ready(xmlhttp_rpc)) {
                        printLockingError();
                        return;
                }
        
-               var rows = getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
+               var rows;
+               
+               if (cdm_mode) {
+                       rows = cdmGetSelectedArticles();
+               } else {        
+                       rows = getSelectedTableRowIds("headlinesList", "RROW", "RCHK");
+               }       
 
                for (i = 0; i < rows.length; i++) {
                        var row = document.getElementById("RROW-" + rows[i]);
@@ -308,10 +322,91 @@ function selectionToggleMarked() {
                }
 
        } catch (e) {
-               exception_error(e);
+               exception_error("selectionToggleMarked", e);
+       }
+}
+
+function cdmGetSelectedArticles() {
+       var sel_articles = new Array();
+       var container = document.getElementById("headlinesInnerContainer");
+
+       for (i = 0; i < container.childNodes.length; i++) {
+               var child = container.childNodes[i];
+
+               if (child.id.match("RROW-") && child.className.match("Selected")) {
+                       var c_id = child.id.replace("RROW-", "");
+                       sel_articles.push(c_id);
+               }
+       }
+
+       return sel_articles;
+}
+
+// mode = all,none,unread
+function cdmSelectArticles(mode) {
+       var container = document.getElementById("headlinesInnerContainer");
+
+       for (i = 0; i < container.childNodes.length; i++) {
+               var child = container.childNodes[i];
+
+               if (child.id.match("RROW-")) {
+                       var aid = child.id.replace("RROW-", "");
+
+                       var cb = document.getElementById("RCHK-" + aid);
+
+                       if (mode == "all") {
+                               if (!child.className.match("Selected")) {
+                                       child.className = child.className + "Selected";
+                                       cb.checked = true;
+                               }
+                       } else if (mode == "unread") {
+                               if (child.className.match("Unread") && !child.className.match("Selected")) {
+                                       child.className = child.className + "Selected";
+                                       cb.checked = true;
+                               }
+                       } else {
+                               child.className = child.className.replace("Selected", "");
+                               cb.checked = false;
+                       }
+               }               
+       }
+}
+
+function catchupPage() {
+
+       if (document.getElementById("headlinesList")) {
+               selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, 'Unread', true);
+               selectionToggleUnread(false, false, 'viewCurrentFeed()');
+               selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
+       } else {
+               cdmSelectArticles('all');
+               selectionToggleUnread(true, false, 'viewCurrentFeed()')
+               cdmSelectArticles('none');
        }
 }
 
-function init() {
-       document.onkeydown = hotkey_handler;
+function labelFromSearch(search, search_mode, match_on, feed_id, is_cat) {
+
+       if (!xmlhttp_ready(xmlhttp_rpc)) {
+               printLockingError();
+       }
+
+       var title = prompt("Please enter label title:", "");
+
+       if (title) {
+
+               var query = "backend.php?op=labelFromSearch&search=" + param_escape(search) +
+                       "&smode=" + param_escape(search_mode) + "&match=" + param_escape(match_on) +
+                       "&feed=" + param_escape(feed_id) + "&is_cat=" + param_escape(is_cat) + 
+                       "&title=" + param_escape(title);
+
+               debug("LFS: " + query);
+       
+               xmlhttp_rpc.open("GET", query, true);
+               xmlhttp_rpc.onreadystatechange=dlg_frefresh_callback;
+               xmlhttp_rpc.send(null);
+       }
+
 }
+
+