diff --git a/js/feedlist.js b/js/feedlist.js index b3082bad0..e13d9d74c 100644 --- a/js/feedlist.js +++ b/js/feedlist.js @@ -102,34 +102,31 @@ function viewfeed(params) { Form.enable("main_toolbar_form"); - const toolbar_query = Form.serialize("main_toolbar_form"); + let query = Object.assign({op: "feeds", method: "view", feed: feed}, + dojo.formToObject("main_toolbar_form")); - let query = "?op=feeds&method=view&feed=" + param_escape(feed) + "&" + - toolbar_query; - - 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) { - 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"; + query.m = "ForceUpdate"; } Form.enable("main_toolbar_form"); @@ -139,7 +136,7 @@ function viewfeed(params) { notify_progress("Loading, please wait...", true); } - query += "&cat=" + is_cat; + query.cat = is_cat; if (can_wait && _viewfeed_timeout) { setFeedExpandoIcon(getActiveFeedId(), activeFeedIsCat(), 'images/blank_icon.gif'); @@ -149,7 +146,10 @@ 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) + )); } const timeout_ms = can_wait ? 250 : 0; diff --git a/js/tt-rss.js b/js/tt-rss.js index 56e89addc..e25dff18e 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -154,7 +154,7 @@ function search() { style: "width: 600px", execute: function() { if (this.validate()) { - _search_query = dojo.objectToQuery(this.attr('value')); + _search_query = this.attr('value'); this.hide(); viewCurrentFeed(); } diff --git a/js/viewfeed.js b/js/viewfeed.js index b9c635f01..5b237b477 100755 --- a/js/viewfeed.js +++ b/js/viewfeed.js @@ -38,8 +38,6 @@ function headlines_callback2(transport, offset, background, infscroll_req) { feed_id = reply['headlines']['id']; last_search_query = reply['headlines']['search_query']; - console.log(feed_id, getActiveFeedId(), is_cat, activeFeedIsCat()); - if (feed_id != -7 && (feed_id != getActiveFeedId() || is_cat != activeFeedIsCat())) return; @@ -253,15 +251,7 @@ function showArticleInHeadlines(id, noexpand) { function article_callback2(transport, id) { console.log("article_callback2 " + id); - handle_rpc_json(transport); - - let reply = false; - - try { - reply = JSON.parse(transport.responseText); - } catch (e) { - console.error(e); - } + const reply = handle_rpc_json(transport); if (reply) { @@ -274,11 +264,6 @@ function article_callback2(transport, id) { cache_set("article:" + article['id'], article['content']); }); -// if (id != last_requested_article) { -// console.log("requested article id is out of sequence, aborting"); -// return; -// } - } else { console.error("Invalid object received: " + transport.responseText); @@ -286,7 +271,7 @@ function article_callback2(transport, id) { __('Could not display article (invalid object received - see error console for details)') + ""); } - const unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length + const unread_in_buffer = $$("#headlines-frame > div[id*=RROW][class*=Unread]").length; request_counters(unread_in_buffer == 0); notify(""); @@ -311,7 +296,7 @@ function view(id, activefeed, noexpand) { console.log("cache check result: " + (cached_article != false)); - let query = "?op=article&method=view&id=" + param_escape(id); + const query = {op: "article", method: "view", id: id}; const neighbor_ids = getRelativePostIds(id); @@ -329,7 +314,7 @@ function view(id, activefeed, noexpand) { console.log("additional ids: " + cids_to_request.toString()); - query = query + "&cids=" + cids_to_request.toString(); + query.cids = cids_to_request.toString(); const article_is_unread = crow.hasClassName("Unread"); @@ -337,14 +322,10 @@ function view(id, activefeed, noexpand) { showArticleInHeadlines(id); if (cached_article && article_is_unread) { - - query = query + "&mode=prefetch"; - + query.mode = "prefetch"; render_article(cached_article); - } else if (cached_article) { - - query = query + "&mode=prefetch_old"; + query.mode = "prefetch_old"; render_article(cached_article); // if we don't need to request any relative ids, we might as well skip @@ -362,18 +343,16 @@ function view(id, activefeed, noexpand) { decrementFeedCounter(getActiveFeedId(), activeFeedIsCat()); } - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - article_callback2(transport, id); - } }); + xhrPost("backend.php", query, (transport) => { + article_callback2(transport, id); + }) return false; } function toggleMark(id, client_only) { - let query = "?op=rpc&id=" + id + "&method=mark"; + const query = { op: "rpc", id: id, method: "mark" }; const row = $("RROW-" + id); if (!row) return; @@ -382,7 +361,7 @@ function toggleMark(id, client_only) { const row_imgs = row.getElementsByClassName("markedPic"); - for (var i = 0; i < row_imgs.length; i++) + for (let i = 0; i < row_imgs.length; i++) imgs.push(row_imgs[i]); const ft = $("floatingTitle"); @@ -399,32 +378,28 @@ function toggleMark(id, client_only) { if (!row.hasClassName("marked")) { img.src = img.src.replace("mark_unset", "mark_set"); - query = query + "&mark=1"; + query.mark = 1; } else { img.src = img.src.replace("mark_set", "mark_unset"); - query = query + "&mark=0"; + query.mark = 0; } } row.toggleClassName("marked"); - if (!client_only) { - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function (transport) { - handle_rpc_json(transport); - } + if (!client_only) + xhrPost("backend.php", query, (transport) => { + handle_rpc_json(transport); }); } -} function togglePub(id, client_only, no_effects, note) { - let query = "?op=rpc&id=" + id + "&method=publ"; + const query = { op: "rpc", id: id, method: "publ" }; if (note != undefined) { - query = query + "¬e=" + param_escape(note); + query.note = note; } else { - query = query + "¬e=undefined"; + query.note = "undefined"; } const row = $("RROW-" + id); @@ -434,7 +409,7 @@ function togglePub(id, client_only, no_effects, note) { const row_imgs = row.getElementsByClassName("pubPic"); - for (var i = 0; i < row_imgs.length; i++) + for (let i = 0; i < row_imgs.length; i++) imgs.push(row_imgs[i]); const ft = $("floatingTitle"); @@ -442,19 +417,19 @@ function togglePub(id, client_only, no_effects, note) { if (ft && ft.getAttribute("data-article-id") == id) { const fte = ft.getElementsByClassName("pubPic"); - for (var i = 0; i < fte.length; i++) + for (let i = 0; i < fte.length; i++) imgs.push(fte[i]); } - for (var i = 0; i < imgs.length; i++) { + for (let i = 0; i < imgs.length; i++) { const img = imgs[i]; if (!row.hasClassName("published") || note != undefined) { img.src = img.src.replace("pub_unset", "pub_set"); - query = query + "&pub=1"; + query.pub = 1; } else { img.src = img.src.replace("pub_set", "pub_unset"); - query = query + "&pub=0"; + query.pub = 0; } } @@ -463,14 +438,10 @@ function togglePub(id, client_only, no_effects, note) { else row.toggleClassName("published"); - if (!client_only) { - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { + if (!client_only) + xhrPost("backend.php", query, (transport) => { handle_rpc_json(transport); - } }); - } - + }); } function moveToPost(mode, noscroll, noexpand) { @@ -601,7 +572,7 @@ function updateSelectedPrompt() { } -function toggleUnread(id, cmode, effect) { +function toggleUnread(id, cmode) { const row = $("RROW-" + id); if (row) { const tmpClassName = row.className; @@ -622,22 +593,17 @@ function toggleUnread(id, cmode, effect) { row.addClassName("Unread"); } - if (cmode == undefined) cmode = 2; - - const query = "?op=rpc&method=catchupSelected" + - "&cmode=" + param_escape(cmode) + "&ids=" + param_escape(id); - -// notify_progress("Loading, please wait..."); - if (tmpClassName != row.className) { - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function (transport) { + if (cmode == undefined) cmode = 2; + + const query = {op: "rpc", method: "catchupSelected", + cmode: cmode, ids: id}; + + xhrPost("backend.php", query, (transport) => { handle_rpc_json(transport); - } + }); } - } } @@ -649,18 +615,13 @@ function selectionRemoveLabel(id, ids) { return; } - const query = "?op=article&method=removeFromLabel&ids=" + - param_escape(ids.toString()) + "&lid=" + param_escape(id); - - console.log(query); - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - handle_rpc_json(transport); - show_labels_in_headlines(transport); - } }); + const query = { op: "article", method: "removeFromLabel", + ids: ids.toString(), lid: id }; + xhrPost("backend.php", query, (transport) => { + handle_rpc_json(transport); + show_labels_in_headlines(transport); + }); } function selectionAssignLabel(id, ids) { @@ -671,17 +632,13 @@ function selectionAssignLabel(id, ids) { return; } - const query = "?op=article&method=assignToLabel&ids=" + - param_escape(ids.toString()) + "&lid=" + param_escape(id); + const query = { op: "article", method: "assignToLabel", + ids: ids.toString(), lid: id }; - console.log(query); - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - handle_rpc_json(transport); - show_labels_in_headlines(transport); - } }); + xhrPost("backend.php", query, (transport) => { + handle_rpc_json(transport); + show_labels_in_headlines(transport); + }); } function selectionToggleUnread(set_state, callback, no_error, ids) { @@ -727,17 +684,15 @@ function selectionToggleUnread(set_state, callback, no_error, ids) { cmode = "0"; } - const query = "?op=rpc&method=catchupSelected" + - "&cmode=" + cmode + "&ids=" + param_escape(rows.toString()); + const query = {op: "rpc", method: "catchupSelected", + cmode: cmode, ids: rows.toString() }; notify_progress("Loading, please wait..."); - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - handle_rpc_json(transport); - if (callback) callback(transport); - } }); + xhrPost("backend.php", query, (transport) => { + handle_rpc_json(transport); + if (callback) callback(transport); + }); } } @@ -756,17 +711,13 @@ function selectionToggleMarked(sel_state, callback, no_error, ids) { } if (rows.length > 0) { + const query = { op: "rpc", method: "markSelected", + ids: rows.toString(), cmode: 2 }; - const query = "?op=rpc&method=markSelected&ids=" + - param_escape(rows.toString()) + "&cmode=2"; - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - handle_rpc_json(transport); - if (callback) callback(transport); - } }); - + xhrPost("backend.php", query, (transport) => { + handle_rpc_json(transport); + if (callback) callback(transport); + }); } } @@ -784,16 +735,13 @@ function selectionTogglePublished(sel_state, callback, no_error, ids) { } if (rows.length > 0) { + const query = { op: "rpc", method: "publishSelected", + ids: rows.toString(), cmode: 2 }; - const query = "?op=rpc&method=publishSelected&ids=" + - param_escape(rows.toString()) + "&cmode=2"; - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - handle_rpc_json(transport); - } }); - + xhrPost("backend.php", query, (transport) => { + handle_rpc_json(transport); + if (callback) callback(transport); + }); } } @@ -831,7 +779,7 @@ function selectArticles(mode, query) { const children = $$(query); children.each(function(child) { - const id = child.getAttribute("data-article-id"); + //const id = child.getAttribute("data-article-id"); const cb = dijit.getEnclosingWidget( child.getElementsByClassName("rchk")[0]);