// ==UserScript==
// @name PrintableForum
// @author Joshua Heyer
// @namespace http://shog9.com/greasemonkey/scripts/
// @description add a working "Printer friendly" link to every forum on CodeProject
// @version 0.1.2
// @include http://*.codeproject.com/*
// @include http://*.codetools.com/*
// @include http://*.thecodeproject.com/*
// ==/UserScript==
// no sense loading anything if this isn't even a forum - do a quick test for a forum table
var forumTable = document.getElementById("ForumTable");
if ( forumTable )
{
var faqLink = document.evaluate("//a[@href='/script/comments/faq.asp']", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
if ( faqLink && faqLink.snapshotLength > 0 )
{
var newLink = document.createElement('a');
newLink.href = "#";
newLink.style.marginLeft=".25em";
newLink.title="Show a printable version of this forum";
newLink.innerHTML = " Printer friendly ";
newLink.addEventListener("click", function(event)
{
var status1 = document.createTextNode("...");
newLink.parentNode.replaceChild(status1, newLink);
var status2 = document.createTextNode("Loading");
status1.parentNode.insertBefore(status2, status1);
var wrapper = new XPCNativeWrapper(window, "XSLTProcessor");
var processor = new wrapper.XSLTProcessor();
var testTransform = document.implementation.createDocument("", "test", null);
testTransform.addEventListener("progress", function()
{
status1.textContent += ".";
if ( status1.textContent.length > 3 )
status1.textContent = "";
}, false);
testTransform.addEventListener("load", function()
{
processor.importStylesheet(testTransform);
var processor2 = new wrapper.XSLTProcessor();
var printTransform = document.implementation.createDocument("", "test", null);
printTransform.addEventListener("progress", function()
{
status1.textContent += ".";
if ( status1.textContent.length > 3 )
status1.textContent = "";
}, false);
printTransform.addEventListener("load", function()
{
processor2.importStylesheet(printTransform);
var newDocument = processor.transformToDocument(document);
document.documentElement.innerHTML = "";
document.documentElement.appendChild(processor2.transformToFragment (newDocument, document));
}, false);
printTransform.load("/jscript/greasebob/cpforumPrint.xml");
}, false);
testTransform.load("/jscript/greasebob/cpforum.xml");
event.preventDefault();
}, true);
faqLink.snapshotItem(0).parentNode.insertBefore(newLink, null);
}
}