]> git.wh0rd.org - tt-rss.git/blobdiff - viewfeed.js
generated feeds always sorted by updated desc
[tt-rss.git] / viewfeed.js
index bb4a1dad5e85059a1409ef1f0a12662c9f895b47..58b7d3ecbfc6214267ff22317c67b876804c8a0b 100644 (file)
-var active_feed_id = false;
 var active_post_id = false;
-var total_unread = 0;
 
-var xmlhttp_rpc = false;
-
-/*@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 = new ActiveXObject("Msxml2.XMLHTTP");
-} catch (e) {
-       try {
-               xmlhttp_rpc = new ActiveXObject("Microsoft.XMLHTTP");
-       } catch (E) {
-               xmlhttp_rpc = false;
-       }
-}
-@end @*/
-
-if (!xmlhttp_rpc && typeof XMLHttpRequest!='undefined') {
-       xmlhttp_rpc = new XMLHttpRequest();
-}
+var xmlhttp_rpc = Ajax.getTransport();
 
 function view(id, feed_id) {
-
-//     p_notify("Loading article...");
-
-       enableHotkeys();
-
-       var crow = document.getElementById("RROW-" + id);
-
-       var f_doc = parent.frames["feeds-frame"].document;
-
-       if (crow.className.match("Unread")) {
-               var umark = f_doc.getElementById("FEEDU-" + feed_id);
-               
-               umark.innerHTML = umark.innerHTML - 1;
+       
+       try {
+               debug("loading article: " + id + "/" + feed_id);
+       
+               var f_document = getFeedsContext().document;
+               var m_document = parent.document;
+       
+               enableHotkeys();
+       
+               var crow = document.getElementById("RROW-" + id);
+       
                crow.className = crow.className.replace("Unread", "");
-
-               if (umark.innerHTML == "0") {
-                       var feedr = f_doc.getElementById("FEEDR-" + feed_id);   
-                       feedr.className = feedr.className.replace("Unread", "");
-
-                       var feedctr = f_doc.getElementById("FEEDCTR-" + feed_id);
-
-                       if (feedctr) {
-                               feedctr.className = "invisible";
-                       }
-               }
-
-               total_unread--;
-       }       
-
-
-       cleanSelected("headlinesList");
-
-       var upd_img_pic = document.getElementById("FUPDPIC-" + id);
-
-       if (upd_img_pic) {
-               upd_img_pic.src = "images/blank_icon.png";
-       } 
-
-       var unread_rows = getVisibleUnreadHeadlines();
-
-       if (unread_rows.length == 0) {
-               var button = document.getElementById("btnCatchupPage");
-               if (button) {
-                       button.className = "disabledButton";
-                       button.href = "";
-               }
-       }
-
-       active_post_id = id; 
-       active_feed_id = feed_id;
-
-       var content = parent.document.getElementById("content-frame");
-
-       if (content) {
-               content.src = "backend.php?op=view&addheader=true&id=" + param_escape(id);
+       
+               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 = m_document.getElementById("content-frame");
+       
+               content.src = "backend.php?op=view&id=" + param_escape(id) +
+                       "&feed=" + param_escape(feed_id);
+       
+               selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
                markHeadline(active_post_id);
+
+       } catch (e) {
+               exception_error("view", e);
        }
 }
 
+function toggleMark(id) {
 
-function toggleMark(id, toggle) {
+       var f_document = parent.frames["feeds-frame"].document;
 
        if (!xmlhttp_ready(xmlhttp_rpc)) {
                printLockingError();
                return;
        }
 
-       var mark_img = document.getElementById("FMARKPIC-" + id);
-
        var query = "backend.php?op=rpc&id=" + id + "&subop=mark";
 
-       if (toggle == true) {
+       var mark_img = document.getElementById("FMARKPIC-" + id);
+       var vfeedu = f_document.getElementById("FEEDU--1");
+       var crow = document.getElementById("RROW-" + id);
+
+       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+', false)');
+               mark_img.setAttribute('onclick', 'javascript:toggleMark('+id+')');
                query = query + "&mark=1";
+
+               if (vfeedu && crow.className.match("Unread")) {
+                       vfeedu.innerHTML = (+vfeedu.innerHTML) + 1;
+               }
+
        } else {
                mark_img.src = "images/mark_unset.png";
                mark_img.alt = "Set mark";
-               mark_img.setAttribute('onclick', 'javascript:toggleMark('+id+', true)');
+               mark_img.setAttribute('onclick', 'javascript:toggleMark('+id+')');
                query = query + "&mark=0";
+
+               if (vfeedu && crow.className.match("Unread")) {
+                       vfeedu.innerHTML = (+vfeedu.innerHTML) - 1;
+               }
+
+       }
+
+       var vfeedctr = f_document.getElementById("FEEDCTR--1");
+       var vfeedr = f_document.getElementById("FEEDR--1");
+
+       if (vfeedu && vfeedctr) {
+               if ((+vfeedu.innerHTML) > 0) {
+                       if (crow.className.match("Unread") && !vfeedr.className.match("Unread")) {
+                               vfeedr.className = vfeedr.className + "Unread";
+                               vfeedctr.className = "odd";
+                       }
+               } else {
+                       vfeedctr.className = "invisible";
+                       vfeedr.className = vfeedr.className.replace("Unread", "");
+               }
        }
 
-       xmlhttp_rpc.open("GET", query, true);
-       xmlhttp_rpc.onreadystatechange=rpc_notify_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;
@@ -134,32 +123,223 @@ function moveToPost(mode) {
 
        if (mode == "next") {
                if (next_id != undefined) {
-                       view(next_id, active_feed_id);
+                       view(next_id, getActiveFeedId());
                }
        }
 
        if (mode == "prev") {
                if ( prev_id != undefined) {
-                       view(prev_id, active_feed_id);
+                       view(prev_id, getActiveFeedId());
                }
        } 
 }
 
-function localHotkeyHandler(keycode) {
+function viewfeed(id) {
+       var f = parent.frames["feeds-frame"];
+       f.viewfeed(id, 0);
+}
 
-       if (keycode == 78) {
-               return moveToPost('next');
+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 (!cmode) cmode = 2;
+
+                       var query = "backend.php?op=rpc&subop=catchupSelected&ids=" +
+                               param_escape(id) + "&cmode=" + param_escape(cmode);
+
+                       xmlhttp_rpc.open("GET", query, true);
+                       xmlhttp_rpc.onreadystatechange=all_counters_callback;
+                       xmlhttp_rpc.send(null);
+
+               }
+
+
+       } catch (e) {
+               exception_error("toggleUnread", e);
        }
+}
 
-       if (keycode == 80) {
-               return moveToPost('prev');
-       } 
+function selectionToggleUnread(cdm_mode) {
+       try {
+               if (!xmlhttp_ready(xmlhttp_rpc)) {
+                       printLockingError();
+                       return;
+               }
+       
+               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]);
+                       if (row) {
+                               var nc = row.className;
+                               nc = nc.replace("Unread", "");
+                               nc = nc.replace("Selected", "");
+
+                               if (row.className.match("Unread")) {
+                                       row.className = nc + "Selected";
+                               } else {
+                                       row.className = nc + "UnreadSelected";
+                               }
+                       }
+               }
+
+               if (rows.length > 0) {
+
+                       var query = "backend.php?op=rpc&subop=catchupSelected&ids=" +
+                               param_escape(rows.toString()) + "&cmode=2";
+
+                       xmlhttp_rpc.open("GET", query, true);
+                       xmlhttp_rpc.onreadystatechange=all_counters_callback;
+                       xmlhttp_rpc.send(null);
+
+               }
 
-// FIXME
-//     if (keycode == 85) {
-//             return viewfeed(active_feed_id, active_offset, "ForceUpdate");
-//     }
+       } catch (e) {
+               exception_error("selectionToggleUnread", e);
+       }
+}
 
-//     alert("KC: " + keycode);
+function selectionToggleMarked(cdm_mode) {
+       try {
+               if (!xmlhttp_ready(xmlhttp_rpc)) {
+                       printLockingError();
+                       return;
+               }
+       
+               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]);
+                       var mark_img = document.getElementById("FMARKPIC-" + rows[i]);
+
+                       if (row && mark_img) {
+
+                               if (mark_img.alt == "Set mark") {
+                                       mark_img.src = "images/mark_set.png";
+                                       mark_img.alt = "Reset mark";
+                                       mark_img.setAttribute('onclick', 
+                                               'javascript:toggleMark('+rows[i]+', false)');
+
+                               } else {
+                                       mark_img.src = "images/mark_unset.png";
+                                       mark_img.alt = "Set mark";
+                                       mark_img.setAttribute('onclick', 
+                                               'javascript:toggleMark('+rows[i]+', true)');
+                               }
+                       }
+               }
 
+               if (rows.length > 0) {
+
+                       var query = "backend.php?op=rpc&subop=markSelected&ids=" +
+                               param_escape(rows.toString()) + "&cmode=2";
+
+                       xmlhttp_rpc.open("GET", query, true);
+                       xmlhttp_rpc.onreadystatechange=all_counters_callback;
+                       xmlhttp_rpc.send(null);
+
+               }
+
+       } catch (e) {
+               exception_error("selectionToggleMarked", e);
+       }
+}
+
+function cdmGetSelectedArticles() {
+       var sel_articles = new Array();
+       var container = document.getElementById("headlinesContainer");
+
+       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("headlinesContainer");
+
+       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() {
+       selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', true, 'Unread', true);
+       selectionToggleUnread();
+       selectTableRowsByIdPrefix('headlinesList', 'RROW-', 'RCHK-', false);
+}
+
+
+function init() {
+       if (arguments.callee.done) return;
+       arguments.callee.done = true;           
+
+       if (parent.frames["feeds-frame"]) {
+               document.onkeydown = hotkey_handler;
+       }
+
+       var hw = document.getElementById("headlinesList").scrollHeight;
+       var pw = parent.document.getElementById("headlines").scrollHeight;
+
+       if (hw >= pw) {
+               var bt = document.getElementById("headlineActionsBottom");
+               bt.className = "headlinesSubToolbar";
+       }
+       
 }