MediaWiki:Gadget-RefJournalArticle.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|RefJournalArticle}} */

//<source 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 http://fr.wikipedia.org/wiki/Discussion_Projet:JavaScript#G.C3.A9n.C3.A9ration_automatique_mod.C3.A8le_Ouvrage_et_Article

*/

// ------------------------------------------------------ Modèle par défaut

var RefJournalArticle_ArticleTemplate = "{{Article"
+"|langue=$LANGUE"
+"$AUTEURS"
+"|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"
+"}}"

var RefJournalArticle_DOIsiteTemplate = "http://api.labs.crossref.org/$1.json";

var RefJournalArticle_DOIsiteWindow = false;

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

function RefJournalArticle_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="Référence Article" />';

     var NewButton = document.createElement('a')
     NewButton.title = "Récupérer et mettre en forme une référence Article";
     NewButton.href="javascript:RefJournalArticle_OpenMenu();";
     NewButton.innerHTML = button;
     Toolbar.appendChild(NewButton);
}

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

function RefJournalArticle_OpenMenu(){
     var Toolbar = document.getElementById('toolbar');
     if(!Toolbar) Toolbar = document.getElementById("Oldbar");
     var MenuDiv = document.getElementById('Menu_RefJournalArticle');
     if(MenuDiv){
          RefJournalArticle_Cancel();
          return;
     }else{
          MenuDiv = document.createElement('div');
          MenuDiv.id = 'Menu_RefJournalArticle';
          Toolbar.parentNode.insertBefore(MenuDiv, Toolbar.nextSibling);
     }

     var DOIDiv = document.createElement('div');

     var DOIInput = document.createElement('input');
     DOIInput.type = "text";
     DOIInput.id = "Menu_RefJournalArticle_DOIInput";
     var DOILabel = document.createElement('label');
     DOILabel.setAttribute("for", "Menu_RefJournalArticle_DOIInput");
     DOILabel.appendChild(document.createTextNode("DOI"));

     var DOIInputOK = document.createElement('input');
     DOIInputOK.type = "button";
     DOIInputOK.value = "OK";
     DOIInputOK.onclick = RefJournalArticle_GetDOI;
     DOIInputOK.select = RefJournalArticle_GetDOI;

     var DOIText = document.createElement('p');
     DOIText.id = "Menu_RefJournalArticle_DOIText";
     DOIText.style.fontSize = 'larger';
     DOIText.style.color = '#d33';
     
     DOIDiv.appendChild(DOIInputOK);
     DOIDiv.appendChild(DOIInput);
     DOIDiv.appendChild(DOILabel);
     DOIDiv.appendChild(DOIText);
     MenuDiv.appendChild(DOIDiv);

     var ConvertDiv = document.createElement('div');
     ConvertDiv.id = 'Menu_RefJournalArticle_ConvertDiv';
     ConvertDiv.setAttribute("style", "display:none;");

     var PreviewDiv = document.createElement('div');
     PreviewDiv.id = 'Menu_RefJournalArticle_Preview';
     PreviewDiv.setAttribute("style", "border:2px solid grey;padding:1em;display:none;");

     var TextArea = document.createElement('textarea');
     TextArea.id = 'Menu_RefJournalArticle_Input';
     TextArea.rows = 5;
     TextArea.onkeyup = RefJournalArticle_CloseDOI;

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

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

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

     ConvertDiv.appendChild(PreviewDiv);
     ConvertDiv.appendChild(TextArea);
     ConvertDiv.appendChild(InputOK);
     ConvertDiv.appendChild(InputPreview);
     ConvertDiv.appendChild(InputCancel);

     MenuDiv.appendChild(ConvertDiv);
}

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

function RefJournalArticle_Cancel(){
     var MenuDiv = document.getElementById('Menu_RefJournalArticle');
     if(MenuDiv) MenuDiv.parentNode.removeChild(MenuDiv);
     RefJournalArticle_CloseDOI()
}

// ------------------------------------------------------ Recherche DOI
function RefJournalArticle_GetDOI(){
     var DOIInput = document.getElementById('Menu_RefJournalArticle_DOIInput');
     var Value = DOIInput.value;
     if(Value=="") return;
     RefJournalArticle_CloseDOI();
     var URL = RefJournalArticle_DOIsiteTemplate.split("$1").join(Value);
     RefJournalArticle_DOIsiteWindow = window.open(URL, "_blank", "height=150,width=500,left=10,top=10,location=no,menubar=no,scrollbars=no,status=no,titlebar=no,toolbar=no");
     var DOIText = document.getElementById("Menu_RefJournalArticle_DOIText");
     if(DOIText) DOIText.innerHTML = "Copier-coller le contenu de la fenêtre qui vient de s'ouvrir dans la boîte ci-dessous";
     var ConvertDiv = document.getElementById('Menu_RefJournalArticle_ConvertDiv');
     if(ConvertDiv) ConvertDiv.style.display = "";
}

// ------------------------------------------------------ Fermeture fenêtre DOI
function RefJournalArticle_CloseDOI(){
     if(!RefJournalArticle_DOIsiteWindow) return;
     try{ RefJournalArticle_DOIsiteWindow.close() }catch(e){  }
}

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

function RefJournalArticle_CheckMenu(){
     var Textarea = document.getElementById('Menu_RefJournalArticle_Input');
     var Value = Textarea.value;
     if(Value=="") return;
     Value = Value.replace(/\n/g, "");
     if (typeof (JSON) != 'undefined'){
          var JSONResult = JSON.parse(Value);
     }else{
          var JSONResult = eval('(' + Value+ ')');
     }
     if(!JSONResult["doi_record"] || !JSONResult["doi_record"]["crossref"] || !JSONResult["doi_record"]["crossref"]["journal"]) return;
     var Template = RefJournalArticle_GetParams(JSONResult["doi_record"]["crossref"]["journal"]);

     Textarea.value = Template;
     RefJournalArticle_Preview();
}

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

function RefJournalArticle_GetParams(JSONResultJournal){
     var Article = RefJournalArticle_ArticleTemplate;
     var JournalArticle = JSONResultJournal["journal_article"];
     if(JournalArticle){
          if(JournalArticle["doi_data"] && JournalArticle["doi_data"]["doi"]){
               Article = Article.split("$DOI").join(JournalArticle["doi_data"]["doi"]);
          }
          var Contributors = JournalArticle["contributors"];
          if(Contributors){
               var ContributorsIndex = 1;
               var AllCont = "";
               for(var Cont in Contributors){
                    if(!Contributors.hasOwnProperty(Cont)) continue;
                    var AutorFN =  Contributors[Cont]["given_name"];
                    var AutorLN =  Contributors[Cont]["surname"];
                    AllCont += "|nom"+ContributorsIndex+"="+AutorLN 
                             + "|prénom"+ContributorsIndex+"="+AutorFN 
                             + "|lien auteur"+ContributorsIndex+"="+AutorFN+" "+AutorLN;
                    ContributorsIndex++;
               }
               Article = Article.split("$AUTEURS").join(AllCont);
          }
          if(JournalArticle["titles"] && JournalArticle["titles"]["title"]){
               Article = Article.split("$TITRE").join(JournalArticle["titles"]["title"]);
          }
          if(JournalArticle["pages"]){
               var Pages = "";
               if(JournalArticle["pages"]["first_page"] && JournalArticle["pages"]["last_page"]){
                    Article = Article.split("$PAGESTOTALES").join(JournalArticle["pages"]["first_page"]+"-"+JournalArticle["pages"]["last_page"]);
               }else if(JournalArticle["pages"]["first_page"]){
                    Article = Article.split("$PAGESTOTALES").join(JournalArticle["pages"]["first_page"]);                    
               }else if(JournalArticle["pages"]["last_page"]){
                    Article = Article.split("$PAGESTOTALES").join(JournalArticle["pages"]["last_page"]);                    
               }
          }
     }
     var JournalMeta = JSONResultJournal["journal_metadata"];
     if(JournalMeta){
          if(JournalMeta["language"]) Article = Article.split("$LANGUE").join(JournalMeta["language"]);
          if(JournalMeta["full_title"]) Article = Article.split("$EDITEUR").join(JournalMeta["full_title"]);
     }
     var JournalIssue = JSONResultJournal["journal_issue"];
     if(JournalIssue){
          var IssueDate = JournalIssue["publication_date"];
          if(IssueDate){
               if(IssueDate["day"]) Article = Article.split("$JOUR").join(IssueDate["day"]);
               if(IssueDate["month"]) Article = Article.split("$MOIS").join(RefJournalArticle_Month(IssueDate["month"]));
               if(IssueDate["year"]) Article = Article.split("$ANNEE").join(IssueDate["year"]);               
          }
          if(JournalIssue["journal_volume"] && JournalIssue["journal_volume"]["volume"]){
               Article = Article.split("$VOLUME").join(JournalIssue["journal_volume"]["volume"]);
          }
          if(JournalIssue["issue"]){
               Article = Article.split("$NUMERO").join(JournalIssue["issue"]);
          }
     }
     var Now = new Date();
     var Year = Now.getFullYear();
     var Month = Now.getMonth();
     var Day = Now.getDate();
     Article = Article.split("$CONSULATION").join(Day+" "+RefJournalArticle_Month((Month+1))+" "+Year);

     var EmptyParamRegExp1 = new RegExp("\\$[^\\|]+[\\|]", "ig")
     var EmptyParamRegExp2 = new RegExp("\\$[^\\}]+[\\}]", "ig")
     Article = Article.replace(EmptyParamRegExp1, "\|");
     Article = Article.replace(EmptyParamRegExp2, "\}");
     return Article;
}

// ------------------------------------------------------ Prévisualisation

function RefJournalArticle_Preview(){
     var PreviewWindow = document.getElementById('Menu_RefJournalArticle_Preview');
     var Textarea = document.getElementById('Menu_RefJournalArticle_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;
          PreviewWindow.style.display = "";
     });
}

// ------------------------------------------------------

function RefJournalArticle_Month(MonthNumber){
     var MonthNames = {"1":"janvier","2":"février","3":"mars","4":"avril","5":"mai","6":"juin","7":"juillet","8":"août","9":"septembre","10":"octobre","11":"novembre","12":"décembre"}
     if(MonthNames[MonthNumber]) return MonthNames[MonthNumber];
     return MonthNumber
}


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

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

// ------------------------------------------------------
//</nowiki></pre></source>