From 97d290de9d03497bab3709b2c8f0df8d10a9dfcb Mon Sep 17 00:00:00 2001 From: Athou Date: Tue, 11 Oct 2022 16:02:18 +0200 Subject: [PATCH] add support for "n" and "p" keyboard shortcuts --- .../src/components/KeyboardShortcutsHelp.tsx | 16 +++++++++++++++ .../src/components/content/FeedEntries.tsx | 20 ++++++++++++++++++- .../src/components/content/FeedEntry.tsx | 9 ++++++++- commafeed-client/src/locales/en/messages.po | 8 ++++++++ commafeed-client/src/locales/fr/messages.po | 8 ++++++++ 5 files changed, 59 insertions(+), 2 deletions(-) diff --git a/commafeed-client/src/components/KeyboardShortcutsHelp.tsx b/commafeed-client/src/components/KeyboardShortcutsHelp.tsx index b7aedfb5..6aa75ab1 100644 --- a/commafeed-client/src/components/KeyboardShortcutsHelp.tsx +++ b/commafeed-client/src/components/KeyboardShortcutsHelp.tsx @@ -29,6 +29,22 @@ export function KeyboardShortcutsHelp() { K + + + Set focus on next entry without opening it + + + N + + + + + Set focus on previous entry without opening it + + + P + + Move the page down diff --git a/commafeed-client/src/components/content/FeedEntries.tsx b/commafeed-client/src/components/content/FeedEntries.tsx index b59607bf..51947a49 100644 --- a/commafeed-client/src/components/content/FeedEntries.tsx +++ b/commafeed-client/src/components/content/FeedEntries.tsx @@ -64,6 +64,7 @@ export function FeedEntries() { // scroll to entry when selected entry changes useEffect(() => { if (!selectedEntryId) return + if (!selectedEntry?.expanded) return const selectedEntryElement = refs.current[selectedEntryId] if (Constants.layout.isTopVisible(selectedEntryElement) && Constants.layout.isBottomVisible(selectedEntryElement)) return @@ -73,7 +74,7 @@ export function FeedEntries() { top: selectedEntryElement.offsetTop - 3, behavior: scrollSpeed && scrollSpeed > 0 ? "smooth" : "auto", }) - }, [selectedEntryId, scrollSpeed]) + }, [selectedEntryId, selectedEntry?.expanded, scrollSpeed]) useMousetrap("r", () => { dispatch(reloadEntries()) @@ -86,6 +87,14 @@ export function FeedEntries() { }) ) }) + useMousetrap("n", () => { + dispatch( + selectNextEntry({ + expand: false, + markAsRead: false, + }) + ) + }) useMousetrap("k", () => { dispatch( selectPreviousEntry({ @@ -94,6 +103,14 @@ export function FeedEntries() { }) ) }) + useMousetrap("p", () => { + dispatch( + selectPreviousEntry({ + expand: false, + markAsRead: false, + }) + ) + }) useMousetrap("space", () => { if (selectedEntry) { if (selectedEntry.expanded) { @@ -232,6 +249,7 @@ export function FeedEntries() { headerClicked(entry, event)} /> diff --git a/commafeed-client/src/components/content/FeedEntry.tsx b/commafeed-client/src/components/content/FeedEntry.tsx index 02ce74d7..f3eff080 100644 --- a/commafeed-client/src/components/content/FeedEntry.tsx +++ b/commafeed-client/src/components/content/FeedEntry.tsx @@ -11,6 +11,7 @@ import { FeedEntryHeader } from "./FeedEntryHeader" interface FeedEntryProps { entry: Entry expanded: boolean + showSelectionIndicator: boolean onHeaderClick: (e: React.MouseEvent) => void } @@ -19,7 +20,7 @@ const useStyles = createStyles((theme, props: FeedEntryProps) => { if (theme.colorScheme === "dark") backgroundColor = props.entry.read ? "inherit" : theme.colors.dark[5] else backgroundColor = props.entry.read && !props.expanded ? theme.colors.gray[0] : "inherit" - return { + const styles = { paper: { backgroundColor, marginTop: theme.spacing.xs, @@ -33,6 +34,12 @@ const useStyles = createStyles((theme, props: FeedEntryProps) => { maxWidth: Constants.layout.entryMaxWidth, }, } + + if (props.showSelectionIndicator) { + styles.paper.borderLeftColor = theme.colors.orange[4] + } + + return styles }) export function FeedEntry(props: FeedEntryProps) { diff --git a/commafeed-client/src/locales/en/messages.po b/commafeed-client/src/locales/en/messages.po index 5b975f64..0c27da22 100644 --- a/commafeed-client/src/locales/en/messages.po +++ b/commafeed-client/src/locales/en/messages.po @@ -573,6 +573,14 @@ msgstr "Scroll smoothly when navigating between entries" msgid "Search" msgstr "Search" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Set focus on next entry without opening it" +msgstr "Set focus on next entry without opening it" + +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Set focus on previous entry without opening it" +msgstr "Set focus on previous entry without opening it" + #: src/components/header/ProfileMenu.tsx msgid "Settings" msgstr "Settings" diff --git a/commafeed-client/src/locales/fr/messages.po b/commafeed-client/src/locales/fr/messages.po index b0682008..7c0e774a 100644 --- a/commafeed-client/src/locales/fr/messages.po +++ b/commafeed-client/src/locales/fr/messages.po @@ -573,6 +573,14 @@ msgstr "Défilement animé lors de la navigation entre les entrées" msgid "Search" msgstr "Rechercher" +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Set focus on next entry without opening it" +msgstr "Sélectionner l'article suivant sans l'ouvrir" + +#: src/components/KeyboardShortcutsHelp.tsx +msgid "Set focus on previous entry without opening it" +msgstr "Sélectionner l'article précédent sans l'ouvrir" + #: src/components/header/ProfileMenu.tsx msgid "Settings" msgstr "Réglages"