diff --git a/client/js/templates/EntriesPage.jsx b/client/js/templates/EntriesPage.jsx index 79a0ffdc3e..17e7c7d478 100644 --- a/client/js/templates/EntriesPage.jsx +++ b/client/js/templates/EntriesPage.jsx @@ -144,18 +144,13 @@ function reloadList({ * @param {number} selected */ function openSelectedArticle(selected) { - const link = document.querySelector(`.entry[data-entry-id="${selected}"] .entry-datetime`); + const link = document.querySelector(`.entry[data-entry-id="${selected}"] .entry-newwindow`); if (selfoss.config.openInBackgroundTab) { // In Chromium, this will just cause the tab to open in the foreground. // Appears to be disallowed by the pop-under prevention: // https://crbug.com/431335 // https://crbug.com/487919 - const event = new MouseEvent( - 'click', - { - ctrlKey: true, - } - ); + const event = new MouseEvent('click', { ctrlKey: true, bubbles: true}); link.dispatchEvent(event); } else { // open item in new window diff --git a/client/js/templates/Item.jsx b/client/js/templates/Item.jsx index e268fc5ff4..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')); @@ -257,6 +253,8 @@ export default function Item({ currentTime, item, selected, expanded, setNavExpa [currentTime, item.datetime] ); + const canWrite = useAllowedToWrite(); + const previouslyExpanded = usePreviousImmediate(expanded); const configuration = useContext(ConfigurationContext); @@ -387,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 }), [] @@ -411,8 +420,6 @@ export default function Item({ currentTime, item, selected, expanded, setNavExpa [item.source] ); - const canWrite = useAllowedToWrite(); - const _ = useContext(LocalizationContext); const sharers = useSharers({ configuration, _ }); @@ -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')}