X-Git-Url: https://git.wh0rd.org/?p=tt-rss.git;a=blobdiff_plain;f=js%2Ffeedlist.js;h=78a125998aba70cb4b907989866cd7e3bcf650e6;hp=1e783f3b37f0e215a66143bbad08c9d9852b7cac;hb=0c06bb5fe1278b7d92926b21b000e9c966e19ee6;hpb=f830f853a919c458d06bdc6ce292b8ae73a801f3 diff --git a/js/feedlist.js b/js/feedlist.js index 1e783f3b..78a12599 100644 --- a/js/feedlist.js +++ b/js/feedlist.js @@ -1,12 +1,12 @@ -var _infscroll_disable = 0; -var _infscroll_request_sent = 0; +let _infscroll_disable = 0; +let _infscroll_request_sent = 0; -var _search_query = false; -var _viewfeed_last = 0; -var _viewfeed_timeout = false; +let _search_query = false; +let _viewfeed_last = 0; +let _viewfeed_timeout = false; -var counters_last_request = 0; -var _counters_prev = []; +let counters_last_request = 0; +let _counters_prev = []; function resetCounterCache() { _counters_prev = []; @@ -15,12 +15,12 @@ function resetCounterCache() { function loadMoreHeadlines() { console.log("loadMoreHeadlines"); - var offset = 0; + let offset = 0; - var view_mode = document.forms["main_toolbar_form"].view_mode.value; - var unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length; - var num_all = $$("#headlines-frame > div[id*=RROW]").length; - var num_unread = getFeedUnread(getActiveFeedId(), activeFeedIsCat()); + const view_mode = document.forms["main_toolbar_form"].view_mode.value; + const unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length; + const num_all = $$("#headlines-frame > div[id*=RROW]").length; + const num_unread = getFeedUnread(getActiveFeedId(), activeFeedIsCat()); // TODO implement marked & published @@ -48,7 +48,7 @@ function loadMoreHeadlines() { } function cleanup_memory(root) { - var dijits = dojo.query("[widgetid]", dijit.byId(root).domNode).map(dijit.byNode); + const dijits = dojo.query("[widgetid]", dijit.byId(root).domNode).map(dijit.byNode); dijits.each(function (d) { dojo.destroy(d.domNode); @@ -60,22 +60,15 @@ function cleanup_memory(root) { } function viewfeed(params) { - var feed = params.feed; - var is_cat = params.is_cat; - var offset = params.offset; - var background = params.background; - var infscroll_req = params.infscroll_req; - var can_wait = params.can_wait; - var viewfeed_debug = params.viewfeed_debug; - var method = params.method; - - if (is_cat == undefined) - is_cat = false; - else - is_cat = !!is_cat; - - if (offset == undefined) offset = 0; - if (background == undefined) background = false; + const feed = params.feed; + let is_cat = !!params.is_cat || false; + let offset = params.offset || 0; + let background = params.background || false; + let infscroll_req = params.infscroll_req || false; + const can_wait = params.can_wait; + const viewfeed_debug = params.viewfeed_debug; + const method = params.method; + if (infscroll_req == undefined) infscroll_req = false; last_requested_article = 0; @@ -96,7 +89,7 @@ function viewfeed(params) { } if (infscroll_req) { - var timestamp = get_timestamp(); + const timestamp = get_timestamp(); if (_infscroll_request_sent && _infscroll_request_sent + 30 > timestamp) { //console.log("infscroll request in progress, aborting"); @@ -109,38 +102,32 @@ function viewfeed(params) { Form.enable("main_toolbar_form"); - var toolbar_query = Form.serialize("main_toolbar_form"); - - var query = "?op=feeds&method=view&feed=" + param_escape(feed) + "&" + - toolbar_query; + let query = Object.assign({op: "feeds", method: "view", feed: feed}, + dojo.formToObject("main_toolbar_form")); - if (method) query += "&m=" + param_escape(method); + if (method) query.m = method; if (offset > 0) { if (current_first_id) { - query = query + "&fid=" + param_escape(current_first_id); + query.fid = current_first_id; } } if (!background) { if (_search_query) { - force_nocache = true; - query = query + "&" + _search_query; - //_search_query = false; + query = Object.assign(query, _search_query); } if (offset != 0) { - query = query + "&skip=" + offset; + query.skip = offset; // to prevent duplicate feed titles when showing grouped vfeeds if (vgroup_last_feed) { - query = query + "&vgrlf=" + param_escape(vgroup_last_feed); + query.vgrlf = vgroup_last_feed; } - } else { - if (!is_cat && feed == getActiveFeedId() && !params.method) { - query = query + "&m=ForceUpdate"; + } else if (!is_cat && feed == getActiveFeedId() && !params.method) { + query.m = "ForceUpdate"; } - } Form.enable("main_toolbar_form"); @@ -149,9 +136,7 @@ function viewfeed(params) { notify_progress("Loading, please wait...", true); } - query += "&cat=" + is_cat; - - console.log(query); + query.cat = is_cat; if (can_wait && _viewfeed_timeout) { setFeedExpandoIcon(getActiveFeedId(), activeFeedIsCat(), 'images/blank_icon.gif'); @@ -161,23 +146,25 @@ function viewfeed(params) { setActiveFeedId(feed, is_cat); if (viewfeed_debug) { - window.open("backend.php" + query + "&debug=1&csrf_token=" + getInitParam("csrf_token")); + window.open("backend.php?" + + dojo.objectToQuery( + Object.assign({debug: 1, csrf_token: getInitParam("csrf_token")}, query) + )); } - timeout_ms = can_wait ? 250 : 0; - _viewfeed_timeout = setTimeout(function() { - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - try { - setFeedExpandoIcon(feed, is_cat, 'images/blank_icon.gif'); - headlines_callback2(transport, offset, background, infscroll_req); - PluginHost.run(PluginHost.HOOK_FEED_LOADED, [feed, is_cat]); - } catch (e) { - exception_error(e); - } - } }); + const timeout_ms = can_wait ? 250 : 0; + _viewfeed_timeout = setTimeout(() => { + + xhrPost("backend.php", query, (transport) => { + try { + setFeedExpandoIcon(feed, is_cat, 'images/blank_icon.gif'); + headlines_callback2(transport, offset, background, infscroll_req); + PluginHost.run(PluginHost.HOOK_FEED_LOADED, [feed, is_cat]); + } catch (e) { + exception_error(e); + } + }); + }, timeout_ms); // Wait 250ms } @@ -188,7 +175,8 @@ function feedlist_init() { loading_set_progress(50); document.onkeydown = hotkey_handler; - setTimeout(hotkey_prefix_timeout, 5*1000); + setInterval(hotkey_prefix_timeout, 5*1000); + setInterval(catchupBatchedArticles, 3*1000); if (!getActiveFeedId()) { viewfeed({feed: -3}); @@ -201,7 +189,7 @@ function feedlist_init() { if (getInitParam("is_default_pw")) { console.warn("user password is at default value"); - var dialog = new dijit.Dialog({ + const dialog = new dijit.Dialog({ title: __("Your password is at default value"), href: "backend.php?op=dlg&method=defaultpasswordwarning", id: 'infoBox', @@ -230,26 +218,22 @@ function feedlist_init() { function request_counters(force) { - var date = new Date(); - var timestamp = Math.round(date.getTime() / 1000); + const date = new Date(); + const timestamp = Math.round(date.getTime() / 1000); if (force || timestamp - counters_last_request > 5) { console.log("scheduling request of counters..."); counters_last_request = timestamp; - var query = "?op=rpc&method=getAllCounters&seq=" + next_seq(); + let query = {op: "rpc", method: "getAllCounters", seq: next_seq()}; if (!force) - query = query + "&last_article_id=" + getInitParam("last_article_id"); - - console.log(query); + query.last_article_id = getInitParam("last_article_id"); - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - handle_rpc_json(transport); - } }); + xhrPost("backend.php", query, (transport) => { + handle_rpc_json(transport); + }); } else { console.log("request_counters: rate limit reached: " + (timestamp - counters_last_request)); @@ -261,8 +245,8 @@ function request_counters(force) { // http://adripofjavascript.com/blog/drips/object-equality-in-javascript.html function counter_is_equal(a, b) { // Create arrays of property names - var aProps = Object.getOwnPropertyNames(a); - var bProps = Object.getOwnPropertyNames(b); + const aProps = Object.getOwnPropertyNames(a); + const bProps = Object.getOwnPropertyNames(b); // If number of properties is different, // objects are not equivalent @@ -270,8 +254,8 @@ function counter_is_equal(a, b) { return false; } - for (var i = 0; i < aProps.length; i++) { - var propName = aProps[i]; + for (let i = 0; i < aProps.length; i++) { + const propName = aProps[i]; // If values of same property are not equal, // objects are not equivalent @@ -287,19 +271,19 @@ function counter_is_equal(a, b) { function parse_counters(elems) { - for (var l = 0; l < elems.length; l++) { + for (let l = 0; l < elems.length; l++) { if (_counters_prev[l] && counter_is_equal(elems[l], _counters_prev[l])) { continue; } - var id = elems[l].id; - var kind = elems[l].kind; - var ctr = parseInt(elems[l].counter); - var error = elems[l].error; - var has_img = elems[l].has_img; - var updated = elems[l].updated; - var auxctr = parseInt(elems[l].auxcounter); + const id = elems[l].id; + const kind = elems[l].kind; + const ctr = parseInt(elems[l].counter); + const error = elems[l].error; + const has_img = elems[l].has_img; + const updated = elems[l].updated; + const auxctr = parseInt(elems[l].auxcounter); if (id == "global-unread") { global_unread = ctr; @@ -341,7 +325,7 @@ function parse_counters(elems) { function getFeedUnread(feed, is_cat) { try { - var tree = dijit.byId("feedTree"); + const tree = dijit.byId("feedTree"); if (tree && tree.model) return tree.model.getFeedUnread(feed, is_cat); @@ -355,7 +339,7 @@ function getFeedUnread(feed, is_cat) { function getFeedCategory(feed) { try { - var tree = dijit.byId("feedTree"); + const tree = dijit.byId("feedTree"); if (tree && tree.model) return tree.getFeedCategory(feed); @@ -368,7 +352,7 @@ function getFeedCategory(feed) { } function hideOrShowFeeds(hide) { - var tree = dijit.byId("feedTree"); + const tree = dijit.byId("feedTree"); if (tree) return tree.hideRead(hide, getInitParam("hide_read_shows_special")); @@ -378,7 +362,7 @@ function getFeedName(feed, is_cat) { if (isNaN(feed)) return feed; // it's a tag - var tree = dijit.byId("feedTree"); + const tree = dijit.byId("feedTree"); if (tree && tree.model) return tree.model.getFeedValue(feed, is_cat, 'name'); @@ -386,7 +370,7 @@ function getFeedName(feed, is_cat) { function getFeedValue(feed, is_cat, key) { try { - var tree = dijit.byId("feedTree"); + const tree = dijit.byId("feedTree"); if (tree && tree.model) return tree.model.getFeedValue(feed, is_cat, key); @@ -398,7 +382,7 @@ function getFeedValue(feed, is_cat, key) { } function setFeedUnread(feed, is_cat, unread) { - var tree = dijit.byId("feedTree"); + const tree = dijit.byId("feedTree"); if (tree && tree.model) return tree.model.setFeedUnread(feed, is_cat, unread); @@ -406,7 +390,7 @@ function setFeedUnread(feed, is_cat, unread) { function setFeedValue(feed, is_cat, key, value) { try { - var tree = dijit.byId("feedTree"); + const tree = dijit.byId("feedTree"); if (tree && tree.model) return tree.model.setFeedValue(feed, is_cat, key, value); @@ -417,19 +401,19 @@ function setFeedValue(feed, is_cat, key, value) { } function selectFeed(feed, is_cat) { - var tree = dijit.byId("feedTree"); + const tree = dijit.byId("feedTree"); if (tree) return tree.selectFeed(feed, is_cat); } function setFeedIcon(feed, is_cat, src) { - var tree = dijit.byId("feedTree"); + const tree = dijit.byId("feedTree"); if (tree) return tree.setFeedIcon(feed, is_cat, src); } function setFeedExpandoIcon(feed, is_cat, src) { - var tree = dijit.byId("feedTree"); + const tree = dijit.byId("feedTree"); if (tree) return tree.setFeedExpandoIcon(feed, is_cat, src); @@ -437,8 +421,8 @@ function setFeedExpandoIcon(feed, is_cat, src) { } function getNextUnreadFeed(feed, is_cat) { - var tree = dijit.byId("feedTree"); - var nuf = tree.model.getNextUnreadFeed(feed, is_cat); + const tree = dijit.byId("feedTree"); + const nuf = tree.model.getNextUnreadFeed(feed, is_cat); if (nuf) return tree.model.store.getValue(nuf, 'bare_id'); @@ -449,13 +433,13 @@ function catchupCurrentFeed(mode) { } function catchupFeedInGroup(id) { - var title = getFeedName(id); + const title = getFeedName(id); - var str = __("Mark all articles in %s as read?").replace("%s", title); + const str = __("Mark all articles in %s as read?").replace("%s", title); if (getInitParam("confirm_feed_catchup") != 1 || confirm(str)) { - var rows = $$("#headlines-frame > div[id*=RROW][data-orig-feed-id='"+id+"']"); + const rows = $$("#headlines-frame > div[id*=RROW][data-orig-feed-id='"+id+"']"); if (rows.length > 0) { @@ -468,9 +452,9 @@ function catchupFeedInGroup(id) { }); - var feedTitles = $$("#headlines-frame > div[class='cdmFeedTitle']"); + const feedTitles = $$("#headlines-frame > div[class='cdmFeedTitle']"); - for (var i = 0; i < feedTitles.length; i++) { + for (let i = 0; i < feedTitles.length; i++) { if (feedTitles[i].getAttribute("data-feed-id") == id) { if (i < feedTitles.length - 1) { @@ -484,28 +468,18 @@ function catchupFeedInGroup(id) { updateFloatingTitle(true); } - var catchup_query = "?op=rpc&method=catchupFeed&feed_id=" + - id + "&is_cat=false"; - - console.log(catchup_query); - notify_progress("Loading, please wait...", true); - new Ajax.Request("backend.php", { - parameters: catchup_query, - onComplete: function (transport) { - handle_rpc_json(transport); - } - } ); - - //return viewCurrentFeed('MarkAllReadGR:' + id); + xhrPost("backend.php", { op: "rpc", method: "catchupFeed", feed_id: id, is_cat: false}, (transport) => { + handle_rpc_json(transport); + }); } } function catchupFeed(feed, is_cat, mode) { if (is_cat == undefined) is_cat = false; - var str = false; + let str = false; switch (mode) { case "1day": @@ -521,8 +495,8 @@ function catchupFeed(feed, is_cat, mode) { str = __("Mark %w in %s as read?"); } - var mark_what = last_search_query && last_search_query[0] ? __("search results") : __("all articles"); - var fn = getFeedName(feed, is_cat); + const mark_what = last_search_query && last_search_query[0] ? __("search results") : __("all articles"); + const fn = getFeedName(feed, is_cat); str = str.replace("%s", fn) .replace("%w", mark_what); @@ -531,40 +505,33 @@ function catchupFeed(feed, is_cat, mode) { return; } - var catchup_query = {op: 'rpc', method: 'catchupFeed', feed_id: feed, + const catchup_query = {op: 'rpc', method: 'catchupFeed', feed_id: feed, is_cat: is_cat, mode: mode, search_query: last_search_query[0], search_lang: last_search_query[1]}; - console.log(catchup_query); - notify_progress("Loading, please wait...", true); - new Ajax.Request("backend.php", { - parameters: catchup_query, - onComplete: function(transport) { - handle_rpc_json(transport); - - var show_next_feed = getInitParam("on_catchup_show_next_feed") == "1"; + xhrPost("backend.php", catchup_query, (transport) => { + handle_rpc_json(transport); - if (show_next_feed) { - var nuf = getNextUnreadFeed(feed, is_cat); + const show_next_feed = getInitParam("on_catchup_show_next_feed") == "1"; - if (nuf) { - viewfeed({feed: nuf, is_cat: is_cat}); - } - } else { - if (feed == getActiveFeedId() && is_cat == activeFeedIsCat()) { - viewCurrentFeed(); - } - } + if (show_next_feed) { + const nuf = getNextUnreadFeed(feed, is_cat); - notify(""); - } }); + if (nuf) { + viewfeed({feed: nuf, is_cat: is_cat}); + } + } else if (feed == getActiveFeedId() && is_cat == activeFeedIsCat()) { + viewCurrentFeed(); + } + notify(""); + }); } function decrementFeedCounter(feed, is_cat) { - var ctr = getFeedUnread(feed, is_cat); + let ctr = getFeedUnread(feed, is_cat); if (ctr > 0) { setFeedUnread(feed, is_cat, ctr - 1); @@ -572,7 +539,7 @@ function decrementFeedCounter(feed, is_cat) { updateTitle(); if (!is_cat) { - var cat = parseInt(getFeedCategory(feed)); + const cat = parseInt(getFeedCategory(feed)); if (!isNaN(cat)) { ctr = getFeedUnread(cat, true);