MediaWiki:Common.js: Difference between revisions

From The Sims Wiki, a collaborative database for The Sims series
Jump to navigation Jump to search
Content added Content deleted
sims>Lost Labyrinth
(sigh)
sims>Rappy 4187
m (testing)
Line 3: Line 3:
/* Any JavaScript here will be loaded for all users on every page load. */
/* Any JavaScript here will be loaded for all users on every page load. */


/* Add report script */
/* IRC login */
importScript('MediaWiki:Common.js/irclogin.js');
importScriptPage('User:GEORGIEGIBBONS/QReportAdder.js', 'sims');

/* Remove report script */
/* Remove report script */
importScriptPage('User:GEORGIEGIBBONS/QReportAdder.js', 'sims');
importScriptPage('User:GEORGIEGIBBONS/QReportAdder.js', 'sims');

/* Test if an element has a certain class **************************************
/* Test if an element has a certain class **************************************
*
*
Line 14: Line 14:
* Taken from Wikipedia's Common.js.
* Taken from Wikipedia's Common.js.
*/
*/

/* ######################################################################## */
/* ######################################################################## */
/* ### TITLE ICONS (Template:Games) ### */
/* ### TITLE ICONS (Template:Games) ### */
Line 21: Line 21:
/* ### Credit: User:Porter21 ### */
/* ### Credit: User:Porter21 ### */
/* ######################################################################## */
/* ######################################################################## */

function addTitleIcons () {
function addTitleIcons() {
var iconBar = $('#va-titleicons');
var iconBar = $('#va-titleicons');
var previewBar = $('#va-titleicons-preview');
var previewBar = $('#va-titleicons-preview');

if (skin != 'monobook' && skin != 'oasis' && skin != 'wikia') {
if (skin != 'monobook' && skin != 'oasis' && skin != 'wikia') {
return;
return;
}
}

if (iconBar.length > 0 && $('a', previewBar).length > 0) {
if (iconBar.length > 0 && $('a', previewBar).length > 0) {
if (skin == 'oasis' || skin == 'wikia') {
if (skin == 'oasis' || skin == 'wikia') {
var articleDiv = $('#WikiaArticle');
var articleDiv = $('#WikiaArticle');

if (articleDiv.length > 0) {
if (articleDiv.length > 0) {
iconBar.css('display', 'block').prependTo(articleDiv);
iconBar.css('display', 'block').prependTo(articleDiv);
}
}
} else if (skin == 'monobook') {
} else if (skin == 'monobook') {
var firstHeading = $('#firstHeading').css('position', 'relative');
var firstHeading = $('#firstHeading').css('position', 'relative');

if (firstHeading.length > 0) {
if (firstHeading.length > 0) {
iconBar.css('display', 'block').appendTo(firstHeading.css('padding-right', previewBar.width() + 25));
iconBar.css('display', 'block').appendTo(firstHeading.css('padding-right', previewBar.width() + 25));
}
}
}
}

$('#va-titleicons-more').append('<img width="0" height="0" class="va-titleicons-chevron" src="http://images.wikia.com/common/skins/common/blank.gif">');
$('#va-titleicons-more').append('<img width="0" height="0" class="va-titleicons-chevron" src="http://images.wikia.com/common/skins/common/blank.gif">');

iconBar.hover(
iconBar.hover(
function () {
function() {
$(this).addClass('va-titleicons-hover');
$(this).addClass('va-titleicons-hover');
}, function () {
}, function() {
$(this).removeClass('va-titleicons-hover');
$(this).removeClass('va-titleicons-hover');
});
});
}
}
}
}

// Standard Edit Summaries
// Standard Edit Summaries
importScript('MediaWiki:Common.js/standardeditsummaries.js');
importScript('MediaWiki:Common.js/standardeditsummaries.js');
// END of Standard Edit Summaries
// END of Standard Edit Summaries
/** Collapsible tables *********************************************************
/** Collapsible tables *********************************************************
*
*
* Description: Allows tables to be collapsed, showing only the header. See
* Description: Allows tables to be collapsed, showing only the header. See
* [[Wikipedia:NavFrame]].
* [[Wikipedia:NavFrame]].
* Taken from Wikipedia's Common.js.
* Taken from Wikipedia's Common.js.
*/
*/

var hasClass = (function () {
var hasClass = (function() {
var reCache = {};
var reCache = {};
return function (element, className) {
return function(element, className) {
return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
};
};
})();
})();

var autoCollapse = 2;
var autoCollapse = 2;
var collapseCaption = "hide";
var collapseCaption = "hide";
var expandCaption = "show";
var expandCaption = "show";

function collapseTable( tableIndex )
function collapseTable(tableIndex) {
var Button = document.getElementById("collapseButton" + tableIndex);
{
var Button = document.getElementById( "collapseButton" + tableIndex );
var Table = document.getElementById("collapsibleTable" + tableIndex);

var Table = document.getElementById( "collapsibleTable" + tableIndex );
if (!Table || !Button) {
if ( !Table || !Button ) {
return false;
}
return false;

}
var Rows = Table.rows;

var Rows = Table.rows;
if (Button.firstChild.data == collapseCaption) {
if ( Button.firstChild.data == collapseCaption ) {
for (var i = 1; i < Rows.length; i++) {
for ( var i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = "none";
}
Rows[i].style.display = "none";
Button.firstChild.data = expandCaption;
}
} else {
Button.firstChild.data = expandCaption;
for (var i = 1; i < Rows.length; i++) {
} else {
for ( var i = 1; i < Rows.length; i++ ) {
Rows[i].style.display = Rows[0].style.display;
}
Rows[i].style.display = Rows[0].style.display;
Button.firstChild.data = collapseCaption;
}
}
Button.firstChild.data = collapseCaption;
}
}

}
function createCollapseButtons() {
var tableIndex = 0;
function createCollapseButtons()
var NavigationBoxes = new Object();
{
var Tables = document.getElementsByTagName("table");
var tableIndex = 0;

var NavigationBoxes = new Object();
for (var i = 0; i < Tables.length; i++) {
var Tables = document.getElementsByTagName( "table" );
if (hasClass(Tables[i], "collapsible")) {

for ( var i = 0; i < Tables.length; i++ ) {
/* only add button and increment count if there is a header row to work with */
if ( hasClass( Tables[i], "collapsible" ) ) {
var HeaderRow = Tables[i].getElementsByTagName("tr")[0];
if (!HeaderRow) continue;
/* only add button and increment count if there is a header row to work with */
var HeaderRow = Tables[i].getElementsByTagName( "tr" )[0];
var Header = HeaderRow.getElementsByTagName("th")[0];
if (!HeaderRow) continue;
if (!Header) continue;

var Header = HeaderRow.getElementsByTagName( "th" )[0];
if (!Header) continue;
NavigationBoxes[tableIndex] = Tables[i];
Tables[i].setAttribute("id", "collapsibleTable" + tableIndex);

NavigationBoxes[ tableIndex ] = Tables[i];
Tables[i].setAttribute( "id", "collapsibleTable" + tableIndex );
var Button = document.createElement("span");
var ButtonLink = document.createElement("a");
var Button = document.createElement( "span" );
var ButtonText = document.createTextNode(collapseCaption);

var ButtonLink = document.createElement( "a" );
Button.style.styleFloat = "right";
var ButtonText = document.createTextNode( collapseCaption );
Button.style.cssFloat = "right";
Button.style.styleFloat = "right";
Button.style.fontWeight = "normal";
Button.style.cssFloat = "right";
Button.style.textAlign = "right";
Button.style.fontWeight = "normal";
Button.style.width = "2em";

Button.style.textAlign = "right";
Button.style.width = "2em";
ButtonLink.style.color = Header.style.color;
ButtonLink.setAttribute("id", "collapseButton" + tableIndex);
ButtonLink.style.color = Header.style.color;
ButtonLink.setAttribute("href", "javascript:collapseTable(" + tableIndex + ");");
ButtonLink.setAttribute( "id", "collapseButton" + tableIndex );
ButtonLink.appendChild(ButtonText);

ButtonLink.setAttribute( "href", "javascript:collapseTable(" + tableIndex + ");" );
ButtonLink.appendChild( ButtonText );
Button.appendChild(document.createTextNode("["));
Button.appendChild(ButtonLink);
Button.appendChild( document.createTextNode( "[" ) );
Button.appendChild(document.createTextNode("]"));

Button.appendChild( ButtonLink );
Button.appendChild( document.createTextNode( "]" ) );
Header.insertBefore(Button, Header.childNodes[0]);
tableIndex++;
}
Header.insertBefore( Button, Header.childNodes[0] );
}
tableIndex++;

}
for (var i = 0; i < tableIndex; i++) {
}
if (hasClass(NavigationBoxes[i], "collapsed") || (tableIndex >= autoCollapse && hasClass(NavigationBoxes[i], "autocollapse"))) {
for ( var i = 0; i < tableIndex; i++ ) {
collapseTable(i);
}
if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
}
collapseTable( i );
}
}

}
addOnloadHook(createCollapseButtons);
}

addOnloadHook( createCollapseButtons );
importScriptPage('EditIntroButton/code.js', 'dev');
importScriptPage('EditIntroButton/code.js', 'dev');


importScriptPage('PurgeButton/code.js', 'dev');
importScriptPage('PurgeButton/code.js', 'dev');


/** Dynamic Navigation Bars (experimental) *************************************
/** Dynamic Navigation Bars (experimental) *************************************
*
*
* Description: See [[Wikipedia:NavFrame]].
* Description: See [[Wikipedia:NavFrame]].
* Taken from Wikipedia's Common.js.
* Taken from Wikipedia's Common.js.
*/
*/

// set up the words in your language
// set up the words in your language
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';

// shows and hides content and picture (if available) of navigation bars
// shows and hides content and picture (if available) of navigation bars
// Parameters:
// Parameters:
// indexNavigationBar: the index of navigation bar to be toggled
// indexNavigationBar: the index of navigation bar to be toggled

function toggleNavigationBar(indexNavigationBar)

{
var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
function toggleNavigationBar(indexNavigationBar) {
var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);

if (!NavFrame || !NavToggle) {
if (!NavFrame || !NavToggle) {
return false;
}
return false;
}

// if shown now
// if shown now
if (NavToggle.firstChild.data == NavigationBarHide) {
if (NavToggle.firstChild.data == NavigationBarHide) {
for (
for (
var NavChild = NavFrame.firstChild;
NavChild != null;
var NavChild = NavFrame.firstChild;
NavChild = NavChild.nextSibling
NavChild != null;
) {
NavChild = NavChild.nextSibling) {
if ( hasClass( NavChild, 'NavPic' ) ) {
if (hasClass(NavChild, 'NavPic')) {
NavChild.style.display = 'none';
NavChild.style.display = 'none';
}
}
if ( hasClass( NavChild, 'NavContent') ) {
if (hasClass(NavChild, 'NavContent')) {
NavChild.style.display = 'none';
NavChild.style.display = 'none';
}
}
}
}
NavToggle.firstChild.data = NavigationBarShow;
NavToggle.firstChild.data = NavigationBarShow;

// if hidden now
// if hidden now
} else if (NavToggle.firstChild.data == NavigationBarShow) {
} else if (NavToggle.firstChild.data == NavigationBarShow) {
for (
for (
var NavChild = NavFrame.firstChild;
var NavChild = NavFrame.firstChild;
NavChild != null;
NavChild != null;
NavChild = NavChild.nextSibling
NavChild = NavChild.nextSibling) {
) {
if (hasClass(NavChild, 'NavPic')) {
if (hasClass(NavChild, 'NavPic')) {
NavChild.style.display = 'block';
NavChild.style.display = 'block';
}
}
if (hasClass(NavChild, 'NavContent')) {
if (hasClass(NavChild, 'NavContent')) {
NavChild.style.display = 'block';
NavChild.style.display = 'block';
}
}
}
NavToggle.firstChild.data = NavigationBarHide;
}
}
NavToggle.firstChild.data = NavigationBarHide;
}
}

}
// adds show/hide-button to navigation bars

// adds show/hide-button to navigation bars

function createNavigationBarToggleButton()
function createNavigationBarToggleButton() {
{
var indexNavigationBar = 0;
var indexNavigationBar = 0;
// iterate over all < div >-elements
// iterate over all < div >-elements
var divs = document.getElementsByTagName("div");
var divs = document.getElementsByTagName("div");
for(
for (
var i=0;
var i = 0;
NavFrame = divs[i];
NavFrame = divs[i];
i++
i++) {
) {
// if found a navigation bar
// if found a navigation bar
if (hasClass(NavFrame, "NavFrame")) {

if (hasClass(NavFrame, "NavFrame")) {
indexNavigationBar++;
indexNavigationBar++;
var NavToggle = document.createElement("a");
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');

NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
var NavToggleText = document.createTextNode(NavigationBarHide);
for (
var NavToggleText = document.createTextNode(NavigationBarHide);
for (
var NavChild = NavFrame.firstChild;
var NavChild = NavFrame.firstChild;
NavChild != null;
NavChild != null;
NavChild = NavChild.nextSibling) {
NavChild = NavChild.nextSibling
if (hasClass(NavChild, 'NavPic') || hasClass(NavChild, 'NavContent')) {
) {
if (NavChild.style.display == 'none') {
NavToggleText = document.createTextNode(NavigationBarShow);
if ( hasClass( NavChild, 'NavPic' ) || hasClass( NavChild, 'NavContent' ) ) {
if (NavChild.style.display == 'none') {
break;
NavToggleText = document.createTextNode(NavigationBarShow);
}
break;
}
}
}

}
}
NavToggle.appendChild(NavToggleText);
// Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
NavToggle.appendChild(NavToggleText);
for (
var j = 0;
// Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
for(
j < NavFrame.childNodes.length;
var j=0;
j++) {
j < NavFrame.childNodes.length;
if (hasClass(NavFrame.childNodes[j], "NavHead")) {
j++
NavFrame.childNodes[j].appendChild(NavToggle);
) {
}
}
if (hasClass(NavFrame.childNodes[j], "NavHead")) {
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
NavFrame.childNodes[j].appendChild(NavToggle);
}
}
}
}
}
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);

}
addOnloadHook(createNavigationBarToggleButton);
}

}
addOnloadHook( createNavigationBarToggleButton );
// **************************************************
// **************************************************
// Experimental javascript countdown timer (Splarka)
// Experimental javascript countdown timer (Splarka)
Line 275: Line 269:
// </span>
// </span>
// <span class="nocountdown">Javascript disabled.</span>
// <span class="nocountdown">Javascript disabled.</span>

function updatetimer(i) {
function updatetimer(i) {
var now = new Date();
var now = new Date();
var then = timers[i].eventdate;
var then = timers[i].eventdate;
var diff = count=Math.floor((then.getTime()-now.getTime())/1000);
var diff = count = Math.floor((then.getTime() - now.getTime()) / 1000);

// catch bad date strings
// catch bad date strings
if(isNaN(diff)) {
if (isNaN(diff)) {
timers[i].firstChild.nodeValue = '** ' + timers[i].eventdate + ' **' ;
timers[i].firstChild.nodeValue = '** ' + timers[i].eventdate + ' **';
return;
return;
}
}

// determine plus/minus
// determine plus/minus
if(diff<0) {
if (diff < 0) {
diff = -diff;
diff = -diff;
var tpm = 'T plus ';
var tpm = 'T plus ';
} else {
} else {
var tpm = '';
var tpm = '';
}
}

// calcuate the diff
// calcuate the diff
var left = (diff%60) + ' seconds';
var left = (diff % 60) + ' seconds';
diff=Math.floor(diff/60);
diff = Math.floor(diff / 60);
if(diff > 0) left = (diff%60) + ' minutes ' + left;
if (diff > 0) left = (diff % 60) + ' minutes ' + left;
diff=Math.floor(diff/60);
diff = Math.floor(diff / 60);
if(diff > 0) left = (diff%24) + ' hours ' + left;
if (diff > 0) left = (diff % 24) + ' hours ' + left;
diff=Math.floor(diff/24);
diff = Math.floor(diff / 24);
if(diff > 0) left = diff + ' days ' + left
if (diff > 0) left = diff + ' days ' + left
var diffing = count=Math.floor((then.getTime()-now.getTime())/1000);
var diffing = count = Math.floor((then.getTime() - now.getTime()) / 1000);
if(diffing<0) {
if (diffing < 0) {
timers[i].firstChild.nodeValue = 'Timer has expired';
timers[i].firstChild.nodeValue = 'Timer has expired';
} else {
} else {
timers[i].firstChild.nodeValue = tpm + left;
timers[i].firstChild.nodeValue = tpm + left;
}
}


// a setInterval() is more efficient, but calling setTimeout()
// a setInterval() is more efficient, but calling setTimeout()
// makes errors break the script rather than infinitely recurse
// makes errors break the script rather than infinitely recurse
timeouts[i] = setTimeout('updatetimer(' + i + ')',1000);
timeouts[i] = setTimeout('updatetimer(' + i + ')', 1000);
}
}

function checktimers() {
function checktimers() {
//hide 'nocountdown' and show 'countdown'
//hide 'nocountdown' and show 'countdown'
var nocountdowns = getElementsByClassName(document, 'span', 'nocountdown');
var nocountdowns = getElementsByClassName(document, 'span', 'nocountdown');
for(var i in nocountdowns) nocountdowns[i].style.display = 'none'
for (var i in nocountdowns) nocountdowns[i].style.display = 'none'
var countdowns = getElementsByClassName(document, 'span', 'countdown');
var countdowns = getElementsByClassName(document, 'span', 'countdown');
for(var i in countdowns) countdowns[i].style.display = 'inline'
for (var i in countdowns) countdowns[i].style.display = 'inline'

//set up global objects timers and timeouts.
//set up global objects timers and timeouts.
timers = getElementsByClassName(document, 'span', 'countdowndate'); //global
timers = getElementsByClassName(document, 'span', 'countdowndate'); //global
timeouts = new Array(); // generic holder for the timeouts, global
timeouts = new Array(); // generic holder for the timeouts, global
if(timers.length == 0) return;
if (timers.length == 0) return;
for(var i in timers) {
for (var i in timers) {
timers[i].eventdate = new Date(timers[i].firstChild.nodeValue);
timers[i].eventdate = new Date(timers[i].firstChild.nodeValue);
updatetimer(i); //start it up
updatetimer(i); //start it up
}
}
}
}
addOnloadHook(checktimers);
addOnloadHook(checktimers);

// **************************************************
// **************************************************
// - end - Experimental javascript countdown timer
// - end - Experimental javascript countdown timer
// **************************************************
// **************************************************
// **************************************************
// **************************************************
// Hide namespaces in categories (Splarka)
// Hide namespaces in categories (Splarka)
// **************************************************
// **************************************************
// A quick script to hide namespace prefixes in category lists. Just add
// A quick script to hide namespace prefixes in category lists. Just add
// <div id="catnoprefix" style="display:none;"></div>
// <div id="catnoprefix" style="display:none;"></div>
// to the category description page to activate it.
// to the category description page to activate it.

function catprefix() {
function catprefix() {
if(!document.getElementById('catnoprefix')) return
if (!document.getElementById('catnoprefix')) return var anchors = document.getElementById('mw-pages').getElementsByTagName('a');
for (var i = 0; i < anchors.length; i++) {
var anchors = document.getElementById('mw-pages').getElementsByTagName('a');
if (anchors[i].firstChild.nodeValue.indexOf(':') != -1) {
for(var i=0;i < anchors.length;i++) {
if(anchors[i].firstChild.nodeValue.indexOf(':') != -1) {
anchors[i].firstChild.nodeValue = anchors[i].firstChild.nodeValue.substring(anchors[i].firstChild.nodeValue.indexOf(':') + 1);
}
anchors[i].firstChild.nodeValue = anchors[i].firstChild.nodeValue.substring(anchors[i].firstChild.nodeValue.indexOf(':')+1);
}
}
}
}
}
addOnloadHook(catprefix)
addOnloadHook(catprefix)

// **************************************************
// **************************************************
// - end - Hide namespaces in categories
// - end - Hide namespaces in categories
// **************************************************
// **************************************************
/* Username replace feature
/* Username replace feature
* Inserts viewing user's name into <span class="insertusername"></span>
* Inserts viewing user's name into <span class="insertusername"></span>
Line 366: Line 357:
* This (jQuery) version by [[wikia:User:Joeyaa]], written to be backwards compatible
* This (jQuery) version by [[wikia:User:Joeyaa]], written to be backwards compatible
*/
*/

if (wgUserName != 'null') {
if (wgUserName != 'null') {
$('.insertusername').html(wgUserName);
$('.insertusername').html(wgUserName);
}
}

/* Custom edit buttons
/* Custom edit buttons
See http://help.wikia.com/wiki/Help:Custom_edit_buttons
See http://help.wikia.com/wiki/Help:Custom_edit_buttons
*/
*/
if (mwCustomEditButtons) {
if (mwCustomEditButtons) {
mwCustomEditButtons[mwCustomEditButtons.length] = {
mwCustomEditButtons[mwCustomEditButtons.length] = {
"imageFile": "http://images3.wikia.nocookie.net/central/images/1/11/Btn_toolbar_liste.png",
"imageFile": "http://images3.wikia.nocookie.net/central/images/1/11/Btn_toolbar_liste.png",
"speedTip": "List",
"speedTip": "List",
"tagOpen": "\n* ",
"tagOpen": "\n* ",
"tagClose": "\n* Element B\n* Element C",
"tagClose": "\n* Element B\n* Element C",
"sampleText": "Element A"};
"sampleText": "Element A"
}
};
}
if (mwCustomEditButtons) {
mwCustomEditButtons[mwCustomEditButtons.length] = {
if (mwCustomEditButtons) {
mwCustomEditButtons[mwCustomEditButtons.length] = {
"imageFile": "http://images4.wikia.nocookie.net/central/images/8/88/Btn_toolbar_enum.png",
"imageFile": "http://images4.wikia.nocookie.net/central/images/8/88/Btn_toolbar_enum.png",
"speedTip": "Numbering",
"tagOpen": "\n# ",
"speedTip": "Numbering",
"tagClose": "\n# Element 2\n# Element 3",
"tagOpen": "\n# ",
"sampleText": "Element 1"};
"tagClose": "\n# Element 2\n# Element 3",
"sampleText": "Element 1"
}
};
if (mwCustomEditButtons) {
}
mwCustomEditButtons[mwCustomEditButtons.length] = {
if (mwCustomEditButtons) {
"imageFile": "http://images4.wikia.nocookie.net/central/images/f/fd/Button_blockquote.png",
mwCustomEditButtons[mwCustomEditButtons.length] = {
"speedTip": "Blockquote",
"imageFile": "http://images4.wikia.nocookie.net/central/images/f/fd/Button_blockquote.png",
"tagOpen": "<blockquote>",
"tagClose": "</blockquote>",
"speedTip": "Blockquote",
"sampleText": "Insert text"};
"tagOpen": "<blockquote>",
"tagClose": "</blockquote>",
}
"sampleText": "Insert text"
if (mwCustomEditButtons) {
};
mwCustomEditButtons[mwCustomEditButtons.length] = {
}
"imageFile": "http://images2.wikia.nocookie.net/central/images/7/74/Button_comment.png",
if (mwCustomEditButtons) {
"speedTip": "Note",
mwCustomEditButtons[mwCustomEditButtons.length] = {
"tagOpen": "{{Info|Insert title|",
"imageFile": "http://images2.wikia.nocookie.net/central/images/7/74/Button_comment.png",
"tagClose": "}}",
"sampleText": "Insert text"};
"speedTip": "Note",
"tagOpen": "{{Info|Insert title|",
}
"tagClose": "}}",
if (mwCustomEditButtons) {
"sampleText": "Insert text"
mwCustomEditButtons[mwCustomEditButtons.length] = {
};
"imageFile": "http://images2.wikia.nocookie.net/central/images/b/b4/Button_category03.png",
}
"speedTip": "Category",
if (mwCustomEditButtons) {
"tagOpen": "[[Category:",
mwCustomEditButtons[mwCustomEditButtons.length] = {
"tagClose": "]]",
"imageFile": "http://images2.wikia.nocookie.net/central/images/b/b4/Button_category03.png",
"sampleText": "Category name"};
"speedTip": "Category",
}
"tagOpen": "[[Category:",
if (mwCustomEditButtons) {
"tagClose": "]]",
mwCustomEditButtons[mwCustomEditButtons.length] = {
"sampleText": "Category name"
"imageFile": "http://images.wikia.com/central/images/c/c8/Button_redirect.png",
};
"speedTip": "Redirect",
}
"tagOpen": "#REDIRECT [[",
if (mwCustomEditButtons) {
"tagClose": "]]",
mwCustomEditButtons[mwCustomEditButtons.length] = {
"sampleText": "Insert text"};
"imageFile": "http://images.wikia.com/central/images/c/c8/Button_redirect.png",
}
"speedTip": "Redirect",
if (mwCustomEditButtons) {
"tagOpen": "#REDIRECT [[",
mwCustomEditButtons[mwCustomEditButtons.length] = {
"tagClose": "]]",
"imageFile": "http://images2.wikia.nocookie.net/central/images/1/12/Button_gallery.png",
"speedTip": "Picture gallery",
"sampleText": "Insert text"
};
"tagOpen": "\n<gallery>\nImage:",
}
"tagClose": "|[[The Sims Wiki]] Logo\nImage:Wiki.png|[[The Sims Wiki]] Logo\nImage:Wiki.png|Eine [[The Sims Wiki]] Logo\n<\/gallery>",
if (mwCustomEditButtons) {
"sampleText": "Wiki.png"};
mwCustomEditButtons[mwCustomEditButtons.length] = {
}
"imageFile": "http://images2.wikia.nocookie.net/central/images/1/12/Button_gallery.png",
if (mwCustomEditButtons) {
"speedTip": "Picture gallery",
mwCustomEditButtons[mwCustomEditButtons.length] = {
"tagOpen": "\n<gallery>\nImage:",
"imageFile": "http://images1.wikia.nocookie.net/central/images/3/3b/Button_template_alt.png",
"tagClose": "|[[The Sims Wiki]] Logo\nImage:Wiki.png|[[The Sims Wiki]] Logo\nImage:Wiki.png|Eine [[The Sims Wiki]] Logo\n<\/gallery>",
"speedTip": "Template",
"tagOpen": "{{",
"sampleText": "Wiki.png"
"tagClose": "}}",
};
}
"sampleText": "Template"};
if (mwCustomEditButtons) {
}
mwCustomEditButtons[mwCustomEditButtons.length] = {
"imageFile": "http://images1.wikia.nocookie.net/central/images/3/3b/Button_template_alt.png",
"speedTip": "Template",
"tagOpen": "{{",
"tagClose": "}}",
"sampleText": "Template"
};
}

/* Tooltip script begin */
/* Tooltip script begin */

var $tfb;
var $tfb;

// hides the tooltip
// hides the tooltip


function hideTip() {
function hideTip() {
$tfb.html("").removeClass("tooltip-ready").addClass("hidden").css("visibility","hidden");
$tfb.html("").removeClass("tooltip-ready").addClass("hidden").css("visibility", "hidden");
}
}

// displays the tooltip
// displays the tooltip


function displayTip(e) {
function displayTip(e) {
$tfb.not(":empty").removeClass("hidden").addClass("tooltip-ready");
$tfb.not(":empty").removeClass("hidden").addClass("tooltip-ready");
moveTip(e);
moveTip(e);
$tfb.not(":empty").css("visibility","visible");
$tfb.not(":empty").css("visibility", "visible");
}
}

// moves the tooltip
// moves the tooltip


function moveTip(e) {
function moveTip(e) {
var newTop = e.clientY + ((e.clientY > ($(window).height()/2)) ? -($tfb.not(".hidden").innerHeight()+20):20);
var newTop = e.clientY + ((e.clientY > ($(window).height() / 2)) ? -($tfb.not(".hidden").innerHeight() + 20) : 20);
var newLeft = e.clientX + ((e.clientX > ($(window).width()/2)) ? -($tfb.not(".hidden").innerWidth()+20):20);
var newLeft = e.clientX + ((e.clientX > ($(window).width() / 2)) ? -($tfb.not(".hidden").innerWidth() + 20) : 20);
$tfb.not(".hidden").css({"position":"fixed","top":newTop + "px","left":newLeft + "px"});
$tfb.not(".hidden").css({
"position": "fixed",
"top": newTop + "px",
"left": newLeft + "px"
});
}
}

// AJAX tooltips
// AJAX tooltips


function showTip(e) {
function showTip(e) {
$t=$(this);
$t = $(this);
$p=$t.parent();
$p = $t.parent();
if ($p.hasClass("selflink")==false) {
if ($p.hasClass("selflink") == false) {
$t.removeAttr("title");
$t.removeAttr("title");
$p.removeAttr("title");
$p.removeAttr("title");
$tfb.load("/"+$t.data("tt").replace(/ /g,"_").replace(/\?/g,"%3F")+"?action=render div.tooltip-content",function () {
$tfb.load("/" + $t.data("tt").replace(/ /g, "_").replace(/\?/g, "%3F") + "?action=render div.tooltip-content", function() {
if ($tfb.html() == "") $tfb.html('<div class="tooltip-content"><b>Error</b><br />This target either has no tooltip<br />or was not intended to have one.</div>');
if ($tfb.html() == "") $tfb.html('<div class="tooltip-content"><b>Error</b><br />This target either has no tooltip<br />or was not intended to have one.</div>');
$tfb.find(".tooltip-content").css("display","");
$tfb.find(".tooltip-content").css("display", "");
displayTip(e);
displayTip(e);
});
});
}
}
}
}

function bindTT() {
function bindTT() {
$t=$(this);
$t = $(this);
$p=$t.parent();
$p = $t.parent();
if ($p.hasClass("selflink") == false) $t.data("tt", $p.attr("title").replace(" (page does not exist)","").replace("?","%3F")).mouseover(showTip).mouseout(hideTip).mousemove(moveTip);
if ($p.hasClass("selflink") == false) $t.data("tt", $p.attr("title").replace(" (page does not exist)", "").replace("?", "%3F")).mouseover(showTip).mouseout(hideTip).mousemove(moveTip);
}
}

// check to see if it is active then do it
// check to see if it is active then do it
$(function() {
$(function() {
$("#bodyContent").mouseover(hideTip);
$("#bodyContent").mouseover(hideTip);
$("#bodyContent").append('<div id="tfb" class="htt"></div>');
$("#bodyContent").append('<div id="tfb" class="htt"></div>');
$tfb = $("#tfb");
$tfb = $("#tfb");
$("#bodyContent span.ajaxttlink").each(bindTT);
$("#bodyContent span.ajaxttlink").each(bindTT);
});
});

/* Tooltip script end */
/* Tooltip script end */

/* PCJ's dup finder start */
/* PCJ's dup finder start */
dil = new Array();
dil = new Array();

function findDupImages(gf) {
function findDupImages(gf) {
output = "";
output = "";
url = "/api.php?action=query&generator=allimages&prop=duplicatefiles&gailimit=500&format=json";
url = "/api.php?action=query&generator=allimages&prop=duplicatefiles&gailimit=500&format=json";
if (gf) url += "&gaifrom=" + gf;
if (gf) url += "&gaifrom=" + gf;
$.getJSON(url,function (data) {
$.getJSON(url, function(data) {
if (data.query) {
if (data.query) {
pages = data.query.pages;
pages = data.query.pages;
for (pageID in pages) {
for (pageID in pages) {
dils = ","+dil.join();
dils = "," + dil.join();
if (dils.indexOf(","+pages[pageID].title) == -1 && pages[pageID].title.indexOf("File::") == -1 && pages[pageID].duplicatefiles) {
if (dils.indexOf("," + pages[pageID].title) == -1 && pages[pageID].title.indexOf("File::") == -1 && pages[pageID].duplicatefiles) {
output += "<h3><a href='/" + pages[pageID].title + "'>"+pages[pageID].title+"</a></h3>\n<ul>\n";
output += "<h3><a href='/" + pages[pageID].title + "'>" + pages[pageID].title + "</a></h3>\n<ul>\n";
for (x=0;x<pages[pageID].duplicatefiles.length;x++) {
for (x = 0; x < pages[pageID].duplicatefiles.length; x++) {
output += "<li><a href='/File:" + pages[pageID].duplicatefiles[x].name + "'>File:"+pages[pageID].duplicatefiles[x].name+"</a></li>\n";
output += "<li><a href='/File:" + pages[pageID].duplicatefiles[x].name + "'>File:" + pages[pageID].duplicatefiles[x].name + "</a></li>\n";
dil.push("File:"+pages[pageID].duplicatefiles[x].name.replace(/_/g," "));
dil.push("File:" + pages[pageID].duplicatefiles[x].name.replace(/_/g, " "));
}
}
output += "</ul>\n\n"
output += "</ul>\n\n"
}
}
$("#mw-dupimages").append(output);
if (data["query-continue"]) setTimeout("findDupImages('" + data["query-continue"].allimages.gaifrom + "');", 5000);
}
});
}
}
$(function() {
}
$("#mw-dupimages").append(output);
if ($("#mw-dupimages").length) findDupImages();
}); /* PCJ's dup finder end */
if (data["query-continue"]) setTimeout("findDupImages('"+data["query-continue"].allimages.gaifrom+"');",5000);

}
});
}
$(function () { if ($("#mw-dupimages").length) findDupImages(); });
/* PCJ's dup finder end */
/* Move SiteNotice
/* Move SiteNotice
* By w:c:avatar:Joeyaa
* By w:c:avatar:Joeyaa
* Requires #mw-dismissable-notice span {display:none;} in css
* Requires #mw-dismissable-notice span {display:none;} in css
*/
*/

$('#sitenotice-dismiss').html('[<a href="javascript:dismissNotice();">dismiss</a>]');
$('#sitenotice-dismiss').html('[<a href="javascript:dismissNotice();">dismiss</a>]');

// ============================================================
// ============================================================
// BEGIN Template:Era
// BEGIN Template:Era
// ============================================================
// ============================================================
// Description: Add game icons to top right corner of articles
// Description: Add game icons to top right corner of articles
// Credit: User:Mirar (based on Template:Eras by User:Sikon), copied from fallout.wikia
// Credit: User:Mirar (based on Template:Eras by User:Sikon), copied from fallout.wikia

function addTitleGames() {
function addTitleGames() {
var titleDiv = document.getElementById("title-games");
var titleDiv = document.getElementById("title-games");
if (titleDiv != null && titleDiv != undefined)
if (titleDiv != null && titleDiv != undefined) {
var content = document.getElementById('article');
{
if (!content) {
var content = document.getElementById('article');
if (!content) {
var content = document.getElementById('content');
}
var content = document.getElementById('content');

}
if (content) {
if (content) {
var hs = content.getElementsByTagName('h1');
var hs = content.getElementsByTagName('h1');
var firstHeading;
var firstHeading;
for (var i = 0; i < hs.length; i++) {
for (var i = 0; i < hs.length; i++)
if ((' ' + hs[i].className + ' ').indexOf(' firstHeading ') != -1) {
{
firstHeading = hs[i];
if ( (' '+hs[i].className+' ').indexOf(' firstHeading ') != -1){
break;
firstHeading=hs[i];
}
break;
}
}

}
var cloneNode = titleDiv.cloneNode(true);
firstHeading.insertBefore(cloneNode, firstHeading.childNodes[0]);
var cloneNode = titleDiv.cloneNode(true);
cloneNode.style.display = "block";
firstHeading.insertBefore(cloneNode, firstHeading.childNodes[0]);
cloneNode.style.display = "block";
cloneNode.style.visibility = "visible";
cloneNode.style.visibility = "visible";
if (skin != "monaco") {
if (skin != "monaco") {
cloneNode.style.marginTop = "-11px";
cloneNode.style.marginTop = "-11px";
}
}
}
}
}
}
}
}

addOnloadHook( addTitleGames );
addOnloadHook(addTitleGames);

//Facebook 'Like Box'
//Facebook 'Like Box'
//Graciously (and unknowingly) provided by The Spanish 'Simspedia'
//Graciously (and unknowingly) provided by The Spanish 'Simspedia'

function fBox() {
function fBox() {
$('#fbox').append('<iframe marginheight="0" marginwidth="0" src="http://www.facebook.com/connect/connect.php?id=126686564044617&amp;connections=10" align="top" frameborder="0" width="300" height="250" scrolling="no" />');
$('#fbox').append('<iframe marginheight="0" marginwidth="0" src="http://www.facebook.com/connect/connect.php?id=126686564044617&amp;connections=10" align="top" frameborder="0" width="300" height="250" scrolling="no" />');
}
}

$(fBox);
$(fBox);


// *************************************************
// *************************************************
// Pagetitle rewrite
// Pagetitle rewrite
Line 583: Line 593:
// Rewrites the page's title, used by Template:Title
// Rewrites the page's title, used by Template:Title
// *************************************************
// *************************************************
$(function() {
var newTitle = $("#title-meta").html();
$(function(){
if (!newTitle) return;
var newTitle = $("#title-meta").html();
var edits = $("#user_masthead_since").text();
if (!newTitle) return;
$(".firstHeading,#WikiaUserPagesHeader h1,#WikiaPageHeader h1").html(newTitle);
var edits = $("#user_masthead_since").text();
$(".#user_masthead_head h2").html(newTitle + "<small id='user_masthead_since'>" + edits + "</small>");
$(".firstHeading,#WikiaUserPagesHeader h1,#WikiaPageHeader h1").html(newTitle);
$(".#user_masthead_head h2").html(newTitle + "<small id='user_masthead_since'>" + edits + "</small>");
});
});


/* Ajax Auto-Refresh (courtesy pcj) */
/* Ajax Auto-Refresh (courtesy pcj) */
/* Auto updating recent changes opt-in
/* Auto updating recent changes opt-in
* See w:c:dev:AjaxRC for info & attribution
* See w:c:dev:AjaxRC for info & attribution
*/
*/

AjaxRCRefreshText = 'Auto-refresh';
AjaxRCRefreshText = 'Auto-refresh';
AjaxRCRefreshHoverText = 'Automatically refresh the page';
AjaxRCRefreshHoverText = 'Automatically refresh the page';
ajaxPages = ["Special:RecentChanges","Special:WikiActivity"];
ajaxPages = ["Special:RecentChanges", "Special:WikiActivity"];
importScriptPage('AjaxRC/code.js', 'dev');
importScriptPage('AjaxRC/code.js', 'dev');

// *************************************************
// *************************************************
// change profile labels on individual pages
// change profile labels on individual pages
//
//
//
//
// *************************************************
// *************************************************
if (wgCanonicalNamespace === "User_talk" || wgCanonicalNamespace === "User") {
if (document.getElementById('UserProfileMasthead').getElementsByClassName('group').length === 1) {
if (wgCanonicalNamespace === "User_talk" || wgCanonicalNamespace === "User" ){
if ( document.getElementById('UserProfileMasthead').getElementsByClassName('group').length === 1 ){
if (document.getElementById('adm-changetitle') !== null) {
if (document.getElementById('adm-changetitle') !== null ){
document.getElementById('UserProfileMasthead').getElementsByClassName('group')[0].innerHTML = document.getElementById('adm-changetitle').innerHTML;
}
document.getElementById('UserProfileMasthead').getElementsByClassName('group')[0].innerHTML = document.getElementById('adm-changetitle').innerHTML;
}
}
}
}
}

/* lock blog comments for blogs that haven't been commented on for more than 30 days.
/* lock blog comments for blogs that haven't been commented on for more than 30 days.
by: [[User:Joeyaa|Joey Ahmadi]]
by: [[User:Joeyaa|Joey Ahmadi]]
*/
*/

$(function() {
$(function() {
if (wgNamespaceNumber == 500 && $('#article-comments-ul li').size() > 1) {
if (wgNamespaceNumber == 500 && $('#article-comments-ul li').size() > 1) {
var then = $('#article-comments-ul > .SpeechBubble:first .permalink').attr('href');
var then = $('#article-comments-ul > .SpeechBubble:first .permalink').attr('href');
then = new String(then.match(/\d{8}/));
then = new String(then.match(/\d{8}/));
var monthnames = ['January','February','March','April','May','June','July',
var monthnames = ['January', 'February', 'March', 'April', 'May', 'June', 'July',
'August','September','October','November','December'];
'August', 'September', 'October', 'November', 'December'];
var year = then.match(/^\d{4}/);
var year = then.match(/^\d{4}/);
var month = then.substring(4,6);
var month = then.substring(4, 6);
month--;
month--;
month= monthnames[month];
month = monthnames[month];
var day = then.match(/\d{2}$/);
var day = then.match(/\d{2}$/);
then = new Date(month+''+day+', '+year);
then = new Date(month + '' + day + ', ' + year);
var old = parseInt(now - then);
var old = parseInt(now - then);
old = Math.floor(old/(1000*60*60*24));
old = Math.floor(old / (1000 * 60 * 60 * 24));
if (old > 30) {
if (old > 30) {
$('#article-comm').attr('disabled','disabled').text('This blog post hasn\'t been commented on for over 30 days. There is no need to comment.');
$('#article-comm').attr('disabled', 'disabled').text('This blog post hasn\'t been commented on for over 30 days. There is no need to comment.');
$('#article-comm-submit').attr('disabled','disabled');
$('#article-comm-submit').attr('disabled', 'disabled');
$('.article-comm-reply').remove();
$('.article-comm-reply').remove();
}
}
}
}
});
});



Revision as of 19:36, 16 August 2012

// 00:51, September 26, 2011 (UTC)
// <source lang="JavaScript">
/* Any JavaScript here will be loaded for all users on every page load. */

/* IRC login */
importScript('MediaWiki:Common.js/irclogin.js');

/* Remove report script */
importScriptPage('User:GEORGIEGIBBONS/QReportAdder.js', 'sims');

/* Test if an element has a certain class **************************************
  *
  * Description: Uses regular expressions and caching for better performance.
  * Taken from Wikipedia's Common.js.
  */

/* ######################################################################## */
/* ### TITLE ICONS (Template:Games)                                     ### */
/* ### ---------------------------------------------------------------- ### */
/* ### Description: Add icons to article title                          ### */
/* ### Credit:      User:Porter21                                       ### */
/* ######################################################################## */

function addTitleIcons() {
    var iconBar = $('#va-titleicons');
    var previewBar = $('#va-titleicons-preview');

    if (skin != 'monobook' && skin != 'oasis' && skin != 'wikia') {
        return;
    }

    if (iconBar.length > 0 && $('a', previewBar).length > 0) {
        if (skin == 'oasis' || skin == 'wikia') {
            var articleDiv = $('#WikiaArticle');

            if (articleDiv.length > 0) {
                iconBar.css('display', 'block').prependTo(articleDiv);
            }
        } else if (skin == 'monobook') {
            var firstHeading = $('#firstHeading').css('position', 'relative');

            if (firstHeading.length > 0) {
                iconBar.css('display', 'block').appendTo(firstHeading.css('padding-right', previewBar.width() + 25));
            }
        }

        $('#va-titleicons-more').append('<img width="0" height="0" class="va-titleicons-chevron" src="http://images.wikia.com/common/skins/common/blank.gif">');

        iconBar.hover(
        function() {
            $(this).addClass('va-titleicons-hover');
        }, function() {
            $(this).removeClass('va-titleicons-hover');
        });
    }
}

// Standard Edit Summaries
importScript('MediaWiki:Common.js/standardeditsummaries.js');
// END of Standard Edit Summaries
/** Collapsible tables *********************************************************
 *
 *  Description: Allows tables to be collapsed, showing only the header. See
 *               [[Wikipedia:NavFrame]].
 *  Taken from Wikipedia's Common.js.
 */

var hasClass = (function() {
    var reCache = {};
    return function(element, className) {
        return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
    };
})();

var autoCollapse = 2;
var collapseCaption = "hide";
var expandCaption = "show";

function collapseTable(tableIndex) {
    var Button = document.getElementById("collapseButton" + tableIndex);
    var Table = document.getElementById("collapsibleTable" + tableIndex);

    if (!Table || !Button) {
        return false;
    }

    var Rows = Table.rows;

    if (Button.firstChild.data == collapseCaption) {
        for (var i = 1; i < Rows.length; i++) {
            Rows[i].style.display = "none";
        }
        Button.firstChild.data = expandCaption;
    } else {
        for (var i = 1; i < Rows.length; i++) {
            Rows[i].style.display = Rows[0].style.display;
        }
        Button.firstChild.data = collapseCaption;
    }
}

function createCollapseButtons() {
    var tableIndex = 0;
    var NavigationBoxes = new Object();
    var Tables = document.getElementsByTagName("table");

    for (var i = 0; i < Tables.length; i++) {
        if (hasClass(Tables[i], "collapsible")) {

            /* only add button and increment count if there is a header row to work with */
            var HeaderRow = Tables[i].getElementsByTagName("tr")[0];
            if (!HeaderRow) continue;
            var Header = HeaderRow.getElementsByTagName("th")[0];
            if (!Header) continue;

            NavigationBoxes[tableIndex] = Tables[i];
            Tables[i].setAttribute("id", "collapsibleTable" + tableIndex);

            var Button = document.createElement("span");
            var ButtonLink = document.createElement("a");
            var ButtonText = document.createTextNode(collapseCaption);

            Button.style.styleFloat = "right";
            Button.style.cssFloat = "right";
            Button.style.fontWeight = "normal";
            Button.style.textAlign = "right";
            Button.style.width = "2em";

            ButtonLink.style.color = Header.style.color;
            ButtonLink.setAttribute("id", "collapseButton" + tableIndex);
            ButtonLink.setAttribute("href", "javascript:collapseTable(" + tableIndex + ");");
            ButtonLink.appendChild(ButtonText);

            Button.appendChild(document.createTextNode("["));
            Button.appendChild(ButtonLink);
            Button.appendChild(document.createTextNode("]"));

            Header.insertBefore(Button, Header.childNodes[0]);
            tableIndex++;
        }
    }

    for (var i = 0; i < tableIndex; i++) {
        if (hasClass(NavigationBoxes[i], "collapsed") || (tableIndex >= autoCollapse && hasClass(NavigationBoxes[i], "autocollapse"))) {
            collapseTable(i);
        }
    }
}

addOnloadHook(createCollapseButtons);

importScriptPage('EditIntroButton/code.js', 'dev');

importScriptPage('PurgeButton/code.js', 'dev');

/** Dynamic Navigation Bars (experimental) *************************************
 *
 *  Description: See [[Wikipedia:NavFrame]].
 *  Taken from Wikipedia's Common.js.
 */

// set up the words in your language
var NavigationBarHide = '[' + collapseCaption + ']';
var NavigationBarShow = '[' + expandCaption + ']';

// shows and hides content and picture (if available) of navigation bars
// Parameters:
//     indexNavigationBar: the index of navigation bar to be toggled


function toggleNavigationBar(indexNavigationBar) {
    var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
    var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);

    if (!NavFrame || !NavToggle) {
        return false;
    }

    // if shown now
    if (NavToggle.firstChild.data == NavigationBarHide) {
        for (
        var NavChild = NavFrame.firstChild;
        NavChild != null;
        NavChild = NavChild.nextSibling) {
            if (hasClass(NavChild, 'NavPic')) {
                NavChild.style.display = 'none';
            }
            if (hasClass(NavChild, 'NavContent')) {
                NavChild.style.display = 'none';
            }
        }
        NavToggle.firstChild.data = NavigationBarShow;

        // if hidden now
    } else if (NavToggle.firstChild.data == NavigationBarShow) {
        for (
        var NavChild = NavFrame.firstChild;
        NavChild != null;
        NavChild = NavChild.nextSibling) {
            if (hasClass(NavChild, 'NavPic')) {
                NavChild.style.display = 'block';
            }
            if (hasClass(NavChild, 'NavContent')) {
                NavChild.style.display = 'block';
            }
        }
        NavToggle.firstChild.data = NavigationBarHide;
    }
}

// adds show/hide-button to navigation bars


function createNavigationBarToggleButton() {
    var indexNavigationBar = 0;
    // iterate over all < div >-elements
    var divs = document.getElementsByTagName("div");
    for (
    var i = 0;
    NavFrame = divs[i];
    i++) {
        // if found a navigation bar
        if (hasClass(NavFrame, "NavFrame")) {

            indexNavigationBar++;
            var NavToggle = document.createElement("a");
            NavToggle.className = 'NavToggle';
            NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
            NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');

            var NavToggleText = document.createTextNode(NavigationBarHide);
            for (
            var NavChild = NavFrame.firstChild;
            NavChild != null;
            NavChild = NavChild.nextSibling) {
                if (hasClass(NavChild, 'NavPic') || hasClass(NavChild, 'NavContent')) {
                    if (NavChild.style.display == 'none') {
                        NavToggleText = document.createTextNode(NavigationBarShow);
                        break;
                    }
                }
            }

            NavToggle.appendChild(NavToggleText);
            // Find the NavHead and attach the toggle link (Must be this complicated because Moz's firstChild handling is borked)
            for (
            var j = 0;
            j < NavFrame.childNodes.length;
            j++) {
                if (hasClass(NavFrame.childNodes[j], "NavHead")) {
                    NavFrame.childNodes[j].appendChild(NavToggle);
                }
            }
            NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
        }
    }
}

addOnloadHook(createNavigationBarToggleButton);

// **************************************************
// Experimental javascript countdown timer (Splarka)
// Version 0.0.3
// **************************************************
//
// Usage example:
//  <span class="countdown" style="display:none;">
//  Only <span class="countdowndate">January 01 2007 00:00:00 PST</span> until New years.
//  </span>
//  <span class="nocountdown">Javascript disabled.</span>

function updatetimer(i) {
    var now = new Date();
    var then = timers[i].eventdate;
    var diff = count = Math.floor((then.getTime() - now.getTime()) / 1000);

    // catch bad date strings
    if (isNaN(diff)) {
        timers[i].firstChild.nodeValue = '** ' + timers[i].eventdate + ' **';
        return;
    }

    // determine plus/minus
    if (diff < 0) {
        diff = -diff;
        var tpm = 'T plus ';
    } else {
        var tpm = '';
    }

    // calcuate the diff
    var left = (diff % 60) + ' seconds';
    diff = Math.floor(diff / 60);
    if (diff > 0) left = (diff % 60) + ' minutes ' + left;
    diff = Math.floor(diff / 60);
    if (diff > 0) left = (diff % 24) + ' hours ' + left;
    diff = Math.floor(diff / 24);
    if (diff > 0) left = diff + ' days ' + left
    var diffing = count = Math.floor((then.getTime() - now.getTime()) / 1000);
    if (diffing < 0) {
        timers[i].firstChild.nodeValue = 'Timer has expired';
    } else {
        timers[i].firstChild.nodeValue = tpm + left;
    }


    // a setInterval() is more efficient, but calling setTimeout()
    // makes errors break the script rather than infinitely recurse
    timeouts[i] = setTimeout('updatetimer(' + i + ')', 1000);
}

function checktimers() {
    //hide 'nocountdown' and show 'countdown'
    var nocountdowns = getElementsByClassName(document, 'span', 'nocountdown');
    for (var i in nocountdowns) nocountdowns[i].style.display = 'none'
    var countdowns = getElementsByClassName(document, 'span', 'countdown');
    for (var i in countdowns) countdowns[i].style.display = 'inline'

    //set up global objects timers and timeouts.
    timers = getElementsByClassName(document, 'span', 'countdowndate'); //global
    timeouts = new Array(); // generic holder for the timeouts, global
    if (timers.length == 0) return;
    for (var i in timers) {
        timers[i].eventdate = new Date(timers[i].firstChild.nodeValue);
        updatetimer(i); //start it up
    }
}
addOnloadHook(checktimers);

// **************************************************
//  - end -  Experimental javascript countdown timer
// **************************************************
// **************************************************
// Hide namespaces in categories (Splarka)
// **************************************************
// A quick script to hide namespace prefixes in category lists. Just add
// <div id="catnoprefix" style="display:none;"></div>
// to the category description page to  activate it.

function catprefix() {
    if (!document.getElementById('catnoprefix')) return var anchors = document.getElementById('mw-pages').getElementsByTagName('a');
    for (var i = 0; i < anchors.length; i++) {
        if (anchors[i].firstChild.nodeValue.indexOf(':') != -1) {
            anchors[i].firstChild.nodeValue = anchors[i].firstChild.nodeValue.substring(anchors[i].firstChild.nodeValue.indexOf(':') + 1);
        }
    }
}
addOnloadHook(catprefix)

// **************************************************
//  - end -  Hide namespaces in categories
// **************************************************
/* Username replace feature
 * Inserts viewing user's name into <span class="insertusername"></span>
 * Put text inside the spans to be viewed by logged out users
 * Originally by [[wikia:User:Splarka|Splarka]], then by [[User:Spang|Spang]],
 * This (jQuery) version by [[wikia:User:Joeyaa]], written to be backwards compatible
 */

if (wgUserName != 'null') {
    $('.insertusername').html(wgUserName);
}

/* Custom edit buttons
See http://help.wikia.com/wiki/Help:Custom_edit_buttons
 */
if (mwCustomEditButtons) {
    mwCustomEditButtons[mwCustomEditButtons.length] = {
        "imageFile": "http://images3.wikia.nocookie.net/central/images/1/11/Btn_toolbar_liste.png",
        "speedTip": "List",
        "tagOpen": "\n* ",
        "tagClose": "\n* Element B\n* Element C",
        "sampleText": "Element A"
    };
}
if (mwCustomEditButtons) {
    mwCustomEditButtons[mwCustomEditButtons.length] = {
        "imageFile": "http://images4.wikia.nocookie.net/central/images/8/88/Btn_toolbar_enum.png",
        "speedTip": "Numbering",
        "tagOpen": "\n# ",
        "tagClose": "\n# Element 2\n# Element 3",
        "sampleText": "Element 1"
    };
}
if (mwCustomEditButtons) {
    mwCustomEditButtons[mwCustomEditButtons.length] = {
        "imageFile": "http://images4.wikia.nocookie.net/central/images/f/fd/Button_blockquote.png",
        "speedTip": "Blockquote",
        "tagOpen": "<blockquote>",
        "tagClose": "</blockquote>",
        "sampleText": "Insert text"
    };
}
if (mwCustomEditButtons) {
    mwCustomEditButtons[mwCustomEditButtons.length] = {
        "imageFile": "http://images2.wikia.nocookie.net/central/images/7/74/Button_comment.png",
        "speedTip": "Note",
        "tagOpen": "{{Info|Insert title|",
        "tagClose": "}}",
        "sampleText": "Insert text"
    };
}
if (mwCustomEditButtons) {
    mwCustomEditButtons[mwCustomEditButtons.length] = {
        "imageFile": "http://images2.wikia.nocookie.net/central/images/b/b4/Button_category03.png",
        "speedTip": "Category",
        "tagOpen": "[[Category:",
        "tagClose": "]]",
        "sampleText": "Category name"
    };
}
if (mwCustomEditButtons) {
    mwCustomEditButtons[mwCustomEditButtons.length] = {
        "imageFile": "http://images.wikia.com/central/images/c/c8/Button_redirect.png",
        "speedTip": "Redirect",
        "tagOpen": "#REDIRECT [[",
        "tagClose": "]]",
        "sampleText": "Insert text"
    };
}
if (mwCustomEditButtons) {
    mwCustomEditButtons[mwCustomEditButtons.length] = {
        "imageFile": "http://images2.wikia.nocookie.net/central/images/1/12/Button_gallery.png",
        "speedTip": "Picture gallery",
        "tagOpen": "\n<gallery>\nImage:",
        "tagClose": "|[[The Sims Wiki]] Logo\nImage:Wiki.png|[[The Sims Wiki]] Logo\nImage:Wiki.png|Eine [[The Sims Wiki]] Logo\n<\/gallery>",
        "sampleText": "Wiki.png"
    };
}
if (mwCustomEditButtons) {
    mwCustomEditButtons[mwCustomEditButtons.length] = {
        "imageFile": "http://images1.wikia.nocookie.net/central/images/3/3b/Button_template_alt.png",
        "speedTip": "Template",
        "tagOpen": "{{",
        "tagClose": "}}",
        "sampleText": "Template"
    };
}

/* Tooltip script begin */

var $tfb;

// hides the tooltip


function hideTip() {
    $tfb.html("").removeClass("tooltip-ready").addClass("hidden").css("visibility", "hidden");
}

// displays the tooltip


function displayTip(e) {
    $tfb.not(":empty").removeClass("hidden").addClass("tooltip-ready");
    moveTip(e);
    $tfb.not(":empty").css("visibility", "visible");
}

// moves the tooltip


function moveTip(e) {
    var newTop = e.clientY + ((e.clientY > ($(window).height() / 2)) ? -($tfb.not(".hidden").innerHeight() + 20) : 20);
    var newLeft = e.clientX + ((e.clientX > ($(window).width() / 2)) ? -($tfb.not(".hidden").innerWidth() + 20) : 20);
    $tfb.not(".hidden").css({
        "position": "fixed",
        "top": newTop + "px",
        "left": newLeft + "px"
    });
}

// AJAX tooltips


function showTip(e) {
    $t = $(this);
    $p = $t.parent();
    if ($p.hasClass("selflink") == false) {
        $t.removeAttr("title");
        $p.removeAttr("title");
        $tfb.load("/" + $t.data("tt").replace(/ /g, "_").replace(/\?/g, "%3F") + "?action=render div.tooltip-content", function() {
            if ($tfb.html() == "") $tfb.html('<div class="tooltip-content"><b>Error</b><br />This target either has no tooltip<br />or was not intended to have one.</div>');
            $tfb.find(".tooltip-content").css("display", "");
            displayTip(e);
        });
    }
}

function bindTT() {
    $t = $(this);
    $p = $t.parent();
    if ($p.hasClass("selflink") == false) $t.data("tt", $p.attr("title").replace(" (page does not exist)", "").replace("?", "%3F")).mouseover(showTip).mouseout(hideTip).mousemove(moveTip);
}

// check to see if it is active then do it
$(function() {
    $("#bodyContent").mouseover(hideTip);
    $("#bodyContent").append('<div id="tfb" class="htt"></div>');
    $tfb = $("#tfb");
    $("#bodyContent span.ajaxttlink").each(bindTT);
});

/* Tooltip script end */

/* PCJ's dup finder start */
dil = new Array();

function findDupImages(gf) {
    output = "";
    url = "/api.php?action=query&generator=allimages&prop=duplicatefiles&gailimit=500&format=json";
    if (gf) url += "&gaifrom=" + gf;
    $.getJSON(url, function(data) {
        if (data.query) {
            pages = data.query.pages;
            for (pageID in pages) {
                dils = "," + dil.join();
                if (dils.indexOf("," + pages[pageID].title) == -1 && pages[pageID].title.indexOf("File::") == -1 && pages[pageID].duplicatefiles) {
                    output += "<h3><a href='/" + pages[pageID].title + "'>" + pages[pageID].title + "</a></h3>\n<ul>\n";
                    for (x = 0; x < pages[pageID].duplicatefiles.length; x++) {
                        output += "<li><a href='/File:" + pages[pageID].duplicatefiles[x].name + "'>File:" + pages[pageID].duplicatefiles[x].name + "</a></li>\n";
                        dil.push("File:" + pages[pageID].duplicatefiles[x].name.replace(/_/g, " "));
                    }
                    output += "</ul>\n\n"
                }
            }
            $("#mw-dupimages").append(output);
            if (data["query-continue"]) setTimeout("findDupImages('" + data["query-continue"].allimages.gaifrom + "');", 5000);
        }
    });
}
$(function() {
    if ($("#mw-dupimages").length) findDupImages();
}); /* PCJ's dup finder end */

/* Move SiteNotice
 * By w:c:avatar:Joeyaa
 * Requires #mw-dismissable-notice span {display:none;} in css
 */

$('#sitenotice-dismiss').html('[<a href="javascript:dismissNotice();">dismiss</a>]');

// ============================================================
// BEGIN Template:Era
// ============================================================
// Description: Add game icons to top right corner of articles
// Credit:      User:Mirar (based on Template:Eras by User:Sikon), copied from fallout.wikia

function addTitleGames() {
    var titleDiv = document.getElementById("title-games");
    if (titleDiv != null && titleDiv != undefined) {
        var content = document.getElementById('article');
        if (!content) {
            var content = document.getElementById('content');
        }

        if (content) {
            var hs = content.getElementsByTagName('h1');
            var firstHeading;
            for (var i = 0; i < hs.length; i++) {
                if ((' ' + hs[i].className + ' ').indexOf(' firstHeading ') != -1) {
                    firstHeading = hs[i];
                    break;
                }
            }

            var cloneNode = titleDiv.cloneNode(true);
            firstHeading.insertBefore(cloneNode, firstHeading.childNodes[0]);
            cloneNode.style.display = "block";
            cloneNode.style.visibility = "visible";
            if (skin != "monaco") {
                cloneNode.style.marginTop = "-11px";
            }
        }
    }
}

addOnloadHook(addTitleGames);

//Facebook 'Like Box'
//Graciously (and unknowingly) provided by The Spanish 'Simspedia'

function fBox() {
    $('#fbox').append('<iframe marginheight="0" marginwidth="0" src="http://www.facebook.com/connect/connect.php?id=126686564044617&amp;connections=10" align="top" frameborder="0" width="300" height="250" scrolling="no" />');
}

$(fBox);


// *************************************************
// Pagetitle rewrite
//
// Rewrites the page's title, used by Template:Title
// *************************************************
$(function() {
    var newTitle = $("#title-meta").html();
    if (!newTitle) return;
    var edits = $("#user_masthead_since").text();
    $(".firstHeading,#WikiaUserPagesHeader h1,#WikiaPageHeader h1").html(newTitle);
    $(".#user_masthead_head h2").html(newTitle + "<small id='user_masthead_since'>" + edits + "</small>");
});


/* Ajax Auto-Refresh (courtesy pcj) */
/* Auto updating recent changes opt-in
 * See w:c:dev:AjaxRC for info & attribution
 */

AjaxRCRefreshText = 'Auto-refresh';
AjaxRCRefreshHoverText = 'Automatically refresh the page';
ajaxPages = ["Special:RecentChanges", "Special:WikiActivity"];
importScriptPage('AjaxRC/code.js', 'dev');

// *************************************************
// change profile labels on individual pages
//
//
// *************************************************
if (wgCanonicalNamespace === "User_talk" || wgCanonicalNamespace === "User") {
    if (document.getElementById('UserProfileMasthead').getElementsByClassName('group').length === 1) {
        if (document.getElementById('adm-changetitle') !== null) {
            document.getElementById('UserProfileMasthead').getElementsByClassName('group')[0].innerHTML = document.getElementById('adm-changetitle').innerHTML;
        }
    }
}

/* lock blog comments for blogs that haven't been commented on for more than 30 days.
   by: [[User:Joeyaa|Joey Ahmadi]]
*/

$(function() {
    if (wgNamespaceNumber == 500 && $('#article-comments-ul li').size() > 1) {
        var then = $('#article-comments-ul > .SpeechBubble:first .permalink').attr('href');
        then = new String(then.match(/\d{8}/));
        var monthnames = ['January', 'February', 'March', 'April', 'May', 'June', 'July',
            'August', 'September', 'October', 'November', 'December'];
        var year = then.match(/^\d{4}/);
        var month = then.substring(4, 6);
        month--;
        month = monthnames[month];
        var day = then.match(/\d{2}$/);
        then = new Date(month + '' + day + ', ' + year);
        var old = parseInt(now - then);
        old = Math.floor(old / (1000 * 60 * 60 * 24));
        if (old > 30) {
            $('#article-comm').attr('disabled', 'disabled').text('This blog post hasn\'t been commented on for over 30 days. There is no need to comment.');
            $('#article-comm-submit').attr('disabled', 'disabled');
            $('.article-comm-reply').remove();
        }
    }
});

// </source>