]> git.wh0rd.org - tt-rss.git/blobdiff - functions.js
quick unsubscribe prompt shows feed name
[tt-rss.git] / functions.js
index 384f34827c8b20e12c90f6db297ca1c400e6d79b..f7e29888847cf84292fce92404c86b78b8fe2156 100644 (file)
@@ -1,5 +1,7 @@
 var hotkeys_enabled = true;
 
+var xmlhttp_rpc = Ajax.getTransport();
+
 function browser_has_opacity() {
        return navigator.userAgent.match("Gecko") != null || 
                navigator.userAgent.match("Opera") != null;
@@ -14,10 +16,13 @@ function exception_error(location, e) {
                msg = "Exception: " + e.name + ", " + e.message + 
                        "\nFunction: " + location + "()" +
                        "\nLocation: " + base_fname + ":" + e.lineNumber;
+               
        } else {
                msg = "Exception: " + e + "\nFunction: " + location + "()";
        }
 
+       debug("<b>EXCEPTION: " + msg + "</b>");
+
        alert(msg);
 }
 
@@ -47,13 +52,6 @@ function rpc_notify_callback() {
        }
 }
 
-function rpc_pnotify_callback() {
-       var container = parent.document.getElementById('notify');
-       if (xmlhttp_rpc.readyState == 4) {
-               container.innerHTML=xmlhttp_rpc.responseText;
-       }
-}
-
 function param_escape(arg) {
        if (typeof encodeURIComponent != 'undefined')
                return encodeURIComponent(arg); 
@@ -155,40 +153,85 @@ var seq = "";
 
 function hotkey_handler(e) {
 
-       var keycode;
-
-       if (!hotkeys_enabled) return;
-
-       if (window.event) {
-               keycode = window.event.keyCode;
-       } else if (e) {
-               keycode = e.which;
-       }
-
-       if (keycode == 13 || keycode == 27) {
-               seq = "";
-       } else {
-               seq = seq + "" + keycode;
-       }
-
-       if (document.getElementById("piggie")) {
+       try {
 
-               if (seq.match("807371717369")) {
+               var keycode;
+       
+               if (!hotkeys_enabled) return;
+       
+               if (window.event) {
+                       keycode = window.event.keyCode;
+               } else if (e) {
+                       keycode = e.which;
+               }
+       
+               if (keycode == 13 || keycode == 27) {
                        seq = "";
-                       localPiggieFunction(true);
                } else {
-                       localPiggieFunction(false);
+                       seq = seq + "" + keycode;
                }
-       }
        
-       if (typeof localHotkeyHandler != 'undefined') {
-               try {
-                       localHotkeyHandler(keycode);
-               } catch (e) {
-                       exception_error("hotkey_handler", e);
+               var m_ctx = getMainContext();
+               var f_ctx = getFeedsContext();
+               var h_ctx = getHeadlinesContext();
+       
+               if (keycode == 82) { // r
+                       return m_ctx.scheduleFeedUpdate(true);
+               }
+       
+               if (keycode == 85) { // u
+                       if (getActiveFeedId()) {
+                               return f_ctx.viewfeed(getActiveFeedId(), 0, "ForceUpdate");
+                       }
+               }
+       
+               if (keycode == 65) { // a
+                       return m_ctx.toggleDispRead();
+               }
+       
+               var f_doc = m_ctx.frames["feeds-frame"].document;
+               var feedlist = f_doc.getElementById('feedList');
+       
+               if (keycode == 74) { // j
+                       var feed = getActiveFeedId();
+                       var new_feed = getRelativeFeedId(feedlist, feed, 'prev');
+                       if (new_feed) viewfeed(new_feed, 0, '');
+               }
+       
+               if (keycode == 75) { // k
+                       var feed = getActiveFeedId();
+                       var new_feed = getRelativeFeedId(feedlist, feed, 'next');
+                       if (new_feed) viewfeed(new_feed, 0, '');
                }
-       }
 
+               if (keycode == 78 || keycode == 40) { // n, down
+                       return h_ctx.moveToPost('next');
+               }
+       
+               if (keycode == 80 || keycode == 38) { // p, up
+                       return h_ctx.moveToPost('prev');
+               } 
+       
+               if (document.getElementById("piggie")) {
+       
+                       if (seq.match("807371717369")) {
+                               seq = "";
+                               localPiggieFunction(true);
+                       } else {
+                               localPiggieFunction(false);
+                       }
+               }
+               
+               if (typeof localHotkeyHandler != 'undefined') {
+                       try {
+                               localHotkeyHandler(keycode);
+                       } catch (e) {
+                               exception_error("hotkey_handler, local:", e);
+                       }
+               }
+       } catch (e) {
+               exception_error("hotkey_handler", e);
+       }
 }
 
 function cleanSelectedList(element) {
@@ -404,20 +447,34 @@ function gotoExportOpml() {
 }
 
 function getActiveFeedId() {
-       return getCookie("ttrss_vf_actfeed");
+//     return getCookie("ttrss_vf_actfeed");
+       try {
+               debug("gAFID: " + getMainContext().active_feed_id);
+               return getMainContext().active_feed_id;
+       } catch (e) {
+               exception_error("getActiveFeedId", e);
+       }
 }
 
 function setActiveFeedId(id) {
-       return setCookie("ttrss_vf_actfeed", id);
+//     return setCookie("ttrss_vf_actfeed", id);
+       try {
+               getMainContext().active_feed_id = id;
+       } catch (e) {
+               exception_error("setActiveFeedId", e);
+       }
 }
 
-var xmlhttp_rpc = Ajax.getTransport();
-
 function parse_counters(reply, scheduled_call) {
        try {
-               var f_document = getMainContext().frames["feeds-frame"].document;
+               var f_document = getFeedsContext().document;
                var title_obj = getMainContext();
 
+               if (reply.firstChild && reply.firstChild.firstChild) {
+                       debug("<b>wrong element passed to parse_counters, adjusting.</b>");
+                       reply = reply.firstChild;
+               }
+
                debug("F_DOC: " + f_document + ", T_OBJ: " + title_obj);
 
                for (var l = 0; l < reply.childNodes.length; l++) {
@@ -511,15 +568,11 @@ function all_counters_callback() {
                                return;
                        }
 
-                       if (!parent.frames["feeds-frame"]) {
-                               notify("[all_counters_callback] no parent feeds-frame");
-                               return;
-                       }
-
                        var reply = xmlhttp_rpc.responseXML.firstChild;
-//                     var f_document = parent.frames["feeds-frame"].document;
 
-                       parse_counters(reply);
+                       var counters = reply.firstChild;
+
+                       parse_counters(counters);
        
                } catch (e) {
                        exception_error("all_counters_callback", e);
@@ -778,7 +831,7 @@ function getRelativeFeedId(list, id, direction, unread_only) {
                                        }
                                } else if (child.id.match("FEEDR-")) {
                                
-                                       if (getCookie("ttrss_vf_hreadf") == 1) {
+                                       if (getInitParam("hide_read_feeds") == 1) {
                                                if (child.className != "feed") {
                                                        alert(child.className);
                                                        return child.id.replace('FEEDR-', '');                                          
@@ -793,7 +846,7 @@ function getRelativeFeedId(list, id, direction, unread_only) {
        
                var feed = list.ownerDocument.getElementById("FEEDR-" + getActiveFeedId());
                
-               if (getCookie("ttrss_vf_hreadf") == 1) {
+               if (getInitParam("hide_read_feeds") == 1) {
                        unread_only = true;
                }
 
@@ -1030,7 +1083,7 @@ function qafAdd() {
 
        closeInfoBox();
 
-       var feeds_doc = window.frames["feeds-frame"].document;
+       var feeds_doc = getFeedsContext().document;
 
        feeds_doc.location.href = "backend.php?op=error&msg=Loading,%20please wait...";
        
@@ -1064,6 +1117,23 @@ function getMainContext() {
        }
 }
 
+function getFeedsContext() {
+       try {
+               return getMainContext().frames["feeds-frame"];
+       } catch (e) {
+               exception_error("getFeedsContext", e);
+       }
+}
+
+
+function getHeadlinesContext() {
+       try {
+               return getMainContext().frames["headlines-frame"];
+       } catch (e) {
+               exception_error("getHeadlinesContext", e);
+       }
+}
+
 function debug(msg) {
        var ctx = getMainContext();
 
@@ -1080,4 +1150,43 @@ function debug(msg) {
        }
 }
 
+function getInitParam(key) {
+       return getMainContext().init_params[key];
+}
 
+// TODO: batch mode
+function storeInitParam(key, value, is_client) {
+       try {
+               getMainContext().init_params[key] = value;
+               if (!is_client) {
+                       new Ajax.Request("backend.php?op=rpc&subop=storeParam&key=" + 
+                               param_escape(key) + "&value=" + param_escape(value));   
+               }
+       } catch (e) {
+               exception_error("storeInitParam", e);
+       }
+}
+
+function fatalError(code, message) {
+       try {   
+               var fe = document.getElementById("fatal_error");
+               var fc = document.getElementById("fatal_error_msg");
+
+               fc.innerHTML = "Code " + code + ": " + message;
+
+               fe.style.display = "block";
+
+       } catch (e) {
+               exception_error("fatalError", e);
+       }
+}
+
+function getFeedName(id) {
+       var d = getFeedsContext().document;
+       var e = d.getElementById("FEEDN-" + id);
+       if (e) {
+               return e.innerHTML.stripTags();
+       } else {
+               return null;
+       }
+}