MediaWiki:Gadget-OuvrageArticle.js

Une page de Wikipédia, l'encyclopédie libre.
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.
/* {{Catégorisation JS|OuvrageArticle}} */

//<syntaxhighlight lang=javascript>//<pre><nowiki>
/*

Permet de mettre en forme des références à partir de
* http://www.worldcat.org/ (Ouvrage)
* http://api.labs.crossref.org/search (Article)

Voir https://fr.wikipedia.org/wiki/Discussion_Projet:Scripts_et_gadgets/2010#Génération_automatique_modèle_Ouvrage_et_Article

*/

// ------------------------------------------------------ Modèles par défaut
var OuvrageArticle_OuvrageTemplate = "{{Ouvrage"
+"|langue=$LANGUE"
+"|nom1=$NOM1"
+"|prénom1=$PRENOM1"
+"|lien auteur1=$LIENAUTEUR1"
+"|titre chapitre=$TITCHAPITRE"
+"|éditeur=$EDITEUR"
+"|lien éditeur=$LIENEDITEUR"
+"|lieu=$LIEU"
+"|jour=$JOUR"
+"|mois=$MOIS"
+"|année=$ANNEE"
+"|titre=$TITRE"
+"|sous-titre=$SOUSTITRE"
+"|numéro d'édition=$NOEDITION"
+"|isbn=$ISBN"
+"|issn=$ISSN"
+"|oclc=$OCLC"
+"|pages totales=$PAGESTOTALES"
+"|volume=$VOLUME"
+"|tome=$TOME"
+"|passage=$PASSAGE"
+"|lire en ligne=$LIRE"
+"|consulté le=$CONSULATION"
+"|présentation en ligne=$PRESENTATION"
+"}}"

var OuvrageArticle_ArticleTemplate = "{{Article"
+"|langue=$LANGUE"
+"|prénom1=$PRENOM1"
+"|nom1=$NOM1"
+"|lien auteur1=$LIENAUTEUR1"
+"|titre=$TITRE"
+"|périodique=$EDITEUR"
+"|lien périodique=$LIENEDITEUR"
+"|volume=$VOLUME"
+"|numéro=$NUMERO"
+"|jour=$JOUR"
+"|mois=$MOIS"
+"|année=$ANNEE"
+"|pages=$PAGESTOTALES"
+"|isbn=$ISBN"
+"|issn=$ISSN1"
+"|issn2=$ISSN2"
+"|doi=$DOI"
+"|url texte=$LIRE"
+"|consulté le=$CONSULATION"
+"}}"

// ------------------------------------------------------ Ajout du bouton

function OuvrageArticle_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="//upload.wikimedia.org/wikipedia/commons/9/9a/Button_references.png" heigth="23" width="23" alt="Ouvrage ou Article" />';

     var NewButton = document.createElement('a')
     NewButton.title = "Mettre en forme une référence";
     NewButton.href="javascript:OuvrageArticle_OpenMenu();";
     NewButton.innerHTML = button;
     Toolbar.appendChild(NewButton);
}

// ------------------------------------------------------ Création du menu

function OuvrageArticle_OpenMenu(){
     var Toolbar = document.getElementById('toolbar');
     if(!Toolbar) Toolbar = document.getElementById("Oldbar");
     var MenuDiv = document.getElementById('Menu_OuvrageArticle');
     if(MenuDiv){
          return;
     }else{
          MenuDiv = document.createElement('div');
          MenuDiv.id = 'Menu_OuvrageArticle';
          Toolbar.parentNode.insertBefore(MenuDiv, Toolbar.nextSibling);
     }
     var PreviewDiv = document.createElement('div');
     PreviewDiv.id = 'Menu_OuvrageArticle_Preview';
     PreviewDiv.setAttribute("style", "border:2px solid grey;padding:1em;");

     var TextArea = document.createElement('textarea');
     TextArea.id = 'Menu_OuvrageArticle_Input';
     TextArea.rows = 5;

     var InputOK = document.createElement('input');
     InputOK.type = "button";
     InputOK.value = "Convertir";
     InputOK.onclick = OuvrageArticle_CheckMenu;
     InputOK.select = OuvrageArticle_CheckMenu;

     var InputPreview = document.createElement('input');
     InputPreview.type = "button";
     InputPreview.value = "Prévisualiser";
     InputPreview.onclick = OuvrageArticle_Preview;
     InputPreview.select = OuvrageArticle_Preview;

     var InputCancel = document.createElement('input');
     InputCancel.type = "button";
     InputCancel.value = "Fermer";
     InputCancel.onclick = OuvrageArticle_Cancel;
     InputCancel.select = OuvrageArticle_Cancel;

     MenuDiv.appendChild(PreviewDiv);
     MenuDiv.appendChild(TextArea);
     MenuDiv.appendChild(InputOK);
     MenuDiv.appendChild(InputPreview);
     MenuDiv.appendChild(InputCancel);
}

// ------------------------------------------------------ Annulation du menu

function OuvrageArticle_Cancel(){
     var MenuDiv = document.getElementById('Menu_OuvrageArticle');
     MenuDiv.parentNode.removeChild(MenuDiv);
}

// ------------------------------------------------------ Vérification du menu

function OuvrageArticle_CheckMenu(){
     var Textarea = document.getElementById('Menu_OuvrageArticle_Input');
     var Value = Textarea.value;
     if(Value=="") return;

     Value = decodeURIComponent(Value).split("&amp;").join('&');
     Value = Value.replace(/.* title=/g, "");
     Value = Value.replace(/("|')\>.*/g, "");

     //if(Value.indexOf('title="')!=-1) Value = Value.split('title="')[1].split('"')[0];
     Value = Value.replace(/\+/g, " ");

     if(Value.indexOf("&rft.genre=book")!=-1) Value = OuvrageArticle_CheckOuvrageParams(Value);
     if(Value.indexOf("&rft.genre=article")!=-1) Value = OuvrageArticle_CheckArticleParams(Value);
     if(Value.indexOf("&rtf.genre=journal-article")!=-1) Value = OuvrageArticle_CheckJournalArticleParams(Value);

     Textarea.value = Value;
     OuvrageArticle_Preview();
}

// ------------------------------------------------------ Recherche paramètres modèle Ouvrage

function OuvrageArticle_CheckOuvrageParams(Texte){
     var Ouvrage = OuvrageArticle_OuvrageTemplate;
     var Params = Texte.split("&rft");
     for(var a=0;a<Params.length;a++){
          var ThisParamName = Params[a].replace(/=.*/, "");
          var ThisParam = Params[a].split(ThisParamName).join("");
          if(ThisParamName==".btitle") Ouvrage = Ouvrage.split("=$TITRE").join(ThisParam);
          if(ThisParamName==".pub") Ouvrage = Ouvrage.split("=$EDITEUR").join(ThisParam);
          if(ThisParamName==".date") Ouvrage = Ouvrage.split("=$ANNEE").join(ThisParam);
          if(ThisParamName==".isbn") Ouvrage = Ouvrage.split("=$ISBN").join(ThisParam);
          if(ThisParamName==".aufirst") Ouvrage = Ouvrage.split("=$PRENOM1").join(ThisParam);
          if(ThisParamName==".aulast") Ouvrage = Ouvrage.split("=$NOM1").join(ThisParam);
          if(ThisParamName==".au") Ouvrage = Ouvrage.split("=$LIENAUTEUR1").join(ThisParam);
          if(ThisParamName==".atitle") Ouvrage = Ouvrage.split("=$TITCHAPITRE").join(ThisParam);
          if(ThisParamName==".place") Ouvrage = Ouvrage.split("=$LIEU").join(ThisParam);
          if(ThisParamName==".edition") Ouvrage = Ouvrage.split("=$NOEDITION").join(ThisParam);
          if(ThisParamName==".issn") Ouvrage = Ouvrage.split("=$ISSN").join(ThisParam);
          if(ThisParamName==".volume") Ouvrage = Ouvrage.split("=$VOLUME").join(ThisParam);
          if(ThisParamName=="_id"){
               if(ThisParam.indexOf("info:oclcnum/")!=-1)
               Ouvrage = Ouvrage.split("=$OCLC").join(ThisParam.split("info:oclcnum/").join(''));
          }
     }
     var EmptyParamRegExp1 = new RegExp("\\$[^\\|]+[\\|]", "ig")
     var EmptyParamRegExp2 = new RegExp("\\$[^\\}]+[\\}]", "ig")
     Ouvrage = Ouvrage.replace(EmptyParamRegExp1, "\|");
     Ouvrage = Ouvrage.replace(EmptyParamRegExp2, "\}");
     return Ouvrage;
}

// ------------------------------------------------------ Recherche paramètres modèle Article

function OuvrageArticle_CheckArticleParams(Texte){
     var Article = OuvrageArticle_ArticleTemplate;
     var Params = Texte.split("&rft");
     var Spage = false;
     var Epage = false;
     for(var a=0;a<Params.length;a++){
          var ThisParamName = Params[a].replace(/=.*/, "");
          var ThisParam = Params[a].split(ThisParamName).join("");
          if(ThisParamName==".atitle") Article = Article.split("=$TITRE").join(ThisParam);
          if(ThisParamName==".jtitle") Article = Article.split("=$EDITEUR").join(ThisParam);
          if(ThisParamName==".stitle") Article = Article.split("=$EDITEUR").join(ThisParam);
          if(ThisParamName==".date") Article = Article.split("=$ANNEE").join(ThisParam);
          if(ThisParamName==".volume") Article = Article.split("=$VOLUME").join(ThisParam);
          if(ThisParamName==".issue") Article = Article.split("=$NUMERO").join(ThisParam);
          if(ThisParamName==".aulast") Article = Article.split("=$NOM1").join(ThisParam);
          if(ThisParamName==".aufirst") Article = Article.split("=$PRENOM1").join(ThisParam);
          if(ThisParamName==".au") Article = Article.split("=$LIENAUTEUR1").join(ThisParam);
          if(ThisParamName==".isbn") Article = Article.split("=$ISBN").join(ThisParam);
          if(ThisParamName==".issn") Article = Article.split("=$ISSN1").join(ThisParam);
          if(ThisParamName==".eissn") Article = Article.split("=$ISSN2").join(ThisParam);
          if(ThisParamName==".volume") Article = Article.split("=$VOLUME").join(ThisParam);
          if(ThisParamName=="_id"){
               if(ThisParam.indexOf("info:doi/")!=-1)
               Article = Article.split("=$DOI").join(ThisParam.split("info:doi/").join(''));
          }
          if(ThisParamName.indexOf(".spage")!=-1){
               Spage = ThisParam.split("=").join("");
          }
          if(ThisParamName.indexOf(".epage")!=-1){
               Epage = ThisParam.split("=").join("");
          }
     }
     if(Spage&&Epage) Article = Article.split("$PAGESTOTALES").join(Spage+"-"+Epage);
     var EmptyParamRegExp1 = new RegExp("\\$[^\\|]+[\\|]", "ig")
     var EmptyParamRegExp2 = new RegExp("\\$[^\\}]+[\\}]", "ig")
     Article = Article.replace(EmptyParamRegExp1, "\|");
     Article = Article.replace(EmptyParamRegExp2, "\}");
     return Article;
}

function OuvrageArticle_CheckJournalArticleParams(Texte){
     var Article = OuvrageArticle_ArticleTemplate;
     var Params = Texte.split("&r");
     var Spage = false;
     var Epage = false;
     for(var a=0;a<Params.length;a++){
          var ThisParamName = Params[a].replace(/=.*/, "");
          var ThisParam = Params[a].replace(ThisParamName, "");
          //alert(ThisParamName + "\n\n" + ThisParam);
          if(ThisParamName.indexOf(".atitle")!=-1) Article = Article.split("=$TITRE").join(ThisParam);
          if(ThisParamName.indexOf(".jtitle")!=-1) Article = Article.split("=$EDITEUR").join(ThisParam);
          if(ThisParamName.indexOf(".stitle")!=-1) Article = Article.split("=$EDITEUR").join(ThisParam);
          if(ThisParamName.indexOf(".date")!=-1) Article = Article.split("=$ANNEE").join(ThisParam);
          if(ThisParamName.indexOf(".volume")!=-1) Article = Article.split("=$VOLUME").join(ThisParam);
          if(ThisParamName.indexOf(".issue")!=-1) Article = Article.split("=$NUMERO").join(ThisParam);
          if(ThisParamName.indexOf(".aulast")!=-1) Article = Article.split("=$NOM1").join(ThisParam);
          if(ThisParamName.indexOf(".aufirst")!=-1) Article = Article.split("=$PRENOM1").join(ThisParam);
          if(ThisParamName.indexOf(".isbn")!=-1) Article = Article.split("=$ISBN").join(ThisParam);
          if(ThisParamName.indexOf(".issn")!=-1) Article = Article.split("=$ISSN1").join(ThisParam);
          if(ThisParamName.indexOf(".eissn")!=-1) Article = Article.split("=$ISSN2").join(ThisParam);
          if(ThisParamName==".volume") Article = Article.split("=$VOLUME").join(ThisParam);
          if(ThisParamName.indexOf("_id")!=-1){
               if(ThisParam.indexOf("info:doi/")!=-1)
               Article = Article.split("=$DOI").join(ThisParam.split("info:doi/").join(''));
          }
          if(ThisParamName.indexOf(".spage")!=-1){
               Spage = ThisParam.split("=").join("");
          }
          if(ThisParamName.indexOf(".epage")!=-1){
               Epage = ThisParam.split("=").join("");
          }
     }
     if(Spage&&Epage) Article = Article.split("$PAGESTOTALES").join(Spage+"-"+Epage);
     var EmptyParamRegExp1 = new RegExp("\\$[^\\|]+[\\|]", "ig")
     var EmptyParamRegExp2 = new RegExp("\\$[^\\}]+[\\}]", "ig")
     Article = Article.replace(EmptyParamRegExp1, "\|");
     Article = Article.replace(EmptyParamRegExp2, "\}");
     return Article;
}
// ------------------------------------------------------ Prévisualisation

function OuvrageArticle_Preview(){
     var PreviewWindow = document.getElementById('Menu_OuvrageArticle_Preview');
     var Textarea = document.getElementById('Menu_OuvrageArticle_Input');
     if(!Textarea||!PreviewWindow) return;
     var Value = Textarea.value;
     if(Value=="") return;
     var api = new mw.Api();
     api.get({
          action       : 'parse',
          text         : Value,
          contentmodel : 'wikitext'
     }).then( function ( data ) {
          try{
               var Texte = data.parse.text["*"];
               Texte = Texte.replace(/&lt;/g, "<");
               Texte = Texte.replace(/&gt;/g, ">");
          }catch(e){
               var Texte = "";
          }
          PreviewWindow = document.getElementById('Menu_OuvrageArticle_Preview');
          if(!PreviewWindow) return;
          while(PreviewWindow.firstChild){PreviewWindow.removeChild(PreviewWindow.firstChild);}
          PreviewWindow.innerHTML = Texte;
     });
}


// ------------------------------------------------------ Lancement

if( (mw.config.get('wgNamespaceNumber')>-1)&&( (mw.config.get('wgAction')=="edit")||(mw.config.get('wgAction')=="submit")) ) $(OuvrageArticle_AddButton);

// ------------------------------------------------------
//</nowiki></pre></syntaxhighlight>