Safari Online - Improve eBook behavior

By Julien Couvreur Last update Jul 4, 2008 — Installed 236 times.
// Safari Online - Improve eBook behavior
// --------------------------------------------------------------------
//
// ==UserScript==
// @name            Safari Online - Improve eBook behavior
// @namespace       http://blog.monstuff.com/archives/cat_greasemonkey.html
// @description     Improves the layout for continuous reading (removes header, makes book narrower). Adds keyboard shortcuts (press Space when at bottom of a page to go to the next page or press 'N' or 'P' for Next and Previous).
// @include         http://proquestcombo.safaribooksonline.com/*
// ==/UserScript==

// ====================== Improve the format for the page ==============================/

function addGlobalStyle(css) {
        style = document.createElement("style");
        style.type = "text/css";
        style.innerHTML = css;
        document.getElementsByTagName('head')[0].appendChild(style);
}

var cssRules = ".Main { max-width: 900px; margin-left: auto; margin-right: auto; }";
addGlobalStyle(cssRules);


// ====================== Add a keyboard shortut to navigate ==============================/

function findNextButton() {
	var xpath = "//a[@accesskey='2']"; 
	var nextButtonSnapshot = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

	if (nextButtonSnapshot.snapshotLength == 2) {
		var nextButton = nextButtonSnapshot.snapshotItem(0);
  		return nextButton;
	}
}


function findPreviousButton() {
	var xpath = "//a[@accesskey='1']"; 
	var prevButtonSnapshot = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

	if (prevButtonSnapshot.snapshotLength == 2) {
		var prevButton = prevButtonSnapshot.snapshotItem(0);
  		return prevButton;
	}
}


function click(node) { 
	if (!node) return;

	var evt = node.ownerDocument.createEvent('MouseEvents'); 
	evt.initMouseEvent('click', true, true, node.ownerDocument.defaultView, 1, 0, 0, 0, 0, false, false, false, false, 0, null); 
	node.dispatchEvent(evt); 

	deleteContent();
	window.scrollTo(0,0);
}

function handleKeypress(e) {
	if (e.charCode == 110) {
		click(findNextButton());
	}
	if (e.charCode == 112) {
		click(findPreviousButton());
	}
	if (e.charCode == 32 && window.scrollY >= window.scrollMaxY) {
		click(findNextButton());
		e.preventDefault();
	}
}

function deleteContent() {
	var contentNode = window.document.getElementById("SectionContent");
	while (contentNode != null && contentNode.hasChildNodes())
	{
    		contentNode.removeChild(contentNode.firstChild);
	}

            contentNode = window.document.getElementById("pfcontent");
	while (contentNode != null && contentNode.hasChildNodes())
	{
    		contentNode.removeChild(contentNode.firstChild);
	}
}

window.addEventListener("keypress", handleKeypress, true);


// ====================== Hide banner ==============================/

var xpath = "//body/table[1]/tbody[1]/tr[1]/td/div/table/tbody/tr[1]";
var brandBarSnapshot = document.evaluate(xpath, document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);

if (brandBarSnapshot.snapshotLength == 1) {
  var brandBar = brandBarSnapshot.snapshotItem(0);
  brandBar.parentNode.removeChild(brandBar);
}


// ====================== Fix title ==============================/
function fixTitle() {
  window.document.title = window.document.title.replace(/[^-]* - [^-]* - /, "") + " - Safari Online";
}

fixTitle();