Main Page

Difference between revisions of "MediaWiki:Common.js"

From Arks-Visiphone
Jump to navigation Jump to search
(Reverting everything for now)
Line 1: Line 1:
 
/* Any JavaScript here will be loaded for all users on every page load. */
 
/* Any JavaScript here will be loaded for all users on every page load. */
  
/**
 
* JS Tab System, jacked and hacked from the jsprefs in wikibits.js
 
*
 
* Original code by Dantman
 
* Refactored a bit by Jack Phoenix on 11 April 2014
 
* @note No doubt that this could be greatly simplified by converting this to jQuery,
 
*      but I think it's nice to have this JS thingy fully reusable.
 
*/
 
{{Help page}}
 
 
/**
 
* JS Tab System, jacked and hacked from the jsprefs in wikibits.js
 
*
 
* Original code by Dantman
 
* Refactored a bit by Jack Phoenix on 11 April 2014
 
* @note No doubt that this could be greatly simplified by converting this to jQuery,
 
*      but I think it's nice to have this JS thingy fully reusable.
 
*/
 
var TabSystem = {
 
/**
 
* @property {boolean}
 
* Is the user's browser a KHTML-based one (usually, but not always, Konqueror)?
 
*/
 
isKHTML: ( navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled ) ),
 
 
/**
 
* @property {boolean}
 
* Is the user's browser Opera?
 
*/
 
isOpera: navigator.userAgent.toLowerCase().indexOf( 'opera' ) != -1,
 
 
/*
 
Written by Jonathan Snook, http://www.snook.ca/jonathan
 
Add-ons by Robert Nyman, http://www.robertnyman.com
 
Author says "The credit comment is all it takes, no license. Go crazy with it!:-)"
 
From http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/
 
*/
 
getElementsByClassName: function( oElm, strTagName, oClassNames ) {
 
var arrReturnElements = [];
 
if ( typeof oElm.getElementsByClassName == 'function' ) {
 
/* Use a native implementation where possible FF3, Saf3.2, Opera 9.5 */
 
var arrNativeReturn = oElm.getElementsByClassName( oClassNames );
 
if ( strTagName == '*' ) {
 
return arrNativeReturn;
 
}
 
for ( var h = 0; h < arrNativeReturn.length; h++ ) {
 
if ( arrNativeReturn[h].tagName.toLowerCase() == strTagName.toLowerCase() ) {
 
arrReturnElements[arrReturnElements.length] = arrNativeReturn[h];
 
}
 
}
 
return arrReturnElements;
 
}
 
 
var arrElements = ( strTagName == '*' && oElm.all ) ? oElm.all : oElm.getElementsByTagName( strTagName );
 
var arrRegExpClassNames = [];
 
if ( typeof oClassNames == 'object' ) {
 
for ( var i = 0; i < oClassNames.length; i++ ) {
 
arrRegExpClassNames[arrRegExpClassNames.length] =
 
new RegExp( "(^|\\s)" + oClassNames[i].replace( /\-/g, "\\-" ) + "(\\s|$)" );
 
}
 
} else {
 
arrRegExpClassNames[arrRegExpClassNames.length] =
 
new RegExp( "(^|\\s)" + oClassNames.replace( /\-/g, "\\-" ) + "(\\s|$)" );
 
}
 
 
var oElement;
 
var bMatchesAll;
 
for ( var j = 0; j < arrElements.length; j++ ) {
 
oElement = arrElements[j];
 
bMatchesAll = true;
 
for ( var k = 0; k < arrRegExpClassNames.length; k++ ) {
 
if ( !arrRegExpClassNames[k].test( oElement.className ) ) {
 
bMatchesAll = false;
 
break;
 
}
 
}
 
if ( bMatchesAll ) {
 
arrReturnElements[arrReturnElements.length] = oElement;
 
}
 
}
 
 
return arrReturnElements;
 
},
 
 
/**
 
* Main function that performs all the magic on all div elements that have
 
* class="tab" and are inside a div that has class="tabcontainer".
 
*/
 
main: function() {
 
var tabcontainers = TabSystem.getElementsByClassName( document, 'div', 'tabcontainer' );
 
for ( var tc = 0; tc < tabcontainers.length; tc++ ) {
 
if ( !tabcontainers[tc] || !document.createElement ) {
 
return;
 
}
 
if ( tabcontainers[tc].nodeName.toLowerCase() == 'a' ) {
 
return; // Occasional IE problem
 
}
 
 
tabcontainers[tc].className += ' jstabs';
 
 
var sections = [];
 
var children = tabcontainers[tc].childNodes;
 
var seci = 0;
 
 
for ( var i = 0; i < children.length; i++ ) {
 
if ( children[i].className && children[i].className.match( /tab/i ) ) {
 
children[i].id = 'tabsection-' + seci + '-' + tc;
 
children[i].className += ' tabsection';
 
// Opera and KHTML-based browsers get a special class
 
if ( TabSystem.isOpera || TabSystem.isKHTML ) {
 
children[i].className += ' tabsection operatabsection';
 
}
 
var legends = TabSystem.getElementsByClassName( children[i], 'div', 'tab' );
 
sections[seci] = {};
 
legends[0].className = 'mainTab';
 
if ( legends[0] && legends[0].firstChild.nodeValue ) {
 
sections[seci].text = legends[0].firstChild.nodeValue;
 
} else {
 
sections[seci].text = '# ' + seci;
 
}
 
sections[seci].secid = children[i].id;
 
seci++;
 
if ( sections.length != 1 ) {
 
children[i].style.display = 'none';
 
} else {
 
var selectedid = children[i].id;
 
}
 
}
 
}
 
 
var toc = document.createElement( 'ul' );
 
toc.className = 'tabtoc';
 
toc.id = 'tabtoc-' + tc;
 
toc.selectedid = selectedid;
 
 
for ( i = 0; i < sections.length; i++ ) {
 
var li = document.createElement( 'li' );
 
if ( i === 0 ) {
 
li.className = 'selected';
 
}
 
var a = document.createElement( 'a' );
 
a.href = '#' + sections[i].secid;
 
a.onmousedown = a.onclick = TabSystem.uncoverTabSection;
 
a.appendChild( document.createTextNode( sections[i].text ) );
 
a.tc = tc;
 
a.secid = sections[i].secid;
 
li.appendChild( a );
 
toc.appendChild( li );
 
}
 
 
tabcontainers[tc].parentNode.insertBefore( toc, tabcontainers[tc] );
 
}
 
},
 
 
/**
 
* Show the contents of a tab section when the user clicks on the tab.
 
*
 
* @return {boolean} Always false
 
*/
 
uncoverTabSection: function() {
 
var oldsecid = this.parentNode.parentNode.selectedid;
 
var newsec = document.getElementById( this.secid );
 
if ( oldsecid != this.secid ) {
 
var ul = document.getElementById( 'tabtoc-' + this.tc );
 
document.getElementById( oldsecid ).style.display = 'none';
 
newsec.style.display = 'block';
 
ul.selectedid = this.secid;
 
var lis = ul.getElementsByTagName( 'li' );
 
for ( var i = 0; i < lis.length; i++ ) {
 
lis[i].className = '';
 
}
 
this.parentNode.className = 'selected';
 
}
 
return false;
 
}
 
};
 
 
// Attach the onload handler. This is the only not-so-self-contained part of
 
// this script: we use either jQuery or the older standard MediaWiki onload
 
// mechanism to run the script on page load. If you're going to use this little
 
// script on a non-MediaWiki-based site, you'll want to
 
if ( typeof $ === 'function' ) {
 
$( document ).ready( function() {
 
TabSystem.main();
 
} );
 
} else if ( typeof addOnloadHook === 'function' ) {
 
addOnloadHook( TabSystem.main );
 
}
 
  
 
//function to open link in new tab
 
//function to open link in new tab
Line 234: Line 46:
 
$("#sidebar").toggleClass("collapsed");
 
$("#sidebar").toggleClass("collapsed");
 
$("#content").toggleClass("col-md-12 col-md-9");
 
$("#content").toggleClass("col-md-12 col-md-9");
 
$(function () {
 
  $('[data-toggle="popover"]').popover()
 
});
 

Revision as of 04:32, 18 January 2019

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


//function to open link in new tab
function ExtLinks() {
var extlinks = getElementsByClassName('extlink');
for (var i=0, il=extlinks.length; i<il; i++) {
extlinks[i].setAttribute('target','_blank');
};
};
addOnloadHook(ExtLinks);


/**
 * @source https://www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
 * @revision 2017-05-16
 */
mw.loader.using( ['mediawiki.util', 'mediawiki.notify'], function () {
	var extraCSS = mw.util.getParamValue( 'withCSS' ),
		extraJS = mw.util.getParamValue( 'withJS' );

	if ( extraCSS ) {
		// DONT REMOVE THIS IF (unless you are OK with CSRF attacks)
		if ( /^MediaWiki:[^&<>=%#]*\.css$/.test( extraCSS ) ) {
			mw.loader.load( '/wiki/index.php?title=' + encodeURIComponent( extraCSS ) + '&action=raw&ctype=text/css', 'text/css' );
		} else {
			mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );
		}
	}

	if ( extraJS ) {
		// DONT REMOVE THIS IF (unless you are OK with XSS & CSRF attacks)
		if ( /^MediaWiki:[^&<>=%#]*\.js$/.test( extraJS ) ) {
			mw.loader.load( '/wiki/index.php?title=' + encodeURIComponent( extraJS ) + '&action=raw&ctype=text/javascript' );
		} else {
			mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );
		}
	}
});

document.getElementById("collapse-global").addEventListener("click", function(event){
    event.classList.remove("mw-collapsible-toggle-collapsed");
});

/* to toggle the sidebar, just switch the CSS classes */
$("#sidebar").toggleClass("collapsed");
$("#content").toggleClass("col-md-12 col-md-9");