Feedly Hide Read Items When Done

Hide the read items list when you have finished reading unread items.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, Greasemonkey alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey, % alebo Violentmonkey.

Na nainštalovanie skriptu si budete musieť nainštalovať rozšírenie, ako napríklad Tampermonkey alebo Userscripts.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie, ako napríklad Tampermonkey.

Na inštaláciu tohto skriptu je potrebné nainštalovať rozšírenie správcu používateľských skriptov.

(Už mám správcu používateľských skriptov, nechajte ma ho nainštalovať!)

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie, ako napríklad Stylus.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

Na inštaláciu tohto štýlu je potrebné nainštalovať rozšírenie správcu používateľských štýlov.

(Už mám správcu používateľských štýlov, nechajte ma ho nainštalovať!)

// ==UserScript==
// @name           Feedly Hide Read Items When Done
// @version        1.2
// @namespace      geekrunner
// @include        *cloud.feedly.com/*
// @include        *feedly.com/*
// @description    Hide the read items list when you have finished reading unread items.
// ==/UserScript==

// VERSION HISTORY
// 1.2 - A nicer way to handle hiding the list of articles, doesn't completely remove them from the DOM.
// 1.1.5.1 - Bugfix for last update.
// 1.1.5 - Updated element to check for due to Feedly's August 2017 update removing the magic string.
// 1.1.4 - Updated magic string from "No unread articles" to "No unread stories".
// 1.1.3 - Reference one fewer element from DOM in hopes of having less DOM-based bugs.
// 1.1.2 - Fix for Feedly's update to DOM.
// 1.1.1 - Fix issue where the page refreshes while you're still reading the last article.
// 1.1 - Fix for updated version of feedly.
// 1.0 - Initial Release.
(function() {
	console.debug("[FHRIWD] - running");
	
	var tweakXHR = function () {
		console.debug("[FHRIWD] Customizing XMLHttpRequest.");
		try {
			XMLHttpRequest.prototype.open_old = XMLHttpRequest.prototype.open;
			XMLHttpRequest.prototype.open = function (method, url, async, user, pass) {
				this.addEventListener("readystatechange", function() {
					try {
						var unreadCountSpan = document.querySelector("div.mark-as-read-button-group.button.secondary button span");
						if (unreadCountSpan === null || Number(unreadCountSpan.textContent.trim()) === 0) {
                            if (document.querySelector("div.inlineFrame.read.selected") !== null) { //Don't hide when still reading the last article.
                                console.info("[FHRIWD] Still reading last item, doing nothing.");
                            } else {
								console.info("[FHRIWD] All items read - hiding timeline.");
                                var divsToHide = document.querySelectorAll("div.list-entries");

                                for (var i=0; i<divsToHide.length; i++) {
                                	if (divsToHide[i].parentNode.style.display != "none") {
                                        divsToHide[i].parentNode.style.display = "none";
                                    }

									if (i===0 && document.getElementById("noUnreadItems") === null) {
                                        var noUnreadPara = document.createElement("p");
                                        noUnreadPara.id = "noUnreadItems";
                                        noUnreadPara.appendChild(document.createTextNode("No Unread Items"));
                                        divsToHide[i].parentNode.parentNode.appendChild(noUnreadPara);
									}
								}
                            }
						} else {
							var noUnreadPara2 = document.getElementById("noUnreadItems");
                            if (noUnreadPara2 !== null) {
                                noUnreadPara2.parentNode.removeChild(noUnreadPara2);
							}
						}
					} catch (e) {
						console.error("[FHRIWD] " + e.message);
					}
				}, false);
				this.open_old.call(this, method, url, async, user, pass);
			};
		} catch (e) {
			console.error("[FHRIWD] " + e.message);
		}
		console.debug("[FHRIWD] Finished customizing XMLHttpRequest.");
	};
	
	//Inject the script into the page.
	var script = document.createElement('script');
	script.setAttribute('type','application/javascript');
	script.textContent = '(' + tweakXHR + ')();';
	document.body.appendChild(script); //run the script
	document.body.removeChild(script); //cleanup
	
	console.debug("[FHRIWD] - complete");
}());