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();
}
