Newgrounds Theme Designer

By SnakeArsenic Last update Dec 13, 2008 — Installed 176 times. Daily Installs: 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0

There are 4 previous versions of this script.

// ==UserScript==
// @name           Newgrounds Theme Designer
// @namespace      themedesigner@snakehole.net
// @description    Mix and match past themes on Newgrounds
// @include        *.newgrounds.com/*
// ==/UserScript==

// Shared BG
/*  document.body.style.backgroundImage = "url('http://img.ngfiles.com/bg.gif')";
  document.body.style.backgroundRepeat = "repeat-y";
  document.body.style.backgroundPosition = "top center";*/
  
// Array must be loaded before anything else in order to properly find out what theme Newgrounds is currently using:  
/*  themeArray[?] = new Array("","","Normal")  */
var activeLogo = 0;
var activeHeader = 0;

var savedLogo = GM_getValue("savedLogo",0);
var savedHeader = GM_getValue("savedHeader",0);

var siteLogo = document.getElementById("center").style.backgroundImage;
var siteHeader = document.getElementById("main").style.backgroundImage;


var thStartArray = new Array() // Array Setup is Logo, Header, Name
thStartArray[0] = new Array(siteLogo
				,siteHeader
				,"NG Website")
				

thStartArray[1] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/07.gif)"
				,"url(http://ngarchive.aksumka.com/bbs/index.php?action=dlattach;topic=3.0;attach=1226)"
				,"Normal")
				
thStartArray[2] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/top.gif)"
				,null
				,"Old Logo 2006-2007")

var groupArray = new Array()

var th2006Array = new Array() // Array Setup is Logo, Header, Name
var th2007Array = new Array() // Array Setup is Logo, Header, Name
var th2008Array = new Array() // Array Setup is Logo, Header, Name

groupArray[0] = new Array("2006",th2006Array)

	th2006Array[0] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/aprilfools2007.gif)"
					,null
					,"April Fools")
	
	th2006Array[1] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/topcc06.gif)"
					,null
					,"Clock Day")

	th2006Array[2] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/nghalloween06.gif)"
					,null
					,"Halloween")
					
	th2006Array[3] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/christmas2006.gif)"
					,null
					,"Christmas")

groupArray[1] = new Array("2007",th2007Array)

	th2007Array[0] = new Array("url(http://ngarchive.aksumka.com/ngimg/events/madness/logo_madness.gif)"
					,"url(http://ngarchive.aksumka.com/ngimg/events/madness/headerbg.jpg)"
					,"Madness Day")
					
	th2007Array[1] = new Array(null
					,"url(http://ngarchive.aksumka.com/ngimg/misc/cd07bg.jpg)"
					,"Clock Day")
					
	th2007Array[2] = new Array("url(http://ngarchive.aksumka.com/ngimg/events/halloween/logobgween.gif)"
					,"url(http://ngarchive.aksumka.com/ngimg/events/halloween/headerbg.jpg)"
					,"Halloween")
					
	th2007Array[3] = new Array("url(http://ngarchive.aksumka.com/ngimg/events/bca/bclogobg.gif)"
					,"url(http://ngarchive.aksumka.com/ngimg/events/bca/bcheaderbg.jpg)"
					,"Breast Cancer")
					
	th2007Array[4] = new Array("url(http://ngarchive.aksumka.com/ngimg/events/winter/xmas07.gif)"
					,"url(http://ngarchive.aksumka.com/ngimg/events/winter/headerbgxmas07.jpg)"
					,"Christmas")

	th2007Array[5] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/ahheadder2_20_07.gif)"
					,null
					,"Alien Hominid")

	th2007Array[6] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/alienhomnidhd2007.gif)"
					,"url(http://ngarchive.aksumka.com/bbs/index.php?action=dlattach;topic=3.0;attach=1095)"
					,"Alien Hominid HD")
					
					
					
groupArray[2] = new Array("2008",th2008Array)
	th2008Array[0] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/tankawards08logobg.gif)"
					,"url(http://ngarchive.aksumka.com/Archive/logos/tankawards08headerbg.jpg)"
					,"Tank Awards")
					
	th2008Array[1] = new Array(null
					,"url(http://ngarchive.aksumka.com/bbs/index.php?action=dlattach;topic=16.0;attach=1001)"
					,"Tank Awards Winners")
				
	th2008Array[2] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/08madness.gif)"
					,"url(http://ngarchive.aksumka.com/ngimg/events/madness/headerbg2.jpg)"
					,"Madness Day") 
	
	th2008Array[3] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/pico08logobg.gif)"
					,"url(http://ngarchive.aksumka.com/bbs/index.php?action=dlattach;topic=16.0;attach=891)"
					,"Pico Day") 
					
	th2008Array[4] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/08fools.gif)"
					,"url(http://ngarchive.aksumka.com/Archive/logos/fools08headerbg.jpg)"
					,"April Fools") 
	
	th2008Array[5] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/08fools2.gif)"
					,null
					,"April Fools Alt.1") 
					
	th2008Array[6] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/08fools3a.gif)"
					,null
					,"April Fools Alt.2") 
					
	th2008Array[7] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/08fools3.gif)"
					,null
					,"April Fools Alt.3") 
					
	th2008Array[8] = new Array("url(http://ngarchive.aksumka.com/Archive/logos/hall08logo.gif)"
					,"url(http://ngarchive.aksumka.com/Archive/logos/hallo08BG.jpg)"
					,"Halloween") 

	th2008Array[9] = new Array(null
					,"url(http://ngarchive.aksumka.com/Archive/logos/hallo08bg2.jpg)"
					,"Halloween 2") 

					
	th2008Array[10] = new Array(null
					,"url(http://ngarchive.aksumka.com/bbs/index.php?action=dlattach;topic=16.0;attach=1072)"
					,"Comicon") 
	
	th2008Array[11] = new Array("url(http://ngarchive.aksumka.com/bbs/index.php?action=dlattach;topic=3.0;attach=1241;image)"
					,"url(http://ngarchive.aksumka.com/bbs/index.php?action=dlattach;topic=3.0;attach=1239;image)"
					,"Christmas") 
//alert(groupArray[0][1][0][1]);				
// position:fixed means stay fixed even the page scrolls. z-index keeps your iframe on top.
// The remainder of the line smacks the panel into the bottom left corner, out of your way.
// Overflow (in combination with the setTimeout) ensures the iframe fits your entire panel.
// Margin, top, left, width and height center the iframe horizontally and vertically:

var css = 'position:fixed; z-index:9999; border:1px solid black; ' +
          'top:50%; left:50%; width:30em; margin:-15em 0 0 -15em; height:15em; display:none;';

var bodyStyle = 'font-family: Arial,Helvetica,sans-serif; color:#d0d0d0;';
var prefHTML = 'data:text/html;charset=utf-8,<!DOCTYPE HTML PUBLIC "-%2F%2FW3C%2F%2FDTD HTML 4.0%2F%2FEN">%0D%0A<html lang%3D"en">%0D%0A <head>%0D%0A  <title>Test<%2Ftitle>%0D%0A  <style type%3D"text%2Fcss">%0D%0A  h1 {font-size%3A18px%3B margin%3A3px auto%3B}%0D%0A  select {float%3Aright%3B}%0D%0A  table {margin%3Aauto%3B}%0D%0A  input {margin%3A3px auto%3B}%0D%0A  body {text-align%3Acenter}%0D%0A  a%2C a%3Alink%2C a%3Avisited%2C a%3Aactive{color%3A%23FF9900}%0D%0A  <%2Fstyle>%0D%0A <%2Fhead>%0D%0A <body>%0D%0A  <h1>Newgrounds Theme Designer<%2Fh1>%0D%0A%0D%0A  <table>%0D%0A  <tr>%0D%0A  <td>Logo%3A<%2Ftd>%0D%0A  <td>%0D%0A  <select id%3D"logo" name%3D"logo">%0D%0A  <%2Fselect>%0D%0A  <%2Ftd>%0D%0A  <%2Ftr>%0D%0A%0D%0A  %0D%0A  <tr>%0D%0A  <td>Header%3A<%2Ftd>%0D%0A  <td>%0D%0A  <select id%3D"header" name%3D"header">%0D%0A  <%2Fselect>%0D%0A  <%2Ftd>%0D%0A  <%2Ftr>%0D%0A  <%2Ftable>%0D%0A%0D%0A<input type%3D"button" value%3D"Save Changes" id%3D"GMNGTSsave" name%3D"GMNGTSsave"%2F>%0D%0A<input type%3D"button" value%3D"Cancel" id%3D"GMNGTScancel" name%3D"GMNGTScancel"%2F>%0D%0A<div style%3D"font-size%3A12px%3B line-height%3A13px%3B">Images hosted by the <a href%3D"http%3A%2F%2Fngarchive.aksumka.com%2F" target%3D"_top">NG Archive<%2Fa>.<br %2F>%0D%0AThe problems of the past%2C today!<%2Fdiv>%0D%0A%0D%0A <%2Fbody>%0D%0A<%2Fhtml>';

var iframe = document.createElement('iframe');
iframe.setAttribute('style', css);
iframe.setAttribute('id', 'prefFrame');
document.body.appendChild(iframe);

// The about:blank page becomes a blank(!) canvas to modify
//iframe.src = 'about:blank';

iframe.src = prefHTML;

function openSettings(){
// document.body.appendChild(iframe);
  iframe.style.display = "block";
}

function saveSettings(){
  iframe.style.display = "none";
  GM_setValue("savedLogo", activeLogo);
  GM_setValue("savedHeader", activeHeader);
  var savedLogo = GM_getValue("savedLogo",0);
  var savedHeader = GM_getValue("savedHeader",0);
// alert("activeLogo : " + activeLogo + "\nactiveHeader : " + activeHeader + "\nsavedLogo : " + savedLogo + "\nsavedHeader : " + savedHeader);

}



function closeSettings(){
  iframe.style.display = "none";
  document.getElementById('prefFrame').contentDocument.getElementById('logo').selectedIndex = savedLogo;
  document.getElementById('prefFrame').contentDocument.getElementById('header').selectedIndex = savedHeader;
  previewHeader();
  previewLogo();
}

function previewLogo(){
  //alert(this.value); 
//  parent.document.getElementById("center").style.backgroundImage = logoArray[this.value];
  parent.document.getElementById("center").style.backgroundImage = document.getElementById('prefFrame').contentDocument.getElementById('logo').value;
  activeLogo = document.getElementById('prefFrame').contentDocument.getElementById('logo').selectedIndex;
  //alert(parent.document.getElementById("center").style.backgroundImage);
}
function previewHeader(){
//  parent.document.getElementById("main").style.backgroundImage = headerArray[this.value];
  parent.document.getElementById("main").style.backgroundImage = document.getElementById('prefFrame').contentDocument.getElementById('header').value;
  activeHeader = document.getElementById('prefFrame').contentDocument.getElementById('header').selectedIndex;
}

// Make sure Firefox initializes the DOM before we try to use it.
iframe.addEventListener("load", function() {
    var doc = iframe.contentDocument;
    doc.body.style.background = '#27272d';
	doc.body.style.cssText += bodyStyle;
	
	doc.getElementById('GMNGTSsave').addEventListener('click', saveSettings, false);  //Add click event listener to Cancel button, calls closeSettings()
	doc.getElementById('GMNGTScancel').addEventListener('click', closeSettings, false);  //Add click event listener to Cancel button, calls closeSettings()
	populate();
	doc.getElementById('logo').addEventListener('change', previewLogo, false);  //Add click event listener to Cancel button, calls closeSettings()
	doc.getElementById('header').addEventListener('change', previewHeader, false);  //Add click event listener to Cancel button, calls closeSettings()
	//alert(iframe.innerHTML);
    //iframe.style.width = doc.body.offsetWidth + "px";
    //iframe.style.height = doc.body.offsetHeight + "px";
}, false);

GM_registerMenuCommand("Newgrounds Theme Designer", function() {
  openSettings();
});

// document.getElementById('sel').options[3].selected=true;	
function populate(){
// Logo List
var logoCounter=0;
 for (var i=0;i<thStartArray.length;i++) {
	objOption=document.createElement("option");
    objOption.innerHTML = thStartArray[i][2];
    objOption.value = thStartArray[i][0];
	
	if (thStartArray[i][0] == null){
		  objOption.style.display="none";
	}
	
	if (logoCounter == activeLogo){objOption.selected=true}
	logoCounter++;
    document.getElementById('prefFrame').contentDocument.getElementById('logo').appendChild(objOption);
 }
  for (var i=0;i<groupArray.length;i++) {
    optGroup = document.createElement('optgroup');
    optGroup.label = groupArray[i][0];
	optGroup.style.display = "none";
		for (var u=0;u<groupArray[i][1].length;u++) {
		  objOption=document.createElement("option");
		  objOption.innerHTML = groupArray[i][1][u][2];
	  	  objOption.value = groupArray[i][1][u][0];
	      if (groupArray[i][1][u][0] == null){
		  objOption.style.display="none";
		  }else{
		    optGroup.style.display = "block";
		  }
	      if (logoCounter == activeLogo){objOption.selected=true}
		  logoCounter++;
		  optGroup.appendChild(objOption);
 }
    document.getElementById('prefFrame').contentDocument.getElementById('logo').appendChild(optGroup);
 }
 
// Header List
var headerCounter=0;
 for (var i=0;i<thStartArray.length;i++) {
	objOption=document.createElement("option");
    objOption.innerHTML = thStartArray[i][2];
    objOption.value = thStartArray[i][1];
	
	if (thStartArray[i][1] == null){
		  objOption.style.display="none";
	}
	
	if (headerCounter == activeHeader){objOption.selected=true}
	headerCounter++;
    document.getElementById('prefFrame').contentDocument.getElementById('header').appendChild(objOption);
 }
  for (var i=0;i<groupArray.length;i++) {
    optGroup = document.createElement('optgroup');
    optGroup.label = groupArray[i][0];
	optGroup.style.display = "none";
		for (var u=0;u<groupArray[i][1].length;u++) {
		  objOption=document.createElement("option");
		  objOption.innerHTML = groupArray[i][1][u][2];
	  	  objOption.value = groupArray[i][1][u][1];
		  if (groupArray[i][1][u][1] == null){
		  objOption.style.display="none";
		  }else{
		    optGroup.style.display = "block";
		  }
		  if (headerCounter == activeHeader){objOption.selected=true}
		  headerCounter++;
		  optGroup.appendChild(objOption);
 }
    document.getElementById('prefFrame').contentDocument.getElementById('header').appendChild(optGroup);
 }
  document.getElementById('prefFrame').contentDocument.getElementById('logo').selectedIndex = savedLogo;
  document.getElementById('prefFrame').contentDocument.getElementById('header').selectedIndex = savedHeader;
  previewHeader();
  previewLogo();
}