Difference between revisions of "MediaWiki:Common.js"

From Discovery Wiki
Jump to navigationJump to search
(Ship pages are a bit more difficult due to the way the option on the generator page is created, so we'll look for the ship template instead to prevent false matches.)
(hasClass seems broken, modern browsers provide Element#classList anyway - https://developer.mozilla.org/en/docs/Web/API/Element/classList)
(12 intermediate revisions by 2 users not shown)
Line 40: Line 40:
 
}
 
}
 
}
 
}
addOnloadHook(DW_createSpoilerLink);
+
$(DW_createSpoilerLink);
  
 
function DW_toggleVisibility (obj) {
 
function DW_toggleVisibility (obj) {
Line 95: Line 95:
 
   
 
   
 
     for ( var i = 0; i < Tables.length; i++ ) {
 
     for ( var i = 0; i < Tables.length; i++ ) {
         if ( hasClass( Tables[i], "collapsible" ) ) {
+
         if ( Tables[i].classList.contains( "collapsible" ) ) {
 
   
 
   
 
             /* only add button and increment count if there is a header row to work with */
 
             /* only add button and increment count if there is a header row to work with */
Line 127: Line 127:
 
   
 
   
 
     for ( var i = 0;  i < tableIndex; i++ ) {
 
     for ( var i = 0;  i < tableIndex; i++ ) {
         if ( hasClass( NavigationBoxes[i], "collapsed" ) || ( tableIndex >= autoCollapse && hasClass( NavigationBoxes[i], "autocollapse" ) ) ) {
+
         if ( NavigationBoxes[i].classList.contains( "collapsed" ) || ( tableIndex >= autoCollapse && NavigationBoxes[i].classList.contains( "autocollapse" ) ) ) {
 
             collapseTable( i );
 
             collapseTable( i );
 
         }  
 
         }  
Line 133: Line 133:
 
}
 
}
 
   
 
   
addOnloadHook( createCollapseButtons );
+
$( createCollapseButtons );
 
/** Test if an element has a certain class **************************************
 
  *
 
  * Description: Uses regular expressions and caching for better performance.
 
  * Maintainers: [[User:Mike Dillon]], [[User:R. Koot]], [[User:SG]]
 
  */
 
 
var hasClass = (function () {
 
var reCache = {};
 
return function (element, className) {
 
return (reCache[className] ? reCache[className] : (reCache[className] = new RegExp("(?:\\s|^)" + className + "(?:\\s|$)"))).test(element.className);
 
};
 
})();
 
  
 
/* 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 */
 
/* 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 */
Line 374: Line 361:
 
         success: function(response) {
 
         success: function(response) {
 
             var wCode = jQuery(response).filter("#content").text().trim();
 
             var wCode = jQuery(response).filter("#content").text().trim();
             var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *= *\w*\.\w*)/g);
+
             var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *=.*\.\w*)/g);
 
             if (imageStr !== null) {
 
             if (imageStr !== null) {
 
                 wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr);
 
                 wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr);
 
             }
 
             }
 
             jQuery("input#wpSummary").val("Default message: Importing autogenerated base page from code generator.");
 
             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("textarea#wpTextbox1").val(wCode);
 
             jQuery("input#wpDiff").click();
 
             jQuery("input#wpDiff").click();
Line 392: Line 415:
 
         success: function(response) {
 
         success: function(response) {
 
             var wCode = jQuery(response).filter("#content").text().trim();
 
             var wCode = jQuery(response).filter("#content").text().trim();
             var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *= *\w*\.\w*)/g);
+
             var imageStr = jQuery("textarea#wpTextbox1").text().match(/(\| *(image|Image|IMAGE) *=.*\.\w*)/g);
 
             if (imageStr !== null) {
 
             if (imageStr !== null) {
 
                 wCode = wCode.replace(/(\| *(image|Image|IMAGE) *= *.*)/g, imageStr);
 
                 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("input#wpSummary").val("Default message: Importing autogenerated ship page from code generator.");
Line 426: Line 454:
 
             wCode = wCode.replace(/(\*\ \-\ )/g, "*"); // Remove double "bullet points"
 
             wCode = wCode.replace(/(\*\ \-\ )/g, "*"); // Remove double "bullet points"
 
             wCode = wCode.replace(/(\*\s*\n)/g, ""); // Remove blank list items
 
             wCode = wCode.replace(/(\*\s*\n)/g, ""); // Remove blank list items
             jQuery("input#wpSummary").val("Default message: Importing autogenerated weapon page from code generator.");
+
             jQuery("input#wpSummary").val("Default message: Importing autogenerated ID page from code generator.");
 
             jQuery("textarea#wpTextbox1").val(wCode);
 
             jQuery("textarea#wpTextbox1").val(wCode);
 
             jQuery("input#wpDiff").click();
 
             jQuery("input#wpDiff").click();
Line 435: Line 463:
  
 
function generateGeneratorQuery(pageName) {
 
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
 
// is the page a base? if so, generate a button
 
     jQuery.ajax({
 
     jQuery.ajax({
         data: { basenick: "", disptype: "wiki", submit:"Get+Base+Info"},
+
         data: { basenick: "", disptype: "wiki", submit: "Get+Base+Info"},
 
         type: "POST",
 
         type: "POST",
 
         url: "http://discoverygc.com/wikigen/basegen.php?itemtype=bases",
 
         url: "http://discoverygc.com/wikigen/basegen.php?itemtype=bases",
Line 443: Line 485:
 
             var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
 
             var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
 
             if (!internalNickname == 0) {
 
             if (!internalNickname == 0) {
                 jQuery("<form style=\"display: inline;\"><input onclick=\"showBaseDiff('"+internalNickname+"')\" type=\"submit\" 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");
+
                 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;
 
             }
 
             }
 
         }
 
         }
Line 450: Line 507:
 
// is the page a gun? if so, generate a button
 
// is the page a gun? if so, generate a button
 
     jQuery.ajax({
 
     jQuery.ajax({
         data: { weapselect: "", disptype: "wiki", submit:"Weapon+Detail+Info"},
+
         data: { weapselect: "", disptype: "wiki", submit: "Weapon+Detail+Info"},
 
         type: "POST",
 
         type: "POST",
 
         url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=weapon",
 
         url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=weapon",
Line 456: Line 513:
 
             var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
 
             var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
 
             if (!internalNickname == 0) {
 
             if (!internalNickname == 0) {
                 jQuery("<form style=\"display: inline;\"><input onclick=\"showWeapDiff('"+internalNickname+"')\" type=\"submit\" 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");
+
                 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 an ID? if so, generate a button
+
// is the page a shield? if so, generate a button
if (wgTitle.indexOf("ID") != -1) {
 
 
     jQuery.ajax({
 
     jQuery.ajax({
         data: { idselect: "", disptype: "wiki", submit:"ID+Sell+Locations"},
+
         data: { shieldselect: "", disptype: "wiki", submit: "Shield+Info"},
 
         type: "POST",
 
         type: "POST",
         url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=ID",
+
         url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=shield",
 
         success: function(response) {
 
         success: function(response) {
 
             var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
 
             var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
 
             if (!internalNickname == 0) {
 
             if (!internalNickname == 0) {
                 jQuery("<form style=\"display: inline;\"><input onclick=\"showIDDiff('"+internalNickname+"')\" type=\"submit\" 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");
+
                 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 a ship? if so, generate a button
+
// is the page an ID? if so, generate a button
 +
  if (wgTitle.indexOf("ID") != -1) {
 
     jQuery.ajax({
 
     jQuery.ajax({
         data: { shipselect: "", disptype: "wiki", submit:"Get+Ship+Info"},
+
         data: { idselect: "", disptype: "wiki", submit: "ID+Sell+Locations"},
 
         type: "POST",
 
         type: "POST",
         url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=ship",
+
         url: "http://discoverygc.com/wikigen/sell_loc.php?itemtype=ID",
 
         success: function(response) {
 
         success: function(response) {
             var internalNickname = jQuery(response).find("option:contains('"+pageName+"')").attr("value");
+
             var internalNickname = jQuery(response).find("option:textEquals('"+pageName+"')").attr("value");
             if (!internalNickname == 0 && jQuery("textarea#wpTextbox1").text().match(/({{[S|s]hip|HIP)/g) !== null) {
+
             if (!internalNickname == 0) {
                 jQuery("<form style=\"display: inline;\"><input onclick=\"showShipDiff('"+internalNickname+"')\" type=\"submit\" 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");
+
                 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() {
 
jQuery( document ).ready(function() {
     if(!!document.getElementById("editform")) {
+
     if(!!document.getElementById("editform") && !!!wgCanonicalNamespace) {
 
         generateGeneratorQuery(wgTitle);
 
         generateGeneratorQuery(wgTitle);
 
     }
 
     }
 
});
 
});
 
/* code generator plugin end */
 
/* code generator plugin end */

Revision as of 00:58, 17 March 2017

/* 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("http://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 */