From a95e14fb4c0f73291cd15cad20becb262378a9d7 Mon Sep 17 00:00:00 2001 From: Matt Haley Date: Thu, 13 Jun 2013 22:39:26 -0700 Subject: [PATCH] Load selected feed after a short timeout 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 | 26 ++++++++++++++++++-------- js/tt-rss.js | 4 ++-- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/js/feedlist.js b/js/feedlist.js index 84b561227..222fbcbe0 100644 --- a/js/feedlist.js +++ b/js/feedlist.js @@ -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); diff --git a/js/tt-rss.js b/js/tt-rss.js index ee3156c28..cc04a454a 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -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');