From cc26be0793c6c0e44a540c25f86627342a82714f Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sat, 1 Dec 2018 21:51:00 +0300 Subject: migrate tt-rss.js contents to App --- js/tt-rss.js | 622 +++++++++++++++++++++++++++++------------------------------ 1 file changed, 307 insertions(+), 315 deletions(-) (limited to 'js/tt-rss.js') diff --git a/js/tt-rss.js b/js/tt-rss.js index 02cf1ddb6..46f100e27 100644 --- a/js/tt-rss.js +++ b/js/tt-rss.js @@ -1,10 +1,9 @@ /* global dijit, __ */ -let hotkey_actions = {}; - const App = { global_unread: -1, _widescreen_mode: false, + hotkey_actions: {}, init: function() { window.onerror = function (message, filename, lineno, colno, error) { @@ -57,7 +56,7 @@ const App = { return false; Utils.setLoadingProgress(30); - init_hotkey_actions(); + App.initHotkeyActions(); const a = document.createElement('audio'); const hasAudio = !!a.canPlayType; @@ -179,7 +178,7 @@ const App = { const action_name = Utils.keyeventToAction(event); if (action_name) { - const action_func = hotkey_actions[action_name]; + const action_func = this.hotkey_actions[action_name]; if (action_func != null) { action_func(); @@ -233,331 +232,328 @@ const App = { xhrPost("backend.php", {op: "rpc", method: "setpanelmode", wide: wide ? 1 : 0}); }, -}; + initHotkeyActions: function() { + this.hotkey_actions["next_feed"] = function () { + const rv = dijit.byId("feedTree").getNextFeed( + Feeds.getActiveFeedId(), Feeds.activeFeedIsCat()); -function init_hotkey_actions() { - hotkey_actions["next_feed"] = function () { - const rv = dijit.byId("feedTree").getNextFeed( - Feeds.getActiveFeedId(), Feeds.activeFeedIsCat()); - - if (rv) Feeds.viewfeed({feed: rv[0], is_cat: rv[1], delayed: true}) - }; - hotkey_actions["prev_feed"] = function () { - const rv = dijit.byId("feedTree").getPreviousFeed( - Feeds.getActiveFeedId(), Feeds.activeFeedIsCat()); - - if (rv) Feeds.viewfeed({feed: rv[0], is_cat: rv[1], delayed: true}) - }; - hotkey_actions["next_article"] = function () { - Headlines.moveToPost('next'); - }; - hotkey_actions["prev_article"] = function () { - Headlines.moveToPost('prev'); - }; - hotkey_actions["next_article_noscroll"] = function () { - Headlines.moveToPost('next', true); - }; - hotkey_actions["prev_article_noscroll"] = function () { - Headlines.moveToPost('prev', true); - }; - hotkey_actions["next_article_noexpand"] = function () { - Headlines.moveToPost('next', true, true); - }; - hotkey_actions["prev_article_noexpand"] = function () { - Headlines.moveToPost('prev', true, true); - }; - hotkey_actions["search_dialog"] = function () { - Feeds.search(); - }; - hotkey_actions["toggle_mark"] = function () { - Headlines.selectionToggleMarked(); - }; - hotkey_actions["toggle_publ"] = function () { - Headlines.selectionTogglePublished(); - }; - hotkey_actions["toggle_unread"] = function () { - Headlines.selectionToggleUnread({no_error: 1}); - }; - hotkey_actions["edit_tags"] = function () { - const id = Article.getActiveArticleId(); - if (id) { - Article.editArticleTags(id); - } - } - hotkey_actions["open_in_new_window"] = function () { - if (Article.getActiveArticleId()) { - Article.openArticleInNewWindow(Article.getActiveArticleId()); - } - }; - hotkey_actions["catchup_below"] = function () { - catchupRelativeToArticle(1); - }; - hotkey_actions["catchup_above"] = function () { - catchupRelativeToArticle(0); - }; - hotkey_actions["article_scroll_down"] = function () { - scrollArticle(40); - }; - hotkey_actions["article_scroll_up"] = function () { - scrollArticle(-40); - }; - hotkey_actions["close_article"] = function () { - if (App.isCombinedMode()) { - Article.cdmCollapseActive(); - } else { - Article.closeArticlePanel(); - } - }; - hotkey_actions["email_article"] = function () { - if (typeof emailArticle != "undefined") { - emailArticle(); - } else if (typeof mailtoArticle != "undefined") { - mailtoArticle(); - } else { - alert(__("Please enable mail plugin first.")); - } - }; - hotkey_actions["select_all"] = function () { - Headlines.selectArticles('all'); - }; - hotkey_actions["select_unread"] = function () { - Headlines.selectArticles('unread'); - }; - hotkey_actions["select_marked"] = function () { - Headlines.selectArticles('marked'); - }; - hotkey_actions["select_published"] = function () { - Headlines.selectArticles('published'); - }; - hotkey_actions["select_invert"] = function () { - Headlines.selectArticles('invert'); - }; - hotkey_actions["select_none"] = function () { - Headlines.selectArticles('none'); - }; - hotkey_actions["feed_refresh"] = function () { - if (Feeds.getActiveFeedId() != undefined) { - Feeds.viewfeed({feed: Feeds.getActiveFeedId(), is_cat: Feeds.activeFeedIsCat()}); - } - }; - hotkey_actions["feed_unhide_read"] = function () { - Feeds.toggleDispRead(); - }; - hotkey_actions["feed_subscribe"] = function () { - CommonDialogs.quickAddFeed(); - }; - hotkey_actions["feed_debug_update"] = function () { - if (!Feeds.activeFeedIsCat() && parseInt(Feeds.getActiveFeedId()) > 0) { - window.open("backend.php?op=feeds&method=update_debugger&feed_id=" + Feeds.getActiveFeedId() + - "&csrf_token=" + getInitParam("csrf_token")); - } else { - alert("You can't debug this kind of feed."); - } - }; - - hotkey_actions["feed_debug_viewfeed"] = function () { - Feeds.viewfeed({feed: Feeds.getActiveFeedId(), is_cat: Feeds.activeFeedIsCat(), viewfeed_debug: true}); - }; - - hotkey_actions["feed_edit"] = function () { - if (Feeds.activeFeedIsCat()) - alert(__("You can't edit this kind of feed.")); - else - editFeed(Feeds.getActiveFeedId()); - }; - hotkey_actions["feed_catchup"] = function () { - if (Feeds.getActiveFeedId() != undefined) { - Feeds.catchupCurrentFeed(); - } - }; - hotkey_actions["feed_reverse"] = function () { - Headlines.reverseHeadlineOrder(); - }; - hotkey_actions["feed_toggle_vgroup"] = function () { - xhrPost("backend.php", {op: "rpc", method: "togglepref", key: "VFEED_GROUP_BY_FEED"}, () => { - Feeds.viewCurrentFeed(); - }) - }; - hotkey_actions["catchup_all"] = function () { - Feeds.catchupAllFeeds(); - }; - hotkey_actions["cat_toggle_collapse"] = function () { - if (Feeds.activeFeedIsCat()) { - dijit.byId("feedTree").collapseCat(Feeds.getActiveFeedId()); - } - }; - hotkey_actions["goto_all"] = function () { - Feeds.viewfeed({feed: -4}); - }; - hotkey_actions["goto_fresh"] = function () { - Feeds.viewfeed({feed: -3}); - }; - hotkey_actions["goto_marked"] = function () { - Feeds.viewfeed({feed: -1}); - }; - hotkey_actions["goto_published"] = function () { - Feeds.viewfeed({feed: -2}); - }; - hotkey_actions["goto_tagcloud"] = function () { - Utils.displayDlg(__("Tag cloud"), "printTagCloud"); - }; - hotkey_actions["goto_prefs"] = function () { - gotoPreferences(); - }; - hotkey_actions["select_article_cursor"] = function () { - const id = getArticleUnderPointer(); - if (id) { - const row = $("RROW-" + id); - - if (row) { - const cb = dijit.getEnclosingWidget( - row.select(".rchk")[0]); - - if (cb) { - if (!row.hasClassName("active")) - cb.attr("checked", !cb.attr("checked")); - - toggleSelectRowById(cb, "RROW-" + id); - return false; - } + if (rv) Feeds.viewfeed({feed: rv[0], is_cat: rv[1], delayed: true}) + }; + this.hotkey_actions["prev_feed"] = function () { + const rv = dijit.byId("feedTree").getPreviousFeed( + Feeds.getActiveFeedId(), Feeds.activeFeedIsCat()); + + if (rv) Feeds.viewfeed({feed: rv[0], is_cat: rv[1], delayed: true}) + }; + this.hotkey_actions["next_article"] = function () { + Headlines.moveToPost('next'); + }; + this.hotkey_actions["prev_article"] = function () { + Headlines.moveToPost('prev'); + }; + this.hotkey_actions["next_article_noscroll"] = function () { + Headlines.moveToPost('next', true); + }; + this.hotkey_actions["prev_article_noscroll"] = function () { + Headlines.moveToPost('prev', true); + }; + this.hotkey_actions["next_article_noexpand"] = function () { + Headlines.moveToPost('next', true, true); + }; + this.hotkey_actions["prev_article_noexpand"] = function () { + Headlines.moveToPost('prev', true, true); + }; + this.hotkey_actions["search_dialog"] = function () { + Feeds.search(); + }; + this.hotkey_actions["toggle_mark"] = function () { + Headlines.selectionToggleMarked(); + }; + this.hotkey_actions["toggle_publ"] = function () { + Headlines.selectionTogglePublished(); + }; + this.hotkey_actions["toggle_unread"] = function () { + Headlines.selectionToggleUnread({no_error: 1}); + }; + this.hotkey_actions["edit_tags"] = function () { + const id = Article.getActiveArticleId(); + if (id) { + Article.editArticleTags(id); } } - }; - hotkey_actions["create_label"] = function () { - addLabel(); - }; - hotkey_actions["create_filter"] = function () { - quickAddFilter(); - }; - hotkey_actions["collapse_sidebar"] = function () { - Feeds.viewCurrentFeed(); - }; - hotkey_actions["toggle_embed_original"] = function () { - if (typeof embedOriginalArticle != "undefined") { - if (Article.getActiveArticleId()) - embedOriginalArticle(Article.getActiveArticleId()); - } else { - alert(__("Please enable embed_original plugin first.")); - } - }; - hotkey_actions["toggle_widescreen"] = function () { - if (!App.isCombinedMode()) { - App._widescreen_mode = !App._widescreen_mode; + this.hotkey_actions["open_in_new_window"] = function () { + if (Article.getActiveArticleId()) { + Article.openArticleInNewWindow(Article.getActiveArticleId()); + } + }; + this.hotkey_actions["catchup_below"] = function () { + Headlines.catchupRelativeToArticle(1); + }; + this.hotkey_actions["catchup_above"] = function () { + Headlines.catchupRelativeToArticle(0); + }; + this.hotkey_actions["article_scroll_down"] = function () { + Article.scrollArticle(40); + }; + this.hotkey_actions["article_scroll_up"] = function () { + Article.scrollArticle(-40); + }; + this.hotkey_actions["close_article"] = function () { + if (App.isCombinedMode()) { + Article.cdmCollapseActive(); + } else { + Article.closeArticlePanel(); + } + }; + this.hotkey_actions["email_article"] = function () { + if (typeof emailArticle != "undefined") { + emailArticle(); + } else if (typeof mailtoArticle != "undefined") { + mailtoArticle(); + } else { + alert(__("Please enable mail plugin first.")); + } + }; + this.hotkey_actions["select_all"] = function () { + Headlines.selectArticles('all'); + }; + this.hotkey_actions["select_unread"] = function () { + Headlines.selectArticles('unread'); + }; + this.hotkey_actions["select_marked"] = function () { + Headlines.selectArticles('marked'); + }; + this.hotkey_actions["select_published"] = function () { + Headlines.selectArticles('published'); + }; + this.hotkey_actions["select_invert"] = function () { + Headlines.selectArticles('invert'); + }; + this.hotkey_actions["select_none"] = function () { + Headlines.selectArticles('none'); + }; + this.hotkey_actions["feed_refresh"] = function () { + if (Feeds.getActiveFeedId() != undefined) { + Feeds.viewfeed({feed: Feeds.getActiveFeedId(), is_cat: Feeds.activeFeedIsCat()}); + } + }; + this.hotkey_actions["feed_unhide_read"] = function () { + Feeds.toggleDispRead(); + }; + this.hotkey_actions["feed_subscribe"] = function () { + CommonDialogs.quickAddFeed(); + }; + this.hotkey_actions["feed_debug_update"] = function () { + if (!Feeds.activeFeedIsCat() && parseInt(Feeds.getActiveFeedId()) > 0) { + window.open("backend.php?op=feeds&method=update_debugger&feed_id=" + Feeds.getActiveFeedId() + + "&csrf_token=" + getInitParam("csrf_token")); + } else { + alert("You can't debug this kind of feed."); + } + }; - // reset stored sizes because geometry changed - setCookie("ttrss_ci_width", 0); - setCookie("ttrss_ci_height", 0); + this.hotkey_actions["feed_debug_viewfeed"] = function () { + Feeds.viewfeed({feed: Feeds.getActiveFeedId(), is_cat: Feeds.activeFeedIsCat(), viewfeed_debug: true}); + }; - App.switchPanelMode(App._widescreen_mode); - } else { - alert(__("Widescreen is not available in combined mode.")); - } - }; - hotkey_actions["help_dialog"] = function () { - Utils.helpDialog("main"); - }; - hotkey_actions["toggle_combined_mode"] = function () { - notify_progress("Loading, please wait..."); + this.hotkey_actions["feed_edit"] = function () { + if (Feeds.activeFeedIsCat()) + alert(__("You can't edit this kind of feed.")); + else + editFeed(Feeds.getActiveFeedId()); + }; + this.hotkey_actions["feed_catchup"] = function () { + if (Feeds.getActiveFeedId() != undefined) { + Feeds.catchupCurrentFeed(); + } + }; + this.hotkey_actions["feed_reverse"] = function () { + Headlines.reverseHeadlineOrder(); + }; + this.hotkey_actions["feed_toggle_vgroup"] = function () { + xhrPost("backend.php", {op: "rpc", method: "togglepref", key: "VFEED_GROUP_BY_FEED"}, () => { + Feeds.viewCurrentFeed(); + }) + }; + this.hotkey_actions["catchup_all"] = function () { + Feeds.catchupAllFeeds(); + }; + this.hotkey_actions["cat_toggle_collapse"] = function () { + if (Feeds.activeFeedIsCat()) { + dijit.byId("feedTree").collapseCat(Feeds.getActiveFeedId()); + } + }; + this.hotkey_actions["goto_all"] = function () { + Feeds.viewfeed({feed: -4}); + }; + this.hotkey_actions["goto_fresh"] = function () { + Feeds.viewfeed({feed: -3}); + }; + this.hotkey_actions["goto_marked"] = function () { + Feeds.viewfeed({feed: -1}); + }; + this.hotkey_actions["goto_published"] = function () { + Feeds.viewfeed({feed: -2}); + }; + this.hotkey_actions["goto_tagcloud"] = function () { + Utils.displayDlg(__("Tag cloud"), "printTagCloud"); + }; + this.hotkey_actions["goto_prefs"] = function () { + document.location.href = "prefs.php"; + }; + this.hotkey_actions["select_article_cursor"] = function () { + const id = Article.getArticleUnderPointer(); + if (id) { + const row = $("RROW-" + id); - const value = App.isCombinedMode() ? "false" : "true"; + if (row) { + const cb = dijit.getEnclosingWidget( + row.select(".rchk")[0]); - xhrPost("backend.php", {op: "rpc", method: "setpref", key: "COMBINED_DISPLAY_MODE", value: value}, () => { - setInitParam("combined_display_mode", - !getInitParam("combined_display_mode")); + if (cb) { + if (!row.hasClassName("active")) + cb.attr("checked", !cb.attr("checked")); - Article.closeArticlePanel(); + toggleSelectRowById(cb, "RROW-" + id); + return false; + } + } + } + }; + this.hotkey_actions["create_label"] = function () { + addLabel(); + }; + this.hotkey_actions["create_filter"] = function () { + quickAddFilter(); + }; + this.hotkey_actions["collapse_sidebar"] = function () { Feeds.viewCurrentFeed(); - }) - }; - hotkey_actions["toggle_cdm_expanded"] = function () { - notify_progress("Loading, please wait..."); + }; + this.hotkey_actions["toggle_embed_original"] = function () { + if (typeof embedOriginalArticle != "undefined") { + if (Article.getActiveArticleId()) + embedOriginalArticle(Article.getActiveArticleId()); + } else { + alert(__("Please enable embed_original plugin first.")); + } + }; + this.hotkey_actions["toggle_widescreen"] = function () { + if (!App.isCombinedMode()) { + App._widescreen_mode = !App._widescreen_mode; - const value = getInitParam("cdm_expanded") ? "false" : "true"; + // reset stored sizes because geometry changed + setCookie("ttrss_ci_width", 0); + setCookie("ttrss_ci_height", 0); - xhrPost("backend.php", {op: "rpc", method: "setpref", key: "CDM_EXPANDED", value: value}, () => { - setInitParam("cdm_expanded", !getInitParam("cdm_expanded")); - Feeds.viewCurrentFeed(); - }); - }; -} + App.switchPanelMode(App._widescreen_mode); + } else { + alert(__("Widescreen is not available in combined mode.")); + } + }; + this.hotkey_actions["help_dialog"] = function () { + Utils.helpDialog("main"); + }; + this.hotkey_actions["toggle_combined_mode"] = function () { + notify_progress("Loading, please wait..."); -function quickMenuGo(opid) { - switch (opid) { - case "qmcPrefs": - gotoPreferences(); - break; - case "qmcLogout": - document.location.href = "backend.php?op=logout"; - break; - case "qmcTagCloud": - Utils.displayDlg(__("Tag cloud"), "printTagCloud"); - break; - case "qmcSearch": - Feeds.search(); - break; - case "qmcAddFeed": - CommonDialogs.quickAddFeed(); - break; - case "qmcDigest": - window.location.href = "backend.php?op=digest"; - break; - case "qmcEditFeed": - if (Feeds.activeFeedIsCat()) - alert(__("You can't edit this kind of feed.")); - else - editFeed(Feeds.getActiveFeedId()); - break; - case "qmcRemoveFeed": - var actid = Feeds.getActiveFeedId(); - - if (Feeds.activeFeedIsCat()) { - alert(__("You can't unsubscribe from the category.")); - return; - } + const value = App.isCombinedMode() ? "false" : "true"; - if (!actid) { - alert(__("Please select some feed first.")); - return; - } + xhrPost("backend.php", {op: "rpc", method: "setpref", key: "COMBINED_DISPLAY_MODE", value: value}, () => { + setInitParam("combined_display_mode", + !getInitParam("combined_display_mode")); + + Article.closeArticlePanel(); + Feeds.viewCurrentFeed(); + }) + }; + this.hotkey_actions["toggle_cdm_expanded"] = function () { + notify_progress("Loading, please wait..."); - var fn = Feeds.getFeedName(actid); + const value = getInitParam("cdm_expanded") ? "false" : "true"; - var pr = __("Unsubscribe from %s?").replace("%s", fn); + xhrPost("backend.php", {op: "rpc", method: "setpref", key: "CDM_EXPANDED", value: value}, () => { + setInitParam("cdm_expanded", !getInitParam("cdm_expanded")); + Feeds.viewCurrentFeed(); + }); + }; + }, + onActionSelected: function(opid) { + switch (opid) { + case "qmcPrefs": + gotoPreferences(); + break; + case "qmcLogout": + document.location.href = "backend.php?op=logout"; + break; + case "qmcTagCloud": + Utils.displayDlg(__("Tag cloud"), "printTagCloud"); + break; + case "qmcSearch": + Feeds.search(); + break; + case "qmcAddFeed": + CommonDialogs.quickAddFeed(); + break; + case "qmcDigest": + window.location.href = "backend.php?op=digest"; + break; + case "qmcEditFeed": + if (Feeds.activeFeedIsCat()) + alert(__("You can't edit this kind of feed.")); + else + editFeed(Feeds.getActiveFeedId()); + break; + case "qmcRemoveFeed": + var actid = Feeds.getActiveFeedId(); + + if (Feeds.activeFeedIsCat()) { + alert(__("You can't unsubscribe from the category.")); + return; + } - if (confirm(pr)) { - unsubscribeFeed(actid); - } - break; - case "qmcCatchupAll": - Feeds.catchupAllFeeds(); - break; - case "qmcShowOnlyUnread": - Feeds.toggleDispRead(); - break; - case "qmcToggleWidescreen": - if (!App.isCombinedMode()) { - App._widescreen_mode = !App._widescreen_mode; - - // reset stored sizes because geometry changed - setCookie("ttrss_ci_width", 0); - setCookie("ttrss_ci_height", 0); - - App.switchPanelMode(App._widescreen_mode); - } else { - alert(__("Widescreen is not available in combined mode.")); + if (!actid) { + alert(__("Please select some feed first.")); + return; + } + + var fn = Feeds.getFeedName(actid); + + var pr = __("Unsubscribe from %s?").replace("%s", fn); + + if (confirm(pr)) { + unsubscribeFeed(actid); + } + break; + case "qmcCatchupAll": + Feeds.catchupAllFeeds(); + break; + case "qmcShowOnlyUnread": + Feeds.toggleDispRead(); + break; + case "qmcToggleWidescreen": + if (!App.isCombinedMode()) { + App._widescreen_mode = !App._widescreen_mode; + + // reset stored sizes because geometry changed + setCookie("ttrss_ci_width", 0); + setCookie("ttrss_ci_height", 0); + + App.switchPanelMode(App._widescreen_mode); + } else { + alert(__("Widescreen is not available in combined mode.")); + } + break; + case "qmcHKhelp": + Utils.helpDialog("main"); + break; + default: + console.log("quickMenuGo: unknown action: " + opid); } - break; - case "qmcHKhelp": - Utils.helpDialog("main"); - break; - default: - console.log("quickMenuGo: unknown action: " + opid); + }, + isPrefs: function() { + return false; } -} - -function inPreferences() { - return false; -} +}; function hash_get(key) { const kv = window.location.hash.substring(1).toQueryParams(); @@ -569,7 +565,3 @@ function hash_set(key, value) { kv[key] = value; window.location.hash = $H(kv).toQueryString(); } - -function gotoPreferences() { - document.location.href = "prefs.php"; -} -- cgit v1.2.3