De Wiki-Brest
MediaWiki:Common.js : Différence entre versions
Ligne 152 : | Ligne 152 : | ||
/* Fin de la barre d'outils | /* Fin de la barre d'outils | ||
+ | |||
+ | /* | ||
+ | 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 | ||
+ | */ | ||
+ | function addCharSubsetMenu() { | ||
+ | var specialchars = document.getElementById('specialcharsets'); | ||
+ | if (!specialchars) return; | ||
+ | |||
+ | // Construction du menu de selection | ||
+ | var charSubsetSelect = document.createElement("select"); | ||
+ | charSubsetSelect.setAttribute("style", "display:inline"); | ||
+ | charSubsetSelect.onchange = function () { chooseCharSubset(this.selectedIndex); }; | ||
+ | |||
+ | // Ajout des options au menu | ||
+ | var p = document.getElementById('specialcharsets').getElementsByTagName('p'); | ||
+ | for (var i = 0; i < p.length ; i++) { | ||
+ | var opt = document.createElement("option"); | ||
+ | var txt = document.createTextNode(p[i].title); | ||
+ | opt.appendChild(txt); | ||
+ | charSubsetSelect.appendChild(opt); | ||
+ | } | ||
+ | |||
+ | specialchars.insertBefore(charSubsetSelect, specialchars.childNodes[0]); | ||
+ | |||
+ | /* default subset - try to use a cookie some day */ | ||
+ | chooseCharSubset(0); | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * Affichage du jeu de caractères sélectionné | ||
+ | */ | ||
+ | function chooseCharSubset(index) { | ||
+ | var p = document.getElementById('specialcharsets').getElementsByTagName('p'); | ||
+ | for (var i = 0; i < p.length ; i++) { | ||
+ | // Initialisation du jeu de caractères sélectionné | ||
+ | if (i == index) { | ||
+ | initializeCharSubset(p[i]); | ||
+ | } | ||
+ | // Affichage du jeu sélectionné, masquage des autres | ||
+ | p[i].style.display = i == index ? 'inline' : 'none'; | ||
+ | p[i].style.visibility = i == index ? 'visible' : 'hidden'; | ||
+ | } | ||
+ | } | ||
+ | |||
+ | /** | ||
+ | * 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) { | ||
+ | // recherche des sous-elements de type span à traiter | ||
+ | var spans = p.getElementsByTagName("span"); | ||
+ | if (!spans) return; | ||
+ | |||
+ | // regexp pour echapper les caractères JS spéciaux : \ et ' | ||
+ | var re = new RegExp("(\\\\|')", "g"); | ||
+ | // gestion du caractère d'échappement '\' | ||
+ | var escapeRe = new RegExp("[^\\\\](\\\\\\\\)*\\\\$", "g"); | ||
+ | var unescapeRe = new RegExp("\\\\\\\\", "g"); | ||
+ | |||
+ | // traitement des spans du paragraphe | ||
+ | for (var j = 0; j < spans.length; j++) { | ||
+ | // span deja traité | ||
+ | if (spans[j].childNodes.length == 0 || spans[j].childNodes[0].nodeType != 3) continue; | ||
+ | |||
+ | // On parse le contenu du span | ||
+ | var chars = spans[j].childNodes[0].nodeValue.split(" "); | ||
+ | for (var k = 0; k < chars.length; k++) { | ||
+ | var a = document.createElement("a"); | ||
+ | var tags = chars[k]; | ||
+ | |||
+ | // regroupement des mots se terminant par un espace protégé par un \ | ||
+ | while (k < chars.length && chars[k].match(escapeRe)) { | ||
+ | k++; | ||
+ | tags = tags.substr(0, tags.length - 1) + " " + chars[k]; | ||
+ | } | ||
+ | |||
+ | // création du lien insertTag(tagBegin, tagEnd, defaultValue) en protegeant les caractères JS \ et ' | ||
+ | tags = (tags.replace(unescapeRe, "\\")).split("+"); | ||
+ | var tagBegin = tags[0].replace(re, "\\$1"); | ||
+ | var tagEnd = tags.length > 1 ? tags[1].replace(re, "\\$1") : ""; | ||
+ | var defaultValue = tags.length > 2 ? tags[2].replace(re, "\\$1") : ""; | ||
+ | a.href = "javascript:insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "')"; | ||
+ | //a.href="#"; | ||
+ | //eval("a.onclick = function() { insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "'); return false; }"); | ||
+ | |||
+ | a.appendChild(document.createTextNode((tagBegin + tagEnd).replace(unescapeRe, "\\"))); | ||
+ | spans[j].appendChild(a); | ||
+ | spans[j].appendChild(document.createTextNode(" ")); | ||
+ | } | ||
+ | // suppression de l'ancien contenu | ||
+ | spans[j].removeChild(spans[j].firstChild); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | addOnloadHook(addCharSubsetMenu); | ||
+ | |||
+ | /** | ||
+ | * 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 d'un nouvel item au menu déroulant | ||
+ | var select = specialchars.getElementsByTagName("select")[0]; | ||
+ | var opt = document.createElement("option"); | ||
+ | opt.appendChild(document.createTextNode(title)); | ||
+ | select.appendChild(opt); | ||
+ | |||
+ | // 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.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>"); | ||
+ | } | ||
</nowiki></code></poem> | </nowiki></code></poem> |
Version du 24 septembre 2007 à 21:54
/* Any JavaScript here will be loaded for all users on every page load. */
<poem><code><nowiki>
/*
* Ajout de boutons à la barre d'outils
*/
/**
* Générateur de tableaux
* English: Generate an array using Mediawiki syntax
*
* @author: fr:user:dake
* @version: 0.1
*/
function generateTableau(nbCol, nbRow, border, styleHeader, styleLine)
{
var code = "\n";
if (styleHeader==1) {
code += '{{entête';
code += ' tableau charte}}\n';
} else {
code += '{| border="' + border + '"\n';
code += '|+ Titre du tableau\n';
}
for (var i=0; i<nbCol; i++) code += '! en-tête ' + i + '\n';
for (var j=0; j<nbRow; j++) {
if ((j+1)%2==0 && styleLine==1) {
code += '|-{'+'{ligne grise}'+'}\n';
} else {
code += '|-----\n';
}
for (var i=0; i<nbCol; i++) code += '| élément\n';
}
code += '|}';
insertTags('','', code);
}
/**
*
* English: Open a popup with parameters to generate an array.
* The number of rows/columns can be modified. Some additional
* parameters are related to templates available on :fr
*
* @author: fr:user:dake
* @version: 0.1
*/
function popupTableau()
{
var popup = window.open('','name','height=400,width=500');
javaCode = '<script type="text\/javascript">function insertCode(){';
javaCode += 'var row = parseInt(document.paramForm.inputRow.value); ';
javaCode += 'var col = parseInt(document.paramForm.inputCol.value); ';
javaCode += 'var bord = parseInt(document.paramForm.inputBorder.value); ';
javaCode += 'var styleHeader = document.paramForm.inputHeader.checked; ';
javaCode += 'var styleLine = document.paramForm.inputLine.checked; ';
javaCode += 'window.opener.generateTableau(col,row,bord,styleHeader,styleLine); ';
javaCode += '}<\/script>';
popup.document.write('<html><head><title>Paramètres du tableau</title>');
popup.document.write('<script type="text\/javascript" src="\/skins-1.5\/common\/wikibits.js"><!-- wikibits js --><\/script>');
popup.document.write('<style type="text\/css" media="screen projection">/*<![CDATA[*/ @import "\/skins-1.5\/monobook\/main.css?5"; /*]]>*/<\/style>');
popup.document.write(javaCode);
popup.document.write('</head><body>');
popup.document.write('<p>Veuillez entrer les paramètres du tableau : </p>');
popup.document.write('<form name="paramForm">');
popup.document.write('Nombre de lignes : <input type="text" name="inputRow" value="3" ><p>');
popup.document.write('Nombre de colonnes : <input type="text" name="inputCol" value="3" ><p>');
popup.document.write('Largeur de la bordure : <input type="text" name="inputBorder" value="1" ><p>');
popup.document.write('En-tête en gris (style « charte graphique ») : <input type="checkbox" name="inputHeader" checked="1" ><p>');
popup.document.write('Lignes grises alternées (style « charte graphique ») : <input type="checkbox" name="inputLine" checked="1" ><p>');
popup.document.write('</form">');
popup.document.write('<p><a href="javascript:insertCode()"> Insérer le code dans la fenêtre d\'édition</a></p>');
popup.document.write('<p><a href="javascript:self.close()"> Fermer</a></p>');
popup.document.write('</body></html>');
popup.document.close();
}
/**
* Insertion de nouveaux boutons dans la barre d'outil
*/
function addCustomButton(imageFile, speedTip, tagOpen, tagClose, sampleText, imageId) {
mwCustomEditButtons[mwCustomEditButtons.length] =
{"imageId": imageId,
"imageFile": imageFile,
"speedTip": speedTip,
"tagOpen": tagOpen,
"tagClose": tagClose,
"sampleText": sampleText};
}
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/0/04/Button_array.png','Tableau','{|\n|-\n|\n|\n|}','','','mw-editbutton-array');
if (wgNamespaceNumber != 0) addCustomButton('http://upload.wikimedia.org/wikipedia/commons/c/c9/Button_strike.png','Rayer','<s>','</s>','');
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/8/88/Btn_toolbar_enum.png','Énumération','\n# élément 1\n# élément 2\n# élément 3','','');
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/1/11/Btn_toolbar_liste.png','Liste','\n* élément A\n* élément B\n* élément C','','');
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/9/9e/Btn_toolbar_gallery.png','Galerie d\'images','\n<gallery>\nImage:Exemple.jpg|[[Tournesol]]\nImage:Exemple1.jpg|[[La Joconde]]\nImage:Exemple2.jpg|Un [[hamster]]\n</gallery>','','');
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/3/37/Btn_toolbar_commentaire.png','Commentaire','<!--','-->','');
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/4/47/Button_redir.png','Redirection','#REDIRECT [[',']]','nom de la destination');
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/b/b4/Button_category03.png','Catégorie','[[Catégorie:',']]','nom de la catégorie');
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/3/3b/Button_template_alt.png','Modèle','{{','}}','modèle ou page à inclure');
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/c/c4/Button_ref.png','Référence','<ref>','</ref>','référence, citation ou lien');
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/6/64/Buttonrefvs8.png','Index des références','== Notes et références ==\n<references /> <!-- aide : http://fr.wikipedia.org/wiki/Aide:Notes et références -->','','');
var voirAussi = '<!-- Suggestion de présentation des annexes. Aide : http://fr.wikipedia.org/wiki/Aide:Notes et références -->\n'
+ '== Notes et références de l\'article ==\n'
+ '<references/>\n'
+ '== Voir aussi ==\n'
+ '=== Articles connexes ===\n'
+ '* [[À remplacer]]\n'
+ '*\n'
+ '=== Liens et documents externes ===\n'
+ '*\n';
addCustomButton('http://upload.wikimedia.org/wikipedia/commons/b/bb/Seealso.png','Section Voir aussi',voirAussi,'','');
// Changer le lien du bouton de création de tableau
function button_tab()
{
toolbarArray = document.getElementById('mw-editbutton-array');
if (!toolbarArray) return false;
toolbarArray.onclick = function() {
popupTableau();
return false;
}
}
hookEvent('load', button_tab);
// Supprime le bouton 'signature' sur les articles
function hideSigButtonOnArticles() {
if (wgNamespaceNumber != 0) return;
var btnSigImg = document.getElementById('mw-editbutton-signature');
if (!btnSigImg) return;
btnSigImg.style.display = "none";
}
hookEvent('load', hideSigButtonOnArticles);
/* Fin de la barre d'outils
/*
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
*/
function addCharSubsetMenu() {
var specialchars = document.getElementById('specialcharsets');
if (!specialchars) return;
// Construction du menu de selection
var charSubsetSelect = document.createElement("select");
charSubsetSelect.setAttribute("style", "display:inline");
charSubsetSelect.onchange = function () { chooseCharSubset(this.selectedIndex); };
// Ajout des options au menu
var p = document.getElementById('specialcharsets').getElementsByTagName('p');
for (var i = 0; i < p.length ; i++) {
var opt = document.createElement("option");
var txt = document.createTextNode(p[i].title);
opt.appendChild(txt);
charSubsetSelect.appendChild(opt);
}
specialchars.insertBefore(charSubsetSelect, specialchars.childNodes[0]);
/* default subset - try to use a cookie some day */
chooseCharSubset(0);
}
/**
* Affichage du jeu de caractères sélectionné
*/
function chooseCharSubset(index) {
var p = document.getElementById('specialcharsets').getElementsByTagName('p');
for (var i = 0; i < p.length ; i++) {
// Initialisation du jeu de caractères sélectionné
if (i == index) {
initializeCharSubset(p[i]);
}
// Affichage du jeu sélectionné, masquage des autres
p[i].style.display = i == index ? 'inline' : 'none';
p[i].style.visibility = i == index ? 'visible' : 'hidden';
}
}
/**
* 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) {
// recherche des sous-elements de type span à traiter
var spans = p.getElementsByTagName("span");
if (!spans) return;
// regexp pour echapper les caractères JS spéciaux : \ et '
var re = new RegExp("(\\\\|')", "g");
// gestion du caractère d'échappement '\'
var escapeRe = new RegExp("[^\\\\](\\\\\\\\)*\\\\$", "g");
var unescapeRe = new RegExp("\\\\\\\\", "g");
// traitement des spans du paragraphe
for (var j = 0; j < spans.length; j++) {
// span deja traité
if (spans[j].childNodes.length == 0 || spans[j].childNodes[0].nodeType != 3) continue;
// On parse le contenu du span
var chars = spans[j].childNodes[0].nodeValue.split(" ");
for (var k = 0; k < chars.length; k++) {
var a = document.createElement("a");
var tags = chars[k];
// regroupement des mots se terminant par un espace protégé par un \
while (k < chars.length && chars[k].match(escapeRe)) {
k++;
tags = tags.substr(0, tags.length - 1) + " " + chars[k];
}
// création du lien insertTag(tagBegin, tagEnd, defaultValue) en protegeant les caractères JS \ et '
tags = (tags.replace(unescapeRe, "\\")).split("+");
var tagBegin = tags[0].replace(re, "\\$1");
var tagEnd = tags.length > 1 ? tags[1].replace(re, "\\$1") : "";
var defaultValue = tags.length > 2 ? tags[2].replace(re, "\\$1") : "";
a.href = "javascript:insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "')";
//a.href="#";
//eval("a.onclick = function() { insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "'); return false; }");
a.appendChild(document.createTextNode((tagBegin + tagEnd).replace(unescapeRe, "\\")));
spans[j].appendChild(a);
spans[j].appendChild(document.createTextNode(" "));
}
// suppression de l'ancien contenu
spans[j].removeChild(spans[j].firstChild);
}
}
addOnloadHook(addCharSubsetMenu);
/**
* 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 d'un nouvel item au menu déroulant
var select = specialchars.getElementsByTagName("select")[0];
var opt = document.createElement("option");
opt.appendChild(document.createTextNode(title));
select.appendChild(opt);
// 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.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>");
}
</nowiki></code></poem>