]> git.wh0rd.org - tt-rss.git/blobdiff - functions.js
redirect to login page when session is expired
[tt-rss.git] / functions.js
index 8f18f4c47641663f5502182d47107f0c9d0bb8d9..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,6 +354,79 @@ if (!xmlhttp_rpc && typeof XMLHttpRequest!='undefined') {
        xmlhttp_rpc = new XMLHttpRequest();
 }
 
+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") {
+                               title_obj.global_unread = ctr;
+                               title_obj.updateTitle();
+                               continue;
+                       }
+       
+                       if (t == "category") {
+                               var catctr = f_document.getElementById("FCATCTR-" + id);
+                               if (catctr) {
+                                       catctr.innerHTML = "(" + ctr + " unread)";
+                               }
+                               continue;
+                       }
+               
+                       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";
+                                       if (!feedr.className.match("Unread")) {
+                                               var is_selected = feedr.className.match("Selected");
+               
+                                               feedr.className = feedr.className.replace("Selected", "");
+                                               feedr.className = feedr.className.replace("Unread", "");
+               
+                                               feedr.className = feedr.className + "Unread";
+               
+                                               if (is_selected) {
+                                                       feedr.className = feedr.className + "Selected";
+                                               }
+               
+                                       }
+                               } else {
+                                       feedctr.className = "invisible";
+                                       feedr.className = feedr.className.replace("Unread", "");
+                               }                       
+                       }
+               }
+       } catch (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 {
@@ -353,55 +436,10 @@ function all_counters_callback() {
                        }
        
                        var reply = xmlhttp_rpc.responseXML.firstChild;
-       
                        var f_document = parent.frames["feeds-frame"].document;
-       
-                       for (var l = 0; l < reply.childNodes.length; l++) {
-                               var id = reply.childNodes[l].getAttribute("id");
-                               var t = reply.childNodes[l].getAttribute("type");
-                               var ctr = reply.childNodes[l].getAttribute("counter");
-
-                               if (id == "global-unread") {
-                                       parent.global_unread = ctr;
-                                       parent.updateTitle();
-                                       continue;
-                               }
 
-                               if (t == "category") {
-                                       var catctr = f_document.getElementById("FCATCTR-" + id);
-                                       catctr.innerHTML = "(" + ctr + " unread)";
-                                       continue;
-                               }
-       
-                               var feedctr = f_document.getElementById("FEEDCTR-" + id);
-                               var feedu = f_document.getElementById("FEEDU-" + id);
-                               var feedr = f_document.getElementById("FEEDR-" + id);
-       
-                               if (feedctr && feedu && feedr) {
-       
-                                       feedu.innerHTML = ctr;
-               
-                                       if (ctr > 0) {                                  
-                                               feedctr.className = "odd";
-                                               if (!feedr.className.match("Unread")) {
-                                                       var is_selected = feedr.className.match("Selected");
-       
-                                                       feedr.className = feedr.className.replace("Selected", "");
-                                                       feedr.className = feedr.className.replace("Unread", "");
-       
-                                                       feedr.className = feedr.className + "Unread";
+                       parse_counters(reply, f_document, parent);
        
-                                                       if (is_selected) {
-                                                               feedr.className = feedr.className + "Selected";
-                                                       }
-       
-                                               }
-                                       } else {
-                                               feedctr.className = "invisible";
-                                               feedr.className = feedr.className.replace("Unread", "");
-                                       }                       
-                               }
-                       }
                } catch (e) {
                        exception_error("all_counters_callback", e);
                }
@@ -464,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];
 
@@ -481,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) {
@@ -493,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);
 
@@ -508,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;
                        }
+
                }
        }
 }
@@ -558,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;
@@ -711,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;
+               }
+       }
+}