MediaWiki:Common.js: Difference between revisions
From BoyWiki
No edit summary |
No edit summary |
||
Line 165: | Line 165: | ||
var xhr3 = createxhrobject(); | var xhr3 = createxhrobject(); | ||
if (xhr3 == null) return; | if (xhr3 == null) return; | ||
xhr1.open('GET', '/en/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true); | |||
xhr1.onreadystatechange = function() {fuoow_hdlr('en');} | |||
xhr1.send(''); | |||
xhr2.open('GET', '/fr/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true); | xhr2.open('GET', '/fr/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true); | ||
xhr2.onreadystatechange = function() {fuoow_hdlr( | xhr2.onreadystatechange = function() {fuoow_hdlr('fr');} | ||
xhr2.send(''); | xhr2.send(''); | ||
xhr3.open('GET', '/de/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true); | |||
xhr3.onreadystatechange = function() {fuoow_hdlr('de');} | |||
xhr3.send(''); | |||
var h2 = document.createElement('h2'); | var h2 = document.createElement('h2'); | ||
Line 189: | Line 189: | ||
/* Request handler and display */ | /* Request handler and display */ | ||
function fuoow_hdlr( | function fuoow_hdlr(lg) { | ||
if (this.readyState == 4 && this.status == 200) { | |||
if ( | var pages = this.responseXML.documentElement; | ||
var pages = | |||
var pglst = pages.getElementsByTagName('imageusage')[0].childNodes; | var pglst = pages.getElementsByTagName('imageusage')[0].childNodes; | ||
var pgs = ''; | var pgs = ''; |
Revision as of 20:26, 12 July 2014
/* Any JavaScript here will be loaded for all users on every page load. */
/**
* Diverses fonctions manipulant les classes (utilisées par les boîtes déroulantes)
* isClass et whichClass depuis http://fr.wikibooks.org/w/index.php?title=MediaWiki:Common.js&oldid=140211
* hasClass, addClass, removeClass et eregReplace depuis http://drupal.org.in/doc/misc/drupal.js.source.html
* surveiller l'implémentation de .classList http://www.w3.org/TR/2008/WD-html5-diff-20080122/#htmlelement-extensions
*/
function isClass(element, classe) {
return hasClass(element, classe);
}
function whichClass(element, classes) {
var s=" "+element.className+" ";
for(var i=0;i<classes.length;i++)
if (s.indexOf(" "+classes[i]+" ")>=0) return i;
return -1;
}
function hasClass(node, className) {
if (node.className == className) {
return true;
}
var reg = new RegExp('(^| )'+ className +'($| )')
if (reg.test(node.className)) {
return true;
}
return false;
}
function addClass(node, className) {
if (hasClass(node, className)) {
return false;
}
node.className += ' '+ className;
return true;
}
function removeClass(node, className) {
if (!hasClass(node, className)) {
return false;
}
node.className = eregReplace('(^|\\s+)'+ className +'($|\\s+)', ' ', node.className);
return true;
}
function eregReplace(search, replace, subject) {
return subject.replace(new RegExp(search,'g'), replace);
}
/**
* Drop-down box [[Template:DD-box]]
*/
var NavigationBarShowDefault = 0;
var collapseCaption = ' ⇧ ';
var expandCaption = ' ⇩ ';
function toggleNavigationBar(indexNavigationBar) {
var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
if (!NavFrame || !NavToggle) return;
// overload labels show/hide with title attribute
// exemple : title="[down]:[up]"
var caption = [expandCaption, collapseCaption];
if (NavFrame.title && NavFrame.title.length > 0) {
caption = NavFrame.title.split(":");
if (caption.length < 2) caption.push(collapseCaption);
}
// if shown now
if (NavToggle.firstChild.data == caption[1]) {
for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
if (hasClass(NavChild, 'NavPic')) NavChild.style.display = 'none';
if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[0];
if (hasClass(NavChild, 'NavContent')) {
NavChild.style.maxHeight = '0px';
NavChild.style.overflow = 'hidden';
NavChild.style.opacity = '0';
}
}
// if hidden now
} else if (NavToggle.firstChild.data == caption[0]) {
for ( var NavChild = NavFrame.firstChild; NavChild != null; NavChild = NavChild.nextSibling ) {
if (hasClass(NavChild, 'NavPic')) NavChild.style.display = 'block';
if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[1];
if (hasClass(NavChild, 'NavContent')) {
NavChild.style.maxHeight = '300px';
NavChild.style.overflow = 'auto';
NavChild.style.opacity = '1';
}
}
}
}
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton() {
var indexNavigationBar = 0;
var NavFrame;
// iterate over all < div >-elements
for( var i=0; NavFrame = document.getElementsByTagName("div")[i]; i++ ) {
// if found a navigation bar
if (hasClass(NavFrame, "NavFrame")) {
indexNavigationBar++;
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
// surcharge des libellés dérouler/enrouler grâce a l'attribut title
var caption = collapseCaption;
if (NavFrame.title && NavFrame.title.indexOf(":") > 0) {
caption = NavFrame.title.split(":")[1];
}
var NavToggleText = document.createTextNode(caption);
NavToggle.appendChild(NavToggleText);
// add NavToggle-Button as first div-element
// in <div class="NavFrame">
NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
}
}
// if more Navigation Bars found than Default: hide all
if (NavigationBarShowDefault < indexNavigationBar) {
for( var i=1; i<=indexNavigationBar; i++ ) {
toggleNavigationBar(i);
}
}
}
addOnloadHook(createNavigationBarToggleButton);
/************************************************************/
/* Create XHR object for http req */
function createxhrobject() {
if (window.XMLHttpRequest) { // all browsers
return new XMLHttpRequest();
}
else if (window.ActiveXObject) { // IE < 7
return new ActiveXObject("Msxml2.XMLHTTP");
}
else return null;
}
/************************************************************/
/* File usage on other wikis - Search image usage */
function fuoow() {
if (wgAction != "view" || wgNamespaceNumber != 6) return;
var xhr1 = createxhrobject();
if (xhr1 == null) return;
var xhr2 = createxhrobject();
if (xhr2 == null) return;
var xhr3 = createxhrobject();
if (xhr3 == null) return;
xhr1.open('GET', '/en/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true);
xhr1.onreadystatechange = function() {fuoow_hdlr('en');}
xhr1.send('');
xhr2.open('GET', '/fr/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true);
xhr2.onreadystatechange = function() {fuoow_hdlr('fr');}
xhr2.send('');
xhr3.open('GET', '/de/api.php?action=query&list=imageusage&iutitle='+wgPageName+'&iunamespace=0&iulimit=10&format=xml', true);
xhr3.onreadystatechange = function() {fuoow_hdlr('de');}
xhr3.send('');
var h2 = document.createElement('h2');
h2.id = 'globalusage';
var h2txt = document.createTextNode('File usage on other wikis');
h2.appendChild(h2txt);
var locat = document.getElementById('mw-imagepage-section-linkstoimage') || document.getElementById('mw-imagepage-nolinkstoimage');
locat.parentNode.insertBefore(h2, locat.nextSibling);
var ul = document.createElement('ul');
ul.id = 'imagepage-section-globalusage';
locat.parentNode.insertBefore(ul, locat.nextSibling.nextSibling);
}
addOnloadHook(fuoow);
/* Request handler and display */
function fuoow_hdlr(lg) {
if (this.readyState == 4 && this.status == 200) {
var pages = this.responseXML.documentElement;
var pglst = pages.getElementsByTagName('imageusage')[0].childNodes;
var pgs = '';
for (var i = 0; i < pglst.length ; i++) {
pgs += '<li><a href="/'+lg+'/'+pglst[i].getAttribute('title')+'">'+pglst[i].getAttribute('title')+'</a></li>';
}
if (pgs.length) document.getElementById('imagepage-section-globalusage').innerHTML += pgs;
}
}