]> git.wh0rd.org - tt-rss.git/blobdiff - js/functions.js
eslint-related fixes
[tt-rss.git] / js / functions.js
index 70842925c54a883b82e269892d4a84d75be26d91..9028482f8f166fdac2746c694a30a89cdc0b8b65 100755 (executable)
@@ -25,12 +25,11 @@ Ajax.Base.prototype.initialize = Ajax.Base.prototype.initialize.wrap(
 /* add method to remove element from array */
 
 Array.prototype.remove = function(s) {
-       for (var i=0; i < this.length; i++) {
+       for (let i=0; i < this.length; i++) {
                if (s == this[i]) this.splice(i, 1);
        }
 };
 
-
 function report_error(message, filename, lineno, colno, error) {
        exception_error(error, null, filename, lineno);
 }
@@ -42,7 +41,7 @@ function exception_error(e, e_compat, filename, lineno, colno) {
 
        try {
                console.error(e);
-               var msg = e.toString();
+               const msg = e.toString();
 
                try {
                        new Ajax.Request("backend.php", {
@@ -58,7 +57,7 @@ function exception_error(e, e_compat, filename, lineno, colno) {
                        console.error("Exception while trying to log the error.", e);
                }
 
-               var content = "<div class='fatalError'><p>" + msg + "</p>";
+               let content = "<div class='fatalError'><p>" + msg + "</p>";
 
                if (e.stack) {
                        content += "<div><b>Stack trace:</b></div>" +
@@ -77,7 +76,7 @@ function exception_error(e, e_compat, filename, lineno, colno) {
                if (dijit.byId("exceptionDlg"))
                        dijit.byId("exceptionDlg").destroyRecursive();
 
-               var dialog = new dijit.Dialog({
+               const dialog = new dijit.Dialog({
                        id: "exceptionDlg",
                        title: "Unhandled exception",
                        style: "width: 600px",
@@ -101,7 +100,7 @@ function param_escape(arg) {
 
 function notify_real(msg, no_hide, n_type) {
 
-       var n = $("notify");
+       const n = $("notify");
 
        if (!n) return;
 
@@ -183,7 +182,7 @@ function notify_info(msg, no_hide) {
 
 function setCookie(name, value, lifetime, path, domain, secure) {
 
-       var d = false;
+       let d = false;
 
        if (lifetime) {
                d = new Date();
@@ -216,9 +215,9 @@ function delCookie(name, path, domain) {
 
 function getCookie(name) {
 
-       var dc = document.cookie;
-       var prefix = name + "=";
-       var begin = dc.indexOf("; " + prefix);
+       const dc = document.cookie;
+       const prefix = name + "=";
+       let begin = dc.indexOf("; " + prefix);
        if (begin == -1) {
            begin = dc.indexOf(prefix);
            if (begin != 0) return null;
@@ -226,7 +225,7 @@ function getCookie(name) {
        else {
            begin += 2;
        }
-       var end = document.cookie.indexOf(";", begin);
+       let end = document.cookie.indexOf(";", begin);
        if (end == -1) {
            end = dc.length;
        }
@@ -246,13 +245,13 @@ function gotoMain() {
 }
 
 function toggleSelectRowById(sender, id) {
-       var row = $(id);
+       const row = $(id);
        return toggleSelectRow(sender, row);
 }
 
 /* this is for dijit Checkbox */
 function toggleSelectListRow2(sender) {
-       var row = sender.domNode.parentNode;
+       const row = sender.domNode.parentNode;
        return toggleSelectRow(sender, row);
 }
 
@@ -301,7 +300,7 @@ function getURLParam(param){
 }
 
 function closeInfoBox() {
-       var dialog = dijit.byId("infoBox");
+       const dialog = dijit.byId("infoBox");
 
        if (dialog)     dialog.hide();
 
@@ -313,7 +312,7 @@ function displayDlg(title, id, param, callback) {
 
        notify_progress("Loading, please wait...", true);
 
-       var query = "?op=dlg&method=" +
+       const query = "?op=dlg&method=" +
                param_escape(id) + "&param=" + param_escape(param);
 
        new Ajax.Request("backend.php", {
@@ -327,7 +326,7 @@ function displayDlg(title, id, param, callback) {
 }
 
 function infobox_callback2(transport, title) {
-       var dialog = false;
+       let dialog = false;
 
        if (dijit.byId("infoBox")) {
                dialog = dijit.byId("infoBox");
@@ -336,7 +335,7 @@ function infobox_callback2(transport, title) {
        //console.log("infobox_callback2");
        notify('');
 
-       var content = transport.responseText;
+       const content = transport.responseText;
 
        if (!dialog) {
                dialog = new dijit.Dialog({
@@ -390,7 +389,7 @@ function fatalError(code, msg, ext_info) {
                        msg = ERRORS[code];
                }
 
-               var content = "<div><b>Error code:</b> " + code + "</div>" +
+               let content = "<div><b>Error code:</b> " + code + "</div>" +
                        "<p>" + msg + "</p>";
 
                if (ext_info) {
@@ -399,7 +398,7 @@ function fatalError(code, msg, ext_info) {
                                ext_info + "</textarea>";
                }
 
-               var dialog = new dijit.Dialog({
+               const dialog = new dijit.Dialog({
                        title: "Fatal error",
                        style: "width: 600px",
                        content: content});
@@ -413,9 +412,9 @@ function fatalError(code, msg, ext_info) {
 }
 
 function filterDlgCheckAction(sender) {
-       var action = sender.value;
+       const action = sender.value;
 
-       var action_param = $("filterDlg_paramBox");
+       const action_param = $("filterDlg_paramBox");
 
        if (!action_param) {
                console.log("filterDlgCheckAction: can't find action param box!");
@@ -474,8 +473,8 @@ function strip_tags(s) {
 
 function hotkey_prefix_timeout() {
 
-       var date = new Date();
-       var ts = Math.round(date.getTime() / 1000);
+       const date = new Date();
+       const ts = Math.round(date.getTime() / 1000);
 
        if (hotkey_prefix_pressed && ts - hotkey_prefix_pressed >= 5) {
                console.log("hotkey_prefix seems to be stuck, aborting");
@@ -509,7 +508,7 @@ function uploadIconHandler(rc) {
 
 function removeFeedIcon(id) {
        if (confirm(__("Remove stored feed icon?"))) {
-               var query = "backend.php?op=pref-feeds&method=removeicon&feed_id=" + param_escape(id);
+               const query = "backend.php?op=pref-feeds&method=removeicon&feed_id=" + param_escape(id);
 
                console.log(query);
 
@@ -531,23 +530,21 @@ function removeFeedIcon(id) {
 }
 
 function uploadFeedIcon() {
-       var file = $("icon_file");
+       const file = $("icon_file");
 
        if (file.value.length == 0) {
                alert(__("Please select an image file to upload."));
-       } else {
-               if (confirm(__("Upload new icon for this feed?"))) {
+       } else if (confirm(__("Upload new icon for this feed?"))) {
                        notify_progress("Uploading, please wait...", true);
                        return true;
                }
-       }
 
        return false;
 }
 
 function addLabel(select, callback) {
 
-       var caption = prompt(__("Please enter label caption:"), "");
+       const caption = prompt(__("Please enter label caption:"), "");
 
        if (caption != undefined) {
 
@@ -556,7 +553,7 @@ function addLabel(select, callback) {
                        return false;
                }
 
-               var query = "?op=pref-labels&method=add&caption=" +
+               let query = "?op=pref-labels&method=add&caption=" +
                        param_escape(caption);
 
                if (select)
@@ -581,7 +578,7 @@ function addLabel(select, callback) {
 }
 
 function quickAddFeed() {
-       var query = "backend.php?op=feeds&method=quickAddFeed";
+       const query = "backend.php?op=feeds&method=quickAddFeed";
 
        // overlapping widgets
        if (dijit.byId("batchSubDlg")) dijit.byId("batchSubDlg").destroyRecursive();
@@ -592,7 +589,7 @@ function quickAddFeed() {
                title: __("Subscribe to Feed"),
                style: "width: 600px",
                show_error: function(msg) {
-                       var elem = $("fadd_error_message");
+                       const elem = $("fadd_error_message");
 
                        elem.innerHTML = msg;
 
@@ -604,7 +601,7 @@ function quickAddFeed() {
                        if (this.validate()) {
                                console.log(dojo.objectToQuery(this.attr('value')));
 
-                               var feed_url = this.attr('value').feed;
+                               const feed_url = this.attr('value').feed;
 
                                Element.show("feed_add_spinner");
                                Element.hide("fadd_error_message");
@@ -623,7 +620,7 @@ function quickAddFeed() {
                                                                return;
                                                        }
 
-                                                       var rc = reply['result'];
+                                                       const rc = reply['result'];
 
                                                        notify('');
                                                        Element.hide("feed_add_spinner");
@@ -656,7 +653,7 @@ function quickAddFeed() {
                                                                select.addOption({value: '', label: __("Expand to select feed")});
 
                                                                var count = 0;
-                                                               for (var feedUrl in feeds) {
+                                                               for (const feedUrl in feeds) {
                                                                        select.addOption({value: feedUrl, label: feeds[feedUrl]});
                                                                        count++;
                                                                }
@@ -692,11 +689,11 @@ function quickAddFeed() {
 }
 
 function createNewRuleElement(parentNode, replaceNode) {
-       var form = document.forms["filter_new_rule_form"];
+       const form = document.forms["filter_new_rule_form"];
 
        //form.reg_exp.value = form.reg_exp.value.replace(/(<([^>]+)>)/ig,"");
 
-       var query = "backend.php?op=pref-filters&method=printrulename&rule="+
+       const query = "backend.php?op=pref-filters&method=printrulename&rule="+
                param_escape(dojo.formToJson(form));
 
        console.log(query);
@@ -705,9 +702,9 @@ function createNewRuleElement(parentNode, replaceNode) {
                parameters: query,
                onComplete: function (transport) {
                        try {
-                               var li = dojo.create("li");
+                               const li = dojo.create("li");
 
-                               var cb = dojo.create("input", { type: "checkbox" }, li);
+                               const cb = dojo.create("input", { type: "checkbox" }, li);
 
                                new dijit.form.CheckBox({
                                        onChange: function() {
@@ -736,7 +733,7 @@ function createNewRuleElement(parentNode, replaceNode) {
 }
 
 function createNewActionElement(parentNode, replaceNode) {
-       var form = document.forms["filter_new_action_form"];
+       const form = document.forms["filter_new_action_form"];
 
        if (form.action_id.value == 7) {
                form.action_param.value = form.action_param_label.value;
@@ -744,7 +741,7 @@ function createNewActionElement(parentNode, replaceNode) {
                form.action_param.value = form.action_param_plugin.value;
        }
 
-       var query = "backend.php?op=pref-filters&method=printactionname&action="+
+       const query = "backend.php?op=pref-filters&method=printactionname&action="+
                param_escape(dojo.formToJson(form));
 
        console.log(query);
@@ -753,9 +750,9 @@ function createNewActionElement(parentNode, replaceNode) {
                parameters: query,
                onComplete: function (transport) {
                        try {
-                               var li = dojo.create("li");
+                               const li = dojo.create("li");
 
-                               var cb = dojo.create("input", { type: "checkbox" }, li);
+                               const cb = dojo.create("input", { type: "checkbox" }, li);
 
                                new dijit.form.CheckBox({
                                        onChange: function() {
@@ -789,10 +786,10 @@ function addFilterRule(replaceNode, ruleStr) {
        if (dijit.byId("filterNewRuleDlg"))
                dijit.byId("filterNewRuleDlg").destroyRecursive();
 
-       var query = "backend.php?op=pref-filters&method=newrule&rule=" +
+       const query = "backend.php?op=pref-filters&method=newrule&rule=" +
                param_escape(ruleStr);
 
-       var rule_dlg = new dijit.Dialog({
+       const rule_dlg = new dijit.Dialog({
                id: "filterNewRuleDlg",
                title: ruleStr ? __("Edit rule") : __("Add rule"),
                style: "width: 600px",
@@ -811,10 +808,10 @@ function addFilterAction(replaceNode, actionStr) {
        if (dijit.byId("filterNewActionDlg"))
                dijit.byId("filterNewActionDlg").destroyRecursive();
 
-       var query = "backend.php?op=pref-filters&method=newaction&action=" +
+       const query = "backend.php?op=pref-filters&method=newaction&action=" +
                param_escape(actionStr);
 
-       var rule_dlg = new dijit.Dialog({
+       const rule_dlg = new dijit.Dialog({
                id: "filterNewActionDlg",
                title: actionStr ? __("Edit action") : __("Add action"),
                style: "width: 600px",
@@ -842,7 +839,7 @@ function editFilterTest(query) {
                limit: 100,
                max_offset: 10000,
                getTestResults: function(query, offset) {
-                       var updquery = query + "&offset=" + offset + "&limit=" + test_dlg.limit;
+                       const updquery = query + "&offset=" + offset + "&limit=" + test_dlg.limit;
 
                        console.log("getTestResults:" + offset);
 
@@ -850,7 +847,7 @@ function editFilterTest(query) {
                                parameters: updquery,
                                onComplete: function (transport) {
                                        try {
-                                               var result = JSON.parse(transport.responseText);
+                                               const result = JSON.parse(transport.responseText);
 
                                                if (result && dijit.byId("filterTestDlg") && dijit.byId("filterTestDlg").open) {
                                                        test_dlg.results += result.size();
@@ -863,8 +860,8 @@ function editFilterTest(query) {
 
                                                        console.log(offset + " " + test_dlg.max_offset);
 
-                                                       for (var i = 0; i < result.size(); i++) {
-                                                               var tmp = new Element("table");
+                                                       for (let i = 0; i < result.size(); i++) {
+                                                               const tmp = new Element("table");
                                                                tmp.innerHTML = result[i];
                                                                dojo.parser.parse(tmp);
 
@@ -920,7 +917,7 @@ function editFilterTest(query) {
 }
 
 function quickAddFilter() {
-       var query = "";
+       let query = "";
        if (!inPreferences()) {
                query = "backend.php?op=pref-filters&method=newfilter&feed=" +
                        param_escape(getActiveFeedId()) + "&is_cat=" +
@@ -942,7 +939,7 @@ function quickAddFilter() {
                title: __("Create Filter"),
                style: "width: 600px",
                test: function() {
-                       var query = "backend.php?" + dojo.formToQuery("filter_new_form") + "&savemode=test";
+                       const query = "backend.php?" + dojo.formToQuery("filter_new_form") + "&savemode=test";
 
                        editFilterTest(query);
                },
@@ -967,13 +964,13 @@ function quickAddFilter() {
                        });
                },
                editRule: function(e) {
-                       var li = e.parentNode;
-                       var rule = li.getElementsByTagName("INPUT")[1].value;
+                       const li = e.parentNode;
+                       const rule = li.getElementsByTagName("INPUT")[1].value;
                        addFilterRule(li, rule);
                },
                editAction: function(e) {
-                       var li = e.parentNode;
-                       var action = li.getElementsByTagName("INPUT")[1].value;
+                       const li = e.parentNode;
+                       const action = li.getElementsByTagName("INPUT")[1].value;
                        addFilterAction(li, action);
                },
                addAction: function() { addFilterAction(); },
@@ -987,7 +984,7 @@ function quickAddFilter() {
                execute: function() {
                        if (this.validate()) {
 
-                               var query = dojo.formToQuery("filter_new_form");
+                               const query = dojo.formToQuery("filter_new_form");
 
                                console.log(query);
 
@@ -1005,30 +1002,30 @@ function quickAddFilter() {
                href: query});
 
        if (!inPreferences()) {
-               var selectedText = getSelectionText();
+               const selectedText = getSelectionText();
 
                var lh = dojo.connect(dialog, "onLoad", function(){
                        dojo.disconnect(lh);
 
                        if (selectedText != "") {
 
-                               var feed_id = activeFeedIsCat() ? 'CAT:' + parseInt(getActiveFeedId()) :
+                               const feed_id = activeFeedIsCat() ? 'CAT:' + parseInt(getActiveFeedId()) :
                                        getActiveFeedId();
 
-                               var rule = { reg_exp: selectedText, feed_id: [feed_id], filter_type: 1 };
+                               const rule = { reg_exp: selectedText, feed_id: [feed_id], filter_type: 1 };
 
                                addFilterRule(null, dojo.toJson(rule));
 
                        } else {
 
-                               var query = "op=rpc&method=getlinktitlebyid&id=" + getActiveArticleId();
+                               const query = "op=rpc&method=getlinktitlebyid&id=" + getActiveArticleId();
 
                                new Ajax.Request("backend.php", {
                                parameters: query,
                                onComplete: function(transport) {
-                                       var reply = JSON.parse(transport.responseText);
+                                       const reply = JSON.parse(transport.responseText);
 
-                                       var title = false;
+                                       let title = false;
 
                                        if (reply && reply.title) title = reply.title;
 
@@ -1036,10 +1033,10 @@ function quickAddFilter() {
 
                                                console.log(title + " " + getActiveFeedId());
 
-                                               var feed_id = activeFeedIsCat() ? 'CAT:' + parseInt(getActiveFeedId()) :
+                                               const feed_id = activeFeedIsCat() ? 'CAT:' + parseInt(getActiveFeedId()) :
                                                        getActiveFeedId();
 
-                                               var rule = { reg_exp: title, feed_id: [feed_id], filter_type: 1 };
+                                               const rule = { reg_exp: title, feed_id: [feed_id], filter_type: 1 };
 
                                                addFilterRule(null, dojo.toJson(rule));
                                        }
@@ -1057,12 +1054,12 @@ function quickAddFilter() {
 
 function unsubscribeFeed(feed_id, title) {
 
-       var msg = __("Unsubscribe from %s?").replace("%s", title);
+       const msg = __("Unsubscribe from %s?").replace("%s", title);
 
        if (title == undefined || confirm(msg)) {
                notify_progress("Removing feed...");
 
-               var query = "?op=pref-feeds&quiet=1&method=remove&ids=" + feed_id;
+               const query = "?op=pref-feeds&quiet=1&method=remove&ids=" + feed_id;
 
                new Ajax.Request("backend.php", {
                        parameters: query,
@@ -1095,14 +1092,14 @@ function backend_sanity_check_callback(transport) {
                return;
        }
 
-       var reply = JSON.parse(transport.responseText);
+       const reply = JSON.parse(transport.responseText);
 
        if (!reply) {
                fatalError(3, "Sanity check: invalid RPC reply", transport.responseText);
                return;
        }
 
-       var error_code = reply['error']['code'];
+       const error_code = reply['error']['code'];
 
        if (error_code && error_code != 0) {
                return fatalError(error_code, reply['error']['message']);
@@ -1110,12 +1107,12 @@ function backend_sanity_check_callback(transport) {
 
        console.log("sanity check ok");
 
-       var params = reply['init-params'];
+       const params = reply['init-params'];
 
        if (params) {
                console.log('reading init-params...');
 
-               for (var k in params) {
+               for (const k in params) {
                        console.log("IP: " + k + " => " + JSON.stringify(params[k]));
                        if (k == "label_base_index") _label_base_index = parseInt(params[k]);
                }
@@ -1133,22 +1130,22 @@ function backend_sanity_check_callback(transport) {
 }
 
 function genUrlChangeKey(feed, is_cat) {
-       var ok = confirm(__("Generate new syndication address for this feed?"));
+       const ok = confirm(__("Generate new syndication address for this feed?"));
 
        if (ok) {
 
                notify_progress("Trying to change address...", true);
 
-               var query = "?op=pref-feeds&method=regenFeedKey&id=" + param_escape(feed) +
+               const query = "?op=pref-feeds&method=regenFeedKey&id=" + param_escape(feed) +
                        "&is_cat=" + param_escape(is_cat);
 
                new Ajax.Request("backend.php", {
                        parameters: query,
                        onComplete: function(transport) {
-                                       var reply = JSON.parse(transport.responseText);
-                                       var new_link = reply.link;
+                                       const reply = JSON.parse(transport.responseText);
+                                       const new_link = reply.link;
 
-                                       var e = $('gen_feed_url');
+                                       const e = $('gen_feed_url');
 
                                        if (new_link) {
 
@@ -1172,19 +1169,19 @@ function genUrlChangeKey(feed, is_cat) {
 
 // mode = all, none, invert
 function selectTableRows(id, mode) {
-       var rows = $(id).rows;
+       const rows = $(id).rows;
 
-       for (var i = 0; i < rows.length; i++) {
-               var row = rows[i];
-               var cb = false;
-               var dcb = false;
+       for (let i = 0; i < rows.length; i++) {
+               const row = rows[i];
+               let cb = false;
+               let dcb = false;
 
                if (row.id && row.className) {
-                       var bare_id = row.id.replace(/^[A-Z]*?-/, "");
-                       var inputs = rows[i].getElementsByTagName("input");
+                       const bare_id = row.id.replace(/^[A-Z]*?-/, "");
+                       const inputs = rows[i].getElementsByTagName("input");
 
-                       for (var j = 0; j < inputs.length; j++) {
-                               var input = inputs[j];
+                       for (let j = 0; j < inputs.length; j++) {
+                               const input = inputs[j];
 
                                if (input.getAttribute("type") == "checkbox" &&
                                                input.id.match(bare_id)) {
@@ -1196,7 +1193,7 @@ function selectTableRows(id, mode) {
                        }
 
                        if (cb || dcb) {
-                               var issel = row.hasClassName("Selected");
+                               const issel = row.hasClassName("Selected");
 
                                if (mode == "all" && !issel) {
                                        row.addClassName("Selected");
@@ -1226,13 +1223,13 @@ function selectTableRows(id, mode) {
 }
 
 function getSelectedTableRowIds(id) {
-       var rows = [];
+       const rows = [];
 
-       var elem_rows = $(id).rows;
+       const elem_rows = $(id).rows;
 
-       for (var i = 0; i < elem_rows.length; i++) {
+       for (let i = 0; i < elem_rows.length; i++) {
                if (elem_rows[i].hasClassName("Selected")) {
-                       var bare_id = elem_rows[i].id.replace(/^[A-Z]*?-/, "");
+                       const bare_id = elem_rows[i].id.replace(/^[A-Z]*?-/, "");
                        rows.push(bare_id);
                }
        }
@@ -1244,7 +1241,7 @@ function editFeed(feed) {
        if (feed <= 0)
                return alert(__("You can't edit this kind of feed."));
 
-       var query = "backend.php?op=pref-feeds&method=editfeed&id=" +
+       const query = "backend.php?op=pref-feeds&method=editfeed&id=" +
                param_escape(feed);
 
        console.log(query);
@@ -1280,7 +1277,7 @@ function editFeed(feed) {
 }
 
 function feedBrowser() {
-       var query = "backend.php?op=feeds&method=feedBrowser";
+       const query = "backend.php?op=feeds&method=feedBrowser";
 
        if (dijit.byId("feedAddDlg"))
                dijit.byId("feedAddDlg").hide();
@@ -1293,11 +1290,11 @@ function feedBrowser() {
                title: __("More Feeds"),
                style: "width: 600px",
                getSelectedFeedIds: function () {
-                       var list = $$("#browseFeedList li[id*=FBROW]");
-                       var selected = new Array();
+                       const list = $$("#browseFeedList li[id*=FBROW]");
+                       const selected = new Array();
 
                        list.each(function (child) {
-                               var id = child.id.replace("FBROW-", "");
+                               const id = child.id.replace("FBROW-", "");
 
                                if (child.hasClassName('Selected')) {
                                        selected.push(id);
@@ -1307,12 +1304,12 @@ function feedBrowser() {
                        return selected;
                },
                getSelectedFeeds: function () {
-                       var list = $$("#browseFeedList li.Selected");
-                       var selected = new Array();
+                       const list = $$("#browseFeedList li.Selected");
+                       const selected = new Array();
 
                        list.each(function (child) {
-                               var title = child.getElementsBySelector("span.fb_feedTitle")[0].innerHTML;
-                               var url = child.getElementsBySelector("a.fb_feedUrl")[0].href;
+                               const title = child.getElementsBySelector("span.fb_feedTitle")[0].innerHTML;
+                               const url = child.getElementsBySelector("a.fb_feedUrl")[0].href;
 
                                selected.push([title, url]);
 
@@ -1322,8 +1319,8 @@ function feedBrowser() {
                },
 
                subscribe: function () {
-                       var mode = this.attr('value').mode;
-                       var selected = [];
+                       const mode = this.attr('value').mode;
+                       let selected = [];
 
                        if (mode == "1")
                                selected = this.getSelectedFeeds();
@@ -1338,7 +1335,7 @@ function feedBrowser() {
                                // we use dojo.toJson instead of JSON.stringify because
                                // it somehow escapes everything TWICE, at least in Chrome 9
 
-                               var query = "?op=rpc&method=massSubscribe&payload=" +
+                               const query = "?op=rpc&method=massSubscribe&payload=" +
                                        param_escape(dojo.toJson(selected)) + "&mode=" + param_escape(mode);
 
                                console.log(query);
@@ -1357,7 +1354,7 @@ function feedBrowser() {
 
                },
                update: function () {
-                       var query = dojo.objectToQuery(dialog.attr('value'));
+                       const query = dojo.objectToQuery(dialog.attr('value'));
 
                        Element.show('feed_browser_spinner');
 
@@ -1368,12 +1365,12 @@ function feedBrowser() {
 
                                        Element.hide('feed_browser_spinner');
 
-                                       var c = $("browseFeedList");
+                                       const c = $("browseFeedList");
 
-                                       var reply = JSON.parse(transport.responseText);
+                                       const reply = JSON.parse(transport.responseText);
 
-                                       var r = reply['content'];
-                                       var mode = reply['mode'];
+                                       const r = reply['content'];
+                                       const mode = reply['mode'];
 
                                        if (c && r) {
                                                c.innerHTML = r;
@@ -1391,18 +1388,18 @@ function feedBrowser() {
                        });
                },
                removeFromArchive: function () {
-                       var selected = this.getSelectedFeedIds();
+                       const selected = this.getSelectedFeedIds();
 
                        if (selected.length > 0) {
 
-                               var pr = __("Remove selected feeds from the archive? Feeds with stored articles will not be removed.");
+                               const pr = __("Remove selected feeds from the archive? Feeds with stored articles will not be removed.");
 
                                if (confirm(pr)) {
                                        Element.show('feed_browser_spinner');
 
-                                       var query = "?op=rpc&method=remarchive&ids=" +
+                                       const query = "?op=rpc&method=remarchive&ids=" +
                                                param_escape(selected.toString());
-                                       ;
+
 
                                        new Ajax.Request("backend.php", {
                                                parameters: query,
@@ -1425,7 +1422,7 @@ function feedBrowser() {
 }
 
 function showFeedsWithErrors() {
-       var query = "backend.php?op=pref-feeds&method=feedsWithErrors";
+       const query = "backend.php?op=pref-feeds&method=feedsWithErrors";
 
        if (dijit.byId("errorFeedsDlg"))
                dijit.byId("errorFeedsDlg").destroyRecursive();
@@ -1438,17 +1435,17 @@ function showFeedsWithErrors() {
                        return getSelectedTableRowIds("prefErrorFeedList");
                },
                removeSelected: function() {
-                       var sel_rows = this.getSelectedFeeds();
+                       const sel_rows = this.getSelectedFeeds();
 
                        console.log(sel_rows);
 
                        if (sel_rows.length > 0) {
-                               var ok = confirm(__("Remove selected feeds?"));
+                               const ok = confirm(__("Remove selected feeds?"));
 
                                if (ok) {
                                        notify_progress("Removing selected feeds...", true);
 
-                                       var query = "?op=pref-feeds&method=remove&ids="+
+                                       const query = "?op=pref-feeds&method=remove&ids="+
                                                param_escape(sel_rows.toString());
 
                                        new Ajax.Request("backend.php", {
@@ -1474,17 +1471,17 @@ function showFeedsWithErrors() {
 }
 
 function get_timestamp() {
-       var date = new Date();
+       const date = new Date();
        return Math.round(date.getTime() / 1000);
 }
 
 function helpDialog(topic) {
-       var query = "backend.php?op=backend&method=help&topic=" + param_escape(topic);
+       const query = "backend.php?op=backend&method=help&topic=" + param_escape(topic);
 
        if (dijit.byId("helpDlg"))
                dijit.byId("helpDlg").destroyRecursive();
 
-       var dialog = new dijit.Dialog({
+       const dialog = new dijit.Dialog({
                id: "helpDlg",
                title: __("Help"),
                style: "width: 600px",
@@ -1514,14 +1511,14 @@ function htmlspecialchars_decode (string, quote_style) {
   // *     returns 1: '<p>this -> &quot;</p>'
   // *     example 2: htmlspecialchars_decode("&amp;quot;");
   // *     returns 2: '&quot;'
-  var optTemp = 0,
+  let optTemp = 0,
     i = 0,
     noquotes = false;
   if (typeof quote_style === 'undefined') {
     quote_style = 2;
   }
   string = string.toString().replace(/&lt;/g, '<').replace(/&gt;/g, '>');
-  var OPTS = {
+  const OPTS = {
     'ENT_NOQUOTES': 0,
     'ENT_HTML_QUOTE_SINGLE': 1,
     'ENT_HTML_QUOTE_DOUBLE': 2,
@@ -1569,13 +1566,13 @@ function feed_to_label_id(feed) {
 // http://stackoverflow.com/questions/6251937/how-to-get-selecteduser-highlighted-text-in-contenteditable-element-and-replac
 
 function getSelectionText() {
-       var text = "";
+       let text = "";
 
        if (typeof window.getSelection != "undefined") {
-               var sel = window.getSelection();
+               const sel = window.getSelection();
                if (sel.rangeCount) {
-                       var container = document.createElement("div");
-                       for (var i = 0, len = sel.rangeCount; i < len; ++i) {
+                       const container = document.createElement("div");
+                       for (let i = 0, len = sel.rangeCount; i < len; ++i) {
                                container.appendChild(sel.getRangeAt(i).cloneContents());
                        }
                        text = container.innerHTML;
@@ -1590,13 +1587,13 @@ function getSelectionText() {
 }
 
 function openUrlPopup(url) {
-       var w = window.open("");
+       const w = window.open("");
 
        w.opener = null;
        w.location = url;
 }
 function openArticlePopup(id) {
-       var w = window.open("",
+       const w = window.open("",
                "ttrss_article_popup",
                "height=900,width=900,resizable=yes,status=no,location=no,menubar=no,directories=no,scrollbars=yes,toolbar=no");