diff --git a/internal/template/templates/common/item_meta.html b/internal/template/templates/common/item_meta.html
index 8d48c98346b..7208999d13d 100644
--- a/internal/template/templates/common/item_meta.html
+++ b/internal/template/templates/common/item_meta.html
@@ -28,6 +28,16 @@
data-value="{{ if eq .entry.Status "read" }}read{{ else }}unread{{ end }}"
>{{ if eq .entry.Status "read" }}{{ icon "unread" }}{{ else }}{{ icon "read" }}{{ end }}{{ if eq .entry.Status "read" }}{{ t "entry.status.unread" }}{{ else }}{{ t "entry.status.read" }}{{ end }}
+
+ {{ icon "mark-all-as-read" }}Mark above as read
+
0) {
+ updateEntriesStatus(entryIDs, "read", () => {
+ // Refresh the page if user wants to hide unread
+ let element = document.querySelector("a[data-action=markPageAsRead]");
+ let showOnlyUnread = false;
+ if (element) {
+ showOnlyUnread = element.dataset.showOnlyUnread || false;
+ }
+
+ if (showOnlyUnread) {
+ window.location.href = window.location.href;
+ }
+ });
+ }
+}
+
// Mark a single entry as read.
function markEntryAsRead(element) {
if (element.classList.contains("item-status-unread")) {
diff --git a/internal/ui/static/js/bootstrap.js b/internal/ui/static/js/bootstrap.js
index 9f8b9364f80..43ca34dc636 100644
--- a/internal/ui/static/js/bootstrap.js
+++ b/internal/ui/static/js/bootstrap.js
@@ -79,6 +79,13 @@ document.addEventListener("DOMContentLoaded", () => {
}
}
+ onClick("a[data-action=markAboveAsRead]", (event) => {
+ const entry = findEntry(event.target);
+
+ if (entry) {
+ markAboveAsRead(entry);
+ }
+ });
onClick("a[data-save-entry]", (event) => handleSaveEntry(event.target));
onClick("a[data-toggle-bookmark]", (event) => handleBookmark(event.target));
onClick("a[data-fetch-content-entry]", () => handleFetchOriginalContent());