diff --git a/ui/static/js/app.js b/ui/static/js/app.js index e3bfadd43bdc4cc1929954fc9a7bb0ce06fd3d8c..a06d2bd08063ca3c5019f76b04af633d62e3405f 100644 --- a/ui/static/js/app.js +++ b/ui/static/js/app.js @@ -12,6 +12,19 @@ function onClick(selector, callback, noPreventDefault) { }); } +function onAuxClick(selector, callback, noPreventDefault) { + let elements = document.querySelectorAll(selector); + elements.forEach((element) => { + element.onauxclick = (event) => { + if (!noPreventDefault) { + event.preventDefault(); + } + + callback(event); + }; + }); +} + // Show and hide the main menu on mobile devices. function toggleMainMenu() { let menu = document.querySelector(".header nav ul"); @@ -115,11 +128,13 @@ function markPageAsRead() { } // Handle entry status changes from the list view and entry view. -function handleEntryStatus(element) { +function handleEntryStatus(element, setToRead) { let toasting = !element; let currentEntry = findEntry(element); if (currentEntry) { - toggleEntryStatus(currentEntry, toasting); + if (!setToRead || currentEntry.querySelector("a[data-toggle-status]").dataset.value == "unread") { + toggleEntryStatus(currentEntry, toasting); + } if (isListView() && currentEntry.classList.contains('current-item')) { goToNextListItem(); } diff --git a/ui/static/js/bootstrap.js b/ui/static/js/bootstrap.js index 8b972bbca92451d2bced8bae82ab217ee4886f32..b508ee4139ce0439b09e8df920dfdd3c2361aac9 100644 --- a/ui/static/js/bootstrap.js +++ b/ui/static/js/bootstrap.js @@ -61,6 +61,15 @@ document.addEventListener("DOMContentLoaded", function () { request.execute(); })); + onClick("a[data-original-link]", (event) => { + handleEntryStatus(event.target, true); + }, true); + onAuxClick("a[data-original-link]", (event) => { + if (event.button == 1) { + handleEntryStatus(event.target, true); + } + }, true); + if (document.documentElement.clientWidth < 600) { onClick(".logo", () => toggleMainMenu()); onClick(".header nav li", (event) => onClickMainMenuListItem(event));