MediaWiki:Gadget-RefJournalArticle.js
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(/</g, "<");
Texte = Texte.replace(/>/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>