| This wiki is closed in favour of the new wiki. Information shown is likely to be very out of date. |
MediaWiki:Common.js
From Discovery Wiki
Jump to navigationJump to searchNote: After saving, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
- Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
/* Any JavaScript here will be loaded for all users on every page load. */
/* Event attach functions. */
function DW_eventAttach (obj, event, handler) {
if (obj.addEventListener) {
obj.addEventListener(event, handler, false);
} else if (obj.attachEvent) {
var r = obj.attachEvent('on' + event, handler);
} else {
obj['on' + event] = handler;
}
}
/* Functions for Template:SpoilerWindow */
function DW_createSpoilerLink () {
var el_list = document.getElementsByTagName('div');
var el_cur;
for (var i = 0, l = el_list.length; i < l; i++){
el_cur = el_list[i];
if ((el_cur.className && el_cur.className == 'dwspoiler')) {
var container = el_cur.getElementsByTagName('div');
if (!container.item(1).style.display || container.item(1).style.display == 'block') {
var text = document.createTextNode('Hide');
} else {
var text = document.createTextNode('Show');
}
var link = document.createElement('a');
link.appendChild(text);
link.setAttribute('href', 'javascript:void(0);');
DW_eventAttach(link, 'click', function () { DW_toggleVisibility(this); });
var toggle_element = el_cur.getElementsByTagName('span');
toggle_element.item(0).appendChild(document.createTextNode('['));
toggle_element.item(0).appendChild(link);
toggle_element.item(0).appendChild(document.createTextNode(']'));
}
}
}
$(DW_createSpoilerLink);
function DW_toggleVisibility (obj) {
var container = obj.parentNode.parentNode.parentNode.getElementsByTagName('div').item(1);
if (!container.style.display || container.style.display == 'block') {
container.style.display = 'none';
obj.innerHTML = 'Show';
} else {
container.style.display = 'block';
obj.innerHTML = 'Hide';
}
}
/** Collapsible tables *********************************************************
*
* Description: Allows tables to be collapsed, showing only the header. See
* [[**DOCUMENTATION LINK**]].
* Maintainers: [[**MAINTAINERS**]]
*/
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 ( Tables[i].classList.contains( "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.className = "collapseButton"; //Styles are declared in Common.css
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 ( NavigationBoxes[i].classList.contains( "collapsed" ) || ( tableIndex >= autoCollapse && NavigationBoxes[i].classList.contains( "autocollapse" ) ) ) {
collapseTable( i );
}
}
}
$( createCollapseButtons );
/* Overwrite mediawiki's default sort function for tables, fixing how numbers are sorted in table cells if they have a unit attached at the end */
function padnum(str, len) {
if (len + 1 >= str.length && str.match(/^\d/)) {
str = Array(len + 1 - str.length).join('0') + str;
}
return str;
}
function ts_sort_numeric(a,b) {
var aa = padnum(ts_parseFloat(a[1]),50);
var bb = padnum(ts_parseFloat(b[1]),50);
return (aa != bb ? aa - bb : a[2] - b[2]);
}
// -------------------------------------------------------------------------------
// Force Preview JavaScript code - Start
//
// To allow any group to bypass being forced to preview,
// enter the group name in the permittedGroups array.
// E.g.
// var permittedGroups = []; // force everyone
// var permittedGroups = [ "user"]; // permit logged-in users
// var permittedGroups = [ "sysop", "bureaucrat"]; // permit sysop, bureaucrat
// -------------------------------------------------------------------------------
var permittedGroups = [ "trusted", "sysop", "bureaucrat" ];
Array.prototype.intersects = function() {
// --------------------------------------------------------
// Returns true if any element in the argument array
// is the same as an element in this array
// --------------------------------------------------------
if ( !arguments.length ) return false;
var array2 = arguments[0];
var len1 = this.length;
var len2 = array2.length;
if ( len2 == 0 ) return false;
for ( var i = 0; i < len1; i++ ) {
for ( var j = 0; j < len2; j++ ) {
if ( this[i] === array2[j] ) return true;
}
}
return false;
};
function forcePreview() {
if ( mw.config.get( 'wgNamespaceNumber' ) == 10 || mw.config.get( 'wgNamespaceNumber' ) == 8 ) return; // No point forcing preview in the Template or MediaWiki namespaces
if ( mw.config.get( "wgAction" ) != "edit" ) return;
if ( mw.config.get( "wgUserGroups" ).intersects( permittedGroups ) ) return;
var saveButton = document.getElementById( "wpSave" );
if ( !saveButton ) return;
saveButton.disabled = true;
saveButton.value = "Save page (use preview first)";
saveButton.style.fontWeight = "normal";
document.getElementById("wpPreview").style.fontWeight = "bold";
}
jQuery(document).ready( forcePreview );
// -----------------------------------------------------
// Force Preview JavaScript code - End
// -----------------------------------------------------
/* Scroll Gallery JS start */
jQuery( document ).ready(function() {
if (document.URL.match(/printable/g)) return;
function toggleImageFunction(group, remindex, shwindex) {
return function() {
document.getElementById("ImageGroupsGr" + group + "Im" + remindex).style["display"] = "none";
document.getElementById("ImageGroupsGr" + group + "Im" + shwindex).style["display"] = "block";
return false;
};
}
var divs = document.getElementsByTagName("div");
var i = 0, j = 0;
var units, search;
var currentimage;
var UnitNode;
for (i = 0; i < divs.length; i++) {
if (divs[i].className !== "ImageGroup") { continue; }
UnitNode = undefined;
search = divs[i].getElementsByTagName("div");
for (j = 0; j < search.length; j++) {
if (search[j].className !== "ImageGroupUnits") { continue; }
UnitNode=search[j];
break;
}
if (UnitNode === undefined) { continue; }
units = [];
for (j = 0 ; j < UnitNode.childNodes.length ; j++ ) {
var temp = UnitNode.childNodes[j];
if (temp.className === "center") { units.push(temp); }
}
var rightlink = undefined;
var commentText = undefined;
for (j = 0; j < units.length; j++) {
currentimage = units[j];
currentimage.id = "ImageGroupsGr" + i + "Im" + j;
var leftlink = document.createElement("a");
if (commentText !== undefined) {
leftlink.setAttribute("title", commentText);
}
var comment;
if (typeof(currentimage.getAttribute("title")) !== "string") {
commentText = (j+1) + "/" + units.length;
comment = document.createElement("tt").appendChild(document.createTextNode("("+ commentText + ")"));
} else {
commentText = currentimage.getAttribute("title");
comment = document.createElement("span").appendChild(document.createTextNode(commentText));
currentimage.removeAttribute("title");
}
if(rightlink !== undefined) {
rightlink.setAttribute("title", commentText);
}
var imghead = document.createElement("div");
rightlink = document.createElement("a");
if (j !== 0) {
leftlink.href = "#";
leftlink.onclick = toggleImageFunction(i, j, j-1);
leftlink.appendChild(document.createTextNode("◀"));
}
if (j !== units.length - 1) {
rightlink.href = "#";
rightlink.onclick = toggleImageFunction(i, j, j+1);
rightlink.appendChild(document.createTextNode("▶"));
}
imghead.style["fontSize"] = "110%";
imghead.style["fontweight"] = "bold";
imghead.appendChild(leftlink);
imghead.appendChild(document.createTextNode("\xA0"));
imghead.appendChild(comment);
imghead.appendChild(document.createTextNode("\xA0"));
imghead.appendChild(rightlink);
if (units.length > 1) {
currentimage.insertBefore(imghead,currentimage.childNodes[0]);
}
if (j !== 0) {
currentimage.style["display"] = "none";
}
}
}
});
/* Scroll Gallery JS end */
/* ActiveUsers embed plugin start */
function sortList(ul){
var new_ul = ul.cloneNode(false);
// Add all li objects to an array
var lis = [];
for(var i = ul.childNodes.length; i--;){
if(ul.childNodes[i].nodeName === 'LI')
lis.push(ul.childNodes[i]);
}
// Sort li objects by user edit count
lis.sort(function(b, a) {
a = a.innerHTML;
b = b.innerHTML;
editCount = /(\d+)(?= edits in the last 30 days| edit in the last 30 days)/g;
var compA = parseInt(String(a).match(editCount));
var compB = parseInt(String(b).match(editCount));
return (compA < compB) ? -1 : (compA > compB) ? 1 : 0;
});
var userCount = parseInt(document.getElementById("activeUsersEmbed").getAttribute("data-usercount"));
if (userCount>0) {
lis = lis.slice(0,userCount);
}
// Add li objects to ul in order
for(var i = 0; i < lis.length; i++)
new_ul.appendChild(lis[i]);
ul.parentNode.replaceChild(new_ul, ul);
}
function getActiveUsers() {
if(!!document.getElementById("activeUsersEmbed")) {
// Alright, some container somewhere wants to contain a list of active users. Cool.
jQuery("#activeUsersEmbed").load("https://discoverygc.com/wiki/index.php?title=Special:ActiveUsers .mw-activeusers-intro~ul", function() {
sortList(document.querySelector('#activeUsersEmbed ul'));
});
}
}
jQuery( document ).ready(function() {
getActiveUsers();
});
/* ActiveUsers embed plugin end */
/* disableEditing plugin start */
/* Call the disableEditing function with an appropriate reason at page load to remove the editing form. */
/* Will allow users in editPermitted to edit as usual, and will obviously do nothing if JavaScript is */
/* disabled, but that's not really an issue. */
var editPermitted = [ "sysop", "bureaucrat" ];
function disableEditing(reason) {
if ( mw.config.get( "wgUserGroups" ).intersects( editPermitted ) ) return;
jQuery("#editform").html(reason);
}
// jQuery( document ).ready(function() {
// disableEditing("Editing has been temporarily disabled.");
// });
/* disableEditing plugin end */
/* code generator plugin start */
jQuery.expr[':'].textEquals = function(el, i, m) {
var searchText = m[3];
var match = jQuery(el).text().trim().match("^" + searchText + "$")
return match && match.length > 0;
}
function showBaseDiff(internalNickname) {
jQuery.ajax({
data: { basenick: internalNickname, disptype: "wiki", submit: "Get+Base+Info"},
type: "POST",
url: "http://discoverygc.com/wikigen/basegen.php?itemtype=bases",
success: function(response) {
var wCode = jQuery(response).filter("#content").text().trim();
var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *=.*\.\w*)/g);
if (imageStr !== null) {
wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr);
}
jQuery("input#wpSummary").val("Default message: Importing autogenerated base page from code generator.");
jQuery("textarea#wpTextbox1").val(wCode);
jQuery("input#wpDiff").click();
}
});
}
function showPlanetDiff(internalNickname) {
jQuery.ajax({
data: { planetnick: internalNickname, disptype: "wiki", submit: "Get+Base+Info"},
type: "POST",
url: "http://discoverygc.com/wikigen/basegen.php?itemtype=planets",
success: function(response) {
var wCode = jQuery(response).filter("#content").text().trim();
var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *=.*\.\w*)/g);
if (imageStr !== null) {
wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr);
}
jQuery("input#wpSummary").val("Default message: Importing autogenerated planet page from code generator.");
jQuery("textarea#wpTextbox1").val(wCode);
jQuery("input#wpDiff").click();
}
});
}
function showShieldDiff(internalNickname) {
jQuery.ajax({
data: { shieldselect: internalNickname, disptype: "wiki", submit: "Shield+Info"},
type: "POST",
url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=shield",
success: function(response) {
var wCode = jQuery(response).filter("#content").text().trim();
var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *=.*\.\w*)/g);
if (imageStr !== null) {
wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr);
}
jQuery("input#wpSummary").val("Default message: Importing autogenerated shield page from code generator.");
jQuery("textarea#wpTextbox1").val(wCode);
jQuery("input#wpDiff").click();
}
});
}
function showShipDiff(internalNickname) {
jQuery.ajax({
data: { shipselect: internalNickname, disptype: "wiki", submit: "Get+Ship+Info"},
type: "POST",
url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=ship",
success: function(response) {
var wCode = jQuery(response).filter("#content").text().trim();
var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *=.*\.\w*)/g);
if (imageStr !== null) {
wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr);
}
var reviewStr = jQuery("textarea#wpTextbox1").text().match(/({{[R|r](eview|EVIEW)([\s\S]*?)}})/gm);
if (reviewStr !== null) {
reviewStr = reviewStr.join("\n") + "\n==Hardpoints=="
wCode = wCode.replace(/==Hardpoints==/g, reviewStr);
}
jQuery("input#wpSummary").val("Default message: Importing autogenerated ship page from code generator.");
jQuery("textarea#wpTextbox1").val(wCode);
jQuery("input#wpDiff").click();
}
});
}
function showWeapDiff(internalNickname) {
jQuery.ajax({
data: { weapselect: internalNickname, disptype: "wiki", submit: "Weapon+Detail+Info"},
type: "POST",
url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=weapon",
success: function(response) {
var wCode = jQuery(response).filter("#content").text().trim();
jQuery("input#wpSummary").val("Default message: Importing autogenerated weapon page from code generator.");
jQuery("textarea#wpTextbox1").val(wCode);
jQuery("input#wpDiff").click();
}
});
}
function showIDDiff(internalNickname) {
jQuery.ajax({
data: { idselect: internalNickname, disptype: "wiki", submit: "ID+Sell+Locations"},
type: "POST",
url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=ID",
success: function(response) {
var wCode = jQuery(response).filter("#content").text().trim();
wCode = wCode.replace(/(\*\ \-\ )/g, "*"); // Remove double "bullet points"
wCode = wCode.replace(/(\*\s*\n)/g, ""); // Remove blank list items
jQuery("input#wpSummary").val("Default message: Importing autogenerated ID page from code generator.");
jQuery("textarea#wpTextbox1").val(wCode);
jQuery("input#wpDiff").click();
}
});
}
function generateGeneratorQuery(pageName) {
// is the page a ship? if so, generate a button
jQuery.ajax({
data: { shipselect: "", disptype: "wiki", submit: "Get+Ship+Info"},
type: "POST",
url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=ship",
success: function(response) {
var internalNickname = jQuery(response).find("option:contains('"+pageName+"')").attr("value");
if (!internalNickname == 0 && jQuery("textarea#wpTextbox1").text().match(/({{[S|s]hip|HIP)/g) !== null) {
jQuery("<form style=\"display: inline;\"><input onclick=\"showShipDiff('"+internalNickname+"')\" type=\"button\" value=\"Generate code (ship)\"></form><span> Remember to add reviews, links and images when using the <a href=\"http://discoverygc.com/wiki/Code_generator_guide\">code generator</a>. |</span>").insertAfter("#wpDiff");
return;
}
}
});
// is the page a base? if so, generate a button
jQuery.ajax({
data: { basenick: "", disptype: "wiki", submit: "Get+Base+Info"},
type: "POST",
url: "http://discoverygc.com/wikigen/basegen.php?itemtype=bases",
success: function(response) {
var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
if (!internalNickname == 0) {
jQuery("<form style=\"display: inline;\"><input onclick=\"showBaseDiff('"+internalNickname+"')\" type=\"button\" value=\"Generate code (base)\"></form><span> Remember to add links and images when using the <a href=\"http://discoverygc.com/wiki/Code_generator_guide\">code generator</a>. |</span>").insertAfter("#wpDiff");
return;
}
}
});
// is the page a planet? if so, generate a button
jQuery.ajax({
data: { planetnick: "", disptype: "wiki", submit: "Get+Base+Info"},
type: "POST",
url: "http://discoverygc.com/wikigen/basegen.php?itemtype=planets",
success: function(response) {
var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
if (!internalNickname == 0) {
jQuery("<form style=\"display: inline;\"><input onclick=\"showPlanetDiff('"+internalNickname+"')\" type=\"button\" value=\"Generate code (planet)\"></form><span> Remember to add links and images when using the <a href=\"http://discoverygc.com/wiki/Code_generator_guide\">code generator</a>. |</span>").insertAfter("#wpDiff");
return;
}
}
});
// is the page a gun? if so, generate a button
jQuery.ajax({
data: { weapselect: "", disptype: "wiki", submit: "Weapon+Detail+Info"},
type: "POST",
url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=weapon",
success: function(response) {
var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
if (!internalNickname == 0) {
jQuery("<form style=\"display: inline;\"><input onclick=\"showWeapDiff('"+internalNickname+"')\" type=\"button\" value=\"Generate code (gun)\"></form><span> Remember to add links and images when using the <a href=\"http://discoverygc.com/wiki/Code_generator_guide\">code generator</a>. |</span>").insertAfter("#wpDiff");
return;
}
}
});
// is the page a shield? if so, generate a button
jQuery.ajax({
data: { shieldselect: "", disptype: "wiki", submit: "Shield+Info"},
type: "POST",
url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=shield",
success: function(response) {
var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
if (!internalNickname == 0) {
jQuery("<form style=\"display: inline;\"><input onclick=\"showShieldDiff('"+internalNickname+"')\" type=\"button\" value=\"Generate code (gun)\"></form><span> Remember to add links and images when using the <a href=\"http://discoverygc.com/wiki/Code_generator_guide\">code generator</a>. |</span>").insertAfter("#wpDiff");
return;
}
}
});
// is the page an ID? if so, generate a button
if (wgTitle.indexOf("ID") != -1) {
jQuery.ajax({
data: { idselect: "", disptype: "wiki", submit: "ID+Sell+Locations"},
type: "POST",
url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=ID",
success: function(response) {
var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
if (!internalNickname == 0) {
jQuery("<form style=\"display: inline;\"><input onclick=\"showIDDiff('"+internalNickname+"')\" type=\"button\" value=\"Generate code (ID)\"></form><span> Remember to add links when using the <a href=\"http://discoverygc.com/wiki/Code_generator_guide\">code generator</a>. |</span>").insertAfter("#wpDiff");
return;
}
}
});
}
}
jQuery( document ).ready(function() {
if(!!document.getElementById("editform") && !!!wgCanonicalNamespace) {
generateGeneratorQuery(wgTitle);
}
});
/* code generator plugin end */