MediaWiki:Gadget-CommonEdit.js
(Redirigé depuis MediaWiki:Common.js/edit.js)
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./* globals window */
/* globals mw, $, MonobookToolbar, addCharSubsetMenu */
/* exported addCharSubsetMenu */
/**
* Applications spécifiques aux pages de modification.
*
* Todo : migrer celles qui ne sont pas vitales dans les gadgets
*
* <nowiki>
*/
// Penser à maintenir à jour les dépendances dans [[MediaWiki:Gadgets-definition]] !
// Encapsulation de tout le code dans une IIFE globale
// (le code doit être exécuté immédiatement, donc ne pas mettre ici de mw.loader.using(), etc.)
( function () {
'use strict';
/**
* Désactiver le bouton Sauvegarder à la première édition
* English : Force IP to preview before saving changes.
* Copyright Marc Mongenet, 2006
* Plyd 05/2007: add "after preview" in the button to prevent misunderstanding from beginners
*/
function forcePreview( $ ) {
$( '#wpSave' )
.prop( 'disabled', true )
.val( 'Publier (après prévisualisation)' );
$( '#wpSaveWidget' )
.removeClass( 'oo-ui-widget-enabled' )
.addClass( 'oo-ui-widget-disabled' );
}
if ( mw.config.get( 'wgUserName' ) === null && mw.config.get( 'wgAction' ) === 'edit' ) {
$( forcePreview );
}
/**
* Caractères spéciaux
*
* Ajouter un menu pour choisir des sous-ensembles de caractères spéciaux.
* Ecrit par Zelda, voir sur [[Utilisateur:Zelda/Edittools.js]].
* Remplace l'ancienne fonction par une variante plus rapide.
*/
/**
* Ajoute un menu déroulant permettant de choisir un jeu de caractères spéciaux
* Les caractères spéciaux sont définis dans [[MediaWiki:Edittools]]
*
* L'export en global est utilisé par [[MediaWiki:Gadget-LiveRC.js/Extensions/EditCharactersExtension.js]]
*/
window.addCharSubsetMenu = function () {
var $specialchars = $( '#specialcharsets' );
if ( !$specialchars.length ) return;
var saveLastSelected = mw.util.debounce( 250, function ( lastSelected ) {
mw.storage.set( 'CharSubset-lastSelected', lastSelected );
} );
// Construction du menu de sélection
var $charSubsetSelect = $( '<select>' )
.change( function () {
chooseCharSubset( this.selectedIndex );
saveLastSelected( this.value );
} );
refreshCharSubsetSelect( $specialchars, $charSubsetSelect );
$specialchars.prepend( $charSubsetSelect );
};
/**
* Ajout des options au menu et restauration de la dernière position
*/
function refreshCharSubsetSelect( $specialchars, $charSubsetSelect ) {
$charSubsetSelect.empty();
var titles = [];
$specialchars.find( 'p' ).each( function () {
titles.push( this.title );
} );
titles.forEach( function ( title ) {
$charSubsetSelect.append( $( '<option>' ).text( title ) );
} );
var lastSelected = mw.storage.get( 'CharSubset-lastSelected' );
var position = titles.indexOf( lastSelected );
if ( position !== -1 ) {
$charSubsetSelect.val( lastSelected );
chooseCharSubset( position );
} else {
chooseCharSubset( 0 ); /* default subset */
}
}
/**
* Affichage du jeu de caractères sélectionné
*/
function chooseCharSubset( index ) {
$( '#specialcharsets' ).find( 'p' ).each( function ( i, p ) {
// Initialisation du jeu de caractères sélectionné
if ( i === index ) {
initializeCharSubset( p );
}
// Affichage du jeu sélectionné, masquage des autres
p.style.display = ( i === index ) ? 'inline' : 'none';
} );
}
/**
* Initialisation du jeu de caractères sélectionné
* Paramètre : paragraphe contenant le jeu à initialiser. Initialise tous les
* caractères contenus dans les sous-spans du paragraphe
*/
function initializeCharSubset( p ) {
// traitement des spans du paragraphe
$( p ).find( 'span' ).each( function ( _, span ) {
// span déjà traité
if ( span.childNodes.length === 0 || span.childNodes[ 0 ].nodeType !== 3 ) return;
// on parse le contenu du span
var chars = span.childNodes[ 0 ].nodeValue
.replace( /\\ /g, '__ESCAPED_SPACE__' ) // ne pas utiliser replaceAll() pour l'instant, cf. [[Spécial:Diff/219320914]]
.trim()
.split( ' ' )
.map( function ( value ) {
return value.replace( /__ESCAPED_SPACE__/g, ' ' ); // idem, ne pas utiliser replaceAll()
} );
// création des liens MonobookToolbar.insertTags( tagBegin, tagEnd, defaultValue )
var newElements = [];
for ( var k = 0; k < chars.length; k ) {
var tags = chars[ k ].split( ' ' );
var tagBegin = tags[ 0 ];
var tagEnd = tags.length > 1 ? tags[ 1 ] : '';
var defaultValue = tags.length > 2 ? tags[ 2 ] : '';
var callback = ( function ( tagBegin, tagEnd, defaultValue ) {
return function ( e ) {
e.preventDefault();
MonobookToolbar.insertTags( tagBegin, tagEnd, defaultValue );
};
} )( tagBegin, tagEnd, defaultValue );
var $a = $( '<a>' )
.attr( 'href', '#' )
.text( tagBegin tagEnd )
.click( callback );
if ( ( tagBegin tagEnd ).includes( ' ' ) ) {
$a.addClass( 'nowrap' );
}
if ( k > 0 ) {
newElements.push( ' ' );
}
newElements.push( $a );
}
// remplacement du contenu
$( span ).empty().append( newElements );
} );
}
$( function ( $ ) { // eslint-disable-line no-unused-vars
addCharSubsetMenu();
} );
/**
* Permet d'ajouter 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 ) {
$( function ( $ ) {
var $specialchars = $( '#specialcharsets' );
if ( !$specialchars.length ) return;
// Ajout des caractères spéciaux. Les liens seront initialisés par initializeCharSubset()
// lors de la sélection
var $p = $( '<p>' )
.css( 'display', 'none' )
.attr( 'title', title )
.html( charsHTML );
$specialchars.append( $p );
// Si le menu de sélection existe déjà, il faut reconstruire ses options
var $charSubsetSelect = $specialchars.find( 'select' );
if ( $charSubsetSelect.length ) {
refreshCharSubsetSelect( $specialchars, $charSubsetSelect );
}
} );
}
/**
* Permet d'ajouter 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>' mw.html.escape( chars ) '</span>' );
}
mw.hook( 'CommonEdit.charsetFunctions.ready' ).fire( {
addSpecialCharset: addSpecialCharset,
addSpecialCharsetHTML: addSpecialCharsetHTML,
} );
} )(); // Fermeture de la IIFE globale
//</nowiki>