Miniflux.Item = (function() { function getItemID(item) { item_id = item.getAttribute("data-item-id"); return item_id; } function changeLabel(link) { if (link && link.hasAttribute("data-reverse-label")) { var content = link.innerHTML; link.innerHTML = link.getAttribute("data-reverse-label"); link.setAttribute("data-reverse-label", content); } } function changeBookmarkLabel(item) { var link = item.querySelector("a.bookmark"); changeLabel(link); } function changeStatusLabel(item) { var link = item.querySelector("a.mark"); changeLabel(link); } function showItemAsRead(item) { if (item.getAttribute("data-hide")) { hideItem(item); } else { item.setAttribute("data-item-status", "read"); changeStatusLabel(item); // Change action var link = item.querySelector("a.mark"); if (link) link.setAttribute("data-action", "mark-unread"); } } function showItemAsUnread(item) { if (item.getAttribute("data-hide")) { hideItem(item); } else { item.setAttribute("data-item-status", "unread"); changeStatusLabel(item); // Change action var link = item.querySelector("a.mark"); if (link) link.setAttribute("data-action", "mark-read"); } } function hideItem(item) { if (Miniflux.Event.lastEventType !== "mouse") { Miniflux.Nav.SelectNextItem(); } item.parentNode.removeChild(item); var pageCounter = document.getElementById("page-counter"); if (pageCounter) { var source = item.getAttribute("data-item-page"); var counter = parseInt(pageCounter.textContent, 10) - 1; var articles = document.getElementsByTagName("article"); if (counter === 0 || articles.length === 0) { window.location = location.href; } pageCounter.textContent = counter; switch (source) { case "unread": document.title = "Miniflux (" + counter + ")"; document.getElementById("nav-counter").textContent = counter; break; case "feed-items": document.title = "(" + counter + ") " + pageCounter.parentNode.firstChild.nodeValue; break; default: document.title = pageCounter.parentNode.firstChild.nodeValue + " (" + counter + ")"; } } } function markAsRead(item) { var item_id = getItemID(item); var request = new XMLHttpRequest(); request.onload = function() { if (Miniflux.Nav.IsListing()) showItemAsRead(item); }; request.open("POST", "?action=mark-item-read&id=" + item_id, true); request.send(); } function markAsUnread(item) { var item_id = getItemID(item); var request = new XMLHttpRequest(); request.onload = function() { if (Miniflux.Nav.IsListing()) showItemAsUnread(item); }; request.open("POST", "?action=mark-item-unread&id=" + item_id, true); request.send(); } function markAsRemoved(item) { var item_id = getItemID(item); var request = new XMLHttpRequest(); request.onload = function() { if (Miniflux.Nav.IsListing()) hideItem(item); }; request.open("POST", "?action=mark-item-removed&id=" + item_id, true); request.send(); } return { MarkAsRead: markAsRead, MarkAsUnread: markAsUnread, MarkAsRemoved: markAsRemoved, SwitchBookmark: function(item) { var item_id = getItemID(item); var value = item.getAttribute("data-item-bookmark") === "1" ? "0" : "1"; var request = new XMLHttpRequest(); request.onload = function() { if (Miniflux.Nav.IsListing() && item.getAttribute("data-item-page") === "bookmarks") { hideItem(item); } else { item.setAttribute("data-item-bookmark", value); if (Miniflux.Nav.IsListing()) { changeBookmarkLabel(item); } else { var link = item.querySelector("a.bookmark-icon"); if (link && link.hasAttribute("data-reverse-title")) { var title = link.getAttribute("title"); link.setAttribute("title", link.getAttribute("data-reverse-title")); link.setAttribute("data-reverse-title", title); } } } }; request.open("POST", "?action=bookmark&id=" + item_id + "&value=" + value, true); request.send(); }, SwitchStatus: function(item) { var status = item.getAttribute("data-item-status"); if (status === "read") { markAsUnread(item); } else if (status === "unread") { markAsRead(item); } }, Show: function(item) { var link = item.querySelector("a.show"); if (link) link.click(); }, OpenOriginal: function(item) { var link = item.querySelector("a.original"); if (link) { if (item.getAttribute("data-item-status") === "unread") markAsRead(item); link.removeAttribute("data-action"); link.click(); } }, DownloadContent: function(item) { var container = document.getElementById("download-item"); if (! container) return; var item_id = getItemID(item); var message = container.getAttribute("data-before-message"); var span = document.createElement("span"); span.appendChild(document.createTextNode("☀")); span.className = "loading-icon"; container.innerHTML = ""; container.className = "downloading"; container.appendChild(span); container.appendChild(document.createTextNode(" " + message)); var icon_interval = setInterval(Miniflux.App.BlinkIcon, 250); var request = new XMLHttpRequest(); request.onload = function() { var response = JSON.parse(request.responseText); clearInterval(icon_interval); if (response.result) { var content = document.getElementById("item-content"); if (content) content.innerHTML = response.content; if (container) { var message = container.getAttribute("data-after-message"); container.innerHTML = ""; container.appendChild(document.createTextNode(" " + message)); } } else { if (container) { var message = container.getAttribute("data-failure-message"); container.innerHTML = ""; container.appendChild(document.createTextNode(" " + message)); } } }; request.open("POST", "?action=download-item&id=" + item_id, true); request.send(); }, MarkListingAsRead: function(redirect) { var articles = document.getElementsByTagName("article"); var listing = []; for (var i = 0, ilen = articles.length; i < ilen; i++) { listing.push(getItemID(articles[i])); } var request = new XMLHttpRequest(); request.onload = function() { window.location.href = redirect; }; request.open("POST", "?action=mark-items-as-read", true); request.send(JSON.stringify(listing)); }, ToggleRTLMode: function() { var tags = [ "#current-item h1", "#item-content", "#current-item h2", "#current-item .preview" ]; for (var i = 0; i < tags.length; i++) { var tag = document.querySelector(tags[i]); if (tag) { tag.dir = tag.dir == "" ? "rtl" : ""; } } } }; })();