// ==UserScript==
// @name SU CSS Themer
// @namespace http://onyxstone.stumbleupon.com/
// @description SU CSS Themer
// @include http://*.stumbleupon.com/*
// @version 0.0.1
// ==/UserScript==
var stylelink = document.getElementsByClassName( 'stylelink')[0];
var prefsForm1 = document.getElementById( 'prefsForm1' );
var listThemes = document.getElementById( 'listThemes' );
var input;
//About textarea
var textarea;
var about_prev;
var stumbler = window.wrappedJSObject.stumbler;
//On owner page
if( stumbler ) {
var s = GM_getValue( 'stylelink_' + stumbler );
if( s && checkCSS( s ) ) injectStyle( s );
}
else if( stylelink ) {
injectStyle( stylelink.href );
}
//On preferences page
if( listThemes ) {
var div = document.createElement( 'div' );
div.textContent = 'Link to a custom stylesheet:'
div.style.paddingTop = '20px';
div.style.border = '1px dashed gray';
input = document.createElement( 'input' );
input.style.display = 'block';
input.type = 'text';
input.style.width = '400px';
var btn = document.createElement( 'button' );
btn.textContent = 'Submit';
btn.style.display = 'inline';
btn.type = 'button';
btn.addEventListener( 'click' , setStyleSheet , false );
var rem = document.createElement( 'button' );
rem.textContent = 'Remove style';
rem.style.display = 'inline';
rem.type = 'button';
rem.addEventListener( 'click' , removeStyleSheet , false );
div.appendChild( input );
div.appendChild( btn );
div.appendChild( rem );
prefsForm1.childNodes[1].appendChild( div );
var txt = xpath("//textarea[@name='description']", document);
textarea = txt.snapshotItem(0);
about_prev = document.createElement( 'div' );
insert( textarea , about_prev );
about_prev.innerHTML = textarea.value;
}
function checkCSS( href ) {
var a = href.match( /^http:\/\/.*\.css$/ );
return a;
}
function injectStyle( href ) {
var link = document.createElement( 'link' );
checkCSS( href );
if( checkCSS( href ) ) link.href = href;
link.type = "text/css";
link.rel ="stylesheet";
document.getElementsByTagName('head')[0].appendChild(link);
}
function setStyleSheet( e ) {
setHREF( input.value );
}
function removeStyleSheet( e ) {
setHREF( "" );
}
function setHREF( href ) {
about_prev.innerHTML = textarea.value;
var stylelink2 =
document.getElementsByClassName( 'stylelink' )[0];
if( stylelink2 ) {
stylelink2.setAttribute('href' , href );
textarea.value = about_prev.innerHTML;
}
else {
textarea.value = textarea.value + "<a class=\"stylelink\" href=\"" + href + "\">*</a>";
about_prev.innerHTML = textarea.value;
}
GM_setValue( 'stylelink_' + stumbler, href );
}
function xpath (exp, node ){
var result =
document.evaluate(exp, node, null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
return result;
}
function insert( rel_node , node ) {
rel_node.parentNode.insertBefore( node, rel_node );
}