X-Git-Url: https://git.wh0rd.org/?a=blobdiff_plain;f=js%2Ftt-rss.js;h=fca9dac199d9f06aaccb897c9bcbc57ca9901c8a;hb=e2b8c9273e09091c235959c25d8e4d8122aa6ca8;hp=e57de587e58c17f727ab61987e6e19a87a975482;hpb=1c4f5e83900fdd71a84f2e142c694c75106bef53;p=tt-rss.git diff --git a/js/tt-rss.js b/js/tt-rss.js index e57de587..fca9dac1 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -1,11 +1,11 @@ -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 _widescreen_mode = false; +let _rpc_seq = 0; +let _active_feed_id = 0; +let _active_feed_is_cat = false; +let hotkey_actions = {}; function next_seq() { _rpc_seq += 1; @@ -17,53 +17,44 @@ function get_seq() { } function activeFeedIsCat() { - return _active_feed_is_cat; + return !!_active_feed_is_cat; } function getActiveFeedId() { - try { - return _active_feed_id; - } catch (e) { - exception_error("getActiveFeedId", e); - } + return _active_feed_id; } function setActiveFeedId(id, is_cat) { - try { - hash_set('f', id); - hash_set('c', is_cat ? 1 : 0); + hash_set('f', id); + hash_set('c', is_cat ? 1 : 0); - _active_feed_id = id; - _active_feed_is_cat = is_cat; + _active_feed_id = id; + _active_feed_is_cat = is_cat; - $("headlines-frame").setAttribute("feed-id", id); - $("headlines-frame").setAttribute("is-cat", is_cat ? 1 : 0); + $("headlines-frame").setAttribute("feed-id", id); + $("headlines-frame").setAttribute("is-cat", is_cat ? 1 : 0); - selectFeed(id, is_cat); + selectFeed(id, is_cat); - PluginHost.run(PluginHost.HOOK_FEED_SET_ACTIVE, _active_article_id); - } catch (e) { - exception_error("setActiveFeedId", e); - } + PluginHost.run(PluginHost.HOOK_FEED_SET_ACTIVE, _active_article_id); } function updateFeedList() { try { - -// $("feeds-holder").innerHTML = "
" + -// __("Loading, please wait...") + "
"; - Element.show("feedlistLoading"); + resetCounterCache(); + if (dijit.byId("feedTree")) { dijit.byId("feedTree").destroyRecursive(); } - var store = new dojo.data.ItemFileWriteStore({ - url: "backend.php?op=pref_feeds&method=getfeedtree&mode=2"}); + 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" @@ -73,28 +64,21 @@ function updateFeedList() { childrenAttrs: ["items"] }); - var 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); - viewfeed({feed: feed, is_cat: is_cat}); - return false; - }, - openOnClick: false, - showRoot: false, - id: "feedTree", + const tree = new fox.FeedTree({ + model: treeModel, + onClick: function (item, node) { + 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; + }, + openOnClick: false, + showRoot: false, + persist: true, + 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); @@ -102,44 +86,37 @@ function updateFeedList() { $("feeds-holder").appendChild(tree.domNode); - var tmph = dojo.connect(tree, 'onLoad', function() { - dojo.disconnect(tmph); + var tmph = dojo.connect(tree, 'onLoad', function () { + dojo.disconnect(tmph); Element.hide("feedlistLoading"); - feedlist_init(); + try { + feedlist_init(); -// var node = dijit.byId("feedTree")._itemNodesMap['FEED:-2'][0].domNode -// menu.bindDomNode(node); - - loading_set_progress(25); + loading_set_progress(25); + } catch (e) { + exception_error(e); + } }); tree.startup(); - - } catch (e) { - exception_error("updateFeedList", e); + exception_error(e); } } 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(""); @@ -157,25 +134,25 @@ function viewCurrentFeed(method) { function timeout() { if (getInitParam("bw_limit") != "1") { - request_counters(); - setTimeout("timeout()", 60*1000); + request_counters(true); + setTimeout(timeout, 60*1000); } } 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", execute: function() { if (this.validate()) { - _search_query = dojo.objectToQuery(this.attr('value')); + _search_query = this.attr('value'); this.hide(); viewCurrentFeed(); } @@ -186,20 +163,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; } @@ -215,90 +184,99 @@ function genericSanityCheck() { function init() { - try { - //dojo.registerModulePath("fox", "../../js/"); - - require(["dojo/_base/kernel", - "dojo/ready", - "dojo/parser", - "dojo/_base/loader", - "dojo/_base/html", - "dijit/ProgressBar", - "dijit/ColorPalette", - "dijit/Dialog", - "dijit/form/Button", - "dijit/form/ComboButton", - "dijit/form/CheckBox", - "dijit/form/DropDownButton", - "dijit/form/FilteringSelect", - "dijit/form/Form", - "dijit/form/RadioButton", - "dijit/form/Select", - "dijit/form/SimpleTextarea", - "dijit/form/TextBox", - "dijit/form/ComboBox", - "dijit/form/ValidationTextBox", - "dijit/InlineEditBox", - "dijit/layout/AccordionContainer", - "dijit/layout/BorderContainer", - "dijit/layout/ContentPane", - "dijit/layout/TabContainer", - "dijit/PopupMenuItem", - "dijit/Menu", - "dijit/Toolbar", - "dijit/Tree", - "dijit/tree/dndSource", - "dijit/tree/ForestStoreModel", - "dojo/data/ItemFileWriteStore", - "fox/FeedTree" ], function (dojo, ready, parser) { - - ready(function() { + window.onerror = function(message, filename, lineno, colno, error) { + report_error(message, filename, lineno, colno, error); + }; + + require(["dojo/_base/kernel", + "dojo/ready", + "dojo/parser", + "dojo/_base/loader", + "dojo/_base/html", + "dojo/query", + "dijit/ProgressBar", + "dijit/ColorPalette", + "dijit/Dialog", + "dijit/form/Button", + "dijit/form/ComboButton", + "dijit/form/CheckBox", + "dijit/form/DropDownButton", + "dijit/form/FilteringSelect", + "dijit/form/Form", + "dijit/form/RadioButton", + "dijit/form/Select", + "dijit/form/MultiSelect", + "dijit/form/SimpleTextarea", + "dijit/form/TextBox", + "dijit/form/ComboBox", + "dijit/form/ValidationTextBox", + "dijit/InlineEditBox", + "dijit/layout/AccordionContainer", + "dijit/layout/BorderContainer", + "dijit/layout/ContentPane", + "dijit/layout/TabContainer", + "dijit/PopupMenuItem", + "dijit/Menu", + "dijit/Toolbar", + "dijit/Tree", + "dijit/tree/dndSource", + "dijit/tree/ForestStoreModel", + "dojo/data/ItemFileWriteStore", + "fox/FeedStoreModel", + "fox/FeedTree" ], function (dojo, ready, parser) { + + ready(function() { + + try { parser.parse(); if (!genericSanityCheck()) return false; loading_set_progress(30); - - var 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; - init_hotkey_actions(); - new Ajax.Request("backend.php", { - parameters: {op: "rpc", method: "sanityCheck", hasAudio: hasAudio, + const a = document.createElement('audio'); + 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; + + const params = { + op: "rpc", method: "sanityCheck", hasAudio: hasAudio, hasMp3: hasMp3, clientTzOffset: clientTzOffset, - hasSandbox: hasSandbox}, - onComplete: function(transport) { - backend_sanity_check_callback(transport); - } }); + hasSandbox: hasSandbox + }; + xhrPost("backend.php", params, (transport) => { + try { + backend_sanity_check_callback(transport); + } catch (e) { + console.error(e); + } + }); - }); + } catch (e) { + exception_error(e); + } + }); - }); - } catch (e) { - exception_error("init", e); - } + }); } 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}) @@ -321,32 +299,6 @@ function init_hotkey_actions() { hotkey_actions["prev_article_noexpand"] = function() { moveToPost('prev', true, true); }; - hotkey_actions["collapse_article"] = function() { - var id = getActiveArticleId(); - var elem = $("CICD-"+id); - - if (elem) { - if (elem.visible()) { - cdmCollapseArticle(null, id); - } - else { - cdmExpandArticle(id); - } - } - }; - hotkey_actions["toggle_expand"] = function() { - var id = getActiveArticleId(); - var elem = $("CICD-"+id); - - if (elem) { - if (elem.visible()) { - cdmCollapseArticle(null, id, false); - } - else { - cdmExpandArticle(id); - } - } - }; hotkey_actions["search_dialog"] = function() { search(); }; @@ -360,15 +312,14 @@ 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()) { openArticleInNewWindow(getActiveArticleId()); - return; } }; hotkey_actions["catchup_below"] = function() { @@ -378,23 +329,13 @@ function init_hotkey_actions() { catchupRelativeToArticle(0); }; hotkey_actions["article_scroll_down"] = function() { - var ctr = $("content_insert") ? $("content_insert") : $("headlines-frame"); - scrollArticle(40); }; hotkey_actions["article_scroll_up"] = function() { - var ctr = $("content_insert") ? $("content_insert") : $("headlines-frame"); - scrollArticle(-40); }; hotkey_actions["close_article"] = function() { - if (isCdmMode()) { - if (!getInitParam("cdm_expanded")) { - cdmCollapseArticle(false, getActiveArticleId()); - } - } else { - closeArticlePanel(); - } + closeArticlePanel(); }; hotkey_actions["email_article"] = function() { if (typeof emailArticle != "undefined") { @@ -464,14 +405,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(); @@ -501,16 +437,18 @@ 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( - row.getElementsByClassName("rchk")[0]); + const cb = dijit.getEnclosingWidget( + row.select(".rchk")[0]); if (cb) { - cb.attr("checked", !cb.attr("checked")); + if (!row.hasClassName("active")) + cb.attr("checked", !cb.attr("checked")); + toggleSelectRowById(cb, "RROW-" + id); return false; } @@ -553,230 +491,179 @@ 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(); - - } }); - }; - 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; - - new Ajax.Request("backend.php", { - parameters: query, - onComplete: function(transport) { - setInitParam("cdm_expanded", !getInitParam("cdm_expanded")); - viewCurrentFeed(); - } }); + closeArticlePanel(); + viewCurrentFeed(); + }) }; } function init_second_stage() { + updateFeedList(); + closeArticlePanel(); - try { - updateFeedList(); - closeArticlePanel(); - - if (parseInt(getCookie("ttrss_fh_width")) > 0) { - dijit.byId("feeds-holder").domNode.setStyle( - {width: getCookie("ttrss_fh_width") + "px" }); - } - - dijit.byId("main").resize(); - - var tmph = dojo.connect(dijit.byId('feeds-holder'), 'resize', - function (args) { - if (args && args.w >= 0) { - setCookie("ttrss_fh_width", args.w, getInitParam("cookie_lifetime")); - } - }); + if (parseInt(getCookie("ttrss_fh_width")) > 0) { + dijit.byId("feeds-holder").domNode.setStyle( + {width: getCookie("ttrss_fh_width") + "px" }); + } - var tmph = dojo.connect(dijit.byId('content-insert'), 'resize', - function (args) { - if (args && args.w >= 0 && args.h >= 0) { - setCookie("ttrss_ci_width", args.w, getInitParam("cookie_lifetime")); - setCookie("ttrss_ci_height", args.h, getInitParam("cookie_lifetime")); - } - }); + dijit.byId("main").resize(); - delCookie("ttrss_test"); + var tmph = dojo.connect(dijit.byId('feeds-holder'), 'resize', + function (args) { + if (args && args.w >= 0) { + setCookie("ttrss_fh_width", args.w, getInitParam("cookie_lifetime")); + } + }); - var toolbar = document.forms["main_toolbar_form"]; + var tmph = dojo.connect(dijit.byId('content-insert'), 'resize', + function (args) { + if (args && args.w >= 0 && args.h >= 0) { + setCookie("ttrss_ci_width", args.w, getInitParam("cookie_lifetime")); + setCookie("ttrss_ci_height", args.h, getInitParam("cookie_lifetime")); + } + }); - dijit.getEnclosingWidget(toolbar.view_mode).attr('value', - getInitParam("default_view_mode")); + delCookie("ttrss_test"); - dijit.getEnclosingWidget(toolbar.order_by).attr('value', - getInitParam("default_view_order_by")); + const toolbar = document.forms["main_toolbar_form"]; - feeds_sort_by_unread = getInitParam("feeds_sort_by_unread") == 1; + dijit.getEnclosingWidget(toolbar.view_mode).attr('value', + getInitParam("default_view_mode")); - var hash_feed_id = hash_get('f'); - var hash_feed_is_cat = hash_get('c') == "1"; + dijit.getEnclosingWidget(toolbar.order_by).attr('value', + getInitParam("default_view_order_by")); - if (hash_feed_id != undefined) { - setActiveFeedId(hash_feed_id, hash_feed_is_cat); - } + const hash_feed_id = hash_get('f'); + const hash_feed_is_cat = hash_get('c') == "1"; - loading_set_progress(50); + if (hash_feed_id != undefined) { + setActiveFeedId(hash_feed_id, hash_feed_is_cat); + } - // can't use cache_clear() here because viewfeed might not have initialized yet - if ('sessionStorage' in window && window['sessionStorage'] !== null) - sessionStorage.clear(); + loading_set_progress(50); - var hotkeys = getInitParam("hotkeys"); - var tmp = []; + // can't use cache_clear() here because viewfeed might not have initialized yet + if ('sessionStorage' in window && window['sessionStorage'] !== null) + sessionStorage.clear(); - for (sequence in hotkeys[1]) { - filtered = sequence.replace(/\|.*$/, ""); - tmp[filtered] = hotkeys[1][sequence]; - } + /*const hotkeys = getInitParam("hotkeys"); + const tmp = []; - hotkeys[1] = tmp; - setInitParam("hotkeys", hotkeys); + for (const sequence in hotkeys[1]) { + const filtered = sequence.replace(/\|.*$/, ""); + tmp[filtered] = hotkeys[1][sequence]; + } - _widescreen_mode = getInitParam("widescreen"); - switchPanelMode(_widescreen_mode); + hotkeys[1] = tmp; + setInitParam("hotkeys", hotkeys);*/ - console.log("second stage ok"); + _widescreen_mode = getInitParam("widescreen"); + switchPanelMode(_widescreen_mode); - if (getInitParam("simple_update")) { - console.log("scheduling simple feed updater..."); - window.setTimeout("update_random_feed()", 30*1000); - } + console.log("second stage ok"); - } catch (e) { - exception_error("init_second_stage", e); + if (getInitParam("simple_update")) { + console.log("scheduling simple feed updater..."); + window.setTimeout(update_random_feed, 30*1000); } } function quickMenuGo(opid) { - try { - switch (opid) { - case "qmcPrefs": - gotoPreferences(); - break; - case "qmcLogout": - gotoLogout(); - break; - case "qmcTagCloud": - displayDlg(__("Tag cloud"), "printTagCloud"); - break; - case "qmcSearch": - search(); - break; - case "qmcAddFeed": - quickAddFeed(); - break; - case "qmcDigest": - window.location.href = "backend.php?op=digest"; - break; - case "qmcEditFeed": - if (activeFeedIsCat()) - alert(__("You can't edit this kind of feed.")); - else - editFeed(getActiveFeedId()); - break; - case "qmcRemoveFeed": - var actid = getActiveFeedId(); - - if (activeFeedIsCat()) { - alert(__("You can't unsubscribe from the category.")); - return; - } + switch (opid) { + case "qmcPrefs": + gotoPreferences(); + break; + case "qmcLogout": + gotoLogout(); + break; + case "qmcTagCloud": + displayDlg(__("Tag cloud"), "printTagCloud"); + break; + case "qmcSearch": + search(); + break; + case "qmcAddFeed": + quickAddFeed(); + break; + case "qmcDigest": + window.location.href = "backend.php?op=digest"; + break; + case "qmcEditFeed": + if (activeFeedIsCat()) + alert(__("You can't edit this kind of feed.")); + else + editFeed(getActiveFeedId()); + break; + case "qmcRemoveFeed": + var actid = getActiveFeedId(); - if (!actid) { - alert(__("Please select some feed first.")); - return; - } + if (activeFeedIsCat()) { + alert(__("You can't unsubscribe from the category.")); + return; + } - var fn = getFeedName(actid); + if (!actid) { + alert(__("Please select some feed first.")); + return; + } - var pr = __("Unsubscribe from %s?").replace("%s", fn); + var fn = getFeedName(actid); - if (confirm(pr)) { - unsubscribeFeed(actid); - } - break; - case "qmcCatchupAll": - catchupAllFeeds(); - break; - case "qmcShowOnlyUnread": - toggleDispRead(); - break; - case "qmcAddFilter": - quickAddFilter(); - break; - case "qmcAddLabel": - addLabel(); - break; - case "qmcRescoreFeed": - rescoreCurrentFeed(); - break; - case "qmcToggleWidescreen": - if (!isCdmMode()) { - _widescreen_mode = !_widescreen_mode; - - // reset stored sizes because geometry changed - setCookie("ttrss_ci_width", 0); - setCookie("ttrss_ci_height", 0); - - switchPanelMode(_widescreen_mode); - } else { - alert(__("Widescreen is not available in combined mode.")); - } - break; - case "qmcHKhelp": - helpDialog("main"); - break; - default: - console.log("quickMenuGo: unknown action: " + opid); + var pr = __("Unsubscribe from %s?").replace("%s", fn); + + if (confirm(pr)) { + unsubscribeFeed(actid); } + break; + case "qmcCatchupAll": + catchupAllFeeds(); + break; + case "qmcShowOnlyUnread": + toggleDispRead(); + break; + case "qmcToggleWidescreen": + if (!isCdmMode()) { + _widescreen_mode = !_widescreen_mode; - } catch (e) { - exception_error("quickMenuGo", e); + // reset stored sizes because geometry changed + setCookie("ttrss_ci_width", 0); + setCookie("ttrss_ci_height", 0); + + switchPanelMode(_widescreen_mode); + } else { + alert(__("Widescreen is not available in combined mode.")); + } + break; + case "qmcHKhelp": + helpDialog("main"); + break; + default: + console.log("quickMenuGo: unknown action: " + opid); } } function toggleDispRead() { - try { - var hide = !(getInitParam("hide_read_feeds") == "1"); + const hide = !(getInitParam("hide_read_feeds") == "1"); + xhrPost("backend.php", {op: "rpc", method: "setpref", key: "HIDE_READ_FEEDS", value: hide}, () => { 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) { - } }); - - } catch (e) { - exception_error("toggleDispRead", e); - } + }); } 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); @@ -792,7 +679,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); @@ -821,15 +708,13 @@ function parse_runtime_info(data) { } function collapse_feedlist() { - try { + Element.toggle("feeds-holder"); - Element.toggle("feeds-holder"); + const splitter = $("feeds-holder_splitter"); - dijit.byId("main").resize(); + Element.visible("feeds-holder") ? splitter.show() : splitter.hide(); - } catch (e) { - exception_error("collapse_feedlist", e); - } + dijit.byId("main").resize(); } function viewModeChanged() { @@ -837,119 +722,19 @@ 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) { - try { - - if (e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA") return; - - var keycode = false; - var shift_key = false; - var ctrl_key = false; - var alt_key = false; - var meta_key = false; - - var cmdline = $('cmdline'); - - shift_key = e.shiftKey; - ctrl_key = e.ctrlKey; - alt_key = e.altKey; - meta_key = e.metaKey; - - if (window.event) { - keycode = window.event.keyCode; - } else if (e) { - keycode = e.which; - } - - var keychar = String.fromCharCode(keycode); - - if (keycode == 27) { // escape - hotkey_prefix = false; - } - - if (keycode == 16) return; // ignore lone shift - if (keycode == 17) return; // ignore lone ctrl + if (e.target.nodeName == "INPUT" || e.target.nodeName == "TEXTAREA") return; - keychar = keychar.toLowerCase(); + const action_name = keyevent_to_action(e); - var hotkeys = getInitParam("hotkeys"); + if (action_name) { + const action_func = hotkey_actions[action_name]; - if (!hotkey_prefix && hotkeys[0].indexOf(keychar) != -1) { - - var date = new Date(); - var ts = Math.round(date.getTime() / 1000); - - hotkey_prefix = keychar; - hotkey_prefix_pressed = ts; - - cmdline.innerHTML = keychar; - Element.show(cmdline); - - return true; - } - - Element.hide(cmdline); - - var hotkey = keychar.search(/[a-zA-Z0-9]/) != -1 ? keychar : "(" + keycode + ")"; - - // ensure ^*char notation - if (shift_key) hotkey = "*" + hotkey; - if (ctrl_key) hotkey = "^" + hotkey; - if (alt_key) hotkey = "+" + hotkey; - if (meta_key) hotkey = "%" + hotkey; - - hotkey = hotkey_prefix ? hotkey_prefix + " " + hotkey : hotkey; - hotkey_prefix = false; - - var hotkey_action = false; - var hotkeys = getInitParam("hotkeys"); - - for (sequence in hotkeys[1]) { - if (sequence == hotkey) { - hotkey_action = hotkeys[1][sequence]; - break; - } - } - - var action = hotkey_actions[hotkey_action]; - - if (action != null) { - action(); + if (action_func != null) { + action_func(); + e.stopPropagation(); return false; } - - } catch (e) { - exception_error("hotkey_handler", e); } } @@ -958,52 +743,40 @@ function inPreferences() { } function reverseHeadlineOrder() { - try { - /* var query_str = "?op=rpc&method=togglepref&key=REVERSE_HEADLINES"; + const toolbar = document.forms["main_toolbar_form"]; + const order_by = dijit.getEnclosingWidget(toolbar.order_by); - new Ajax.Request("backend.php", { - parameters: query_str, - onComplete: function(transport) { - viewCurrentFeed(); - } }); */ + let value = order_by.attr('value'); - var toolbar = document.forms["main_toolbar_form"]; - var order_by = dijit.getEnclosingWidget(toolbar.order_by); - - var value = order_by.attr('value'); - - if (value == "date_reverse") - value = "default"; - else - value = "date_reverse"; + if (value == "date_reverse") + value = "default"; + else + value = "date_reverse"; - order_by.attr('value', value); + order_by.attr('value', value); - viewCurrentFeed(); + viewCurrentFeed(); - } catch (e) { - exception_error("reverseHeadlineOrder", e); - } } function handle_rpc_json(transport, scheduled_call) { - try { - var reply = JSON.parse(transport.responseText); - 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; + if (netalert_dijit) netalert = netalert_dijit.domNode; + + try { + 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); @@ -1013,144 +786,116 @@ 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) Element.hide(netalert); + if (netalert) netalert.hide(); + + return reply; } else { if (netalert) - Element.show(netalert); + netalert.show(); else notify_error("Communication problem with server."); } } catch (e) { if (netalert) - Element.show(netalert); + netalert.show(); else notify_error("Communication problem with server."); - console.log(e); - //exception_error("handle_rpc_json", e, transport); + console.error(e); } - return true; + return false; } function switchPanelMode(wide) { - try { - if (isCdmMode()) return; + if (isCdmMode()) return; - article_id = getActiveArticleId(); + const article_id = getActiveArticleId(); - if (wide) { - dijit.byId("headlines-wrap-inner").attr("design", 'sidebar'); - dijit.byId("content-insert").attr("region", "trailing"); + if (wide) { + dijit.byId("headlines-wrap-inner").attr("design", 'sidebar'); + dijit.byId("content-insert").attr("region", "trailing"); - dijit.byId("content-insert").domNode.setStyle({width: '50%', - height: 'auto', - borderTopWidth: '0px' }); + dijit.byId("content-insert").domNode.setStyle({width: '50%', + height: 'auto', + borderTopWidth: '0px' }); - if (parseInt(getCookie("ttrss_ci_width")) > 0) { - dijit.byId("content-insert").domNode.setStyle( - {width: getCookie("ttrss_ci_width") + "px" }); - } - - $("headlines-frame").setStyle({ borderBottomWidth: '0px' }); - $("headlines-frame").addClassName("wide"); - - } else { + if (parseInt(getCookie("ttrss_ci_width")) > 0) { + dijit.byId("content-insert").domNode.setStyle( + {width: getCookie("ttrss_ci_width") + "px" }); + } - dijit.byId("content-insert").attr("region", "bottom"); + $("headlines-frame").setStyle({ borderBottomWidth: '0px' }); + $("headlines-frame").addClassName("wide"); - dijit.byId("content-insert").domNode.setStyle({width: 'auto', - height: '50%', - borderTopWidth: '0px'}); + } else { - if (parseInt(getCookie("ttrss_ci_height")) > 0) { - dijit.byId("content-insert").domNode.setStyle( - {height: getCookie("ttrss_ci_height") + "px" }); - } + dijit.byId("content-insert").attr("region", "bottom"); - $("headlines-frame").setStyle({ borderBottomWidth: '1px' }); - $("headlines-frame").removeClassName("wide"); + dijit.byId("content-insert").domNode.setStyle({width: 'auto', + height: '50%', + borderTopWidth: '0px'}); + if (parseInt(getCookie("ttrss_ci_height")) > 0) { + dijit.byId("content-insert").domNode.setStyle( + {height: getCookie("ttrss_ci_height") + "px" }); } - closeArticlePanel(); + $("headlines-frame").setStyle({ borderBottomWidth: '1px' }); + $("headlines-frame").removeClassName("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); - } }); + closeArticlePanel(); + if (article_id) view(article_id); - } catch (e) { - exception_error("switchPanelMode", e); - } + xhrPost("backend.php", {op: "rpc", method: "setpanelmode", wide: wide ? 1 : 0}); } function update_random_feed() { - try { - console.log("in 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); - } }); - - } catch (e) { - exception_error("update_random_feed", e); - } + xhrPost("backend.php", { op: "rpc", method: "updateRandomFeed" }, (transport) => { + handle_rpc_json(transport, true); + window.setTimeout(update_random_feed, 30*1000); + }); } function hash_get(key) { - try { - kv = window.location.hash.substring(1).toQueryParams(); - return kv[key]; - } catch (e) { - exception_error("hash_get", e); - } + const kv = window.location.hash.substring(1).toQueryParams(); + return kv[key]; } function hash_set(key, value) { - try { - kv = window.location.hash.substring(1).toQueryParams(); - kv[key] = value; - window.location.hash = $H(kv).toQueryString(); - } catch (e) { - exception_error("hash_set", e); - } + const kv = window.location.hash.substring(1).toQueryParams(); + kv[key] = value; + window.location.hash = $H(kv).toQueryString(); }