]> git.wh0rd.org - tt-rss.git/blobdiff - js/viewfeed.js
use xhrPost in more places
[tt-rss.git] / js / viewfeed.js
index 916ff7dfc43b357ab88ceb8bf28c23c01cd6a659..5b237b47773d43e825978edd06d9feb9842af8bc 100755 (executable)
@@ -5,7 +5,7 @@ let _active_article_id = 0;
 let vgroup_last_feed = false;
 let post_under_pointer = false;
 
-let last_requested_article = false;
+let last_requested_article = 0;
 
 let catchup_id_batch = [];
 let catchup_timeout_id = false;
@@ -22,20 +22,15 @@ let _catchup_request_sent = false;
 let has_storage = 'sessionStorage' in window && window['sessionStorage'] !== null;
 
 function headlines_callback2(transport, offset, background, infscroll_req) {
-       handle_rpc_json(transport);
+       const reply = handle_rpc_json(transport);
 
        console.log("headlines_callback2 [offset=" + offset + "] B:" + background + " I:" + infscroll_req);
 
-       let is_cat = false;
-       let feed_id = false;
-
-       let reply = false;
+       if (background)
+               return;
 
-       try {
-               reply = JSON.parse(transport.responseText);
-       } catch (e) {
-               console.error(e);
-       }
+       var is_cat = false;
+       var feed_id = false;
 
        if (reply) {
 
@@ -43,20 +38,9 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
                feed_id = reply['headlines']['id'];
                last_search_query = reply['headlines']['search_query'];
 
-               if (background) {
-                       let content = reply['headlines']['content'];
-
-                       content = content + "<div id='headlines-spacer'></div>";
-                       return;
-               }
-
                if (feed_id != -7 && (feed_id != getActiveFeedId() || is_cat != activeFeedIsCat()))
                        return;
 
-               /* dijit.getEnclosingWidget(
-                       document.forms["main_toolbar_form"].update).attr('disabled',
-                               is_cat || feed_id <= 0); */
-
                try {
                        if (infscroll_req == false) {
                                $("headlines-frame").scrollTop = 0;
@@ -85,7 +69,6 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
                current_first_id = reply['headlines']['first_id'];
                const counters = reply['counters'];
                const articles = reply['articles'];
-               //var runtime_info = reply['runtime-info'];
 
                if (infscroll_req == false) {
                        loaded_article_ids = [];
@@ -94,17 +77,9 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
                                        reply['headlines']['toolbar'],
                                        {parseContent: true});
 
-                       /*dojo.html.set($("headlines-frame"),
-                               reply['headlines']['content'],
-                               {parseContent: true});
-
-                       $$("#headlines-frame div[id*='RROW']").each(function(row) {
-                               loaded_article_ids.push(row.id);
-                       });*/
-
                        $("headlines-frame").innerHTML = '';
 
-                       var tmp = new Element("div");
+                       let tmp = document.createElement("div");
                        tmp.innerHTML = reply['headlines']['content'];
                        dojo.parser.parse(tmp);
 
@@ -118,7 +93,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
                                }
                        }
 
-                       var hsp = $("headlines-spacer");
+                       let hsp = $("headlines-spacer");
                        if (!hsp) hsp = new Element("DIV", {"id": "headlines-spacer"});
                        dijit.byId('headlines-frame').domNode.appendChild(hsp);
 
@@ -140,17 +115,17 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
                                const c = dijit.byId("headlines-frame");
                                const ids = getSelectedArticleIds2();
 
-                               var hsp = $("headlines-spacer");
+                               let hsp = $("headlines-spacer");
 
                                if (hsp)
                                        c.domNode.removeChild(hsp);
 
-                               var tmp = new Element("div");
+                               let tmp = document.createElement("div");
                                tmp.innerHTML = reply['headlines']['content'];
                                dojo.parser.parse(tmp);
 
                                while (tmp.hasChildNodes()) {
-                                       var row = tmp.removeChild(tmp.firstChild);
+                                       let row = tmp.removeChild(tmp.firstChild);
 
                                        if (loaded_article_ids.indexOf(row.id) == -1 || row.hasClassName("cdmFeedTitle")) {
                                                dijit.byId("headlines-frame").domNode.appendChild(row);
@@ -166,7 +141,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
 
                                console.log("restore selected ids: " + ids);
 
-                               for (var i = 0; i < ids.length; i++) {
+                               for (let i = 0; i < ids.length; i++) {
                                        markHeadline(ids[i]);
                                }
 
@@ -183,7 +158,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
                                const first_id_changed = reply['headlines']['first_id_changed'];
                                console.log("first id changed:" + first_id_changed);
 
-                               var hsp = $("headlines-spacer");
+                               let hsp = $("headlines-spacer");
 
                                if (hsp) {
                                        if (first_id_changed) {
@@ -199,7 +174,7 @@ function headlines_callback2(transport, offset, background, infscroll_req) {
                        }
 
                if (articles) {
-                       for (var i = 0; i < articles.length; i++) {
+                       for (let i = 0; i < articles.length; i++) {
                                const a_id = articles[i]['id'];
                                cache_set("article:" + a_id, articles[i]['content']);
                        }
@@ -276,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) {
 
@@ -297,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);
 
@@ -309,7 +271,7 @@ function article_callback2(transport, id) {
                                __('Could not display article (invalid object received - see error console for details)') + "</div>");
        }
 
-       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("");
@@ -334,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);
 
@@ -352,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");
 
@@ -360,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
@@ -385,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;
@@ -405,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");
@@ -422,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 + "&note=" + param_escape(note);
+               query.note = note;
        } else {
-               query = query + "&note=undefined";
+               query.note = "undefined";
        }
 
        const row = $("RROW-" + id);
@@ -457,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");
@@ -465,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;
                }
        }
 
@@ -486,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) {
@@ -624,7 +572,7 @@ function updateSelectedPrompt() {
 
 }
 
-function toggleUnread(id, cmode, effect) {
+function toggleUnread(id, cmode) {
        const row = $("RROW-" + id);
        if (row) {
                const tmpClassName = row.className;
@@ -645,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);
+               if (tmpClassName != row.className) {
+            if (cmode == undefined) cmode = 2;
 
-//                     notify_progress("Loading, please wait...");
+            const query = {op: "rpc", method: "catchupSelected",
+                cmode: cmode, ids: id};
 
-               if (tmpClassName != row.className) {
-                       new Ajax.Request("backend.php", {
-                               parameters: query,
-                               onComplete: function (transport) {
+            xhrPost("backend.php", query, (transport) => {
                                        handle_rpc_json(transport);
-                               }
+
                        });
                }
-
        }
 }
 
@@ -672,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) {
@@ -694,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) {
@@ -750,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);
+        });
 
        }
 }
@@ -779,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);
+        });
        }
 }
 
@@ -807,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);
+        });
        }
 }
 
@@ -854,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]);
@@ -1020,7 +945,7 @@ function editArticleTags(id) {
        if (dijit.byId("editTagsDlg"))
                dijit.byId("editTagsDlg").destroyRecursive();
 
-       var dialog = new dijit.Dialog({
+       const dialog = new dijit.Dialog({
                id: "editTagsDlg",
                title: __("Edit article Tags"),
                style: "width: 600px",