]> git.wh0rd.org - tt-rss.git/blobdiff - functions.js
redirect to login page when session is expired
[tt-rss.git] / functions.js
index f82708b29754b00bb473b50e7e4bdfbec88ebfaf..d7dcd08f4519848adac726b9fc1d718a1a64df3a 100644 (file)
@@ -1,8 +1,19 @@
 var hotkeys_enabled = true;
 
 function exception_error(location, e) {
-       alert("Exception: " + e.name + "\nMessage: " + e.message + 
-               "\nLocation: " + location);
+       var msg;
+
+       if (e.fileName) {
+               var base_fname = e.fileName.substring(e.fileName.lastIndexOf("/") + 1);
+       
+               msg = "Exception: " + e.name + ", " + e.message + 
+                       "\nFunction: " + location + "()" +
+                       "\nLocation: " + base_fname + ":" + e.lineNumber;
+       } else {
+               msg = "Exception: " + e + "\nFunction: " + location + "()";
+       }
+
+       alert(msg);
 }
 
 function disableHotkeys() {
@@ -118,11 +129,10 @@ function hotkey_handler(e) {
                seq = seq + "" + keycode;
        }
 
-       var piggie = document.getElementById("piggie");
-
-       if (piggie) {
+       if (document.getElementById("piggie")) {
 
                if (seq.match("807371717369")) {
+                       seq = "";
                        localPiggieFunction(true);
                } else {
                        localPiggieFunction(false);
@@ -133,7 +143,7 @@ function hotkey_handler(e) {
                try {
                        localHotkeyHandler(keycode);
                } catch (e) {
-                       exception_error(e);
+                       exception_error("hotkey_handler", e);
                }
        }
 
@@ -154,7 +164,7 @@ function cleanSelectedList(element) {
                        if (child.id == "feedCatHolder") {
                                var fcat = child.lastChild;
                                for (j = 0; j < fcat.childNodes.length; j++) {
-                                       var feed = fcat.childNodes[j];
+                                       var feed = fcat.childNodes[j];                                  
                                        feed.className = feed.className.replace("Selected", "");
                                }               
                        }
@@ -344,16 +354,24 @@ if (!xmlhttp_rpc && typeof XMLHttpRequest!='undefined') {
        xmlhttp_rpc = new XMLHttpRequest();
 }
 
-function parse_counters(reply, f_document) {
+function parse_counters(reply, f_document, title_obj) {
        try {
                for (var l = 0; l < reply.childNodes.length; l++) {
+                       if (!reply.childNodes[l] ||
+                               typeof(reply.childNodes[l].getAttribute) == "undefined") {
+                               // where did this come from?
+                               continue;
+                       }
+
                        var id = reply.childNodes[l].getAttribute("id");
                        var t = reply.childNodes[l].getAttribute("type");
                        var ctr = reply.childNodes[l].getAttribute("counter");
+                       var error = reply.childNodes[l].getAttribute("error");
+                       var has_img = reply.childNodes[l].getAttribute("hi");
        
                        if (id == "global-unread") {
-                               parent.global_unread = ctr;
-                               parent.updateTitle();
+                               title_obj.global_unread = ctr;
+                               title_obj.updateTitle();
                                continue;
                        }
        
@@ -368,10 +386,17 @@ function parse_counters(reply, f_document) {
                        var feedctr = f_document.getElementById("FEEDCTR-" + id);
                        var feedu = f_document.getElementById("FEEDU-" + id);
                        var feedr = f_document.getElementById("FEEDR-" + id);
-               
+                       var feed_img = f_document.getElementById("FIMG-" + id);
+
                        if (feedctr && feedu && feedr) {
                
                                feedu.innerHTML = ctr;
+
+                               if (error) {
+                                       feedr.className = feedr.className.replace("feed", "error");
+                               } else if (id > 0) {
+                                       feedr.className = feedr.className.replace("error", "feed");
+                               }
        
                                if (ctr > 0) {                                  
                                        feedctr.className = "odd";
@@ -395,10 +420,13 @@ function parse_counters(reply, f_document) {
                        }
                }
        } catch (e) {
-               exception_error(e);
+               exception_error("parse_counters", e);
        }
 }
 
+// this one is called from feedlist context
+// thus title_obj passed to parse_counters is parent (e.g. main ttrss window)
+
 function all_counters_callback() {
        if (xmlhttp_rpc.readyState == 4) {
                try {
@@ -410,7 +438,7 @@ function all_counters_callback() {
                        var reply = xmlhttp_rpc.responseXML.firstChild;
                        var f_document = parent.frames["feeds-frame"].document;
 
-                       parse_counters(reply, f_document);
+                       parse_counters(reply, f_document, parent);
        
                } catch (e) {
                        exception_error("all_counters_callback", e);
@@ -474,8 +502,12 @@ function popupHelp(tid) {
 
 function hideOrShowFeeds(doc, hide) {
 
+       if (!doc.styleSheets) return;
+
        var css_rules = doc.styleSheets[0].cssRules;
 
+       if (!css_rules || !css_rules.length) return;
+
        for (i = 0; i < css_rules.length; i++) {
                var rule = css_rules[i];
 
@@ -491,8 +523,13 @@ function hideOrShowFeeds(doc, hide) {
 
 }
 
-function fatalError(code) {
-       window.location = "error.php?c=" + param_escape(code);
+function fatalError(code, params) {
+       if (!params) {
+               window.location = "error.php?c=" + param_escape(code);
+       } else {
+               window.location = "error.php?c=" + param_escape(code) + 
+                       "&p=" + param_escape(params);
+       }
 }
 
 function selectTableRow(r, do_select) {
@@ -503,8 +540,28 @@ function selectTableRow(r, do_select) {
        }
 }
 
+function selectTableRowById(elem_id, check_id, do_select) {
+
+       try {
+
+               var row = document.getElementById(elem_id);
+
+               if (row) {
+                       selectTableRow(row, do_select);
+               }               
+
+               var check = document.getElementById(check_id);
+
+               if (check) {
+                       check.checked = do_select;
+               }
+       } catch (e) {
+               exception_error("selectTableRowById", e);
+       }
+}
+
 function selectTableRowsByIdPrefix(content_id, prefix, check_prefix, do_select, 
-       classcheck) {
+       classcheck, reset_others) {
 
        var content = document.getElementById(content_id);
 
@@ -518,14 +575,34 @@ function selectTableRowsByIdPrefix(content_id, prefix, check_prefix, do_select,
        
                        if (content.rows[i].id.match(prefix)) {
                                selectTableRow(content.rows[i], do_select);
+                       
+                               var row_id = content.rows[i].id.replace(prefix, "");
+                               var check = document.getElementById(check_prefix + row_id);
+
+                               if (check) {
+                                       check.checked = do_select;
+                               }
+                       } else if (reset_others) {
+                               selectTableRow(content.rows[i], false);
+
+                               var row_id = content.rows[i].id.replace(prefix, "");
+                               var check = document.getElementById(check_prefix + row_id);
+
+                               if (check) {
+                                       check.checked = false;
+                               }
+
                        }
+               } else if (reset_others) {
+                       selectTableRow(content.rows[i], false);
 
                        var row_id = content.rows[i].id.replace(prefix, "");
                        var check = document.getElementById(check_prefix + row_id);
 
                        if (check) {
-                               check.checked = do_select;
+                               check.checked = false;
                        }
+
                }
        }
 }
@@ -568,6 +645,20 @@ function toggleSelectRowById(sender, id) {
        }
 }
 
+function toggleSelectListRow(sender) {
+       var parent_row = sender.parentNode;
+
+       if (sender.checked) {
+               if (!parent_row.className.match("Selected")) {
+                       parent_row.className = parent_row.className + "Selected";
+               }
+       } else {
+               if (parent_row.className.match("Selected")) {
+                       parent_row.className = parent_row.className.replace("Selected", "");
+               }
+       }
+}
+
 
 function toggleSelectRow(sender) {
        var parent_row = sender.parentNode.parentNode;
@@ -721,4 +812,15 @@ function showBlockElement(id) {
        } 
 }
 
+function hideParentElement(e) {
+       e.parentNode.style.display = "none";
+}
 
+function dropboxSelect(e, v) {
+       for (i = 0; i < e.length; i++) {
+               if (e[i].value == v) {
+                       e.selectedIndex = i;
+                       break;
+               }
+       }
+}