MediaWiki:Common.js

/* Any JavaScript here will be loaded for all users on every page load. */ /* */

/* Test if an element has a certain class ************************************** * * Description: Uses regular expressions and caching for better performance. * 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);    }; });

/** Collapsible tables ********************************************************* * *  Description: Allows tables to be collapsed, showing only the header. See *              NavFrame. * Taken from Wikipedia's Common.js. */ 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 = "6em"; 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 ); /** Dynamic Navigation Bars (experimental) ************************************* * *  Description: See 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 -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 );

/* */

/* Chat Tags */ importScriptPage('ChatTags/code.js', 'dev'); /* External Image Loader */ importScriptPage('ExternalImageLoader/code.js', 'dev');

/* Automatic signature */ importScriptPage('Sine/code.js', 'dev'); /* Voice Dictation */ importScriptPage('Voice_Dictation/voice.js', 'dev'); /* Search Suggest */ importArticles({   type: 'script',    articles: [        'u:dev:SearchSuggest/code.js'    ] }); /* Timed Slider */ importArticles({   type: 'script',    articles: [        'u:dev:TimedSlider/code.js'    ] }); /* Chat Options */ importScriptPage('ChatOptions/code.js', 'dev'); /* Code */ importArticles({   type: 'script',    articles: [        'u:dev:Code/code.js'    ] }); /* Visual Spell Check */ importScriptPage('VisualSpellCheck/code.js','dev'); /* Floating TOC */ importArticles({   type: 'script',    articles: [        'u:dev:FloatingToc/code.js'    ] }); /* Reveal Anonymous IP */ importArticles({   type: "script",    articles: [        "w:c:dev:RevealAnonIP/code.js"    ] });

/* Auto-Refresh for Wiki Activity */ AjaxRCRefreshText = 'Auto-refresh'; AjaxRCRefreshHoverText = 'Automatically refresh the page'; importScriptPage('AjaxRC/code.js', 'dev'); var ajaxPages =["Special:RecentChanges", "Special:WikiActivity"]; /* Back to top button */ importScriptPage('BackToTopButton/code.js', 'dev'); /* Admin List */ importScriptPage('ListAdmins/code.js', 'dev'); /* Collapsible Tables */ importScriptPage('ShowHide/code.js', 'dev'); /* Collapsible Infobox */ importScriptPage('CollapsibleInfobox/code.js', 'dev'); /* Clock */ importScriptPage('DisplayClock/code.js', 'dev'); /* Adds Purge button */ var PurgeButtonText = 'Refresh'; importScriptPage('PurgeButton/code.js', 'dev'); /* Lists of Duplicate images */ importScriptPage('DupImageList/code.js', 'dev'); /* Top Contributor */ importArticles({   type: 'script',    articles: [        'w:dev:TopEditors/code.js'    ] });

/* Countdown */ importArticles({   type: "script",    articles: [        "w:c:dev:Countdown/code.js"    ] });

/* User Tags */ // User Tags window.UserTagsJS = { modules: { inactive: 30, mwGroups: ['bureaucrat', 'chatmoderator', 'rollback', 'sysop', 'bannedfromchat', 'bot', 'bot-global'], autoconfirmed: false, metafilter: { sysop: ['bureaucrat'], chatmoderator: ['sysop'], rollback: ['sysop'], },			newuser: true,}, tags: { handy: { u: 'handy', order: 2 }, petunia: { u: 'petunia', order: 2 }, flaky: { u: 'flaky', order: 2 }, mime: { u: 'mime', order: 2 }, flippy: { u: 'flippy', order: 2 }, lumpy: { u: 'lumpy', order: 2 }, mole: { u: 'mole', order: 2 }, lifty: { u: 'lifty', order: 2 }, shifty: { u: 'shifty', order: 2 }, yf: { u: 'flippy the army', order: 3 }, toybonnie: { u: 'toy bonnie', order: 4 }, toychica: { u: 'toy chica', order: 4 }, toyfreddy: { u: 'toy freddy', order: 4}, kenny: { u: 'kenny', order: 4}, wikiresponsibility: { u: 'wiki responsibility', order: 2 }, igor1: { u: 'igor, shauna and knuckles', order: 1}, igor2: { u: 'shadow and mc adore', order: 2}, cuddles: { u: 'cuddles', order: 2 }, toothy: { u: 'toothy', order: 2 }, iin: { u: 'speed e. wolf', order: 1 }, discobear: { u: 'discobear', order: 1 }, honosysop: { u: 'honorary admin', order: 1}, yellowishwolf: { u: 'invader zim', order: 3}, iin2: { u: 'ralph the wolf', order: 2}, } };

UserTagsJS.modules.custom = { "Lord O' Darkness": ['sysop', 'bureaucrat'], 'Yong feng': ['sysop', 'bureaucrat', 'yf', 'toybonnie', 'wikiresponsibility'], 'AnimationFan15': ['sysop', 'bureaucrat', 'mime', 'toychica'], 'Rorosilky5': ['sysop','flippy', 'kenny'], 'Igor the Mii': ['igor1', 'igor2'], 'HarmonTower805': ['iin', 'iin2', 'cuddles', 'toothy'], 'Sandgar': ['sysop','flaky',], 'PokemonTDHTF98': ['lifty', 'shifty'], 'SaenihpNnylf': ['handy'], 'The silver girls': ['discobear'], 'Codyrulez123': ['flaky','lumpy'], "OhSupIt'sCyan": ['flippy', 'flaky'], 'YellowishWolf': ['flippy', 'flaky', 'yellowishwolf'], };

UserTagsJS.modules.userfilter = { };

UserTagsJS.modules.mwGroups = ['bureaucrat,sysop']; UserTagsJS.modules.mwGroups = ['rollback']; importArticle({type:'script', article:'w:c:dev:UserTags/code.js'});

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

window.MessageWallUserTags = { tagColor: 'black', glow: true, users: { 'username': 'usergroup', "Lord_O'_Darkness": 'Bureaucrat', 'Yong_feng': 'Bureaucrat • Wiki Responsibility • Flippy The Army • Toy Bonnie', 'AnimationFan15': 'Bureaucrat • Mime • Toy Chica', 'Rorosilky5': 'Admin • Flippy • Kenny', 'Igor_the_Mii': 'Igor, Shauna and Knuckles • Shadow and MC Adore', 'HarmonTower805': 'Speed E. Wolf • Ralph the Wolf • Cuddles • Toothy', 'Sandgar': 'Admin • Flaky', 'PokemonTDHTF98': 'Lifty • Shifty', 'SaenihpNnylf': 'Handy', 'The silver girls': 'DiscoBear', 'Codyrulez123': 'Lumpy • Flaky', "OhSupIt'sCyan": 'Flippy • Flaky', 'YellowishWolf': 'Flippy • Flaky • Invader Zim', } }; importArticles({   type: 'script',    articles: [        //other scripts,        'u:dev:MessageWallUserTags/code.js'    ] });

/* Allow external image linking */ importScriptPage('ExternalImageLoader/code.js', 'dev');

importArticles({   type: 'script',    articles: [        'u:dev:MessageBlock/code.js'    ] });

//Auto Message Blocked var MessageBlock = { title : 'Block.', message : 'You have been blocked for $2 for the following reason(s): "$1"', autocheck : true };

importArticles({   type: 'script',    articles: [        // ...        'u:dev:LastEdited/code.js',        // ...    ] });

//LastEdited window.lastEdited = { // avatar: false, size: false, diff: true, comment: true, time: true };

importArticles({	type: "script",	articles: [		"u:dev:DynamicImages/code.js"	] });

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