X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=js%2Ftt-rss.js;h=56e89addc7815c6074e0a5d4a0befab63dca5804;hb=0d27227359df5597d4dc3b646eaa63082f42e4f0;hp=4df1b04eeded6bf503477494b069c2f6d9e7b72e;hpb=f830f853a919c458d06bdc6ce292b8ae73a801f3;p=tt-rss.git diff --git a/js/tt-rss.js b/js/tt-rss.js index 4df1b04e..56e89add 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -1,11 +1,13 @@ -var global_unread = -1; -var hotkey_prefix = false; -var hotkey_prefix_pressed = false; -var hotkey_actions = {}; -var _widescreen_mode = false; -var _rpc_seq = 0; -var _active_feed_id = 0; -var _active_feed_is_cat = false; +/* global dijit, __ */ + +let global_unread = -1; +let hotkey_prefix = false; +let hotkey_prefix_pressed = false; +let hotkey_actions = {}; +let _widescreen_mode = false; +let _rpc_seq = 0; +let _active_feed_id = 0; +let _active_feed_is_cat = false; function next_seq() { _rpc_seq += 1; @@ -17,7 +19,7 @@ function get_seq() { } function activeFeedIsCat() { - return _active_feed_is_cat; + return !!_active_feed_is_cat; } function getActiveFeedId() { @@ -50,11 +52,11 @@ function updateFeedList() { dijit.byId("feedTree").destroyRecursive(); } - var store = new dojo.data.ItemFileWriteStore({ + const store = new dojo.data.ItemFileWriteStore({ url: "backend.php?op=pref_feeds&method=getfeedtree&mode=2" }); - var treeModel = new fox.FeedStoreModel({ + const treeModel = new fox.FeedStoreModel({ store: store, query: { "type": getInitParam('enable_feed_cats') == 1 ? "category" : "feed" @@ -64,12 +66,12 @@ function updateFeedList() { childrenAttrs: ["items"] }); - var tree = new fox.FeedTree({ + const tree = new fox.FeedTree({ model: treeModel, onClick: function (item, node) { - var id = String(item.id); - var is_cat = id.match("^CAT:"); - var feed = id.substr(id.indexOf(":") + 1); + const id = String(item.id); + const is_cat = id.match("^CAT:"); + const feed = id.substr(id.indexOf(":") + 1); viewfeed({feed: feed, is_cat: is_cat}); return false; }, @@ -79,14 +81,6 @@ function updateFeedList() { id: "feedTree", }, "feedTree"); - /* var menu = new dijit.Menu({id: 'feedMenu'}); - - menu.addChild(new dijit.MenuItem({ - label: "Simple menu item" - })); - - // menu.bindDomNode(tree.domNode); */ - var tmph = dojo.connect(dijit.byId('feedMenu'), '_openMyself', function (event) { console.log(dijit.getEnclosingWidget(event.target)); dojo.disconnect(tmph); @@ -115,22 +109,16 @@ function updateFeedList() { function catchupAllFeeds() { - var str = __("Mark all articles as read?"); + const str = __("Mark all articles as read?"); if (getInitParam("confirm_feed_catchup") != 1 || confirm(str)) { - var query_str = "backend.php?op=feeds&method=catchupAll"; - notify_progress("Marking all feeds as read..."); - //console.log("catchupAllFeeds Q=" + query_str); - - new Ajax.Request("backend.php", { - parameters: query_str, - onComplete: function(transport) { - request_counters(true); - viewCurrentFeed(); - } }); + xhrPost("backend.php", {op: "feeds", method: "catchupAll"}, () => { + request_counters(true); + viewCurrentFeed(); + }); global_unread = 0; updateTitle(""); @@ -154,13 +142,13 @@ function timeout() { } function search() { - var query = "backend.php?op=feeds&method=search¶m=" + + const query = "backend.php?op=feeds&method=search¶m=" + param_escape(getActiveFeedId() + ":" + activeFeedIsCat()); if (dijit.byId("searchDlg")) dijit.byId("searchDlg").destroyRecursive(); - dialog = new dijit.Dialog({ + const dialog = new dijit.Dialog({ id: "searchDlg", title: __("Search"), style: "width: 600px", @@ -177,20 +165,12 @@ function search() { } function updateTitle() { - var tmp = "Tiny Tiny RSS"; + let tmp = "Tiny Tiny RSS"; if (global_unread > 0) { tmp = "(" + global_unread + ") " + tmp; } - if (window.fluid) { - if (global_unread > 0) { - window.fluid.dockBadge = global_unread; - } else { - window.fluid.dockBadge = ""; - } - } - document.title = tmp; } @@ -245,6 +225,7 @@ function init() { "dijit/tree/dndSource", "dijit/tree/ForestStoreModel", "dojo/data/ItemFileWriteStore", + "fox/FeedStoreModel", "fox/FeedTree" ], function (dojo, ready, parser) { ready(function() { @@ -257,26 +238,30 @@ function init() { loading_set_progress(30); - var a = document.createElement('audio'); + const a = document.createElement('audio'); - var hasAudio = !!a.canPlayType; - var hasSandbox = "sandbox" in document.createElement("iframe"); - var hasMp3 = !!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, '')); - var clientTzOffset = new Date().getTimezoneOffset() * 60; + const hasAudio = !!a.canPlayType; + const hasSandbox = "sandbox" in document.createElement("iframe"); + const hasMp3 = !!(a.canPlayType && a.canPlayType('audio/mpeg;').replace(/no/, '')); + const clientTzOffset = new Date().getTimezoneOffset() * 60; init_hotkey_actions(); - new Ajax.Request("backend.php", { - parameters: { - op: "rpc", method: "sanityCheck", hasAudio: hasAudio, - hasMp3: hasMp3, - clientTzOffset: clientTzOffset, - hasSandbox: hasSandbox - }, - onComplete: function (transport) { - backend_sanity_check_callback(transport); - } + const params = { + op: "rpc", method: "sanityCheck", hasAudio: hasAudio, + hasMp3: hasMp3, + clientTzOffset: clientTzOffset, + hasSandbox: hasSandbox + }; + + xhrPost("backend.php", params, (transport) => { + try { + backend_sanity_check_callback(transport); + } catch (e) { + console.error(e); + } }); + } catch (e) { exception_error(e); } @@ -289,13 +274,13 @@ function init() { function init_hotkey_actions() { hotkey_actions["next_feed"] = function() { - var rv = dijit.byId("feedTree").getNextFeed( + const rv = dijit.byId("feedTree").getNextFeed( getActiveFeedId(), activeFeedIsCat()); if (rv) viewfeed({feed: rv[0], is_cat: rv[1], can_wait: true}) }; hotkey_actions["prev_feed"] = function() { - var rv = dijit.byId("feedTree").getPreviousFeed( + const rv = dijit.byId("feedTree").getPreviousFeed( getActiveFeedId(), activeFeedIsCat()); if (rv) viewfeed({feed: rv[0], is_cat: rv[1], can_wait: true}) @@ -319,8 +304,8 @@ function init_hotkey_actions() { moveToPost('prev', true, true); }; hotkey_actions["collapse_article"] = function() { - var id = getActiveArticleId(); - var elem = $("CICD-"+id); + const id = getActiveArticleId(); + const elem = $("CICD-"+id); if (elem) { if (elem.visible()) { @@ -332,8 +317,8 @@ function init_hotkey_actions() { } }; hotkey_actions["toggle_expand"] = function() { - var id = getActiveArticleId(); - var elem = $("CICD-"+id); + const id = getActiveArticleId(); + const elem = $("CICD-"+id); if (elem) { if (elem.visible()) { @@ -357,10 +342,10 @@ function init_hotkey_actions() { selectionToggleUnread(undefined, false, true); }; hotkey_actions["edit_tags"] = function() { - var id = getActiveArticleId(); + const id = getActiveArticleId(); if (id) { editArticleTags(id); - }; + } } hotkey_actions["open_in_new_window"] = function() { if (getActiveArticleId()) { @@ -456,14 +441,9 @@ function init_hotkey_actions() { reverseHeadlineOrder(); }; hotkey_actions["feed_toggle_vgroup"] = function() { - var query_str = "?op=rpc&method=togglepref&key=VFEED_GROUP_BY_FEED"; - - new Ajax.Request("backend.php", { - parameters: query_str, - onComplete: function(transport) { - viewCurrentFeed(); - } }); - + xhrPost("backend.php", {op: "rpc", method: "togglepref", key: "VFEED_GROUP_BY_FEED"}, () => { + viewCurrentFeed(); + }) }; hotkey_actions["catchup_all"] = function() { catchupAllFeeds(); @@ -493,12 +473,12 @@ function init_hotkey_actions() { gotoPreferences(); }; hotkey_actions["select_article_cursor"] = function() { - var id = getArticleUnderPointer(); + const id = getArticleUnderPointer(); if (id) { - var row = $("RROW-" + id); + const row = $("RROW-" + id); if (row) { - var cb = dijit.getEnclosingWidget( + const cb = dijit.getEnclosingWidget( row.getElementsByClassName("rchk")[0]); if (cb) { @@ -545,32 +525,25 @@ function init_hotkey_actions() { hotkey_actions["toggle_combined_mode"] = function() { notify_progress("Loading, please wait..."); - var value = isCdmMode() ? "false" : "true"; - var query = "?op=rpc&method=setpref&key=COMBINED_DISPLAY_MODE&value=" + value; + const value = isCdmMode() ? "false" : "true"; - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - setInitParam("combined_display_mode", - !getInitParam("combined_display_mode")); + xhrPost("backend.php", {op: "rpc", method: "setpref", key: "COMBINED_DISPLAY_MODE", value: value}, () => { + setInitParam("combined_display_mode", + !getInitParam("combined_display_mode")); - closeArticlePanel(); - viewCurrentFeed(); - - } }); + closeArticlePanel(); + viewCurrentFeed(); + }) }; hotkey_actions["toggle_cdm_expanded"] = function() { notify_progress("Loading, please wait..."); - var value = getInitParam("cdm_expanded") ? "false" : "true"; - var query = "?op=rpc&method=setpref&key=CDM_EXPANDED&value=" + value; + const value = getInitParam("cdm_expanded") ? "false" : "true"; - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - setInitParam("cdm_expanded", !getInitParam("cdm_expanded")); - viewCurrentFeed(); - } }); + xhrPost("backend.php", {op: "rpc", method: "setpref", key: "CDM_EXPANDED", value: value}, () => { + setInitParam("cdm_expanded", !getInitParam("cdm_expanded")); + viewCurrentFeed(); + }); }; } @@ -602,7 +575,7 @@ function init_second_stage() { delCookie("ttrss_test"); - var toolbar = document.forms["main_toolbar_form"]; + const toolbar = document.forms["main_toolbar_form"]; dijit.getEnclosingWidget(toolbar.view_mode).attr('value', getInitParam("default_view_mode")); @@ -610,10 +583,8 @@ function init_second_stage() { dijit.getEnclosingWidget(toolbar.order_by).attr('value', getInitParam("default_view_order_by")); - feeds_sort_by_unread = getInitParam("feeds_sort_by_unread") == 1; - - var hash_feed_id = hash_get('f'); - var hash_feed_is_cat = hash_get('c') == "1"; + const hash_feed_id = hash_get('f'); + const hash_feed_is_cat = hash_get('c') == "1"; if (hash_feed_id != undefined) { setActiveFeedId(hash_feed_id, hash_feed_is_cat); @@ -625,11 +596,11 @@ function init_second_stage() { if ('sessionStorage' in window && window['sessionStorage'] !== null) sessionStorage.clear(); - var hotkeys = getInitParam("hotkeys"); - var tmp = []; + const hotkeys = getInitParam("hotkeys"); + const tmp = []; - for (sequence in hotkeys[1]) { - filtered = sequence.replace(/\|.*$/, ""); + for (const sequence in hotkeys[1]) { + const filtered = sequence.replace(/\|.*$/, ""); tmp[filtered] = hotkeys[1][sequence]; } @@ -700,15 +671,6 @@ function quickMenuGo(opid) { case "qmcShowOnlyUnread": toggleDispRead(); break; - case "qmcAddFilter": - quickAddFilter(); - break; - case "qmcAddLabel": - addLabel(); - break; - case "qmcRescoreFeed": - rescoreCurrentFeed(); - break; case "qmcToggleWidescreen": if (!isCdmMode()) { _widescreen_mode = !_widescreen_mode; @@ -732,28 +694,20 @@ function quickMenuGo(opid) { function toggleDispRead() { - var hide = !(getInitParam("hide_read_feeds") == "1"); - - hideOrShowFeeds(hide); - - var query = "?op=rpc&method=setpref&key=HIDE_READ_FEEDS&value=" + - param_escape(hide); - - setInitParam("hide_read_feeds", hide); - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - } }); + const hide = !(getInitParam("hide_read_feeds") == "1"); + xhrPost("backend.php", {op: "rpc", method: "setpref", key: "HIDE_READ_FEEDS", value: hide}, () => { + hideOrShowFeeds(hide); + setInitParam("hide_read_feeds", hide); + }); } function parse_runtime_info(data) { //console.log("parsing runtime info..."); - for (k in data) { - var v = data[k]; + for (const k in data) { + const v = data[k]; // console.log("RI: " + k + " => " + v); @@ -769,7 +723,7 @@ function parse_runtime_info(data) { } if (k == "update_result") { - var updatesIcon = dijit.byId("updatesIcon").domNode; + const updatesIcon = dijit.byId("updatesIcon").domNode; if (v) { Element.show(updatesIcon); @@ -800,7 +754,7 @@ function parse_runtime_info(data) { function collapse_feedlist() { Element.toggle("feeds-holder"); - var splitter = $("feeds-holder_splitter"); + const splitter = $("feeds-holder_splitter"); Element.visible("feeds-holder") ? splitter.show() : splitter.hide(); @@ -812,70 +766,31 @@ function viewModeChanged() { return viewCurrentFeed(''); } -function rescoreCurrentFeed() { - - var actid = getActiveFeedId(); - - if (activeFeedIsCat() || actid < 0) { - alert(__("You can't rescore this kind of feed.")); - return; - } - - if (!actid) { - alert(__("Please select some feed first.")); - return; - } - - var fn = getFeedName(actid); - var pr = __("Rescore articles in %s?").replace("%s", fn); - - if (confirm(pr)) { - notify_progress("Rescoring articles..."); - - var query = "?op=pref-feeds&method=rescore&quiet=1&ids=" + actid; - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - viewCurrentFeed(); - } }); - } -} - function hotkey_handler(e) { if (e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA") return; - var keycode = false; + let keycode = e.which; - var cmdline = $('cmdline'); - - if (window.event) { - keycode = window.event.keyCode; - } else if (e) { - keycode = e.which; - } - - if (keycode == 27) { // escape + if (keycode == 27) { // escape and drop prefix hotkey_prefix = false; } - if (keycode == 16) return; // ignore lone shift - if (keycode == 17) return; // ignore lone ctrl + if (keycode == 16 || keycode == 17) return; // ignore lone shift / ctrl - var hotkeys = getInitParam("hotkeys"); - var keychar = String.fromCharCode(keycode).toLowerCase(); + const hotkeys = getInitParam("hotkeys"); + const keychar = String.fromCharCode(keycode).toLowerCase(); if (!hotkey_prefix && hotkeys[0].indexOf(keychar) != -1) { - var date = new Date(); - var ts = Math.round(date.getTime() / 1000); + const date = new Date(); + const ts = Math.round(date.getTime() / 1000); hotkey_prefix = keychar; hotkey_prefix_pressed = ts; - cmdline.innerHTML = keychar; - Element.show(cmdline); + $("cmdline").innerHTML = keychar; + Element.show("cmdline"); e.stopPropagation(); @@ -883,9 +798,9 @@ function hotkey_handler(e) { return true; } - Element.hide(cmdline); + Element.hide("cmdline"); - var hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")"; + let hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")"; // ensure ^*char notation if (e.shiftKey) hotkey = "*" + hotkey; @@ -896,17 +811,16 @@ function hotkey_handler(e) { hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey; hotkey_prefix = false; - var hotkey_action = false; - var hotkeys = getInitParam("hotkeys"); + let hotkey_action = false; - for (sequence in hotkeys[1]) { + for (const sequence in hotkeys[1]) { if (sequence == hotkey) { hotkey_action = hotkeys[1][sequence]; break; } } - var action = hotkey_actions[hotkey_action]; + const action = hotkey_actions[hotkey_action]; if (action != null) { action(); @@ -921,10 +835,10 @@ function inPreferences() { function reverseHeadlineOrder() { - var toolbar = document.forms["main_toolbar_form"]; - var order_by = dijit.getEnclosingWidget(toolbar.order_by); + const toolbar = document.forms["main_toolbar_form"]; + const order_by = dijit.getEnclosingWidget(toolbar.order_by); - var value = order_by.attr('value'); + let value = order_by.attr('value'); if (value == "date_reverse") value = "default"; @@ -939,21 +853,21 @@ function reverseHeadlineOrder() { function handle_rpc_json(transport, scheduled_call) { - var netalert_dijit = dijit.byId("net-alert"); - var netalert = false; + const netalert_dijit = dijit.byId("net-alert"); + let netalert = false; if (netalert_dijit) netalert = netalert_dijit.domNode; try { - var reply = JSON.parse(transport.responseText); + const reply = JSON.parse(transport.responseText); if (reply) { - var error = reply['error']; + const error = reply['error']; if (error) { - var code = error['code']; - var msg = error['msg']; + const code = error['code']; + const msg = error['msg']; console.warn("[handle_rpc_json] received fatal error " + code + "/" + msg); @@ -963,44 +877,42 @@ function handle_rpc_json(transport, scheduled_call) { } } - var seq = reply['seq']; + const seq = reply['seq']; - if (seq) { - if (get_seq() != seq) { - console.log("[handle_rpc_json] sequence mismatch: " + seq + - " (want: " + get_seq() + ")"); - return true; - } + if (seq && get_seq() != seq) { + console.log("[handle_rpc_json] sequence mismatch: " + seq + + " (want: " + get_seq() + ")"); + return true; } - var message = reply['message']; + const message = reply['message']; - if (message) { - if (message == "UPDATE_COUNTERS") { - console.log("need to refresh counters..."); - setInitParam("last_article_id", -1); - request_counters(true); - } + if (message == "UPDATE_COUNTERS") { + console.log("need to refresh counters..."); + setInitParam("last_article_id", -1); + request_counters(true); } - var counters = reply['counters']; + const counters = reply['counters']; if (counters) parse_counters(counters, scheduled_call); - var runtime_info = reply['runtime-info']; + const runtime_info = reply['runtime-info']; if (runtime_info) parse_runtime_info(runtime_info); if (netalert) netalert.hide(); + return reply; + } else { - if (netalert) - netalert.show(); - else - notify_error("Communication problem with server."); - } + if (netalert) + netalert.show(); + else + notify_error("Communication problem with server."); + } } catch (e) { if (netalert) @@ -1011,13 +923,13 @@ function handle_rpc_json(transport, scheduled_call) { console.error(e); } - return true; + return false; } function switchPanelMode(wide) { if (isCdmMode()) return; - article_id = getActiveArticleId(); + const article_id = getActiveArticleId(); if (wide) { dijit.byId("headlines-wrap-inner").attr("design", 'sidebar'); @@ -1057,30 +969,24 @@ function switchPanelMode(wide) { if (article_id) view(article_id); - new Ajax.Request("backend.php", { - parameters: "op=rpc&method=setpanelmode&wide=" + (wide ? 1 : 0), - onComplete: function(transport) { - console.log(transport.responseText); - } }); + xhrPost("backend.php", {op: "rpc", method: "setpanelmode", wide: wide ? 1 : 0}); } function update_random_feed() { console.log("in update_random_feed"); - new Ajax.Request("backend.php", { - parameters: "op=rpc&method=updateRandomFeed", - onComplete: function(transport) { - handle_rpc_json(transport, true); - window.setTimeout(update_random_feed, 30*1000); - } }); + xhrPost("backend.php", { op: "rpc", method: "updateRandomFeed" }, (transport) => { + handle_rpc_json(transport, true); + window.setTimeout(update_random_feed, 30*1000); + }); } function hash_get(key) { - kv = window.location.hash.substring(1).toQueryParams(); + const kv = window.location.hash.substring(1).toQueryParams(); return kv[key]; } function hash_set(key, value) { - kv = window.location.hash.substring(1).toQueryParams(); + const kv = window.location.hash.substring(1).toQueryParams(); kv[key] = value; window.location.hash = $H(kv).toQueryString(); }