]> git.wh0rd.org - tt-rss.git/blobdiff - functions.js
quick unsubscribe prompt shows feed name
[tt-rss.git] / functions.js
index 58d50eea95d2894715e1d3cc026260ac37912725..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) {
@@ -422,13 +465,16 @@ function setActiveFeedId(id) {
        }
 }
 
-var xmlhttp_rpc = Ajax.getTransport();
-
 function parse_counters(reply, scheduled_call) {
        try {
                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++) {
@@ -524,7 +570,9 @@ function all_counters_callback() {
 
                        var reply = xmlhttp_rpc.responseXML.firstChild;
 
-                       parse_counters(reply);
+                       var counters = reply.firstChild;
+
+                       parse_counters(counters);
        
                } catch (e) {
                        exception_error("all_counters_callback", e);
@@ -1077,6 +1125,15 @@ function getFeedsContext() {
        }
 }
 
+
+function getHeadlinesContext() {
+       try {
+               return getMainContext().frames["headlines-frame"];
+       } catch (e) {
+               exception_error("getHeadlinesContext", e);
+       }
+}
+
 function debug(msg) {
        var ctx = getMainContext();
 
@@ -1109,3 +1166,27 @@ function storeInitParam(key, value, is_client) {
                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;
+       }
+}