From 845c8577c76680a65ed998ebf84d124a00dddb9a Mon Sep 17 00:00:00 2001 From: Daniel Rudolf Date: Thu, 23 Nov 2023 15:04:51 +0100 Subject: [PATCH 1/4] Middle click on title to open entry in new tab --- client/js/templates/Item.jsx | 4 ++-- client/styles/main.scss | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/client/js/templates/Item.jsx b/client/js/templates/Item.jsx index e268fc5ff4..68792b17e3 100644 --- a/client/js/templates/Item.jsx +++ b/client/js/templates/Item.jsx @@ -446,11 +446,11 @@ export default function Item({ currentTime, item, selected, expanded, setNavExpa className="entry-title" onClick={titleOnClick} > - Date: Thu, 23 Nov 2023 22:45:08 +0100 Subject: [PATCH 2/4] client: Code cleanup --- client/js/templates/Item.jsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client/js/templates/Item.jsx b/client/js/templates/Item.jsx index e268fc5ff4..5bc164c3be 100644 --- a/client/js/templates/Item.jsx +++ b/client/js/templates/Item.jsx @@ -257,6 +257,8 @@ export default function Item({ currentTime, item, selected, expanded, setNavExpa [currentTime, item.datetime] ); + const canWrite = useAllowedToWrite(); + const previouslyExpanded = usePreviousImmediate(expanded); const configuration = useContext(ConfigurationContext); @@ -411,8 +413,6 @@ export default function Item({ currentTime, item, selected, expanded, setNavExpa [item.source] ); - const canWrite = useAllowedToWrite(); - const _ = useContext(LocalizationContext); const sharers = useSharers({ configuration, _ }); From dfa4df6964fe6941d4e113286e19b5ccc639055e Mon Sep 17 00:00:00 2001 From: Daniel Rudolf Date: Fri, 24 Nov 2023 00:42:53 +0100 Subject: [PATCH 3/4] Mark entry as read when opening external link --- client/js/templates/Item.jsx | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/client/js/templates/Item.jsx b/client/js/templates/Item.jsx index 5bc164c3be..e01aeecce9 100644 --- a/client/js/templates/Item.jsx +++ b/client/js/templates/Item.jsx @@ -46,10 +46,6 @@ function setupLightbox({ })); } -function stopPropagation(event) { - event.stopPropagation(); -} - function lazyLoadImages(content) { content.querySelectorAll('img').forEach((img) => { img.setAttribute('src', img.getAttribute('data-selfoss-src')); @@ -389,6 +385,17 @@ export default function Item({ currentTime, item, selected, expanded, setNavExpa [item] ); + const externalLinkOnClick = useCallback( + (event) => { + event.stopPropagation(); + + if (canWrite) { + selfoss.entriesPage.markEntryRead(item.id, true); + } + }, + [canWrite, item.id] + ); + const loadImagesOnClick = useCallback( (event) => loadImages({ event, setImagesLoaded, contentBlock }), [] @@ -544,7 +551,7 @@ export default function Item({ currentTime, item, selected, expanded, setNavExpa target="_blank" rel="noreferrer" accessKey="o" - onClick={stopPropagation} + onClick={externalLinkOnClick} > {_('open_window')} @@ -599,7 +606,7 @@ export default function Item({ currentTime, item, selected, expanded, setNavExpa target="_blank" rel="noreferrer" accessKey="o" - onClick={stopPropagation} + onClick={externalLinkOnClick} > {_('open_window')} From d7d15dc4dba094ec9def2477f22d6170a497fcb3 Mon Sep 17 00:00:00 2001 From: Daniel Rudolf Date: Fri, 24 Nov 2023 01:47:01 +0100 Subject: [PATCH 4/4] Middle click on title to mark entry as read --- client/js/templates/Item.jsx | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/client/js/templates/Item.jsx b/client/js/templates/Item.jsx index b0e1db430e..c52175781c 100644 --- a/client/js/templates/Item.jsx +++ b/client/js/templates/Item.jsx @@ -367,6 +367,15 @@ export default function Item({ currentTime, item, selected, expanded, setNavExpa [history, location, expanded, item.id] ); + const titleOnAuxClick = useCallback( + (event) => { + if (event.button === 1 && canWrite) { + selfoss.entriesPage.markEntryRead(item.id, true); + } + }, + [canWrite, item.id] + ); + const starOnClick = useCallback( (event) => { event.preventDefault(); @@ -459,6 +468,7 @@ export default function Item({ currentTime, item, selected, expanded, setNavExpa aria-expanded={expanded} aria-current={selected} tabIndex="0" + onAuxClick={titleOnAuxClick} onKeyUp={handleKeyUp} dangerouslySetInnerHTML={titleHtml} />