MediaWiki:Gadget-QPreview.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.
/**
	* QPreview
	*
	* Permet une prévisualisation rapide sans recharger la page
	* Affiche :
		* le texte, catégories et interwikis fournit par le serveur
	* N'affiche pas :
		* la prévisualisation du résumé
		* les modèles utilisés
		* autres trucs rares comme les couleurs GeSHi (code de programmation coloré)
	*
	* Auteur initial : [[:en:User:Alex Smotrov|en:Alex Smotrov]] sur [[:en:User:Alex Smotrov/qpreview.js]],
	*  complété par [[:fr:Utilisateur:Seb35|fr:Seb35]] puis [[:fr:Utilisateur:Zebulon84|Zebulon84]]
	* Date de la dernière révision : 6 juillet 2017
	* {{Catégorisation JS|QPreview}}
	*/

/* globals mw, OO, $ */

var qPreviewBoutonNom = 'Aperçu';
var qPreviewBoutonAttendre = 'Patience…';
var qPreviewHeaderText = 'Aperçu';
var qPreviwGoToEdit = '→ Aller à la zone de modification';

function qPreview() {
	var divPreview, $btnQPreview, qPreviewTextbox;

	divPreview = document.getElementById( 'wikiPreview' );
	$btnQPreview = $( '#btnQPreview' ).find( '.oo-ui-labelElement-label' );
	$btnQPreview.text( qPreviewBoutonAttendre );
	qPreviewTextbox = '<div>{{MediaWiki:Previewnote}}&emsp;[[#editform|' + qPreviwGoToEdit + ']]</div><hr>\n';
	if ( document.editform.wpSection.value === 'new' ) {
		qPreviewTextbox += '== ' + document.editform.wpSummary.value + ' ==\n';
	}
	qPreviewTextbox	+= document.getElementById( 'wpTextbox1' ).value;

	$.post(
		mw.util.wikiScript( 'api' ),
		{
			format: 'json',
			action: 'parse',
			preview: true,
			disableeditsection: true,
			pst: true,
			title: mw.config.get('wgPageName'),
			text: qPreviewTextbox,
			prop: 'text|categorieshtml|langlinks'
		},
		function (data) {
			var ulLang, divCat, qPreviewHeader, previewnote, previewnoteTable, diffEnCours;
			var i, htmlText, htmlCat, langList, langLine, langLink;

			// ajout du texte
			htmlText = data.parse.text['*'];
			divPreview.innerHTML = htmlText;

			// ajout entête prévisualisation
			qPreviewHeader = document.createElement( 'h2' );
			qPreviewHeader.id = 'mw-previewheader';
			qPreviewHeader.innerHTML = qPreviewHeaderText;
			divPreview.insertBefore( qPreviewHeader, divPreview.firstChild );

			// modification de la couleur du bandeau de prévisualisation (cf. [[MediaWiki:Previewnote]])
			previewnote = document.getElementById( 'previewnote-fr' );
			if ( previewnote ) {
				previewnoteTable = previewnote.getElementsByTagName( 'table' )[0];
				if ( previewnoteTable ) {
					previewnote = previewnoteTable;
				}
				previewnote.style.backgroundColor = '#E2F2FF';
				previewnote.style.borderColor = '#ACCEFF';
			}

			// ajout des catégories
			divCat = document.getElementById( 'catlinks' );
			if ( !divCat ) {
				divCat = document.createElement( 'div' );
				divPreview.parentNode.insertBefore( divCat, divPreview.nextSibling );
			}
			htmlCat = data.parse.categorieshtml['*'];
			divCat.outerHTML = htmlCat;

			// ajout des interWiki
			if ( document.getElementById( 'p-lang' ) ) {
				ulLang = document.getElementById( 'p-lang' ).getElementsByTagName( 'ul' )[0];
				ulLang.innerHTML = '';
				langList = data.parse.langlinks;
				for ( i = 0; i < langList.length; i++ ) {
					langLink = document.createElement( 'a' );
					langLink.lang = langList[i].lang;
					langLink.setAttribute( 'hreflang', langList[i].lang );
					langLink.title = langList[i]['*'] + ' — ' + langList[i].langname;
					langLink.href = langList[i].url;
					langLink.innerHTML = langList[i].autonym;
					langLine = document.createElement( 'li' );
					langLine.className = 'interlanguage-link interwiki-' + langList[i].lang;
					langLine.appendChild( langLink );
					ulLang.appendChild( langLine );
				}
			}

			// suppression de la zone "Changements en cours" si elle est présente.
			diffEnCours = document.getElementById( 'wikiDiff' );
			if ( diffEnCours ) {
				diffEnCours.style.display = 'none';
			}
			$btnQPreview.text( qPreviewBoutonNom );
		}
	);
}

/* Compatibilité iRef */
window.qPreview = qPreview;

function qPreviewButton() {
	var sauv = document.getElementById( 'wpSaveWidget' );
	if ( !sauv ) {
		return;
	}
	document.getElementById( 'wikiPreview' ).style.display = 'block';

	mw.loader.using( [ 'oojs-ui-core' ] ).done( function () {
		var b = new OO.ui.ButtonInputWidget( {
			label: qPreviewBoutonNom,
			tabIndex: 6,
			id: 'btnQPreview'
		} );
		b.on( 'click', qPreview );
		$( sauv ).after( ' ', b.$element );
	} );

}

mw.loader.using( 'mediawiki.util', function () {
	$( qPreviewButton );
} );