//<source lang=javascript>//<pre><nowiki>
/*
Permet de mettre en forme des références à partir de references existantes en utilisant le modele Article scientifique
la structure du code et la plupart du code de ce gadget vient du gadget [[MediaWiki:Gadget-OuvrageArticle.js]] (brillamment) developpe par [[Utilisateur:Dr Brains]]
*/
// ------------------------------------------------------ Modèles par défaut
var Articlescientifique_Template = "* {{Article scientifique"
+"|langue=en"
+"|nom1=NOM1@"
+"|prénom1=PRENOM1@"
+"|nom2=NOM2@"
+"|prénom2=PRENOM2@"
+"|nom3=NOM3@"
+"|prénom3=PRENOM3@"
+"|nom4=NOM4@"
+"|prénom4=PRENOM4@"
+"|nom5=NOM5@"
+"|prénom5=PRENOM5@"
+"|nom6=NOM6@"
+"|prénom6=PRENOM6@"
+"|nom7=NOM7@"
+"|prénom7=PRENOM7@"
+"|nom8=NOM8@"
+"|prénom8=PRENOM8@"
+"|nom9=NOM9@"
+"|prénom9=PRENOM9@"
+"|nom10=NOM10@"
+"|prénom10=PRENOM10@"
+"|nom11=NOM11@"
+"|prénom11=PRENOM11@"
+"|titre=TITRE@"
+"|périodique=EDITEUR@"
+"|série=SERIE@"
+"|volume=VOLUME@"
+"|numéro=NUMERO@"
+"|année=ANNEE@"
+"|pages=PAGES@"
+"|url texte=LIRE@"
+"}}"
var Titre;
// ------------------------------------------------------ Lancement
if( (mw.config.get('wgNamespaceNumber')>-1)&&( (mw.config.get('wgAction')=="edit")||(mw.config.get('wgAction')=="submit")) ) addOnloadHook(Articlescientifique_AddButton);
// ------------------------------------------------------ Ajout du bouton
function Articlescientifique_AddButton(){
if(!document.editform) return;
var Toolbar = document.getElementById('toolbar');
if(!Toolbar){
Toolbar = document.createElement('div');
Toolbar.id = 'toolbar';
document.editform.insertBefore(Toolbar, document.editform.firstChild);
}
var button = '<img src="http://upload.wikimedia.org/wikipedia/commons/a/a9/Button_tournesol.png" heigth="23" width="23" alt="Article scientifique" />';
var NewButton = document.createElement('a')
NewButton.title = "Utiliser le modele Article scientifique";
NewButton.href="javascript:Articlescientifique_OpenMenu();";
NewButton.innerHTML = button;
Toolbar.appendChild(NewButton);
}
// ------------------------------------------------------ Création du menu
function Articlescientifique_OpenMenu(){
var Toolbar = document.getElementById('toolbar');
if(!Toolbar) Toolbar = document.getElementById("Oldbar");
var MenuDiv = document.getElementById('Menu_Articlescientifique');
if(MenuDiv){
return;
}else{
MenuDiv = document.createElement('div');
MenuDiv.id = 'Menu_Articlescientifique';
$(MenuDiv).insertAfter(Toolbar);
}
var PreviewDiv = document.createElement('div');
PreviewDiv.id = 'Menu_Articlescientifique_Preview';
PreviewDiv.setAttribute("style", "border:2px solid grey;padding:1em;");
var TextArea = document.createElement('textarea');
TextArea.id = 'Menu_Articlescientifique_Input';
TextArea.rows = 5;
var InputOK = document.createElement('input');
InputOK.type = "button";
InputOK.value = "Convertir";
InputOK.onclick = Articlescientifique_CheckMenu;
InputOK.select = Articlescientifique_CheckMenu;
var InputPreview = document.createElement('input');
InputPreview.type = "button";
InputPreview.value = "Prévisualiser";
InputPreview.onclick = Articlescientifique_Preview;
InputPreview.select = Articlescientifique_Preview;
var InputGetselected = document.createElement('input');
InputGetselected.type = "button";
InputGetselected.value = "Coller texte selectionné";
InputGetselected.onclick = Articlescientifique_Pasteselected;
InputGetselected.select = Articlescientifique_Pasteselected;
var InputCopysolution = document.createElement('input');
InputCopysolution.type = "button";
InputCopysolution.value = "Copier solution";
InputCopysolution.onclick = Articlescientifique_Copysolution;
InputCopysolution.select = Articlescientifique_Copysolution;
var InputFindsame = document.createElement('input');
InputFindsame.type = "button";
InputFindsame.value = "Chercher les mêmes citations";
InputFindsame.onclick = Articlescientifique_Findsame;
InputFindsame.select = Articlescientifique_Findsame;
var InputCancel = document.createElement('input');
InputCancel.type = "button";
InputCancel.value = "Fermer";
InputCancel.onclick = Articlescientifique_Cancel;
InputCancel.select = Articlescientifique_Cancel;
MenuDiv.appendChild(PreviewDiv);
MenuDiv.appendChild(TextArea);
MenuDiv.appendChild(InputOK);
MenuDiv.appendChild(InputPreview);
MenuDiv.appendChild(InputGetselected);
MenuDiv.appendChild(InputCopysolution);
MenuDiv.appendChild(InputFindsame);
MenuDiv.appendChild(InputCancel);
}
// ------------------------------------------------------ Annulation du menu
function Articlescientifique_Cancel(){
var MenuDiv = document.getElementById('Menu_Articlescientifique');
MenuDiv.parentNode.removeChild(MenuDiv);
}
// ------------------------------------------------------ Vérification du menu
function Articlescientifique_CheckMenu(){
var Textarea = document.getElementById('Menu_Articlescientifique_Input');
var Value = Textarea.value;
if(Value=="") return;
Value = Articlescientifique_CheckArticleParams(Value);
Textarea.value = Value;
Articlescientifique_Preview();
}
// ------------------------------------------------------ Coller texte selectionne
function Articlescientifique_Pasteselected(){
var Textarea = document.getElementById('Menu_Articlescientifique_Input');
var Value;
Value = Articlescientifique_Getselected();
Textarea.value = Value;
Articlescientifique_CheckMenu();
}
// ------------------------------------------------------ Copier solution
function Articlescientifique_Copysolution(){
var Textarea = document.getElementById('Menu_Articlescientifique_Input');
var Value = Textarea.value;
if (window.clipboardData) { // IE
// Le contenu actuel du presse-papier sera écrasé par la valeur de sText.
window.clipboardData.setData('Text', Value);
// On ne veut pas suivre le lien après le clic.
return false;
} else if (typeof(netscape) == 'object' && typeof(Components) == 'object') { // Mozilla
try
{
// On test si la configuration permet l'accès au presse-papier.
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
}
catch (e)
{
alert("Impossible d'accéder au presse-papier (mettez la valeur signed.applets.codebase_principal_support a true dans l'URL about:config");
}
// Initialisation du composant fournit par Mozilla.
var gClipboardHelper =
Components.classes["@mozilla.org/widget/clipboardhelper;1"]
.getService(Components.interfaces.nsIClipboardHelper);
// Copie du texte dans le presse papier.
gClipboardHelper.copyString(Value);
// On ne veut pas suivre le lien après le clic.
return false;
} else
{
alert("Cette fonctionnalité n'est pas disponible pour votre navigateur");
}
}
// ------------------------------------------------------ Mettre en forme
function Articlescientifique_CheckArticleParams(Texte){
var Articlescientifique = Articlescientifique_Template;
var EmptyParamRegExp1 = new RegExp("([^0-9]*)([1-2][0-9][0-9][0-9])(.*)", "ig")
var Auteurs = Texte.replace(EmptyParamRegExp1, "$1");
var Annee = Texte.replace(EmptyParamRegExp1, "$2");
var Reste = Texte.replace(EmptyParamRegExp1, "$3");
// Annee
Articlescientifique = Articlescientifique.replace(/ANNEE@/, Annee);
//Auteurs
Auteurs = Auteurs.replace(/&/g, ",").replace(/ et /g, ",").replace(/ and /g, ",").replace(/\*/g, "").replace(/, /g, ",").replace(/ ,/g, ",");
var EmptyParamRegExp2a = new RegExp("[,]{2,}","ig")
Auteurs = Auteurs.replace(EmptyParamRegExp2a, ","); //2 virgules ou plus --> 1 virgule
var EmptyParamRegExp2b = new RegExp("[ ]{2,}","ig")
Auteurs = Auteurs.replace(EmptyParamRegExp2b, " "); //2 espaces ou plus --> 1 espace
Auteurs = Auteurs.replace(/^\,+|\,+$/g,"").replace(/^\s+|\s+$/g,""); // trim
var Auteur = Auteurs.split(",");
var Authoralreadydone = new Array();
var b = 1;
//boucle sur les auteurs
for(var a=0;a<Auteur.length;a++){
var Nom = "=NOM"+b+"@";
var Prenom = "=PRENOM"+b+"@";
var EmptyParamRegExp3a = new RegExp(Nom, 'g');
var EmptyParamRegExp3b = new RegExp(Prenom, 'g');
var EditValue = document.editform.wpTextbox1.value;
var EditValueLine1 = EditValue.split("\n");
// boucle sur les lignes de l'article
for(var c=0;c<EditValueLine1.length;c++){
var EditValueLine2 = EditValueLine1[c].split("]]");
// boucle sur les wikimots de la ligne car on ne peut pas changer les ancres de recherche des regexp en javascript
for(var d=0;d<EditValueLine2.length;d++){
var Tobefound = "(.*)\\[\\[([^\\|]*)\\|"+Auteur[a]+"(.*)";
var EmptyParamRegExp13 = new RegExp(Tobefound, "ig")
var Resultat = EditValueLine2[d].replace(EmptyParamRegExp13, "$2");
// si on trouve l'auteur dans un wikimot
if (Resultat!=EditValueLine2[d]){
Tobefound = Auteur[a]+"$";
var EmptyParamRegExp14 = new RegExp(Tobefound, "ig")
Resultat = Resultat.replace(/^\s+|\s+$/g,"");
Resultat = Resultat.replace(/ \(herpétologiste\)/, "").replace(/ \(biologiste\)/, "").replace(/ \(zoologiste\)/, "");
Resultat = Resultat.replace(EmptyParamRegExp14, "").replace(/^\s+|\s+$/g,"");
var Found = Resultat + " " + Auteur[a];
var EmptyParamRegExp15 = new RegExp(Found, "ig")
// si l'auteur n'a pas ete deja mis dans la citation (pour Goin et Goin par exemple)
if (Authoralreadydone.join("").replace(EmptyParamRegExp15, "") == Authoralreadydone.join("")){
Authoralreadydone.push(Found);
Articlescientifique = Articlescientifique.replace(EmptyParamRegExp3b, "=" + Resultat);
break;
}
}
}
}
Articlescientifique = Articlescientifique.replace(EmptyParamRegExp3a, "=" + Auteur[a]);
b = b + 1;
}
// Titre
var EmptyParamRegExp4 = new RegExp("(.*)\\'\\'(.*)\\'\\'(.*)", "ig")
Titre = Reste.replace(EmptyParamRegExp4, "$2");
Titre = Titre.replace(/\.$/g,"");
Articlescientifique = Articlescientifique.replace(/TITRE@/, Titre);
Reste = Reste.replace(EmptyParamRegExp4, "$3");
// Lire
var EmptyParamRegExp5 = new RegExp("(.*)\\(\\[(.*) texte intégral\\]\\)(.*)", "ig")
var Lien = Reste.replace(EmptyParamRegExp5, "$2");
if(Lien!=Reste){
Articlescientifique = Articlescientifique.replace(/LIRE@/, Lien);
Reste = Reste.replace(EmptyParamRegExp5, "$1");
}
// Pages
var EmptyParamRegExp6 = new RegExp("(.*)\\{\\{p\\.\\|([^\\}]*)\\}\\}(.*)", "ig")
var Pages = Reste.replace(EmptyParamRegExp6, "$2");
if(Pages==Reste){
var EmptyParamRegExp7 = new RegExp("(.*)p\\.([ ]*)([^ \\,\\;\\.\\:]*)([ ]*)(.*)", "ig")
Pages = Reste.replace(EmptyParamRegExp7, "$3");
if(Pages!=Reste){
Articlescientifique = Articlescientifique.replace(/PAGES@/, Pages);
Reste = Reste.replace(EmptyParamRegExp7, "$1 $5");
}
}
else{
Articlescientifique = Articlescientifique.replace(/PAGES@/, Pages);
Reste = Reste.replace(EmptyParamRegExp6, "$1 $3");
}
// Numéro
var EmptyParamRegExp8 = new RegExp("(.*)\\{\\{n\\.\\|([^\\}]*)\\}\\}(.*)", "ig")
var Numero = Reste.replace(EmptyParamRegExp8, "$2");
if(Numero==Reste){
var EmptyParamRegExp9 = new RegExp("(.*)n\\.([ ]*)([^ \\,\\;\\.\\:]*)([ ]*)(.*)", "ig")
Numero = Reste.replace(EmptyParamRegExp9, "$3");
if(Numero!=Reste){
Articlescientifique = Articlescientifique.replace(/NUMERO@/, Numero);
Reste = Reste.replace(EmptyParamRegExp9, "$1 $5");
}
}
else{
Articlescientifique = Articlescientifique.replace(/NUMERO@/, Numero);
Reste = Reste.replace(EmptyParamRegExp8, "$1 $3");
}
// Série
var EmptyParamRegExp10 = new RegExp("(.*)\\{\\{ser\\.\\|([^\\}]*)\\}\\}(.*)", "ig")
var Serie = Reste.replace(EmptyParamRegExp10, "$2");
if(Serie==Reste){
var EmptyParamRegExp11 = new RegExp("(.*)ser\\.([ ]*)([^ \\,\\;\\.\\:]*)([ ]*)(.*)", "ig")
Serie = Reste.replace(EmptyParamRegExp11, "$3");
if(Serie!=Reste){
Articlescientifique = Articlescientifique.replace(/SERIE@/, Serie);
Reste = Reste.replace(EmptyParamRegExp11, "$1 $5");
}
}
else{
Articlescientifique = Articlescientifique.replace(/SERIE@/, Serie);
Reste = Reste.replace(EmptyParamRegExp10, "$1 $3");
}
// Volume
var EmptyParamRegExp12 = new RegExp("(.*)\\{\\{vol\\.\\|([^\\}]*)\\}\\}(.*)", "ig")
var Volume = Reste.replace(EmptyParamRegExp12, "$2");
if(Volume==Reste){
var EmptyParamRegExp13 = new RegExp("(.*)vol\\.([ ]*)([^ \\,\\;\\.\\:]*)([ ]*)(.*)", "ig")
Volume = Reste.replace(EmptyParamRegExp13, "$3");
if(Volume!=Reste){
Articlescientifique = Articlescientifique.replace(/VOLUME@/, Volume);
Reste = Reste.replace(EmptyParamRegExp13, "$1 $5");
}
}
else{
Articlescientifique = Articlescientifique.replace(/VOLUME@/, Volume);
Reste = Reste.replace(EmptyParamRegExp12, "$1 $3");
}
// Editeur
var Editeur = Reste.replace(EmptyParamRegExp2b, " "); //2 espace ou plus --> 1 espace
Editeur = Editeur.replace(/\./g,",").replace(/\;/g,",").replace(/\:/g,",");
Editeur = Editeur.replace(/\, \,/g,",").replace(/\, \,/g,",").replace(/\, \,/g,",").replace(/\, \,/g,",").replace(/\, \,/g,",").replace(/\, \,/g,",");
Editeur = Editeur.replace(/^\,+|\,+$/g,"").replace(/^\s+|\s+$/g,"").replace(/^\,+|\,+$/g,"").replace(/^\s+|\s+$/g,"");
Articlescientifique = Articlescientifique.replace(/EDITEUR@/, Editeur);
Articlescientifique = Articlescientifique.replace(/\|nom1\=NOM1@/, "");
Articlescientifique = Articlescientifique.replace(/\|prénom1\=PRENOM1@/, "");
Articlescientifique = Articlescientifique.replace(/\|nom2\=NOM2@/, "");
Articlescientifique = Articlescientifique.replace(/\|prénom2\=PRENOM2@/, "");
Articlescientifique = Articlescientifique.replace(/\|nom3\=NOM3@/, "");
Articlescientifique = Articlescientifique.replace(/\|prénom3\=PRENOM3@/, "");
Articlescientifique = Articlescientifique.replace(/\|nom4\=NOM4@/, "");
Articlescientifique = Articlescientifique.replace(/\|prénom4\=PRENOM4@/, "");
Articlescientifique = Articlescientifique.replace(/\|nom5\=NOM5@/, "");
Articlescientifique = Articlescientifique.replace(/\|prénom5\=PRENOM5@/, "");
Articlescientifique = Articlescientifique.replace(/\|nom6\=NOM6@/, "");
Articlescientifique = Articlescientifique.replace(/\|prénom6\=PRENOM6@/, "");
Articlescientifique = Articlescientifique.replace(/\|nom7\=NOM7@/, "");
Articlescientifique = Articlescientifique.replace(/\|prénom7\=PRENOM7@/, "");
Articlescientifique = Articlescientifique.replace(/\|nom8\=NOM8@/, "");
Articlescientifique = Articlescientifique.replace(/\|prénom8\=PRENOM8@/, "");
Articlescientifique = Articlescientifique.replace(/\|nom9\=NOM9@/, "");
Articlescientifique = Articlescientifique.replace(/\|prénom9\=PRENOM9@/, "");
Articlescientifique = Articlescientifique.replace(/\|nom10\=NOM10@/, "");
Articlescientifique = Articlescientifique.replace(/\|prénom10\=PRENOM10@/, "");
Articlescientifique = Articlescientifique.replace(/\|nom11\=NOM11@/, "");
Articlescientifique = Articlescientifique.replace(/\|prénom11\=PRENOM11@/, "");
Articlescientifique = Articlescientifique.replace(/\|titre\=TITRE@/, "");
Articlescientifique = Articlescientifique.replace(/\|périodique\=EDITEUR@/, "");
Articlescientifique = Articlescientifique.replace(/\|série\=SERIE@/, "");
Articlescientifique = Articlescientifique.replace(/\|volume\=VOLUME@/, "");
Articlescientifique = Articlescientifique.replace(/\|numéro\=NUMERO@/, "");
Articlescientifique = Articlescientifique.replace(/\|année\=ANNEE@/, "");
Articlescientifique = Articlescientifique.replace(/\|pages\=PAGES@/, "");
Articlescientifique = Articlescientifique.replace(/\|url texte\=LIRE@/, "");
return Articlescientifique;
}
// ------------------------------------------------------ Prévisualisation
function Articlescientifique_Preview(){
var PreviewWindow = document.getElementById('Menu_Articlescientifique_Preview');
var Textarea = document.getElementById('Menu_Articlescientifique_Input');
if (!Textarea || !PreviewWindow) return;
$.get(mw.config.get('wgScriptPath') + '/api.php', {
action: 'parse',
text: Textarea.value,
format: 'json',
formatversion: 2
}).done(function (data) {
if (data.error) return;
PreviewWindow.innerHTML = data.parse.text;
});
}
// ------------------------------------------------------ Recherche texte selectionne
function Articlescientifique_Getselected(){
var txtarea;
if (document.editform) {
txtarea = currentFocused;
} else {
var areas = document.getElementsByTagName('textarea');
txtarea = areas[0];
}
var selText, isSample = false;
if (document.selection && document.selection.createRange) { // IE/Opera
txtarea.focus();
var range = document.selection.createRange();
selText = range.text;
checkSelectedText();
} else if (txtarea.selectionStart || txtarea.selectionStart == '0') { // Mozilla
txtarea.focus();
var startPos = txtarea.selectionStart;
var endPos = txtarea.selectionEnd;
selText = txtarea.value.substring(startPos, endPos);
checkSelectedText();
}
if(selText){
return selText;
}else{
alert('Vous devez sélectionner du texte');
}
function checkSelectedText(){
if (selText) {
if (selText.charAt(selText.length - 1) == ' ') { //exclude ending space char
selText = selText.substring(0, selText.length - 1);
}
}
}
}
// ------------------------------------------------------ Recherche texte selectionne
function Articlescientifique_Findsame(){
if(Titre){
var newwin = window.open('http://fr.wikipedia.org/wiki/Special:Recherche?search=' + Titre + '&sourceid=Mozilla-search');
}else{
alert('Il faut mettre la citation en forme avant de vouloir chercher les mêmes');
}
}
// ------------------------------------------------------
//</nowiki></pre></source>