From 8574532b7f57593af41719c478258fc0024cd523 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 20 May 2021 20:32:00 +0300 Subject: add hotkeys J/K to move between unread feeds --- js/App.js | 14 ++++++++++++++ js/FeedTree.js | 11 ++++++----- js/Feeds.js | 8 ++++---- 3 files changed, 24 insertions(+), 9 deletions(-) (limited to 'js') diff --git a/js/App.js b/js/App.js index ecf8c46c1..0afcb0b77 100644 --- a/js/App.js +++ b/js/App.js @@ -944,6 +944,13 @@ const App = { if (feed !== false) Feeds.open({feed: feed, is_cat: is_cat, delayed: true}) }; + this.hotkey_actions["next_unread_feed"] = () => { + const [feed, is_cat] = Feeds.getNextFeed( + Feeds.getActive(), Feeds.activeIsCat(), true); + + if (feed !== false) + Feeds.open({feed: feed, is_cat: is_cat, delayed: true}) + }; this.hotkey_actions["prev_feed"] = () => { const [feed, is_cat] = Feeds.getPreviousFeed( Feeds.getActive(), Feeds.activeIsCat()); @@ -951,6 +958,13 @@ const App = { if (feed !== false) Feeds.open({feed: feed, is_cat: is_cat, delayed: true}) }; + this.hotkey_actions["prev_unread_feed"] = () => { + const [feed, is_cat] = Feeds.getPreviousFeed( + Feeds.getActive(), Feeds.activeIsCat(), true); + + if (feed !== false) + Feeds.open({feed: feed, is_cat: is_cat, delayed: true}) + }; this.hotkey_actions["next_article_or_scroll"] = (event) => { if (this.isCombinedMode()) Headlines.scroll(Headlines.line_scroll_offset, event); diff --git a/js/FeedTree.js b/js/FeedTree.js index b81638c39..e0c44e2b5 100755 --- a/js/FeedTree.js +++ b/js/FeedTree.js @@ -434,14 +434,15 @@ define(["dojo/_base/declare", "dojo/dom-construct", "dojo/_base/array", "dojo/co return [false, false]; }, - _prevTreeItemFromIndex: function (start) { + _prevTreeItemFromIndex: function (start, unread_only) { const items = this.model.store._arrayOfAllItems; for (let i = start-1; i > 0; i--) { const id = String(items[i].id); const box = this._itemNodesMap[id]; + const unread = parseInt(items[i].unread); - if (box) { + if (box && (!unread_only || unread > 0)) { const row = box[0].rowNode; const cat = box[0].rowNode.parentNode.parentNode; @@ -451,7 +452,7 @@ define(["dojo/_base/declare", "dojo/dom-construct", "dojo/_base/array", "dojo/co } } }, - getPreviousFeed: function (feed, is_cat) { + getPreviousFeed: function (feed, is_cat, unread_only = false) { let treeItem; if (is_cat) { @@ -464,11 +465,11 @@ define(["dojo/_base/declare", "dojo/dom-construct", "dojo/_base/array", "dojo/co const start = items.indexOf(treeItem); if (start != -1) { - let item = this._prevTreeItemFromIndex(start); + let item = this._prevTreeItemFromIndex(start, unread_only); // wrap from the bottom if (!item) { - item = this._prevTreeItemFromIndex(items.length); + item = this._prevTreeItemFromIndex(items.length, unread_only); } if (item) diff --git a/js/Feeds.js b/js/Feeds.js index befd7e46e..27586ab13 100644 --- a/js/Feeds.js +++ b/js/Feeds.js @@ -583,17 +583,17 @@ const Feeds = { return false; }, - getNextFeed: function(feed, is_cat) { + getNextFeed: function(feed, is_cat, unread_only = false) { const tree = dijit.byId("feedTree"); - if (tree) return tree.getNextFeed(feed, is_cat, false); + if (tree) return tree.getNextFeed(feed, is_cat, unread_only); return [false, false]; }, - getPreviousFeed: function(feed, is_cat) { + getPreviousFeed: function(feed, is_cat, unread_only = false) { const tree = dijit.byId("feedTree"); - if (tree) return tree.getPreviousFeed(feed, is_cat); + if (tree) return tree.getPreviousFeed(feed, is_cat, unread_only); return [false, false]; }, -- cgit v1.2.3