« MediaWiki:Monobook.js » : différence entre les versions
De BoyWiki
Aucun résumé des modifications |
Aucun résumé des modifications |
||
Ligne 282 : | Ligne 282 : | ||
/* Création popup - appelé par initeventbuttontable() */ | /* Création popup - appelé par initeventbuttontable() */ | ||
function openpopuparamtable(e) { | function openpopuparamtable(e) { | ||
alert('zz'); | |||
var event = e || window.event; | var event = e || window.event; | ||
var x = event.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft); | var x = event.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft); |
Version du 15 février 2009 à 18:00
/* Tout JavaScript ici sera chargé avec les pages accédées par les utilisateurs de l’habillage MonoBook uniquement. */
/* Note: cette page n'est pas indispensable au fonctionnement du site, */
/* en cas d'erreur bloquante elle peut être vidée dans l'urgence. */
/*--------------------------------------------------------------------------------*/
/* Pour les pages 'dialogue' affecte la classe dialog à body */
/* utilisé par css pour l'encadrement colorisé des dialogues indentés dans Agora */
function attrib_class_dialog() {
/* seulement pour les pages Agora ou discussion */
var bodyclass = document.body.className;
if (bodyclass.match(/page-BoyWiki_Agora/)
|| bodyclass.match(/page-Discussion_/)
|| bodyclass.match(/page-Discuter_/))
document.body.className = bodyclass + ' dialog';
}
addOnloadHook(attrib_class_dialog);
/*--------------------------------------------------------------------------------*/
/* Pour les pages 'édition' ajout de boutons à la barre d'outils */
/* utilise mwCustomEditButtons variable déclarée dans commons/wikibits.js */
function addCustomButton(imageFile, imageText, tagOpen, tagClose, insertText) {
mwCustomEditButtons[mwCustomEditButtons.length] = {"imageFile": imageFile,
"speedTip": imageText,
"tagOpen": tagOpen,
"tagClose": tagClose,
"sampleText": insertText};
}
addCustomButton('https://media.boywiki.org/w/images/0/04/Button_array.png','Assistant Tableau','\n{|\n|-\n|\n|\n|}','','');
addCustomButton('https://media.boywiki.org/w/images/c/c9/Button_strike.png','Rayé','<s>','</s>','');
addCustomButton('https://media.boywiki.org/w/images/8/88/Btn_toolbar_enum.png','Liste énumération','\n# ','\n# B\n# C','A');
addCustomButton('https://media.boywiki.org/w/images/1/11/Btn_toolbar_liste.png','Liste à puces','\n* ','\n* B\n* C','A');
addCustomButton('https://media.boywiki.org/w/images/c/c4/Button_ref.png','Référence','<ref>','</ref>','référence, citation, lien');
addCustomButton('https://media.boywiki.org/w/images/6/64/Buttonrefvs8.png','Index des références','== Notes et références ==\n<references />','','');
addCustomButton('https://media.boywiki.org/w/images/0/0c/Button_Link_DifferentName.png','Catégorie','\[\[catégorie:','\|\]\]','nom de catégorie');
addCustomButton('https://media.boywiki.org/w/images/e/eb/Button_plantilla.png','Modèle','\{\{','\}\}','nom de modèle ou page à inclure');
addCustomButton('https://media.boywiki.org/w/images/1/13/Button_enter.png','Saut à la ligne','<br />','','');
addCustomButton('https://media.boywiki.org/w/images/2/26/Button_latinas.png','Guillemets','« ',' »','texte');
addCustomButton('https://media.boywiki.org/w/images/5/50/Button_hellip.png','Points de suspension','…','','');
addCustomButton('https://media.boywiki.org/w/images/2/2d/Button_ndash.png','Tiret demi-cadratin','–','','');
addCustomButton('https://media.boywiki.org/w/images/c/cd/Button_mdash.png','Tiret cadratin','—','','');
addCustomButton('https://media.boywiki.org/w/images/5/55/Button_nbsp_1.png','Espace insécable (inutile avec : ; ! ? « »)',' \;','','');
/*--------------------------------------------------------------------------------*/
/* Pour les pages 'édition' ajoute une liste déroulante pour afficher des jeux de caractères spéciaux */
/* version simplifiée inspirée de [http://fr.wikipedia.org/wiki/Utilisateur:Zelda/Edittools] */
var CustomEditCharsetMenu = new Array();
/* Insertion dans la page : barre 'caractères spéciaux', liste déroulante et jeux de caractères */
function addcharsetmenu() {
/* Création espace d'accueil dans la page si existe pas */
if (getElementsByClassName(document, 'div', 'mw-editTools').length == 1) {
var specialchars = document.getElementById('specialcharsets');
if (specialchars == null) {
specialchars = document.createElement('div');
specialchars.setAttribute('id', 'specialcharsets');
document.getElementById('bodyContent').insertBefore(specialchars,document.getElementById('editform'));
}
}
if (specialchars == null) return;
/* Création liste déroulante */
var charsetselect = document.createElement('select');
charsetselect.setAttribute('style', 'display:inline');
charsetselect.onchange = function () {changecharset(this.selectedIndex);};
for (var i = 0; i < CustomEditCharsetMenu.length ; i++) {
/* Création paragraphes par jeu de caractères */
var p = document.createElement('p');
p.style.display = 'none';
p.innerHTML = CustomEditCharsetMenu[i][1];
specialchars.appendChild(p);
/* Ajout noms des jeux de caractères dans liste déroulante */
var opt = document.createElement('option');
var txt = document.createTextNode(CustomEditCharsetMenu[i][0]);
opt.appendChild(txt);
charsetselect.appendChild(opt);
}
specialchars.insertBefore(charsetselect, specialchars.childNodes[0]);
/* Choix par défaut */
changecharset(0);
}
/* Affichage des caractères du jeu sélectionné */
function changecharset(index) {
var p = document.getElementById('specialcharsets').getElementsByTagName('p');
for (var i = 0; i < p.length ; i++) {
/* Init et affiche jeu de caractères sélectionné */
if (i == index) {
initcharsubset(p[i]);
p[i].style.display = 'inline';
p[i].style.visibility = 'visible';
}
else {
/* cache les autres */
p[i].style.display = 'none';
p[i].style.visibility = 'hidden';
}
}
}
/* Init jeu de caractères sélectionné - transforme chaque chaine en lien actif */
function initcharsubset(p) {
var spans = p.getElementsByTagName("span");
if (!spans) return;
/* Pour chaque <span> du paragraphe */
for (var j = 0; j < spans.length; j++) {
if (spans[j].childNodes.length == 0 || spans[j].childNodes[0].nodeType != 3) continue;
/* Pour chaque chaine du <span> séparée par un espace */
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];
/* création du lien insertTag(tagBegin, tagEnd, defaultValue) */
var tagBegin = tags;
var tagEnd = '';
var defaultValue = '';
a.href = "javascript:insertTags('" + tagBegin + "','" + tagEnd + "', '" + defaultValue + "')";
a.appendChild(document.createTextNode(tagBegin + tagEnd));
spans[j].appendChild(a);
spans[j].appendChild(document.createTextNode(" "));
}
/* suppression ancien contenu */
spans[j].removeChild(spans[j].firstChild);
}
}
/* Ajout des jeux de caractères dans la barre 'caractères spéciaux' */
/* charsetname: nom du jeu de carctères affiché dans la liste déroulante */
/* charlist: liste des caractères séparés par un espace et encadrée par <span> </span>*/
function addCustomCharsetMenu(charsetname, charlist) {
var nextitem = CustomEditCharsetMenu.length;
CustomEditCharsetMenu[nextitem] = new Array(2);
CustomEditCharsetMenu[nextitem][0] = charsetname;
CustomEditCharsetMenu[nextitem][1] = charlist;
}
addOnloadHook(addcharsetmenu);
addCustomCharsetMenu('Français', '<span>À à  â Ä ä Æ æ É é È è Ê ê Ë ë Î î Ï ï Ô ô Ö ö Œ œ Ù ù Û û Ü ü Ç ç</span>');
addCustomCharsetMenu('Autres (Latin)', '<span>Å å Ã ã Á á Ā ā Ă ă Ć ć Č č Đ đ Ē ē Ĕ ĕ Í í Ì ì Ī ī Ĭ ĭ İ ı Ł ł Ñ ñ Õ õ Ò ò Ó ó Ō ō Ŏ ŏ Ǿ ǿ Ø ø Ś ś Š š Ş ş ŭ Ú ú Ū ū Ŭ ŭ Ý ý ÿ</span>');
addCustomCharsetMenu('Allemand', '<span>Ä ä Ö ö ß Ü ü</span>');
addCustomCharsetMenu('Arabe (transcription)', '<span>’ ‘ ° Å å Ā ā ã À à Á á ä ą Ċ ċ Đ đ Ḍ ḍ Ğ ğ Ġ ġ Ħ ħ Ḥ ḥ Ī ī ĩ Ì ì Í í ł Ø ø Š š Ṣ ṣ Ŧ ŧ Ṭ ṭ ẗ Ū ū ũ ù ú ẃ ý Ż ż Ẓ ẓ</span>');
addCustomCharsetMenu('Cyrillique', '<span>А Б В Г Д Е Ж З И Й К Л М Н О П Р С Т У Ф Х Ц Ч Ш Щ Ъ Ы Ь Э Ю Я а б в г д е ж з и й к л м н о п р с т у ф х ц ч ш щ ъ ы ь э ю я</span>');
addCustomCharsetMenu('Espagnol', '<span>¿? ¡! Á á É é Í í Ñ ñ Ó ó Ú ú Ü ü ª º</span>');
addCustomCharsetMenu('Esperanto', '<span>Ĉ ĉ Ĝ ĝ Ĥ ĥ Ĵ ĵ Ŝ ŝ Ŭ ŭ</span>');
addCustomCharsetMenu('Grec (alphabet)', '<span>Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω</span> - <span>Ϝ Ϻ ϟ Ϡ Ϛ Ϸ Ῥ</span> - <span>α β ϐ γ δ ε ζ η θ ϑ ι κ ϰ λ μ ν ξ ο π ϖ ρ ϱ σ ς τ υ φ ϕ χ ψ ω</span> - <span>ϝ ϻ ϟ ϡ ϛ ϸ ῤ ῥ</span>');
addCustomCharsetMenu('Grec (sans esprit)', 'accent aigu <span>Ά Έ Ή Ί Ό Ύ Ώ</span> - <span>ά έ ή ί ό ύ ώ</span> - <span>ᾴ ῄ ῴ</span> accent grave <span>Ὰ Ὲ Ὴ Ὶ Ὸ Ὺ Ὼ</span> - <span>ὰ ὲ ὴ ὶ ὸ ὺ ὼ</span> - <span>ᾲ ῂ ῲ</span> accent circonflexe <span>ᾶ ῆ ῖ ῦ ῶ</span> - <span>ᾷ ῇ ῷ</span> tréma <span>ῗ ῧ</span> - <span>ῒ ῢ</span> - <span>ΐ ΰ</span> diphtongues <span>ᾼ ῌ ῼ</span> - <span>ᾳ ῃ ῳ</span> voyelles courtes <span>Ᾰ ᾰ Ῐ ῐ Ῠ ῠ</span> voyelles longues <span>Ᾱ ᾱ Ῑ ῑ Ῡ ῡ</span>');
addCustomCharsetMenu('Grec (esprit doux)', 'sans accent <span>Ἀ Ἐ Ἠ Ἰ Ὀ Υ̓ Ὠ</span> - <span>ᾈ ᾘ ᾨ</span> - <span>ἀ ἐ ἠ ἰ ὀ ὐ ὠ</span> - <span>ᾀ ᾐ ᾠ</span> accent aigu <span>Ἄ Ἔ Ἤ Ἴ Ὄ Ὤ</span> - <span>ᾌ ᾜ ᾬ</span> - <span>ἄ ἔ ἤ ἴ ὄ ὔ ὤ</span> - <span>ᾄ ᾔ ᾤ</span> accent grave <span>Ἂ Ἒ Ἢ Ἲ Ὂ Ὢ</span> - <span>ᾊ ᾚ ᾪ</span> - <span>ἂ ἒ ἢ ἲ ὂ ὒ ὢ</span> - <span>ᾂ ᾒ ᾢ</span> accent circonflexe <span>Ἆ Ἦ Ἶ Ὦ</span> - <span>ᾎ ᾞ ᾮ</span> - <span>ἆ ἦ ἶ ὖ ὦ</span> - <span>ᾆ ᾖ ᾦ</span>');
addCustomCharsetMenu('Grec (esprit rude)', 'sans accent <span>Ἁ Ἑ Ἡ Ἱ Ὁ Ὑ Ὡ</span> - <span>ἁ ἑ ἡ ἱ ὁ ὑ ὡ</span> accent aigu <span>Ἅ Ἕ Ἥ Ἵ Ὅ Ὕ Ὥ</span> - <span>ᾍ ᾝ ᾭ</span> - <span>ἅ ἕ ἥ ἵ ὅ ὕ ὥ</span> - <span>ᾅ ᾕ ᾥ</span> accent grave <span>Ἃ Ἓ Ἣ Ἳ Ὃ Ὓ Ὣ</span> - <span>ᾋ ᾛ ᾫ</span> - <span>ἃ ἓ ἣ ἳ ὃ ὓ ὣ</span> - <span>ᾃ ᾓ ᾣ</span> accent circonflexe <span>Ἇ Ἧ Ἷ Ὗ</span> - <span>ᾏ ᾟ ᾯ</span> - <span>ἇ ἧ ἷ ὗ ὧ</span> - <span>ᾇ ᾗ ᾧ</span>');
addCustomCharsetMenu('Néerlandais', '<span>Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ Á á É é Í í Ó ó Ú ú À à È è Ì ì Ò ò Ù ù Â â Ê ê Î î Ô ô Û û IJ ij ſ ƒ €</span>');
addCustomCharsetMenu('Phonétique', '<span>a ɑ e ɛ ə i o ɔ u y ø œ ɔ̃ ɑ̃ ɛ̃ œ̃ j w ɥ ː ‿ _́ _̀ _̌ _̂ b k ʃ d f ɡ h ʒ l m n ɲ ŋ p r s t v z ʀ ʁ</span>');
addCustomCharsetMenu('Symboles', '<span>© ℅ € № ® ™ º ¹ ² ³ ⁿ ª † ‡ ¼ ½ ¾ ⅛ ⅜ ⅝ ⅞ “ ” „ ‰ ‹ › ≤ ≥ ‼ ± × ÷ ≈ ≠ ≡ ≅ ← → ↔ ⇐ ⇒ ⇔ □ ▪ ▫ ◊ ● • ◦</span>');
/*--------------------------------------------------------------------------------*/
/* Popup 'infobulle' sur les liens 'ref' affichant les notes de citations en pied de page */
var popupreftimout; /* utilisée par timeout */
/* Pour chaque lien ref de la page installe gestion event onmouse */
function initeventlinkref() {
/* seulement dans la partie utile de la page */
var page = document.getElementById('bodyContent');
if (page == null) return;
/* pour tout les liens de la page */
var lnk = page.getElementsByTagName('a');
for (var i = 0; i < lnk.length ; i++) {
/* seulement les lien vers note citation */
if (lnk[i].getAttribute('href') && lnk[i].getAttribute('href').match(/#cite_note-/)) {
lnk[i].onmouseover = delaypopupref;
/*lnk[i].onmouseout = closepopupref;*/
lnk[i].onmouseout = function(e) {clearTimeout(popupreftimout); closepopup('popup_ref'); };
}
}
}
/* Récup position souris et Temporisation affichage popup */
function delaypopupref(e) {
var event = e || window.event;
var x = event.clientX;
var y = event.clientY;
if (event.target) var tgt = event.target;
else if (event.srcElement) var tgt = event.srcElement;
if (tgt.href) popupreftimout = setTimeout (function() { openpopupref(x,y,tgt.href); }, 300);
}
/* Création et affichage popup */
function openpopupref(x,y,adr) {
/* récup texte contenu dans destination du lien qui pointe vers id=n°_de_note */
var dest = adr.split ('#');
if (!document.getElementById(dest[1])) return;
var content = document.getElementById(dest[1]).innerHTML;
content = content.replace(/.? ?<sup><a[^<]*<\/a><\/sup>/gi,'');
content = content.replace(/^<a[^<]*<\/a>/i,'');
/* création */
var popup = document.createElement('div');
popup.setAttribute('id', 'popup_ref');
popup.innerHTML = content;
document.body.appendChild(popup);
/* positionnement */
var xpage = x + (document.body.scrollLeft || document.documentElement.scrollLeft);
var ypage = y + (document.body.scrollTop || document.documentElement.scrollTop);
var popwidth = document.getElementById('popup_ref').offsetWidth;
var left = xpage - (popwidth * Math.min(x / document.body.clientWidth, 0.98));
var top = ypage + 15;
positionpopup(popup,top,left);
}
/* Suppression popup (fonction générique) */
function closepopup(name) {
while (document.getElementById(name))
document.body.removeChild(document.getElementById(name));
}
/* Passage des attributs top et left du popup selon navigateur (fonction générique) */
function positionpopup(elem,top,left) {
if (document.all) {
elem.style.top = top +'px';
elem.style.left = left +'px';
} else {
elem.setAttribute('style', 'top:'+top+'px; left:'+left+'px;');
}
}
addOnloadHook(initeventlinkref);
/*--------------------------------------------------------------------------------*/
/* Popup paramètres (dialogbox) - Assistant construction tableau - appelé par bouton 'Assistant Tableau' dans 'toolbox' */
function initeventbuttontable() {
var x = setTimeout("initeventbuttontable_run()",900);
}
/* Installe gestion event onclick - appelé au chargement (onload) */
function initeventbuttontable_run() {
/* si bouton tableau existe dans toolbar */
var tb = document.getElementById('toolbar');
if (tb == null) return;
for (var i = 0; i < mwCustomEditButtons.length ; i++) {
/* si bouton tableau existe dans toolbar */
if (mwCustomEditButtons[i]['speedTip'].match(/Assistant [tT]ableau/)) {
var links = tb.getElementsByTagName('img');
/* cherche le noeud icone tableau */
for (var i = 0; i < links.length ; i++) {
if (links[i].getAttribute('title').match(/[tT]ableau/)) {
links[i].onclick = openpopuparamtable;
break;
}
}
break;
}
}
}
/* Création popup - appelé par initeventbuttontable() */
function openpopuparamtable(e) {
alert('zz');
var event = e || window.event;
var x = event.clientX + (document.body.scrollLeft || document.documentElement.scrollLeft);
var y = event.clientY + (document.body.scrollTop || document.documentElement.scrollTop);
/* si popup deja ouvert */
if (document.getElementById('popup_param')) return;
var popup = document.createElement('div');
/*popup.setAttribute('class', 'popup_param');*/
popup.setAttribute('id', 'popup_param');
var content = '<p id="titr">Paramètres du tableau</p>';
content += '<form method="post" action="#" name="popup_param_frm"><table>';
content += '<tr><td>Style</td><td><select name="tabclass"><option value="wikitable" selected>Wikitable</option><option value="alterne">Alterné</option></select></td><td></td></tr>';
content += '<tr><td>Position</td><td colspan="2"><input name="tabpos" type="radio" value="centre" checked />centre<input name="tabpos" type="radio" value="gauche" />gauche<input name="tabpos" type="radio" value="droite" />droite</td></tr>';
content += '<tr><td>Intitulé</td><td colspan="2"><input name="tabintitul" type="text" size="22" /></td></tr>';
content += '<tr><td colspan="2">Nombre de lignes</td><td><input name="tabnbrow" type="text" size="1" value="0" /></td></tr>';
content += '<tr><td colspan="2">Nombre de colonnes</td><td><input name="tabnbcol" type="text" size="1" value="0" /></td></tr>';
content += '<tr><td colspan="2">Titres de lignes</td><td><input name="tabtitlrow" type="checkbox" /></td></tr>';
content += '<tr><td colspan="2">Titres de colonnes</td><td><input name="tabtitlcol" type="checkbox" /></td></tr>';
content += '<tr><td>Alignement</td><td colspan="2"><input name="tabalign" type="radio" value="cellcentre" />centre<input name="tabalign" type="radio" value="" checked />gauche<input name="tabalign" type="radio" value="celldroite" />droite</td></tr>';
content += '</table>';
content += '<span id="btn"><input type="button" value="Valider" onclick="creatwikitable()" /><input type="button" value="Annuler" onclick="closepopup(\'popup_param\')" /><input type="button" value="?" onclick="helpopuparamtable()" /></span>';
content += '</form>';
popup.innerHTML = content;
document.body.appendChild(popup);
positionpopup(popup,(y+10),(x-20));
}
/* Création code tableau syntaxe wiki insertion dans zone édition - appelé par bouton 'valider' du popup param tableau */
function creatwikitable() {
var frm = document.forms['popup_param_frm'];
if (frm.elements['tabnbrow'].value.match(/^[0-9]+$/)) var row = frm.elements['tabnbrow'].value;
if (frm.elements['tabnbcol'].value.match(/^[0-9]+$/)) var col = frm.elements['tabnbcol'].value;
if (row < 1 || col < 1) return;
/* récup sélection bouton radio */
for (var i = 0; i < frm.elements['tabpos'].length; i++) {
if (frm.elements['tabpos'][i].checked) var pos = frm.elements['tabpos'][i].value;
}
for (var i = 0; i < frm.elements['tabalign'].length; i++) {
if (frm.elements['tabalign'][i].checked) var align = frm.elements['tabalign'][i].value;
}
/* init début tableau + classes */
var result = '{| class="'+frm.elements["tabclass"].value+' '+pos+' '+align+'"\n';
if (frm.elements['tabintitul'].value.length) result += '|+ '+frm.elements["tabintitul"].value+'\n';
result += '|------------------\n';
/* init entêtes de colonnes */
if (frm.elements['tabtitlcol'].checked) {
var x = 0;
if (frm.elements['tabtitlrow'].checked) x = -1;
for (var c = x; c < col ; c++) {
if (c == -1) {
result += '! scope=col |\n';
} else {
result += '! scope=col | Titre_col_'+(c+1)+'\n';
}
}
result += '|------------------\n';
}
/* cas style couleurs lignes alternées */
var grey = 0;
if (frm.elements["tabclass"].value.match(/alterne/)) grey = 1;
/* init cellules */
for (var r = 0; r < row ; r++){
if (frm.elements['tabtitlrow'].checked) result += '! scope=row | Titre_ligne_'+(r+1)+'\n';
for (var c = 0; c < col ; c++) result += '|Cellule_c'+(c+1)+'_r'+(r+1)+'\n';
if (grey && !(r%2)) {
result += '|------ class="grey"\n';
} else {
result += '|------------------\n';
}
}
result += '|}\n';
alert(result);
/*insertTags('', '', result)*/
closepopup('popup_param');
return false;
}
/* Affiche aide en ligne - appelé par bouton '?' du popup param tableau */
function helpopuparamtable() {
var popup = document.getElementById('popup_param');
/* si aide deja ouverte */
if (popup.innerHTML.match(/<ul id=.?aide/i)) return;
var aidetxt = "<ul id='aide'>";
aidetxt += "<li><b>Style</b> choisi parmi les modèles graphiques prédéfinis</li>";
aidetxt += "<li><b>Position</b> du tableau dans la page ('flottant' pour gauche et droite)</li>";
aidetxt += "<li><b>Intitulé</b> légende optionnelle du tableau</li>";
aidetxt += "<li><b>Titres lignes et colonnes</b> ajoutent des entêtes optionnelles</li>";
aidetxt += "<li><b>Alignement</b> du texte dans les cellules</li>";
aidetxt += "</ul>";
popup.innerHTML += aidetxt;
}
addOnloadHook(initeventbuttontable);
/*--------------------------------------------------------------------------------*/