SU CSS Themer

By Onyxstone Last update Jan 31, 2009 — Installed 427 times.
// ==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 );

}