Utilisateur:The RedBurn/Gadget-iRef.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./*
***************************************************************************
** iRef - Affiche les références lors de la prévisualisation même si elles
** ne sont pas présentes dans la section éditée
** Compatibilité : MediaWiki, testé avec monobook et vector
** Support : Discussion Projet:JavaScript/Rapport de bug
** Auteurs : Arkanosis & Od1n
** Licence : MIT
**
** {{Catégorisation JS|IRef}}
*/
if ((mw.config.get('wgAction') === 'edit' || mw.config.get('wgAction') === 'submit') && typeof iRef === 'undefined') {
window.iRef = function ($) {
var textBox = document.getElementById('wpTextbox1');
function cleanMark() {
var position = textBox.scrollTop;
textBox.value = textBox.value
.replace(/\r\n/g, '\n') // IE 6-8
.replace(/\n<!--\[iRef\]-->[\s\S]*<!--\[\/iRef\]-->\n/, '');
textBox.scrollTop = position;
}
function getGroups(source) {
var refs = source.match(/<ref [^>]+>/g);
if (!refs) {
return [];
}
var groups = [];
var i, l, attrib;
for (i = 0, l = refs.length; i < l; i++) {
// valeur d'attribut entre double quotes
attrib = /group *= *"([^"]+)"/.exec(refs[i]);
if (attrib && $.inArray(attrib[1], groups) === -1) {
groups.push(attrib[1]);
continue;
}
// valeur d'attribut non encadrée de quotes
attrib = /group *= *([^" >]+)/.exec(refs[i]);
if (attrib && $.inArray(attrib[1], groups) === -1) {
groups.push(attrib[1]);
}
}
return groups;
}
function buildMark(groups) {
var mark = '\n<!--[iRef]-->== <span style="color:red">Références automatiques</span> ==\n<references />';
var i, l;
for (i = 0, l = groups.length; i < l; i++) {
mark += "\n'''groupe « " + groups[i] + " » :'''\n<references group=\"" + groups[i] + '" />';
}
mark += '<!--[/iRef]-->\n';
return mark;
}
function iRefPreview() {
var source = textBox.value;
if (source.indexOf('<ref') === -1) {
return;
}
// Firefox réinitialise la position quand un textarea.value est modifié
var position = textBox.scrollTop;
source = source.replace(/\r\n/g, '\n').replace(/\n+$/, '') + '\n';
textBox.value = source + buildMark(getGroups(source));
textBox.scrollTop = position;
}
cleanMark(); // il faut toujours purger au chargement, pour le mode non ajax
// compatibilité avec l'aperçu rapide (http://bits.wikimedia.org/skins-1.19/common/preview.js)
// l'aperçu rapide est actuellement chargé après iRef, mais l'ordre de chargement des scripts peut changer
$('#wpPreview').click(function () {
if (typeof doLivePreview === 'undefined') {
iRefPreview();
}
});
$('#wpSave').click(function () {
if (typeof doLivePreview === 'undefined') {
cleanMark();
}
});
$(mw).bind({
'LivePreviewPrepare': iRefPreview,
'LivePreviewDone': cleanMark
});
// compatibilité avec [[MediaWiki:Gadget-QPreview.js]]
// QPreview est actuellement chargé après iRef - ce code fonctionnerait aussi avec l'autre ordre de chargement
var jEditButtonsZone = $('#editform').find('div.editButtons');
function iRefQPreview() {
iRefPreview();
qPreview();
cleanMark();
}
function QPreviewOverride() {
$('#btnQPreview')
.removeAttr('onclick')
.click(iRefQPreview);
jEditButtonsZone.off('focus', '#btnQPreview', QPreviewOverride);
}
jEditButtonsZone.on('focus', '#btnQPreview', QPreviewOverride);
};
$(document).ready(iRef);
}