Feedly Hide Read Items When Done

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

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

You will need to install an extension such as Tampermonkey to install this script.

Tendrás que instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Tendrás que instalar una extensión como Tampermonkey antes de poder instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Tendrás que instalar una extensión como Stylus antes de poder instalar este script.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

Para poder instalar esto tendrás que instalar primero una extensión de estilos de usuario.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==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");
}());