MediaWiki:Common.js : Différence entre versions
De Casio Universal Wiki
(nom d'utilisateur retiré) |
|||
| (4 révisions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
| + | /*alignement des infobox*/ | ||
| + | function infoboxTableInit() { | ||
| + | var infoboxTableA=1; | ||
| + | var infoboxTableAmax=0; | ||
| + | var infoboxTableTemp; | ||
| + | while(document.getElementById("infoboxTableA"+infoboxTableA)!= null) | ||
| + | { | ||
| + | if(document.getElementById("infoboxTableA"+infoboxTableA).offsetHeight>infoboxTableAmax){infoboxTableAmax=document.getElementById("infoboxTableA"+infoboxTableA).offsetHeight;} | ||
| + | infoboxTableA++; | ||
| + | } | ||
| + | infoboxTableTemp=1; | ||
| + | while(infoboxTableTemp<=infoboxTableA) | ||
| + | { | ||
| + | if(document.getElementById("infoboxTableA"+infoboxTableTemp)!=null){document.getElementById("infoboxTableA"+infoboxTableTemp).style.height=infoboxTableAmax+"px"} | ||
| + | infoboxTableTemp++; | ||
| + | }} | ||
| + | window.onload = infoboxTableInit; | ||
| + | |||
| + | |||
| + | /** | ||
| + | * insertAfter : insérer un élément dans une page | ||
| + | */ | ||
| + | function insertAfter(parent, node, referenceNode) { | ||
| + | parent.insertBefore(node, referenceNode.nextSibling); | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * getElementsByClass : rechercher les éléments de la page dont le paramètre "class" est celui recherché | ||
| + | */ | ||
| + | function getElementsByClass(searchClass, node, tag) { | ||
| + | if (node == null) node = document; | ||
| + | if (tag == null) tag = '*'; | ||
| + | return getElementsByClassName(node, tag, searchClass); | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Diverses fonctions manipulant les classes | ||
| + | * Utilise des expressions régulières et un cache pour de meilleures perfs | ||
| + | * 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) { | ||
| + | var haystack = node.className; | ||
| + | if(!haystack) return false; | ||
| + | if (className === haystack) { | ||
| + | return true; | ||
| + | } | ||
| + | return (" " + haystack + " ").indexOf(" " + className + " ") > -1; | ||
| + | } | ||
| + | |||
| + | function addClass(node, className) { | ||
| + | if (hasClass(node, className)) { | ||
| + | return false; | ||
| + | } | ||
| + | var cache = node.className; | ||
| + | if (cache) { | ||
| + | node.className = cache + ' ' + className; | ||
| + | } else { | ||
| + | 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); | ||
| + | } | ||
| + | |||
| + | |||
| + | /** | ||
| + | * Récupère la valeur du cookie | ||
| + | */ | ||
| + | function getCookieVal(name) { | ||
| + | var cookiePos = document.cookie.indexOf(name + "="); | ||
| + | var cookieValue = false; | ||
| + | if (cookiePos > -1) { | ||
| + | cookiePos += name.length + 1; | ||
| + | var endPos = document.cookie.indexOf(";", cookiePos); | ||
| + | if (endPos > -1) | ||
| + | cookieValue = document.cookie.substring(cookiePos, endPos); | ||
| + | else | ||
| + | cookieValue = document.cookie.substring(cookiePos); | ||
| + | } | ||
| + | return cookieValue; | ||
| + | } | ||
| + | |||
| + | // Récupère proprement le contenu textuel d'un noeud et de ses noeuds descendants | ||
| + | // Copyright Harmen Christophe, http://openweb.eu.org/articles/validation_avancee, CC | ||
| + | function getTextContent(oNode) { | ||
| + | if(!oNode) return null; | ||
| + | if (typeof(oNode.textContent)!="undefined") {return oNode.textContent;} | ||
| + | switch (oNode.nodeType) { | ||
| + | case 3: // TEXT_NODE | ||
| + | case 4: // CDATA_SECTION_NODE | ||
| + | return oNode.nodeValue; | ||
| + | break; | ||
| + | case 7: // PROCESSING_INSTRUCTION_NODE | ||
| + | case 8: // COMMENT_NODE | ||
| + | if (getTextContent.caller!=getTextContent) { | ||
| + | return oNode.nodeValue; | ||
| + | } | ||
| + | break; | ||
| + | case 9: // DOCUMENT_NODE | ||
| + | case 10: // DOCUMENT_TYPE_NODE | ||
| + | case 12: // NOTATION_NODE | ||
| + | return null; | ||
| + | break; | ||
| + | } | ||
| + | var _textContent = ""; | ||
| + | oNode = oNode.firstChild; | ||
| + | while (oNode) { | ||
| + | _textContent += getTextContent(oNode); | ||
| + | oNode = oNode.nextSibling; | ||
| + | } | ||
| + | return _textContent; | ||
| + | } | ||
| + | |||
| + | // Array.indexOf : recherche un élément dans un tableau | ||
| + | |||
| + | if (!Array.prototype.indexOf) { | ||
| + | Array.prototype.indexOf = function(obj) { | ||
| + | for (var i=0; i<this.length; i++) { | ||
| + | if (this[i] == obj){ | ||
| + | return i; | ||
| + | } | ||
| + | } | ||
| + | return -1; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | if(!String.prototype.HTMLize){ | ||
| + | String.prototype.HTMLize = function() { | ||
| + | var chars = new Array('&','<','>','"'); | ||
| + | var entities = new Array('amp','lt','gt','quot'); | ||
| + | var string = this; | ||
| + | for (var i=0; i<chars.length; i++) { | ||
| + | var regex = new RegExp(chars[i], "g"); | ||
| + | string = string.replace(regex, '&' + entities[i] + ';'); | ||
| + | } | ||
| + | return string; | ||
| + | } | ||
| + | } | ||
| + | |||
| + | |||
| + | /**********************************************************************************************************/ | ||
| + | /* Fonctions générales MediaWiki (pallient les limitations du logiciel) */ | ||
| + | /* Surveiller : http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/skins/common/wikibits.js?view=log */ | ||
| + | /**********************************************************************************************************/ | ||
| + | |||
| + | /* | ||
| + | * Fonction générales de lancement de fonctions ou de script | ||
| + | * DÉPRÉCIÉ : utiliser addOnloadHook simplement | ||
| + | */ | ||
| + | function addLoadEvent(func) { | ||
| + | addOnloadHook(func); | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Insérer un JavaScript d'une page particulière, idée de Mickachu | ||
| + | * DÉPRÉCIÉ : utiliser importScript qui fait partie du logiciel | ||
| + | */ | ||
| + | function loadJs(page) { | ||
| + | importScript(page); | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Projet JavaScript | ||
| + | */ | ||
| + | function obtenir(name) { | ||
| + | importScript('MediaWiki:Gadget-' + name + '.js'); | ||
| + | } | ||
| + | |||
| + | /** | ||
| + | * Transformer les pages du Bistro, du BA et les pages spécifiées en page de discussion | ||
| + | */ | ||
| + | function TransformeEnDiscussion() { | ||
| + | if( (wgPageName.search('Wikipédia:Le_Bistro') != -1) | ||
| + | || (wgPageName.search('Wikipédia:Bulletin_des_administrateurs') != -1) | ||
| + | || document.getElementById('transformeEnPageDeDiscussion')) { | ||
| + | removeClass(document.body, 'ns-subject'); | ||
| + | addClass(document.body, 'ns-talk'); | ||
| + | } | ||
| + | } | ||
| + | addOnloadHook(TransformeEnDiscussion); | ||
| + | |||
| + | /** | ||
| + | * Transformer certaines pages en pseudo-article | ||
| + | * c'est raisonnable ? --Tavernier | ||
| + | */ | ||
| + | function TransformeEnArticle() { | ||
| + | var transformeEnA = document.getElementById("transformeEnArticle"); | ||
| + | if(transformeEnA) document.body.className = "ns-0"; | ||
| + | } | ||
| + | addOnloadHook(TransformeEnArticle); | ||
| + | |||
| + | /** | ||
| + | * Ajouter un bouton à la fin de la barre d'outils | ||
| + | */ | ||
| + | function addCustomButton(imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) { | ||
| + | mwCustomEditButtons[mwCustomEditButtons.length] = | ||
| + | {"imageId": imageId, | ||
| + | "imageFile": imageFile, | ||
| + | "speedTip": speedTip, | ||
| + | "tagOpen": tagOpen, | ||
| + | "tagClose": tagClose, | ||
| + | "sampleText": sampleText}; | ||
| + | } | ||
| + | |||
/* 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. */ | ||
/** | /** | ||
Version actuelle datée du 27 juin 2012 à 18:13
/*alignement des infobox*/
function infoboxTableInit() {
var infoboxTableA=1;
var infoboxTableAmax=0;
var infoboxTableTemp;
while(document.getElementById("infoboxTableA"+infoboxTableA)!= null)
{
if(document.getElementById("infoboxTableA"+infoboxTableA).offsetHeight>infoboxTableAmax){infoboxTableAmax=document.getElementById("infoboxTableA"+infoboxTableA).offsetHeight;}
infoboxTableA++;
}
infoboxTableTemp=1;
while(infoboxTableTemp<=infoboxTableA)
{
if(document.getElementById("infoboxTableA"+infoboxTableTemp)!=null){document.getElementById("infoboxTableA"+infoboxTableTemp).style.height=infoboxTableAmax+"px"}
infoboxTableTemp++;
}}
window.onload = infoboxTableInit;
/**
* insertAfter : insérer un élément dans une page
*/
function insertAfter(parent, node, referenceNode) {
parent.insertBefore(node, referenceNode.nextSibling);
}
/**
* getElementsByClass : rechercher les éléments de la page dont le paramètre "class" est celui recherché
*/
function getElementsByClass(searchClass, node, tag) {
if (node == null) node = document;
if (tag == null) tag = '*';
return getElementsByClassName(node, tag, searchClass);
}
/**
* Diverses fonctions manipulant les classes
* Utilise des expressions régulières et un cache pour de meilleures perfs
* 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) {
var haystack = node.className;
if(!haystack) return false;
if (className === haystack) {
return true;
}
return (" " + haystack + " ").indexOf(" " + className + " ") > -1;
}
function addClass(node, className) {
if (hasClass(node, className)) {
return false;
}
var cache = node.className;
if (cache) {
node.className = cache + ' ' + className;
} else {
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);
}
/**
* Récupère la valeur du cookie
*/
function getCookieVal(name) {
var cookiePos = document.cookie.indexOf(name + "=");
var cookieValue = false;
if (cookiePos > -1) {
cookiePos += name.length + 1;
var endPos = document.cookie.indexOf(";", cookiePos);
if (endPos > -1)
cookieValue = document.cookie.substring(cookiePos, endPos);
else
cookieValue = document.cookie.substring(cookiePos);
}
return cookieValue;
}
// Récupère proprement le contenu textuel d'un noeud et de ses noeuds descendants
// Copyright Harmen Christophe, http://openweb.eu.org/articles/validation_avancee, CC
function getTextContent(oNode) {
if(!oNode) return null;
if (typeof(oNode.textContent)!="undefined") {return oNode.textContent;}
switch (oNode.nodeType) {
case 3: // TEXT_NODE
case 4: // CDATA_SECTION_NODE
return oNode.nodeValue;
break;
case 7: // PROCESSING_INSTRUCTION_NODE
case 8: // COMMENT_NODE
if (getTextContent.caller!=getTextContent) {
return oNode.nodeValue;
}
break;
case 9: // DOCUMENT_NODE
case 10: // DOCUMENT_TYPE_NODE
case 12: // NOTATION_NODE
return null;
break;
}
var _textContent = "";
oNode = oNode.firstChild;
while (oNode) {
_textContent += getTextContent(oNode);
oNode = oNode.nextSibling;
}
return _textContent;
}
// Array.indexOf : recherche un élément dans un tableau
if (!Array.prototype.indexOf) {
Array.prototype.indexOf = function(obj) {
for (var i=0; i<this.length; i++) {
if (this[i] == obj){
return i;
}
}
return -1;
}
}
if(!String.prototype.HTMLize){
String.prototype.HTMLize = function() {
var chars = new Array('&','<','>','"');
var entities = new Array('amp','lt','gt','quot');
var string = this;
for (var i=0; i<chars.length; i++) {
var regex = new RegExp(chars[i], "g");
string = string.replace(regex, '&' + entities[i] + ';');
}
return string;
}
}
/**********************************************************************************************************/
/* Fonctions générales MediaWiki (pallient les limitations du logiciel) */
/* Surveiller : http://svn.wikimedia.org/viewvc/mediawiki/trunk/phase3/skins/common/wikibits.js?view=log */
/**********************************************************************************************************/
/*
* Fonction générales de lancement de fonctions ou de script
* DÉPRÉCIÉ : utiliser addOnloadHook simplement
*/
function addLoadEvent(func) {
addOnloadHook(func);
}
/**
* Insérer un JavaScript d'une page particulière, idée de Mickachu
* DÉPRÉCIÉ : utiliser importScript qui fait partie du logiciel
*/
function loadJs(page) {
importScript(page);
}
/**
* Projet JavaScript
*/
function obtenir(name) {
importScript('MediaWiki:Gadget-' + name + '.js');
}
/**
* Transformer les pages du Bistro, du BA et les pages spécifiées en page de discussion
*/
function TransformeEnDiscussion() {
if( (wgPageName.search('Wikipédia:Le_Bistro') != -1)
|| (wgPageName.search('Wikipédia:Bulletin_des_administrateurs') != -1)
|| document.getElementById('transformeEnPageDeDiscussion')) {
removeClass(document.body, 'ns-subject');
addClass(document.body, 'ns-talk');
}
}
addOnloadHook(TransformeEnDiscussion);
/**
* Transformer certaines pages en pseudo-article
* c'est raisonnable ? --Tavernier
*/
function TransformeEnArticle() {
var transformeEnA = document.getElementById("transformeEnArticle");
if(transformeEnA) document.body.className = "ns-0";
}
addOnloadHook(TransformeEnArticle);
/**
* Ajouter un bouton à la fin de la barre d'outils
*/
function addCustomButton(imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) {
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageId": imageId,
"imageFile": imageFile,
"speedTip": speedTip,
"tagOpen": tagOpen,
"tagClose": tagClose,
"sampleText": sampleText};
}
/* Any JavaScript here will be loaded for all users on every page load. */
/**
* Boîtes déroulantes
*
* Pour [[Modèle:Méta palette de navigation]]
*/
var Palette_Enrouler = '[masquer]';
var Palette_Derouler = '[afficher]';
var Palette_max = 1;
var Palette_index = -1;
function Palette_toggle(indexPalette){
var Button = document.getElementById( "collapseButton" + indexPalette);
var Table = document.getElementById( "collapsibleTable" + indexPalette);
if (!Table || !Button) return false;
var Rows = Table.rows;
var RowDisplay = "none";
if (Button.firstChild.data == Palette_Derouler) {
Button.firstChild.data = Palette_Enrouler;
RowDisplay = Rows[0].style.display;
} else {
Button.firstChild.data = Palette_Derouler;
}
for (var i = 1; i < Rows.length; i++) {
Rows[i].style.display = RowDisplay
}
}
function Palette(Element){
if(!Element) Element = document;
var TableIndex = 0;
var TableIndexes = new Array();
var Tables = Element.getElementsByTagName( "table" );
for ( var i = 0; i < Tables.length; i++ ) {
if ( hasClass( Tables[i], "collapsible" ) ) {
var Table = Tables[i];
var Header = Table.getElementsByTagName( "tr" )[0].getElementsByTagName( "th" )[0];
/* only add button and increment count if there is a header row to work with */
if (Header) {
TableIndex++
Palette_index++;
TableIndexes[Palette_index] = Table;
Table.setAttribute( "id", "collapsibleTable" + Palette_index );
var Button = document.createElement( "span" );
var ButtonLink = document.createElement( "a" );
var ButtonText = document.createTextNode( Palette_Enrouler );
Button.className = "navboxToggle";
ButtonLink.setAttribute( "id", "collapseButton" + Palette_index );
ButtonLink.setAttribute( "href", "javascript:;" );
addHandler( ButtonLink, "click", new Function( "evt", "Palette_toggle(" + Palette_index + " ); return killEvt( evt );") );
ButtonLink.appendChild( ButtonText );
Button.appendChild( document.createTextNode("\u00a0")); //ajout d'un espace insécable pour décoller ce bouton du texte de la celulle
Button.appendChild( ButtonLink );
Header.insertBefore( Button, Header.childNodes[0] );
}
}
}
for(var index in TableIndexes){
var Table = TableIndexes[index];
if(hasClass(Table,"collapsed")||(TableIndex>Palette_max && hasClass(Table,"autocollapse")))
Palette_toggle(index);
}
}
addOnloadHook(Palette);
/**
* Pour [[Modèle:Boîte déroulante]]
*/
var BoiteDeroulante_Enrouler = '[masquer]';
var BoiteDeroulante_Derouler = '[afficher]';
var BoiteDeroulante_max = 0;
var BoiteDeroulante_index = -1;
function BoiteDeroulante_toggle(indexBoiteDeroulante){
var NavFrame = document.getElementById("NavFrame" + indexBoiteDeroulante);
var NavToggle = document.getElementById("NavToggle" + indexBoiteDeroulante);
var CaptionContainer = document.getElementById("NavCaption" + indexBoiteDeroulante);
if (!NavFrame || !NavToggle || !CaptionContainer) return;
var caption = new Array();
var CaptionSpans = CaptionContainer.getElementsByTagName('span');
caption[0] = CaptionSpans[0].innerHTML;
caption[1] = CaptionSpans[1].innerHTML;
var Contents = NavFrame.getElementsByTagName('div');
if (NavToggle.innerHTML == caption[1]) {
NavToggle.innerHTML = caption[0];
for(var a=0,m=Contents.length;a<m;a++){
if(hasClass(Contents[a], "NavContent")){
Contents[a].style.display = 'none';
return;
}
}
}else{
NavToggle.innerHTML = caption[1];
for(var a=0,m=Contents.length;a<m;a++){
if(hasClass(Contents[a], "NavContent")){
Contents[a].style.display = 'block';
return;
}
}
}
}
function BoiteDeroulante(Element){
if(!Element) Element = document;
var NavFrameCount = -1;
var NavFrames = Element.getElementsByTagName("div");
for(var i=0,l=NavFrames.length;i<l;i++){
if(hasClass(NavFrames[i], "NavFrame")){
var NavFrame = NavFrames[i];
NavFrameCount++;
BoiteDeroulante_index++;
if (NavFrame.title && NavFrame.title.indexOf("/")!=-1) {
var Enrouler = NavFrame.title.HTMLize().split("/")[1];
var Derouler = NavFrame.title.HTMLize().split("/")[0];
}else{
var Enrouler = BoiteDeroulante_Enrouler;
var Derouler = BoiteDeroulante_Derouler;
}
NavFrame.title='';
var CaptionContainer = document.createElement('span');
CaptionContainer.id = 'NavCaption' + BoiteDeroulante_index;
CaptionContainer.style.display = "none";
CaptionContainer.innerHTML = '<span>' + Derouler + '</span><span>' + Enrouler + '</span>';
NavFrame.appendChild(CaptionContainer);
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.id = 'NavToggle' + BoiteDeroulante_index;
NavToggle.href = 'javascript:BoiteDeroulante_toggle(' + BoiteDeroulante_index + ');';
var NavToggleText = document.createTextNode(Enrouler);
NavToggle.appendChild(NavToggleText);
NavFrame.insertBefore( NavToggle, NavFrame.firstChild );
NavFrame.id = 'NavFrame' + BoiteDeroulante_index;
if (BoiteDeroulante_max <= NavFrameCount) {
BoiteDeroulante_toggle(BoiteDeroulante_index);
}
}
}
}
addOnloadHook(BoiteDeroulante);