MediaWiki:Gadget-OuvrageArticle.js
Apparence
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) ;
Firefox (sur GNU/Linux) / 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="/media/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("&").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(/</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;
});
}
// ------------------------------------------------------ Lancement
if( (mw.config.get('wgNamespaceNumber')>-1)&&( (mw.config.get('wgAction')=="edit")||(mw.config.get('wgAction')=="submit")) ) $(OuvrageArticle_AddButton);
// ------------------------------------------------------
//</nowiki></pre></syntaxhighlight>