MediaWiki:Common.js: Difference between revisions
From BoyWiki
(append drop-down box) |
No edit summary |
||
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. */ | ||
/** | |||
* 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); | |||
} | |||
Revision as of 18:35, 14 October 2013
/* 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;
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, 'NavContent')) NavChild.style.display = 'none';
if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[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, 'NavContent')) NavChild.style.display = 'block';
if (hasClass(NavChild, 'NavToggle')) NavChild.firstChild.data = caption[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);