]> git.wh0rd.org - tt-rss.git/blobdiff - functions.js
make f a hotkey persistent; obsolete option HIDE_READ_FEEDS
[tt-rss.git] / functions.js
index 5c0564897f967130d05c5292caf3201bee26935b..8335f7e6eefbe13eef77f2625b9274e4c5f58fce 100644 (file)
@@ -458,6 +458,11 @@ function parse_counters(reply, scheduled_call) {
                        var xmsg = elems[l].getAttribute("xmsg");
        
                        if (id == "global-unread") {
+
+                               if (ctr > global_unread) {
+                                       offlineDownloadStart(1);
+                               }
+
                                global_unread = ctr;
                                updateTitle();
                                continue;
@@ -526,8 +531,11 @@ function parse_counters(reply, scheduled_call) {
 
                        if (feedctr && feedu && feedr) {
 
-                               if (feedu.innerHTML != ctr && id == getActiveFeedId() && scheduled_call) {
-                                       viewCurrentFeed();
+                               if (parseInt(ctr) > 0 && 
+                                               parseInt(feedu.innerHTML) < parseInt(ctr) && 
+                                               id == getActiveFeedId() && scheduled_call) {
+
+                                       displayNewContentPrompt(id);
                                }
 
                                var row_needs_hl = (ctr > 0 && ctr > parseInt(feedu.innerHTML));
@@ -559,6 +567,8 @@ function parse_counters(reply, scheduled_call) {
                                        if (row_needs_hl) { 
                                                new Effect.Highlight(feedr, {duration: 1, startcolor: "#fff7d5",
                                                        queue: { position:'end', scope: 'EFQ-' + id, limit: 1 } } );
+
+                                               cache_invalidate("F:" + id);
                                        }
                                } else {
                                        feedctr.className = "feedCtrNoUnread";
@@ -681,11 +691,11 @@ function get_feed_entry_name(elem) {
 }
 
 
-function resort_category(node) {
+function resort_category(node, cat_mode) {
 
        try {
 
-               debug("resort_category: " + node);
+               debug("resort_category: " + node + " CM=" + cat_mode);
        
                var by_unread = feedsSortByUnread();
        
@@ -700,8 +710,11 @@ function resort_category(node) {
        
                                var tmp_name = get_feed_entry_name(list[i]);
                                var cur_name = get_feed_entry_name(list[j]);
-       
-                               if ((by_unread && (cur_val > tmp_val)) || (!by_unread && (cur_name < tmp_name))) {
+
+                               var valid_pair = cat_mode || (list[i].id.match(/FEEDR-[0-9]/) &&
+                                               list[j].id.match(/FEEDR-[0-9]/));
+
+                               if (valid_pair && ((by_unread && (cur_val > tmp_val)) || (!by_unread && (cur_name < tmp_name)))) {
                                        tempnode_i = list[i].cloneNode(true);
                                        tempnode_j = list[j].cloneNode(true);
                                        node.replaceChild(tempnode_i, list[j]);
@@ -725,12 +738,12 @@ function resort_feedlist() {
 
                for (var i = 0; i < lists.length; i++) {
                        if (lists[i].id && lists[i].id.match("FCATLIST-")) {
-                               resort_category(lists[i]);
+                               resort_category(lists[i], true);
                        }
                }
 
        } else {
-               resort_category($("feedList"));
+               resort_category($("feedList"), false);
        }
 }
 
@@ -1283,19 +1296,19 @@ function closeErrorBox() {
 
 function closeInfoBox(cleanup) {
 
-       if (Element.visible("infoBoxShadow")) {
-               Element.hide("dialog_overlay");
-       
-               var shadow = $('infoBoxShadow');
-               var box = $('infoBoxShadow');
-
-               Element.hide(shadow);
+       try {
+               enableHotkeys();
 
-               if (cleanup) box.innerHTML = "&nbsp;";
+               if (Element.visible("infoBoxShadow")) {
+                       Element.hide("dialog_overlay");
+                       Element.hide("infoBoxShadow");
 
-               enableHotkeys();
+                       if (cleanup) $("infoBoxShadow").innerHTML = "&nbsp;";
+               }
+       } catch (e) {
+               exception_error("closeInfoBox", e);
        }
-
+       
        return false;
 }
 
@@ -1306,10 +1319,11 @@ function displayDlg(id, param) {
 
        disableHotkeys();
 
-       var query = "backend.php?op=dlg&id=" +
+       var query = "?op=dlg&id=" +
                param_escape(id) + "&param=" + param_escape(param);
 
-       new Ajax.Request(query, {
+       new Ajax.Request("backend.php", {
+               parameters: query,
                onComplete: function (transport) {
                        infobox_callback2(transport);
                } });
@@ -1337,20 +1351,19 @@ function infobox_callback2(transport) {
 
                debug("infobox_callback2");
 
-               if (!getInitParam("infobox_disable_overlay")) {
-                       Element.show("dialog_overlay");
-               }
-
                var box = $('infoBox');
-               var shadow = $('infoBoxShadow');
+               
                if (box) {                      
 
-                       box.innerHTML=transport.responseText;                   
-                       if (shadow) {
-                               shadow.style.display = "block";
-                       } else {
-                               box.style.display = "block";                            
+                       if (!getInitParam("infobox_disable_overlay")) {
+                               Element.show("dialog_overlay");
                        }
+
+                       box.innerHTML=transport.responseText;                   
+                       Element.show("infoBoxShadow");
+                       //Effect.SlideDown("infoBoxShadow", {duration : 1.0});
+
+
                }
 
                /* FIXME this needs to be moved out somewhere */
@@ -1492,8 +1505,7 @@ function getInitParam(key) {
        return init_params[key];
 }
 
-function storeInitParam(key, value) {
-       debug("<b>storeInitParam is OBSOLETE: " + key + " => " + value + "</b>");
+function setInitParam(key, value) {
        init_params[key] = value;
 }
 
@@ -1503,7 +1515,7 @@ function fatalError(code, msg, ext_info) {
                if (!ext_info) ext_info = "N/A";
 
                if (code == 6) {
-                       window.location.href = "login.php";                     
+                       window.location.href = "tt-rss.php";                    
                } else if (code == 5) {
                        window.location.href = "update.php";
                } else {
@@ -1644,9 +1656,10 @@ function filterDlgCheckDate() {
 
                var reg_exp = form.reg_exp.value;
 
-               var query = "backend.php?op=rpc&subop=checkDate&date=" + reg_exp;
+               var query = "?op=rpc&subop=checkDate&date=" + reg_exp;
 
-               new Ajax.Request(query, {
+               new Ajax.Request("backend.php", {
+                       parameters: query,
                        onComplete: function(transport) { 
 
                                var form = document.forms["filter_add_form"];
@@ -1721,7 +1734,7 @@ function openArticleInNewWindow(id) {
        try {
                debug("openArticleInNewWindow: " + id);
 
-               var query = "backend.php?op=rpc&subop=getArticleLink&id=" + id;
+               var query = "?op=rpc&subop=getArticleLink&id=" + id;
                var wname = "ttrss_article_" + id;
 
                debug(query + " " + wname);
@@ -1730,7 +1743,8 @@ function openArticleInNewWindow(id) {
 
                if (!w) notify_error("Failed to open window for the article");
 
-               new Ajax.Request(query, {
+               new Ajax.Request("backend.php", {
+                       parameters: query,
                        onComplete: function(transport) { 
                                open_article_callback(transport); 
                        } });
@@ -1798,10 +1812,11 @@ function labelTest() {
        
                notify_progress("Loading, please wait...");
        
-               var query = "backend.php?op=pref-labels&subop=test&expr=" +
+               var query = "?op=pref-labels&subop=test&expr=" +
                        param_escape(sql_exp) + "&descr=" + param_escape(description);
        
-               new Ajax.Request(query, {
+               new Ajax.Request("backend.php", {
+                       parameters: query,
                        onComplete: function (transport) {
                                labeltest_callback(transport);
                        } });
@@ -2035,25 +2050,21 @@ function getSelectedFeedsFromBrowser() {
 function updateFeedBrowser() {
        try {
 
-               var query = "backend.php?op=rpc&subop=feedBrowser";
+               var options = Form.serialize("feed_browser");
 
-               var search = $("feed_browser_search");
-               var limit = $("feed_browser_limit");
+               var query = "?op=rpc&subop=feedBrowser&" + options;
 
-               if (limit) {
-                       query = query + "&limit=" + limit[limit.selectedIndex].value;
-               }
+               //notify_progress("Loading, please wait...", true);
 
-               if (search) {
-                       query = query + "&search=" + param_escape(search.value);
-               }
+               Element.show('feed_browser_spinner');
 
-               notify_progress("Loading, please wait...", true);
-
-               new Ajax.Request(query, {
+               new Ajax.Request("backend.php", {
+                       parameters: query,
                        onComplete: function(transport) { 
                                notify('');
 
+                               Element.hide('feed_browser_spinner');
+
                                var c = $("browseFeedList");
                                var r = transport.responseXML.getElementsByTagName("content")[0];
                                var nr = transport.responseXML.getElementsByTagName("num-results")[0];
@@ -2073,21 +2084,22 @@ function updateFeedBrowser() {
 
                        } });
 
-
        } catch (e) {
                exception_error("updateFeedBrowser", e);
        }
+
 }
 
 function browseFeeds(limit) {
 
        try {
 
-               var query = "backend.php?op=pref-feeds&subop=browse";
+               var query = "?op=pref-feeds&subop=browse";
 
                notify_progress("Loading, please wait...", true);
 
-               new Ajax.Request(query, {
+               new Ajax.Request("backend.php", {
+                       parameters: query,
                        onComplete: function(transport) { 
                                infobox_callback2(transport);
                        } });
@@ -2128,3 +2140,85 @@ function truncate_string(s, length) {
        if (s.length > length) tmp += "&hellip;";
        return tmp;
 }
+
+/*
+function switchToFlash(e) {
+       try {
+               var targ = e;
+               if (!e) var e = window.event;
+               if (e.target) targ = e.target;
+               else if (e.srcElement) targ = e.srcElement;
+               if (targ.nodeType == 3) // defeat Safari bug
+                       targ = targ.parentNode;
+               
+               //targ is the link that was clicked
+               var audioTag=targ;
+               do {
+                       audioTag=audioTag.previousSibling;
+               } while(audioTag && audioTag.nodeType != 1)
+               
+               var flashPlayer = audioTag.getElementsByTagName('span')[0];
+               targ.parentNode.insertBefore(flashPlayer,targ);
+               targ.parentNode.removeChild(targ);
+               audioTag.parentNode.removeChild(audioTag);
+
+               return false;
+       } catch (e) {
+               exception_error("switchToFlash", e);
+       }
+}
+
+function html5AudioOrFlash(type) {
+       var audioTag = document.createElement('audio');
+       if(! audioTag.canPlayType || audioTag.canPlayType(type) == "no" ||
+                       audioTag.canPlayType(type) == ""){
+               if($('switchToFlashLink')){
+                       switchToFlash($('switchToFlashLink'));
+               }
+       }
+} */
+
+function hotkey_prefix_timeout() {
+       try {
+
+               var date = new Date();
+               var ts = Math.round(date.getTime() / 1000);
+
+               if (hotkey_prefix_pressed && ts - hotkey_prefix_pressed >= 5) {
+                       debug("hotkey_prefix seems to be stuck, aborting");
+                       hotkey_prefix_pressed = false;
+                       hotkey_prefix = false;
+                       Element.hide('cmdline');
+               }
+
+               setTimeout("hotkey_prefix_timeout()", 1000);
+
+       } catch  (e) {
+               exception_error("hotkey_prefix_timeout", e);
+       }
+}
+
+function hideAuxDlg() {
+       try {
+               Element.hide('auxDlg');
+       } catch (e) {
+               exception_error("hideAuxDlg", e);
+       }
+}
+
+function displayNewContentPrompt(id) {
+       try {
+
+               var msg = "<a href='#' onclick='viewfeed("+id+")'>" +
+                       __("New articles available (Click to show)") + "</a>";
+
+               msg = msg.replace("%s", getFeedName(id));
+
+               $('auxDlg').innerHTML = msg;
+
+               Element.show('auxDlg');
+
+       } catch (e) {
+               exception_error("displayNewContentPrompt", e);
+       }
+}