Utilisateur:Romainhk/AmbiTrad.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.// <nowiki>
/*
# Auteur : Romainhk
# Date : avril 2013
# Utilité : Lors de l'édition d'un article en français, permet d'avoir juste à
droite la version originale du même article
# Compatible avec wikEd
# Licence : GPLv2
### TODO ###
* dico intégré ? (API wordreference)
*/
ambiTrad = new Object();
// Choix de la langue à charger par défaut
if (typeof ambiTrad_languepardefaut == "undefined") {
var ambiTrad_languepardefaut = "en";
}
ambiTrad = { "langue": ambiTrad_languepardefaut };
function ambiTrad_trouverPageid(query) {
// Récupère l'identifiant de la page étrangère à partir d'une réponse ajax
// {"query": {"pages": {id_de_la_page: ...
var id = query["query"]["pages"];
// On extrait l'id de la page pour pouvoir y accéder
for(var j in id) { return j; }
}
function ambiTrad_listerInterwikis() {
// Retrouve la liste des interwikis de l'article français
var url = "https://fr.wikipedia.org/w/api.php?format=json&action=query&prop=langlinks&lllimit=200&titles="+mw.config.get('wgPageName');
//console.log(url);
$.ajax({
url: url,
async: true, //indispensable à cause de JSONP, le .json n'est pas sur le même serveur
dataType: "jsonp", // pareil
success: function(data){
if ("langlinks" in data["query"]["pages"][mw.config.get('wgArticleId')]) {
$.each(data["query"]["pages"][mw.config.get('wgArticleId')]["langlinks"], function(key, val){
ambiTrad.interwikis.push([ val["lang"], val["*"] ]);
});
// Mise à jour de la liste des interwikis
res = '';
$.each(ambiTrad.interwikis, function(key, val) {
code = val["0"];
art = val["1"];
selected = "";
if (code == ambiTrad.langue) {
selected = " selected";
ambiTrad.cible = art;
}
res += '<option val="'+code+'"'+selected+'>('+code+') > '+art+"</option>\n";
});
$("#at_interlangue").html(res);
} else {
$("#at_titre").html('<span style="color:red;">Attention, il n\'y a pas de liens interlangue sur cette page</span>');
}
ambiTrad_chargerOriginal();
},
error: function(jqxhr, statut, erreur){
alert("Impossible de récupérer les liens interlangues : "+statut+", "+erreur);
ambiTrad.button.click(); // On ferme le panneau
}
});
}
function ambiTrad_chargerOriginal() {
// Charge le contenu d'un article étranger dans la zone de droite
var url = "https://"+ambiTrad.langue+".wikipedia.org/w/api.php?format=json&action=query&prop=revisions&titles="+ambiTrad.cible+"&rvprop=content";
//console.log(url);
if (ambiTrad.interwikis.length > 0) {
$.ajax({
url: url,
async: true, //indispensable à cause de JSONP, le .json n'est pas sur le même serveur
dataType: "jsonp",
success: function(data){
id = ambiTrad_trouverPageid(data);
$("#at_original").html(data["query"]["pages"][id]["revisions"]["0"]["*"]);
},
error: function(jqxhr, statut, erreur){
$("#at_original").html(statut+" : "+erreur+' \n'+jqxhr.readyState);
}
});
}
}
function trad_ouvrirTraduction() {
// Créer le bandeau de droite
ambiTrad.pointdattache.css({
"width": "50%",
"float": "left"
});
// Compatibilité avec wikEd
var wikEd = $("#wikEdFrame");
if (wikEd.is('*')) {
ambiTrad.wikEd = wikEd.width();
wikEd.width(ambiTrad.pointdattache.width());
}
// Colonne de droite
var div = $("<div />");
div.attr("id", "at_div");
div.css({
"width": "49%",
"float": "right"
});
var titre = $('<div />');
titre.addClass("wikiEditor-ui-toolbar");
titre.attr("id", "at_titre");
titre.css({
'border': '1px solid silver',
'width': 'auto',
'padding': '6px'
});
titre.html('Article original : ');
div.append(titre);
var select = $('<select />');
select.attr("id", "at_interlangue");
select.css("height", "1.5em");
select.change(function() {
var res = /\((.+?)\) > (.+)/.exec($(this).val());
if (res) {
ambiTrad.langue = res[1];
ambiTrad.cible = res[2];
ambiTrad_chargerOriginal();
}
});
titre.append(select);
var textArea = $('<textarea />');
var rows = "30";
if (ambiTrad.wikEd > 0) { rows = "33"; }
textArea.attr({
"id": "at_original",
"rows": rows
});
textArea.css({
"background-color": "#ECEBFF",
'border': 'medium none',
'line-height': '1.5em',
'padding': '0',
'margin': '0',
"resize": "vertical"
});
div.append(textArea);
ambiTrad.pointdattache.after(div);
}
if(mw.config.get('wgAction') == "edit" && mw.config.get('wgNamespaceNumber') == 0) {
// Lors de l'édition d'un article encyclo : RAZ
ambiTrad.cible = ""; // Nom de l'article à droite
ambiTrad.interwikis = new Array(); // Les interwikis de l'article en français
ambiTrad.wikEd = 0; // Largeur originale de wikEd
ambiTrad.pointdattache = $("#editform"); // Placer juste avant le formulaire
ambiTrad.button = $('<button />');
ambiTrad.button_div = $('<div />');
ambiTrad.button_div.css({
"margin": "3px 0",
"text-align": "right"
});
ambiTrad.button.html("Ouvrir/Fermer l'onglet ambiTrad");
ambiTrad.button.click(function(event) {
var divdroite = $("#at_div");
if (divdroite.is('*')) {
// Existe déjà -> on fermer le panneau
divdroite.remove();
if (ambiTrad.wikEd > 0) {
$("#wikEdFrame").width(ambiTrad.wikEd);
}
ambiTrad.pointdattache.css({
"width": "100%",
"float": "none"
});
} else {
trad_ouvrirTraduction();
ambiTrad_listerInterwikis();
}
});
ambiTrad.button_div.prepend(ambiTrad.button);
ambiTrad.pointdattache.before(ambiTrad.button_div);
}
// </nowiki>