MediaWiki:Common.js

// 08:57, January 28, 2018 (UTC) // // AUTO-REFRESH RECENT CHANGES AND WIKI-ACTIVITY window.AjaxRCRefreshText = 'Auto-refresh'; window.AjaxRCRefreshHoverText = 'Automatically refresh the page'; window.ajaxPages = ["Special:RecentChanges", "Special:WikiActivity"]; // END AUTO-REFRESH /* Username replace feature * Inserts viewing user's name into * Put text inside the spans to be viewed by logged out users * Originally by Splarka, then by Spang, * This (jQuery) version by wikia:User:Joeyaa, written to be backwards compatible */ if (wgUserName != 'null') { $('.insertusername').html(wgUserName); }

function onloadhookcustom { var replace = document.getElementById("JRChatReplace"); if (replace !== null) { replace.innerHTML=' '; if (window.attachEvent) window.attachEvent("onbeforeunload",confirmexitjrchat); else window.onbeforeunload = confirmexitjrchat; }	//alert(document.getElementById("JRChatReplace").innerHTML); } if (window.addEventListener) window.addEventListener("load",onloadhookcustom,false); else if (window.attachEvent) window.attachEvent("onload",onloadhookcustom);

// Create the "dev" namespace if it doesn't exist already: window.dev = window.dev || {}; // Create the sub-namespace for this addon and set some options: window.dev.editSummaries = { css: '#stdSummaries { ... }',    select: 'MediaWiki:StandardEditSummary' }; // The options need to be set before the import! Otherwise they may not work. window.dev = window.dev || {}; window.dev.editSummaries = { select: 'Template:Stdsummaries' };

window.UserTagsJS = { modules: {}, tags: { assistant: 'Assistant', threadmoderator: 'Discussion Moderator', 'content-moderator': 'Content Moderator' } };

UserTagsJS.modules.inactive = 62; UserTagsJS.modules.newuser = true; UserTagsJS.modules.autoconfirmed = true; UserTagsJS.modules.mwGroups = [ 'bureaucrat', 'sysop', 'assistant', 'rollback', 'chatmoderator', 'threadmoderator', 'content-moderator', 'bannedfromchat', 'global-discussions-moderator' ];

// ************************************************** // Experimental javascript countdown timer (Splarka) // Version 0.0.3 // ************************************************** // // Usage example: // //  Only January 01 2007 00:00:00 PST until New years. // //  Javascript disabled.

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   } }); // ************************************************** // - end -  Experimental javascript countdown timer // **************************************************

// ************************************************* // Pagetitle rewrite // // Rewrites the page's title, used by Template:Title // ************************************************* $(function {   if ($('#title-meta').length) {        var newTitle = mw.html.escape($("#title-meta").html);        // Allow italics        newTitle = newTitle.replace(/&lt;(\/?i)&gt;/g, '<$1>');        var edits = $("#user_masthead_since").text;        $(".firstHeading,#WikiaUserPagesHeader h1,#WikiaPageHeader h1").html(newTitle);        $("#user_masthead_head h2").html(newTitle + "" + edits + " ");    } });

$(function changeTitle{   if (!$('span.newPageTitle').html) {        return;    }    $('h1.page-header__title').html($('span.newPageTitle').html); });

/* Custom edit buttons See http://help.wikia.com/wiki/Help:Custom_edit_buttons */ if (mwCustomEditButtons) { mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "https://images.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"   };

mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "https://images.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" };

mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "https://images.wikia.nocookie.net/central/images/f/fd/Button_blockquote.png", "speedTip": "Blockquote", "tagOpen": " ", "tagClose": " ", "sampleText": "Insert text" };

mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "https://images.wikia.nocookie.net/central/images/7/74/Button_comment.png", "speedTip": "Note", "tagOpen": "", "sampleText": "Insert text" };

mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "https://images.wikia.nocookie.net/central/images/b/b4/Button_category03.png", "speedTip": "Category", "tagOpen": "[[Category:",       "tagClose": "]]", "sampleText": "Category name" };

mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "https://images.wikia.nocookie.net/central/images/c/c8/Button_redirect.png", "speedTip": "Redirect", "tagOpen": "#REDIRECT ",       "tagClose": "", "sampleText": "Insert text" };

mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "https://images.wikia.nocookie.net/central/images/1/12/Button_gallery.png", "speedTip": "Picture gallery", "tagOpen": "\n\nImage:", "tagClose": "|C.Syde's Wiki Logo\nImage:Wiki.png|C.Syde's Wiki Logo\nImage:Wiki.png|Eine C.Syde's Wiki Logo\n<\/gallery>", "sampleText": "Wiki.png" };

mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "https://images.wikia.nocookie.net/central/images/3/3b/Button_template_alt.png", "speedTip": "Template", "tagOpen": "", "sampleText": "Template" };

mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "https://images.wikia.nocookie.net/central/images/c/c9/Button_strike.png", "speedTip": "Strike", "tagOpen": " ", "tagClose": " ", "sampleText": "Strike-through text" };

mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "https://images.wikia.nocookie.net/central/images/1/13/Button_enter.png", "speedTip": "Line break", "tagOpen": " ", "tagClose": "", "sampleText": "" };

mwCustomEditButtons[mwCustomEditButtons.length] = { "imageFile": "https://images.wikia.nocookie.net/central/images/7/74/Button_comment.png", "speedTip": "Comment visible only for editors", "tagOpen": "", "sampleText": "Insert comment here" }; }

/* smarter IRC login system */ $(function {	var nick = (wgUserName === null) ? ('CSWUser-' + Math.floor(Math.random * 10)) : wgUserName.replace(/ /g, '_'); 	$('#IRClogin').html(' '); });

/** Collapsible tables ********************************************************* * * Description: Allows tables to be collapsed, showing only the header. See *              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 = "3.5em"; 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); }   } }); /** 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); }   } });

if (mw.config.get("wgUserGroups").indexOf('assistant') > -1) { massRenameDelay = 1000; massRenameSummary = 'automatic'; importScriptPage('MediaWiki:MassRename/code.js', 'dev'); }

if (mw.config.get("wgUserGroups").indexOf('bot') > -1) { massRenameDelay = 1000; massRenameSummary = 'automatic'; importScriptPage('MediaWiki:MassRename/code.js', 'dev'); }

if (mw.config.get("wgUserGroups").indexOf('content-moderator') > -1) { massRenameDelay = 1000; massRenameSummary = 'automatic'; importScriptPage('MediaWiki:MassRename/code.js', 'dev'); }

if (mw.config.get("wgUserGroups").indexOf('sysop') > -1) { massRenameDelay = 1000; massRenameSummary = 'automatic'; importScriptPage('MediaWiki:MassRename/code.js', 'dev'); }

if (mw.config.get("wgUserGroups").indexOf('assistant') > -1) { massProtectDelay = 500; massProtectSummary = 'automatic'; importScriptPage('MediaWiki:MassProtect/code.js', 'dev'); }

if (mw.config.get("wgUserGroups").indexOf('bot') > -1) { massProtectDelay = 1000; massProtectSummary = 'automatic'; importScriptPage('MediaWiki:MassProtect/code.js', 'dev'); }

if (mw.config.get("wgUserGroups").indexOf('content-moderator') > -1) { massProtectDelay = 500; massProtectSummary = 'automatic'; importScriptPage('MediaWiki:MassProtect/code.js', 'dev'); }

if (mw.config.get("wgUserGroups").indexOf('sysop') > -1) { massProtectDelay = 500; massProtectSummary = 'automatic'; importScriptPage('MediaWiki:MassProtect/code.js', 'dev'); }

$(function {   mw.hook('DiscordIntegrator.added').add(function { $('.DiscordIntegratorModule').appendTo('#WikiaRail'); }); });

importArticle({   type: 'style',    article: 'MediaWiki:Import.css' });

(window.dev = window.dev || {}).profileTags = { noHideTags: true };