O'Reilly Hacks
oreilly.comO'Reilly NetworkSafari BookshelfConferences Sign In/My Account | View Cart   
Book List Learning Lab PDFs O'Reilly Gear Newsletters Press Room Jobs  


 
Buy the book!
Greasemonkey Hacks
By Mark Pilgrim
November 2005
More Info

HACK
#82
Automatically Link to Printer-Friendly Versions
Get the content without the cruft by changing selected article links to "printer-friendly" versions
The Code
[Discuss (0) | Link to this hack]

The Code

This user script runs on all pages. It uses regular expressions to find specific patterns in link URLs and then performs site-specific alterations to change the link to point to the associated printer-friendly page instead. Of course, it works only on links to the sites it knows about, but it can easily be extended with knowledge of how other sites associate normal article pages and printer-friendly pages.

Save the following user script as bstopthepresses.user.js:

	// ==UserScript==
	// @name		  Stop The Presses!
	// @namespace	  http://diveintomark.org/projects/greasemonkey/
	// @description	  make links point to printer-friendly versions
	// @include       *
	// ==/UserScript==
	var urlPage = window.location.href;
	for (var i = document.links.length - 1; i >= 0; i--) {
	    var elmLink = document.links[i];
	    var urlHref = elmLink.href;

		// Yahoo News
		if ((urlHref.match(/\/\/(story\.)?news\.yahoo\.com\//i)) &&
		((urlHref.match(/sid=/i)) || (urlHref.match(/tmpl=story/i))) &&
			(!urlHref.match(/printer=1/i))) {
			if (urlHref.match(/\?/i)) {
				urlHref += '&printer=1';
			} else {
			    urlHref += '?printer=1';
			}
		}
		// NYTimes
		if ((urlHref.match(/nytimes\.com\/2/i)) &&
		    (!urlHref.match(/pagewanted=/i))) {
			if (urlHref.match(/\?/i)) {
				urlHref += '&pagewanted=print';
			} else {
				urlHref += '?pagewanted=print';
			}
		}
		// CNET
		if (((urlHref.match(/com\.com\//i)) ||
			 (urlHref.match(/cnet\.com\//i)) ||
			 (urlPage.match(/com\.com\//i)) ||
			 (urlPage.match(/cnet\.com\//i))) &&
			(urlHref != elmLink.textContent)) {
			urlHref = urlHref.replace(/2100-/g, '2102-');
			urlHref = urlHref.replace(/2008-/g, '2102-');
		}

		// Washington Post
		if ((urlHref.match(/washingtonpost\.com\/wp\-dyn\/content\/article/i))
&&
		   (!urlHref.match(/_pf\./i))) {
		    urlHref = urlHref.replace(/.html/g, '_pf.html');
		}
		if (urlHref != elmLink.href) {
			elmLink.href = urlHref;
			elmLink.addEventListener('click', function(event) {
			    window.top.location.href = urlHref;
				event.stopPropagation();
				event.preventDefault();
				return false;
			}, true);
		}
	}


O'Reilly Home | Privacy Policy

© 2007 O'Reilly Media, Inc.
Website: | Customer Service: | Book issues:

All trademarks and registered trademarks appearing on oreilly.com are the property of their respective owners.