Welcome to the New Wiki

Please let us know if anything looks out of place.

MediaWiki:Common.js: Difference between revisions

From Walkscape Walkthrough
remove dragon breeding
Remove MyLangauge
Line 160: Line 160:
{
{
StartTabs();
StartTabs();
MakeLinksMyLanguage();
}
}
/* Add "Special:MyLanguage/" into the links to automatically redirect to proper language pages */
function MakeLinksMyLanguage() {
allLinks = document.querySelectorAll("a");
var linkRegex = new RegExp('\/wiki\/(?!Special:)(?!'+currentPageName+'#)', 'g');
for (var i = 0; i < allLinks.length; i++)
{
// omit links to "Special:" and to the current page.
allLinks[i].href = allLinks[i].href.replace(linkRegex, '/wiki/Special:MyLanguage/');
}
}





Revision as of 09:35, 27 December 2024

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

/* VARIABLES ***********************************************************************************************************************/

var currentPageUrl = window.location.href;
var currentPageEditUrl = mw.util.getUrl( null, { action: 'edit' } );
var currentPageName = mw.util.getUrl( null, null ).replace('/wiki/', '');
var currentPageNamespaceID = mw.config.get('wgNamespaceNumber');

//variables needed after page load
var buttons, contents, allLinks;

//variables needed for the infobutton
var infobutton, infopanel;


/* *********************************************************************************************************************************/

// Matomo
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
  var u="https://matomo.tools.walkscape.app/";
  _paq.push(['setTrackerUrl', u+'matomo.php']);
  _paq.push(['setSiteId', '5']);
  var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
  g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();







/* sticky edit button */

// display the button only if #mw-content is present, if we are not in the edit mode, and if we're not in the Special: or Community: namespace
if (document.body.contains(document.getElementById("mw-content")) && !currentPageUrl.includes("action=") && currentPageNamespaceID != -1 && currentPageNamespaceID != 3004)  {
document.getElementById("mw-content").insertAdjacentHTML('afterbegin', '<a href="https://wiki-temp.walkscape.app/' + currentPageEditUrl + '"><div id="custom-editbutton"><svg width="40" height="40" viewBox="-12 -10 50 50"><path d="M 20 2 L 26 8 L 8 26 L 2 26 L 2 20 Z M 16 6 L 22 12"></path></svg></div></a>');
}











///////////////////////////////////////// ADDING THE INFO BUTTON

var infotitle = currentPageName + '/doc';

// add the info button ONLY when we use the edit mode now
if (document.body.contains(document.getElementById("mw-content")) && (currentPageUrl.includes("action=edit") || currentPageUrl.includes("action=submit"))) 
{
mw.loader.using('mediawiki.api', function() {
	var api = new mw.Api();
	
	api.get( {
     action: "query",
     titles: [infotitle],
 } ).then( function( ret ) {
     $.each( ret.query.pages, function() {
         if ( this.missing !== "" ) {
             pageExists();
         }
     } );
 });
 
 
function pageExists() {
	api.get( {
    action: 'parse',
    page: infotitle,
    contentmodel: 'wikitext'
} ).done( function ( data ) {
	InsertInfoPanel( data.parse.text['*'] );
});
}
});
}




function InsertInfoPanel( text )
{
	
	//check which namespace we're in and adapt the text to it
	var infopanelTitle = 'Page';
	if (currentPageNamespaceID == 10) { //Template
		infopanelTitle = 'Template';
	}
	else if (currentPageNamespaceID == 828) { //Module
		infopanelTitle = 'Module';
	}
	
	// insert the panel and button
	document.getElementById("mw-content").insertAdjacentHTML('afterbegin', '<div id="custom-infobutton"></div><div id="custom-infopanel" style="display: none"><div id="custom-infopanel-title">' + infopanelTitle + ' Info</div><div id="custom-infopanel-content">' + text + '</div></div>');
	
	//set up containers
	infopanel = document.getElementById("custom-infopanel");
	infobutton = document.getElementById("custom-infobutton");
	
	//add an event listener to the button
	infobutton.addEventListener("click", infobuttonClicked);
}



function infobuttonClicked()
{
	if (infopanel.style.display == 'none')
	{
		infopanel.style.display = 'block';
	}
	else
	{
		infopanel.style.display = 'none';
	}
}











/* rename the "DISCUSSION" talk page button to "DOCUMENTATION" */
//if there is such a button and we're in the Template: namespace
if (document.body.contains(document.getElementById("ca-talk")) && currentPageNamespaceID == 10) {
document.getElementById("ca-talk").innerHTML = '<svg class="cosmos-button-icon" width="28" height="28" viewBox="-2 -2 20 20"><path d="M 4 2 Q 4 0 6 0 L 14 0 Q 16 0 16 2 L 8 2 Q 8 0 6 0 Q 4 0 4 2 L 4 12 Q 4 14 2 14 Q 0 14 0 12 L 2 12 L 0 12 Q 0 14 2 14 L 12 14 Q 14 14 14 12 L 14 4"></path></svg><span class="cosmos-button-text">Documentation</span>';
}

/* call specific functions when the page loads */

// old browsers or already loaded
if (document.readyState!="loading") AfterPageLoad();
// modern browsers
else if (document.addEventListener) document.addEventListener("DOMContentLoaded", AfterPageLoad);



/* FUNCTIONS **********************************************************************************************************************/




function AfterPageLoad()
{
StartTabs();
}


/* Tabs */

function StartTabs()
{
buttons = document.getElementsByClassName("tab-button");
contents = document.getElementsByClassName("tab-content");

if (buttons.length > 0){
clickfunction(buttons[0]);

for (var i = 0; i < buttons.length; i++)
  {
    //console.log("Added Event Listener!");
    buttons[i].addEventListener("click", clickfunction);
  }
}
}



function clickfunction(thing) {
  if (thing.id == null)
    {
      thing = this;
    }
  
  //buttons
for (var i = 0; i < buttons.length; i++)
  {
    if (buttons[i].id == thing.id)
      {
        buttons[i].classList.remove("tab-disabled");
        buttons[i].classList.add("tab-active");
      }
    else
      {
        buttons[i].classList.remove("tab-active");
        buttons[i].classList.add("tab-disabled");
      }
  }
  //contents
  for (var i = 0; i < contents.length; i++)
  {
    if (contents[i].id == thing.id)
      {
        contents[i].style.display = 'block'
      }
    else
      {
        contents[i].style.display = 'none'
      }
  }
}