Utilisateur:Seudo/biblio.js
Apparence
(Redirigé depuis Utilisateur:Seudo/test.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./*
* Génère un code {{ouvrage|...}} ou {{article|...}} à partir d'un ISBN, d'un DOI, d'une URL ou d'autres données acceptées par [https://fr.wikipedia.org/api/rest_v1/#/Citation l'API Citation], et l'insère dans le champ d'édition.
* Exemples pour des tests :
* DOI : 10.3406/CAIEF.1972.1013
* ISBN : 978-2-35031-502-7 (ou sans tiret)
* URL : https://gallica.bnf.fr/ark:/12148/bpt6k64848397
*/
/* Insère du texte au niveau du curseur dans le champ d'édition */
function inserer(e, txt) {
e.preventDefault();
try {
editbox = $("#wpTextbox1");
if(! editbox.length) {
OO.ui.alert("Cette page ne contient pas de champ d'édition");
return;
}
var startPos = editbox[0].selectionStart;
var endPos = editbox[0].selectionEnd;
var textScroll = editbox[0].scrollTop;
var content = editbox.val();
var newcontent = content.substring(0, startPos) + txt + content.substring(startPos);
editbox.val(newcontent);
editbox[0].selectionStart = startPos;
editbox[0].selectionEnd = editbox.selectionStart;
editbox[0].scrollTop = textScroll;
}
catch(exc) {
OO.ui.alert("Erreur : " + exc);
return;
}
}
function addCommande(libelle, id, desc, fn) {
mw.util.addPortletLink("p-cactions", "#", libelle, id, desc);
$('#' + id).on('click', function(e) {
fn(e);
});
}
function nettoyer(txt) {
txt = txt.replace("|", "");
return txt;
}
function biblio(e) {
OO.ui.prompt("Entrez un ISBN (exemple : 978-2-35031-502-7), un DOI (exemple : 10.3406/CAIEF.1972.1013), une URL (exemple : https://gallica.bnf.fr/ark:/12148/bpt6k64848397)").done(function(choix) {
if(!choix.startsWith("http"))
choix = choix.replace("-", "").replace(" ", "");
if(choix.length >= 1)
insert_biblio(e, choix);
else
OO.ui.alert("Je n'ai pas compris votre demande");
});
}
function insert_biblio(e, choix) {
url="https://fr.wikipedia.org/api/rest_v1/data/citation/mediawiki/"
+ encodeURIComponent(choix); /* + "?action=query&format=json"; */
var request = new XMLHttpRequest();
request.open("GET", url);
request.responseType ="json";
request.onload = function() {
console.log(request.response);
if(request.response["type"]
&& request.response["type"] == "https://mediawiki.org/wiki/HyperSwitch/errors/not_found") {
OO.ui.alert("Aucun résultat. L'ISBN est-il bien valide ?");
return;
}
json = request.response[0];
if(json["itemType"] == "book")
txt = "{{ouvrage";
else if(json["itemType"] == "journalArticle")
txt = "{{article";
else if(json["itemType"] == "webpage")
txt = "{{lien web";
else {
OO.ui.alert("Type de document non reconnu : " + json["itemType"]);
return;
}
if(json["title"])
txt += "|titre=" + nettoyer(json["title"]);
if(json["language"] && json["language"].toLowerCase() != "fr")
txt += "|lang=" + nettoyer(json["language"]);
if(json["itemType"] == "journalArticle") {
if(json["publicationTitle"])
txt += "|périodique=" + nettoyer(json["publicationTitle"]);
if(json["volume"])
txt += "|volume=" + nettoyer(json["volume"]);
if(json["issue"])
txt += "|numéro=" + nettoyer(json["issue"]);
}
if(json["publisher"])
txt += "|éditeur=" + nettoyer(json["publisher"]);
if(json["author"]) {
for(i=0; i < json["author"].length; i++) {
item = json["author"][i];
if(item.length == 2)
txt += "|prénom" + (1+i) + "=" + nettoyer(item[0])
+ "|nom" + (1+i) + "=" + nettoyer(item["1"]);
else
txt += "|nom" + (1+i) + "=" + nettoyer(item.join(" "));
}
}
if(json["date"])
txt += "|date=" + nettoyer(json["date"]);
if(json["place"])
txt += "|lieu=" + nettoyer(json["place"]);
if(json["pages"])
txt += "|pages=" + nettoyer(json["pages"]);
if(json["ISBN"])
txt += "|isbn=" + nettoyer(json["ISBN"][0]);
if(json["ISSN"])
txt += "|issn=" + nettoyer(json["ISSN"][0]);
if(json["DOI"])
txt += "|doi=" + nettoyer(json["DOI"]);
if(json["url"])
if(json["itemType"] == "webpage")
txt += "|lire en ligne=" + nettoyer(json["url"]);
else
txt += "|présentation en ligne=" + nettoyer(json["url"]);
txt += "}}";
inserer(e, txt);
};
request.send();
}
$(function($) {
addCommande("Entrée de bibliographie",
"seudo-entree-biblio",
"Construit une entrée de bibliographie à partir d'un ISBN, d'un DOI ou d'un autre identifiant d'ouvrage",
biblio);
});