Utilisateur:Gratus/superVis.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) ;
Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./***
* @authors Gratus 0x010C
* Fonctionne sur :
* - bloquer
* - protéger
* - supprimer
* - renommer
* - masquage
* Peut-être d'autres pages
*/
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ], function() {
var api = new mw.Api();
/**
* Prépare un element input à être prévisualisé en live en lui ajoutant
* une boite de prévisualisation et les événements qui vont bien.
*/
function runElement() {
var element = $( this ),
outputBox = $( '<div>' ).addClass( 'GratuSuperVis' ).insertAfter( element ); //création de la zone de sortie
//écouteur d'événement
element.keyup( { outputBox: outputBox }, mw.util.debounce( 200, onKeyUp ) );
}
/**
* Appelé lorsque le contenu d'une input a changé.
* Récupère son contenu, le parse et l'affiche dans la boite de prévisualisation.
*
* @param {Event} event informations renvoyés par le navigateur sur l'événement
*/
function onKeyUp( event ) {
var summary = $( this ).val();
if ( summary.match( /\[\[/ ) && summary.match( /\]\]/ ) ) {
// on demande à l'API de parser le texte puis on affiche la réponse
parseSummary( summary ).then( function( parsedSummary ) {
displayParsedSummary( event.data.outputBox, false, parsedSummary );
} );
} else {
// pas besoin de parser, on peut afficher le texte directement
displayParsedSummary( event.data.outputBox, true, summary );
}
}
/***
* Utilisation de l'API pour parser un sommaire
*
* @param {String} summary Contenu à parser
* @return {Promise} promesse renvoyant le texte parsé en résolution
*/
function parseSummary( summary ) {
return api.get( {
action: 'parse',
prop: '',
format: 'json',
formatversion: 2,
summary: summary
} ).then(function( data ) {
return data.parse.parsedsummary;
} );
}
/***
* Affiche à l'écran
*
* @param {JQuery} outputBox Nœud de sortie
* @param {boolean} sanitize Permet de filtrer avant l'affichage (failles XSS)
* @param {String} summary Contenu à afficher
**/
function displayParsedSummary( outputBox, sanitize, summary ) {
if ( sanitize ) {
outputBox.text( summary );
} else {
outputBox.html( summary );
}
}
/* attendre que la page soit totalement chargé avant d'executer le script */
$( function() {
var zones = $( 'input[name="wpReason-other"], input[name="mwProtect-reason"], input[name="wpReason"]' );
zones.each( runElement );
} );
} );