]> git.wh0rd.org - tt-rss.git/commitdiff
Load selected feed after a short timeout
authorMatt Haley <matt.haley@gmail.com>
Fri, 14 Jun 2013 05:39:26 +0000 (22:39 -0700)
committerMatt Haley <matt.haley@gmail.com>
Fri, 14 Jun 2013 05:39:26 +0000 (22:39 -0700)
Avoid firing multiple server requests if the user is navigating up/down
the tree list with the keyboard. Instead, wait till the user has stopped
navigating for at least 250ms.

js/feedlist.js
js/tt-rss.js

index 84b561227578c82b6b62dafb782c61a6520331e7..222fbcbe06bc8683ddf8c2ccfd9f24cf92d21572 100644 (file)
@@ -2,6 +2,7 @@ var _infscroll_disable = 0;
 var _infscroll_request_sent = 0;
 var _search_query = false;
 var _viewfeed_last = 0;
+var _viewfeed_timeout = false;
 
 var counters_last_request = 0;
 
@@ -52,7 +53,7 @@ function loadMoreHeadlines() {
 }
 
 
-function viewfeed(feed, method, is_cat, offset, background, infscroll_req) {
+function viewfeed(feed, method, is_cat, offset, background, infscroll_req, can_wait) {
        try {
                if (is_cat == undefined)
                        is_cat = false;
@@ -132,15 +133,24 @@ function viewfeed(feed, method, is_cat, offset, background, infscroll_req) {
 
                console.log(query);
 
+               if (can_wait && _viewfeed_timeout) {
+                       setFeedExpandoIcon(getActiveFeedId(), activeFeedIsCat(), 'images/blank_icon.gif');
+                       clearTimeout(_viewfeed_timeout);
+               }
+
                setActiveFeedId(feed, is_cat);
 
-               new Ajax.Request("backend.php", {
-                       parameters: query,
-                       onComplete: function(transport) {
-                               setFeedExpandoIcon(feed, is_cat, 'images/blank_icon.gif');
-                               headlines_callback2(transport, offset, background, infscroll_req);
-                               PluginHost.run(PluginHost.HOOK_FEED_LOADED, [feed, is_cat]);
-                       } });
+               timeout_ms = can_wait ? 250 : 0;
+               _viewfeed_timeout = setTimeout(function() {
+
+                       new Ajax.Request("backend.php", {
+                               parameters: query,
+                               onComplete: function(transport) {
+                                       setFeedExpandoIcon(feed, is_cat, 'images/blank_icon.gif');
+                                       headlines_callback2(transport, offset, background, infscroll_req);
+                                       PluginHost.run(PluginHost.HOOK_FEED_LOADED, [feed, is_cat]);
+                               } });
+               }, timeout_ms); // Wait 250ms
 
        } catch (e) {
                exception_error("viewfeed", e);
index ee3156c2887c3b216e2c5ec2cbbaf3cf500642e3..cc04a454a1413b21f585f35d83f134e7bf49b8ea 100644 (file)
@@ -272,13 +272,13 @@ function init() {
                                var rv = dijit.byId("feedTree").getNextFeed(
                                                getActiveFeedId(), activeFeedIsCat());
 
-                               if (rv) viewfeed(rv[0], '', rv[1]);
+                               if (rv) viewfeed(rv[0], '', rv[1], null, null, null, true);
                };
                hotkey_actions["prev_feed"] = function() {
                                var rv = dijit.byId("feedTree").getPreviousFeed(
                                                getActiveFeedId(), activeFeedIsCat());
 
-                               if (rv) viewfeed(rv[0], '', rv[1]);
+                               if (rv) viewfeed(rv[0], '', rv[1], null, null, null, true);
                };
                hotkey_actions["next_article"] = function() {
                                moveToPost('next');