Google Reader - Open all unread button

By Vincent Rémond Last update Aug 13, 2009 — Installed 2,032 times. Daily Installs: 8, 5, 8, 5, 7, 7, 4, 8, 7, 8, 2, 5, 16, 9, 4, 15, 7, 8, 7, 7, 9, 3, 6, 5, 4, 7, 11, 7, 5, 3, 2, 13

There are 10 previous versions of this script.

// ==UserScript==
// @name           Google Reader - Open all unread button
// @namespace      http://pas-bien.net/
// @include        http://www.google.tld/reader/view/*
// @include        https://www.google.tld/reader/view/*
// @require        http://ajax.googleapis.com/ajax/libs/jquery/1.3.1/jquery.min.js
// ==/UserScript==

/*

 Change log :
--------------
v0.1.1: Fix bad insert after google reader's update (13/08/2009)
v0.1.0: Support of expanded view. Now if all items can't be seen, you must confirm before opening.
v0.0.5: Fix security issue (include http*) and rewrite with jQuery
v0.0.4: Update for new version
v0.0.3: Button text based on top level domain and fix line return
v0.0.2: Works now for all google domains
v0.0.1: Added https URLs
v0.0.0: First release.

*/

function oau_fireClick(id)
{
	button = document.getElementById(id);
	evt = document.createEvent('MouseEvents');
	evt.initEvent( 'click', true, true );
	button.dispatchEvent(evt);
}

function oau_openall ()
{
	// Check if in good state
	if($('#view-list').hasClass('link-selected'))
		selector = 'div.entry:not(.read) a.entry-original';
	else if($('#view-cards').hasClass('link-selected'))
		selector = 'div.entry:not(.read) a.entry-title-link';
	else
	{
		alert('Open All Unread : Only "Expanded" or "List" views are supported. Sorry...');
		return;
	}
	
	// All items loaded ?
	text = $('#show-new').text()
	totalItems = parseInt((/(\d+)/.exec(text))[1],10);
	if($(selector).size() != totalItems)
	{
		if(confirm('Open All Unread : All unreaded items can\'t be seen. Do you want to stop ?\n   - Cancel : only the visible items will be opened.\n   - Confirm : scroll down to load all items or try to refresh with the refresh button.\n\n Stop now ?'))
			return;
	}
	
	// Open in tabs
	$(selector).each(function(index, domElement){
		window.open($(domElement).attr('href'));
	});
	
	// Mark as read
	oau_fireClick('mark-all-as-read');
}

function oau_process()
{
	// loaded ?
	if($('body').hasClass('loaded'))
	{
		// Constants
		oau_text_p1 = '<div id="open-all-unread" class="goog-button goog-button-base unselectable goog-inline-block goog-button-float-left goog-button-tight scour-disabled viewer-buttons" tabindex="0" role="wairole:button"><div class="goog-button-base-outer-box goog-inline-block"><div class="goog-button-base-inner-box goog-inline-block"><div class="goog-button-base-pos"><div class="goog-button-base-top-shadow"> </div><div class="goog-button-base-content"><div class="goog-button-body">';
		oau_text_p2 = '</div></div></div></div></div></div>';

		// Internationalisation
		var eregTLD = /^https?:\/\/(www\.)?google.([a-z\.]+)\/reader\/view\/.*$/i;
		if(eregTLD.test(document.location.href))
		{
			switch(eregTLD.exec(document.location.href)[2])
			{
				case "fr":	oau_text = 'Ouvrir les non lus';			break;
				case "de":	oau_text = 'Öffnen Sie alle ungelesenen';	break;
				case "it":	oau_text = 'Aperto tutto da leggere';		break;
				case "es":	oau_text = 'Abrir no leídos';				break;
				case "ro":	oau_text = 'Deschideti toate necitite';		break;
				default:	oau_text = 'Open all unread';				break;
			}
		}

		$('#viewer-refresh').before(oau_text_p1 + oau_text + oau_text_p2);
		$('#open-all-unread').click(oau_openall);
		
	}
	else
	{
		// not loaded try later
		setTimeout(oau_process,100);
	}
}

oau_process();