Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
// Even/odd classes for sortable tables
ts_alternate_row_colors = true;
// Extra buttons
// function addPortletLink(portlet, href, text, id, tooltip, accesskey, nextnode)
// Simplified edit section 0 ([[User:ais523/editsection0tab.js]])
function addLeadSectionEditTab() {
  var hist = document.getElementById("ca-history");
  if (hist) {
    addPortletLink(
      "p-cactions",
      mw.config.get('wgServer')+mw.config.get('wgScript')+"?title="+encodeURIComponent(mw.config.get('wgPageName'))+"&action=edit&section=0",
      "0",
      "ca-edit-0",
      "Edit the lead section of this page",
      "o",
      hist
    );
  }
}
// Null edit tab ([[User:Happy-melon/global.js]])
function addNullEditTab() {
  addPortletLink(
    'p-cactions',
    mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + encodeURIComponent(mw.config.get('wgPageName')) + '&action=edit&nulledit=true',
    'null',
    'p-null',
    'Null edit this page'
  );
}

// Purge
function addPurgeTab() {
  var plinks = document.getElementsByClassName('purgelink');
  if (plinks) {
    while (plinks[0]) {
      plinks[0].parentNode.removeChild(plinks[0]); // Hide all purgelinks
    }
  }
  var print = document.getElementById('t-print');
  if (print) {
    print.getElementsByTagName("a")[0].accessKey = ""; // Get rid of the "p" accesskey
  }

  var editlead = document.getElementById("ca-edit-0");
  if (editlead) {
    addPortletLink(
      "p-cactions",
      mw.config.get('wgServer')+mw.config.get('wgScript')+"?title="+encodeURIComponent(mw.config.get('wgPageName'))+"&action=purge",
      "Purge",
      "ca-purge",
      "Purge this page's cache",
      "p",
      editlead
    );
  }
}
// Logs
function addLogsTab() {
var nexttab = document.getElementById("ca-move") || document.getElementById("ca-history");
  if (nexttab) {
    addPortletLink(
      "p-cactions",
      mw.config.get('wgServer')+mw.config.get('wgScript')+"?title=Special:Log&page="+encodeURIComponent(mw.config.get('wgPageName')),
      "Logs",
      "ca-logs",
      "View logs for this page",
      null,
      nexttab
    );
  }
}
function addUnthumbTab() {
  var title = mw.config.get('wgPageName');
  var imagetitle = title;
  imagetitle = imagetitle.substring(imagetitle.indexOf(':') + 1); // strip off "Image:" namespace
  // Add an "unthumb" link.  For Image:123px-Foo, links to Image:Foo.
  if (imagetitle.match(/^\d+px-/)) {
    // imagetitle = imagetitle.substring(imagetitle.indexOf("px-") + 3);
    bigimagetitle = imagetitle.replace(/^\d+px-/, '');
    addPortletLink(
      "p-cactions",
      "/wiki/Image:" + bigimagetitle,
      "unthumb",
      "ca-unthumb",
      "unthumb this image",
      "",
      document.getElementById("ca-watch")
    );
  }
}
function addRandomTemplate() {
  addPortletLink(
    "p-navigation",
    mw.config.get('wgServer')+mw.config.get('wgScript')+"?title=Special:Random/Template",
    "Random template",
    "n-randomtemplate",
    "Load a random template",
    "",
    document.getElementById("n-randompage")
  );
}
// Collapse within {{WikiProjectBanners}}
function collapseWPs() {
  if (!document.querySelector || !document.querySelectorAll)
    return;
  
  var wpbs = document.querySelectorAll('.wpbs');
  if (!wpbs || !wpbs.length)
    return;
  
  for (var i = 0, il = wpbs.length; i < il; i++)
    wpbs[i].className += " mbox-inside";
  
  var tables = document.querySelectorAll('.wpbs>tbody>tr>td[class=""]>table.wpb');
  if (!tables)
    return;
  for (var j = 0, jl = tables.length; j < jl; j++) {
    var header = tables[j].querySelector('.wpb-header>th')
    if (!header)
      continue;
    
    collapseTable(tables[j].getAttribute("id").substring(16));
    
    var leftButton  = document.createElement( "span" );
    leftButton.style.cssFloat = "left"; // Real browsers
    leftButton.style.styleFloat = "left"; // IE
    leftButton.style.fontWeight = "normal";
    leftButton.style.textAlign = "left";
    leftButton.style.width = "6em";
    leftButton.appendChild( document.createTextNode( "\u00a0" ) ); // nbsp
    header.insertBefore( leftButton, header.childNodes[0] );
  }
  appendCSS('.wpbs>tbody>tr{display:table-row!important} .wpbs>tbody>tr>td[class=""]>table.wpb>tbody>tr.wpb-header{display:table-row}');
}
function infoboxes() {
  if (!document.querySelectorAll)
    return;
  
  var maxwidth
    = 0.5 * parseInt(getComputedStyle(document.getElementById("bodyContent"),
                                      null).width,
                     10);
  
  for (var i = 0, list = document.querySelectorAll(".infobox"), l = list.length;
       i < l;
       ++i) {
    if (parseInt(getComputedStyle(list[i], null).width, 10) > maxwidth)
      list[i].className += "fullwidth";
  }
}


function createMatrix() {
  var ns = "http://www.w3.org/2000/svg";
  var filter = document.createElementNS(ns, "filter");
  filter.id = "gray-filter";
  var matrix = document.createElementNS(ns, "feColorMatrix");
  matrix.setAttribute("values",
      "0.3333 0.3333 0.3333 0 0 \
       0.3333 0.3333 0.3333 0 0 \
       0.3333 0.3333 0.3333 0 0 \
       0      0      0      1 0");
  document.body
      .appendChild(document.createElementNS(ns, "svg"))
      .appendChild(filter)
      .appendChild(matrix);
}

addOnloadHook(createMatrix);
addOnloadHook(collapseWPs);
// install [[User:Cacycle/wikEd]] in-browser text editor
// importScript("User:Cacycle/wikEd.js");
addOnloadHook(addLeadSectionEditTab);
addOnloadHook(addPurgeTab);
addOnloadHook(addLogsTab);
addOnloadHook(addUnthumbTab);
addOnloadHook(addRandomTemplate);
addOnloadHook(function() { setTimeout(infoboxes, 500); });
if(wgNamespaceNumber != -1 && wgArticleId != 0)
    addOnloadHook(addNullEditTab);