« MediaWiki:Common.js » : différence entre les versions
Apparence
Contenu supprimé Contenu ajouté
Aucun résumé des modifications |
Copie de WP demandée sur Wikiquote:Requête_aux_administrateurs#Interface_et_gadgets pour faire fonctionner un modèle utilisé |
||
Ligne 524 : | Ligne 524 : | ||
} |
} |
||
} ); |
} ); |
||
/** |
|||
* Transformer les pages du Bistro, du BA et les pages spécifiées en page de discussion |
|||
*/ |
|||
if ( mw.config.get( 'wgNamespaceNumber' ) >= 2 ) { |
|||
$( function ( $ ) { |
|||
if ( $( '#transformeEnPageDeDiscussion' ).length ) { |
|||
$( 'body' ).removeClass( 'ns-subject' ).addClass( 'ns-talk' ); |
|||
} |
|||
} ); |
|||
} |
Version du 30 août 2023 à 22:20
//<pre>
/**
* 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
*/
// Récupère proprement le contenu textuel d'un nœud et de ses nœuds descendants
// Copyright Harmen Christophe, http://openweb.eu.org/articles/validation_avancee, CC
function getTextContent(oNode) {
if (typeof(oNode.textContent)!="undefined") return oNode.textContent;
switch (oNode.nodeType) {
case 3: // TEXT_NODE
case 4: // CDATA_SECTION_NODE
return oNode.nodeValue;
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;
}
var _textContent = "";
oNode = oNode.firstChild;
while (oNode) {
_textContent += getTextContent(oNode);
oNode = oNode.nextSibling;
}
return _textContent;
}
/**
* insertAfter : insérer un élément dans une page
*/
function insertAfter(parent, node, referenceNode)
{ parent.insertBefore(node, referenceNode.nextSibling); }
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);
}
// ============================================================
// BEGIN Enable multiple onload functions
// setup onload functions this way:
// aOnloadFunctions[aOnloadFunctions.length] = function_name; // without brackets!
if (!window.aOnloadFunctions) {
var aOnloadFunctions = new Array();
}
window.onload = function() {
if (window.aOnloadFunctions) {
for (var _i=0; _i<aOnloadFunctions.length; _i++) {
aOnloadFunctions[_i]();
}
}
}
// END Enable multiple onload functions
// ============================================================
function addLoadEvent(func)
{
if (window.addEventListener)
window.addEventListener("load", func, false);
else if (window.attachEvent)
window.attachEvent("onload", func);
}
/* </pre>
=== Navigation interprojet ===
<pre>*/
// Initialisation de la navigation interprojets (code adapté de de:wikt:Mediawiki:monobook.js)
$( 'body' ).append( $.parseHTML(
'<style type="text/css">#interProject {display: none; speak: none;} #p-tb .pBody {padding-right: 0;}<\/style>'
) );
function iProject() {
if (document.getElementById("interProject")) {
var iProject = document.getElementById("interProject").innerHTML;
var interProject = document.createElement("div");
interProject.style.marginTop = "0.7em";
interProject.innerHTML = '<h5>Autres projets<\/h5><div class="pBody">'+iProject+'<\/div>';
document.getElementById("p-tb").appendChild(interProject);
}
}
$( iProject );
// Navigation interprojets
/**
* Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant
* paramètres :
* - nom du jeu de caractères
* - contenu HTML. Les caractères spéciaux doivent être dans des spans
* exemple : "caractères : <span>â ê î ô û</span>"
*/
function addSpecialCharsetHTML(title, charsHTML) {
var specialchars = document.getElementById('specialcharsets');
if (!specialchars) return;
// Ajout des caractères spéciaux. Les liens seront initialisé par initializeCharSubset()
// lors de la sélection
var specialcharsets = document.getElementById('specialcharsets');
var p = document.createElement("p");
p.style.display = "none";
p.title = title;
p.innerHTML = charsHTML;
specialcharsets.appendChild(p);
}
/**
* Permet d'ajouter d'un jeu de caractères spéciaux dans le menu déroulant
* paramètres :
* - nom du jeu de caractères
* - caractères spéciaux
* exemple d'utilisation : addSpecialCharset("Français", "â ê î ô û");
*/
function addSpecialCharset(title, chars) {
addSpecialCharsetHTML(title, "<span>" + chars + "</span>");
}
/*</pre>
=== Boites déroulantes ===
<pre> */
// set up the words in your language
var NavigationBarHide = 'Enrouler';
var NavigationBarShow = 'Dérouler';
// set up max count of Navigation Bars on page,
// if there are more, all will be hidden
// NavigationBarShowDefault = 0; // all bars will be hidden
// NavigationBarShowDefault = 1; // on pages with more than 1 bar all bars will be hidden
var NavigationBarShowDefault = 0;
// shows and hides content and picture (if available) of navigation bars
// Parameters:
// indexNavigationBar: the index of navigation bar to be toggled
function toggleNavigationBar(indexNavigationBar)
{
var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);
if (!NavFrame || !NavToggle) {
return false;
}
// if shown now
if (NavToggle.firstChild.data == NavigationBarHide) {
for (
var NavChild = NavFrame.firstChild;
NavChild != null;
NavChild = NavChild.nextSibling
) {
if (NavChild.className == 'NavPic') {
NavChild.style.display = 'none';
}
if (NavChild.className == 'NavContent') {
NavChild.style.display = 'none';
}
if (NavChild.className == 'NavToggle') {
NavChild.firstChild.data = NavigationBarShow;
}
}
// if hidden now
} else if (NavToggle.firstChild.data == NavigationBarShow) {
for (
var NavChild = NavFrame.firstChild;
NavChild != null;
NavChild = NavChild.nextSibling
) {
if (NavChild.className == 'NavPic') {
NavChild.style.display = 'block';
}
if (NavChild.className == 'NavContent') {
NavChild.style.display = 'block';
}
if (NavChild.className == 'NavToggle') {
NavChild.firstChild.data = NavigationBarHide;
}
}
}
}
// adds show/hide-button to navigation bars
function createNavigationBarToggleButton()
{
var indexNavigationBar = 0;
// iterate over all <div>-elements
for(
var i=0;
NavFrame = document.getElementsByTagName("div")[i];
i++
) {
// if found a navigation bar
if (NavFrame.className == "NavFrame") {
indexNavigationBar++;
var NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');
var NavToggleText = document.createTextNode(NavigationBarHide);
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);
}
}
}
aOnloadFunctions[aOnloadFunctions.length] = createNavigationBarToggleButton;
/* NOUVEAUX CODE POUR LES BOUTON SUPPRIMÉS */
mw.loader.using(['mediawiki.util', 'ext.gadget.mediawiki.toolbar']).then(function() {
if (['edit', 'submit'].indexOf(mw.config.get('wgAction')) == -1)
return;
$.each([
// Format : pour chaque bouton
// [
// 'Texte à insérer avant la sélection', 'Texte à insérer après la sélection',
// 'Image du bouton (après « commons/ » et sans « .png » à la fin)',
// 'Texte apparaissant dans la bulle au survol du bouton',
// 'Identifiant de l'image ; importance faible, mais il faut s'assurer que l'identifiant est unique, ne change pas et n'utilise ni espace, ni caractères spéciaux'
// ],
[
'<!--', '-->',
'3/37/Btn_toolbar_commentaire',
'Commentaire',
'Commentaire'
],
[
'[[Catégorie:', ']]',
'b/b4/Button_category03',
'Catégorie',
'Nom de la catégorie'
],
[
'{{', '}}',
'e/eb/Button_plantilla',
'Balise modèle',
'Nom du modèle'
],
[
'{{w|','}}',
'6/65/Button_wikificare',
'Lien vers le portail ou la catégorie',
'Titre'
],
[
'{{autres projets','\n|w=\n|w-it=\n|w-en=\n|w-es=\n|w-de=\n|w-ca=\n|w-pt=\n|s=\n|wikt=\n|b=\n|n=\n|v=\n|wikispecies=\n|commons=\n|m=\n}}',
'4/4c/Button_interprojet',
'Lien interprojet',
'Étiquette'
],
[
'{{Citation|','}}',
'4/44/Button_comillas_latinas',
'Citation',
'Texte de la citation'
],
[
,' \;',
'4/4b/Button_nbsp',
'Espace insécable',
''
],
[
'<s>','</s>',
'3/30/Btn_toolbar_rayer',
'Rayer',
''
],
[
'#REDIRECT[[',']]',
'c/c8/Button_redirect',
'Redirection',
'Nom de la destination'
],
[
'{{citation|citation=','\n|original=\n|langue=\n|précisions=\n}}',
'e/e2/Button_contexto',
'Modèle Citation',
'Texte de la citation'
],
[
'{{Réf Livre|titre=','\n|auteur=\n|éditeur=\n|année=\n|page=\n|tome=\n|partie=\n|chapitre=\n|acte=\n|scène=\n|section=\n|ISBN=\n|traducteur=\n|année d’origine=\n|collection=\n|auteur de la contribution=\n|titre de la contribution=\n|traducteur de la contribution=\n|année de la contribution=\n|vers=\n|s=\n|langue=\n}}',
'0/02/Button_fuente_primaria',
'Source Livre',
'Titre du livre'
],
[
'{{Réf Article\n|titre=','\n|auteur=\n|publication=\n|numéro=\n|date=\n|page=\n|ISSN=\n|ISBN=\n|s=\n}}',
'3/38/Button_plume',
'Source Article',
'Titre de l’article'
],
[
'{{Réf Film|titre=','\n|auteur=\n|date=\n|acteur=\n}}',
'9/9a/Button_references',
'Source Film',
'Titre du film'
],
[
'{{Réf Série\n|acteur=','\n|auteur=\n|traducteur=\n|série=\n|saison=\n|épisode=\n|langue=\n|diffusion=\n|diffuseur=\n}}',
'b/be/Topdown',
'Source Série',
'Nom de l’acteur'
],
[
'{{Réf Chanson|titre=','\n|auteur=\n|interprète=\n|album=\n|date=\n|label=\n|traducteur=\n}}',
'b/b0/Button_note',
'Source Chanson',
'Titre de la chanson'
],
[
'{{Réf Émission|émission=','\n|auteur=\n|diffuseur=\n|date=\n|langue=\n}}',
'8/82/Button_publication',
'Source Émission',
'Titre de l’émission'
],
[
'{{Réf Pub|nom=','\n|date=\n|lieu=\n|source=\n|parution=\n|auteur=\n|précision=\n}}',
'f/fb/Button_references2_new',
'Source discours',
'Nom de l’auteur'
],
[
'{{Réf Jeu vidéo|titre=','\n|auteur=\n|éditeur=\n|développeur=\n|date=\n|personnage=\n}}',
'1/11/Button_source_jv',
'Source jeu vidéo',
'Nom du jeu vidéo'
],
[
'{{Personnage|','}}',
'2/29/Button_user',
'Modèle Personnage',
'Nom du Personnage'
],
[
'{{romain|','}}',
'4/4e/Button_romain',
'Modèle Romain',
'Texte à mettre en caractères romains'
],
[
'<br />','',
'1/13/Button_enter',
'Aller à la ligne',
''
],
[
'<poem>\n','\n</poem>',
'8/8f/Button_poeme',
'Poésie',
'Texte'
],
], function(_, button) {
mw.toolbar.addButton('//upload.wikimedia.org/wikipedia/commons/' + button[2] + '.png', button[3], button[0], button[1], (button[0] ? button[4] : ''), 'mw-editbutton-' + button[4]);
});
});
/*
[
'','',
'',
'',
''
],
*/
//</pre>
/**
* Pour [[Modèle:Boîte déroulante]]
*/
var BoiteDeroulante_Derouler = '[afficher]';
var BoiteDeroulante_Enrouler = '[masquer]';
function BoiteDeroulante_toggle(NavToggle){
var NavFrame = NavToggle.parentNode;
var caption = [];
caption[0] = NavFrame.dataset.boiteDeroulanteDerouler;
caption[1] = NavFrame.dataset.boiteDeroulanteEnrouler;
var $NavContent = $(NavFrame).find('.NavContent').first();
if ( NavToggle.textContent === caption[1] ) {
NavToggle.textContent = caption[0];
$NavContent.hide();
} else {
NavToggle.textContent = caption[1];
$NavContent.show();
}
}
function BoiteDeroulante( $content ) {
$content.find( '.NavFrame' ).each( function ( _, NavFrame ) {
var CustomTexts, Derouler, Enrouler, NavToggle;
if (NavFrame.title && NavFrame.title.indexOf("/") !== -1) {
CustomTexts = NavFrame.title.split("/");
Derouler = CustomTexts[0];
Enrouler = CustomTexts[1];
} else {
Derouler = BoiteDeroulante_Derouler;
Enrouler = BoiteDeroulante_Enrouler;
}
NavFrame.title = '';
NavFrame.dataset.boiteDeroulanteDerouler = Derouler;
NavFrame.dataset.boiteDeroulanteEnrouler = Enrouler;
NavToggle = document.createElement("a");
NavToggle.className = 'NavToggle';
NavToggle.href = 'javascript:';
NavToggle.onclick = function (e) {
e.preventDefault();
BoiteDeroulante_toggle(e.target);
};
NavToggle.textContent = Enrouler;
NavFrame.insertBefore(NavToggle, NavFrame.firstChild);
BoiteDeroulante_toggle(NavToggle);
} );
// permet de dérouler/enrouler les boîtes en cliquant n'importe où sur l'entête
$content.find( '.NavHead' )
.click( function ( e ) {
if ( $( e.target ).closest( 'a' ).length ) {
return;
}
var toggle = $( this ).siblings( 'a.NavToggle' )[0];
if ( toggle ) {
toggle.click(); // pas du jquery, mais du vanilla js
}
} )
.css( 'cursor', 'pointer' );
}
mw.hook( 'wikipage.content' ).add( BoiteDeroulante );
/**
* Fonctionnement du [[Modèle:Animation]]
* Le JavaScript principal se situe dans [[MediaWiki:Gadget-Diaporama.js]]
*/
mw.hook( 'wikipage.content' ).add( function ( $content ) {
if ( $content.find( '.diaporama' ).length ) {
mw.loader.using( 'ext.gadget.Diaporama', function () {
Diaporama_Init( $content );
} );
}
} );
/**
* Transformer les pages du Bistro, du BA et les pages spécifiées en page de discussion
*/
if ( mw.config.get( 'wgNamespaceNumber' ) >= 2 ) {
$( function ( $ ) {
if ( $( '#transformeEnPageDeDiscussion' ).length ) {
$( 'body' ).removeClass( 'ns-subject' ).addClass( 'ns-talk' );
}
} );
}