//==========================================================================================
// Création d'une page de traduction depuis un lien rouge dans une section traduction
// -----------------------------------------------------------------------------------------
// Pamputt 2013-06-13
// Inspiré de MediaWiki:Gadget-CreerFlexionFr.js développé par ArséniureDeGallium
// -----------------------------------------------------------------------------------------
//]
//==========================================================================================
// <nowiki>
if ( mw.config.get('wgNamespaceNumber') == 0 ){ CrTr_ChangerLiensRouges(); }
//--------------------------------------------------------------------------------------
// Créer les liens vers le gadget
// pour tous les liens rouges dans les infobox de classe "translations"
//--------------------------------------------------------------------------------------
function CrTr_ChangerLiensRouges(){
var tradtbl = document.getElementsByClassName("translations");
for (var t=0; t<tradtbl.length; t++){
var atbl=tradtbl.getElementsByClassName("new");
for (var k=0; k<atbl.length; k++){
var trad=atbl.innerHTML;
alert(trad);
if (trad.substr(0,1)!="<"){
atbl.style.backgroundColor="#77B5FE";
atbl.title="cliquez pour créer " + trad + " avec le gadget";
atbl.href="javascript:CrTr_CreerTrad1('" + trad + "')";
}
}
}
}
//==========================================================================================
var CrTr_Mot = "";
var CrTr_Trad = "";
//--------------------------------------------------------------------------------------
// Première étape suite à clic :
// * mémoriser les graphies des mots dans les variables globales
// * requête pour obtenir le wikicode de l'article
//--------------------------------------------------------------------------------------
function CrTr_CreerTrad1(trad){
CrTr_Mot=wgPageName.replace(/_/g," ");
CrTr_Trad=trad;
// requête pour obtenir le contenu de l'article
var urlMot = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + encodeURIComponent(CrTr_Mot);
CommonWikt_ajax.http({
url: urlMot + '&action=raw&smaxage=0',
onSuccess:CrTr_CreerTrad2
});
}
//--------------------------------------------------------------------------------------
// Deuxième étape suite à clic :
// * récupération du wikicode de l'article et extraction des informations pertinentes
//--------------------------------------------------------------------------------------
function CrTr_CreerTrad2(Req,data){
// récupérer le wikicode
var codewiki=Req.responseText;
var codesplit = codewiki.split("\n"); // séparation en lignes individuelles
var status = "pret";
var new_codewiki="";
//on récupère le code de langue qui est contenu dans les balises <span>
var codelangue = "aDefinir";
codelangue = CrTr_Trad.substring(CrTr_Trad.indexOf("lang=\"")+6,CrTr_Trad.indexOf("\"",CrTr_Trad.indexOf("lang=\"")+6));
if (codelangue.indexOf("lang")>0)
codelangue = codelangue.substring(5);
// on nettoie trad pour lui enlever les <span> qui trainent
CrTr_Trad=CrTr_Trad.substring(CrTr_Trad.indexOf(">")+1,CrTr_Trad.lastIndexOf("<"));
var ligne_trad=0;
var lig_trad_trouve=false;
var a_rechercher = codelangue+"|"+CrTr_Trad;
var cmptDef = 0;
var ligne_def="";
for (var k=0; k<codesplit.length; k++){
// on recherche la ligne où se trouve la traduction
if(codesplit.indexOf(a_rechercher)>0) {
if(lig_trad_trouve) {
alert("Le gadget ne prend pas en charge le fait \n qu'une traduction apparaisse deux fois dans la même page.");
status = "fini";
break;
}
ligne_trad = k;
lig_trad_trouve = true;
}
}
// si on a pas trouvé la ligne de trad au premier passage, on essaie avec le paramètre « dif »
if(lig_trad_trouve == false) {
a_rechercher = "|dif="+CrTr_Trad;
for (var k=0; k<codesplit.length; k++){
if(codesplit.indexOf(a_rechercher)>0) {
if(lig_trad_trouve) {
alert("Le gadget ne prend pas en charge le fait \n qu'une traduction apparaisse deux fois dans la même page.");
status = "fini";
break;
}
ligne_trad = k;
lig_trad_trouve = true;
}
}
}
//si une transcription est indiquée, on la récupère
var transcription = "";
if(codesplit.indexOf("|R=")>0)
transcription = codesplit.substring(codesplit.indexOf("|R=")+3,codesplit.indexOf("}}",codesplit.indexOf("|R=")));
if (transcription.indexOf("|")>0)
transcription = transcription.substring(0,transcription.indexOf("|"));
//si le paramètre dif est utilisé, on récupère sa valeur
// exemple : * {{T|he}} : {{trad+|he|מכלב|R=makhlev|dif=מַכְלֵב}} {{m}}
var dif = "";
if(codesplit.indexOf("|dif=")>0)
dif = codesplit.substring(codesplit.indexOf("|dif=")+5,codesplit.indexOf("}}",codesplit.indexOf("|dif=")));
if (dif.indexOf("|")>0)
dif = dif.substring(0,dif.indexOf("|"));
if(dif.length>0) {
var tmp = "|" + codelangue + "|";
CrTr_Trad = codesplit.substring(codesplit.indexOf(tmp)+tmp.length,codesplit.indexOf("|",codesplit.indexOf(tmp)+tmp.length));
}
if(status!="fini") {
// on parcourt le code wiki de la ligne 0
// à la ligne où on a trouvé la traduction
// la dernière section que l'on rencontre
// correspond à la nature grammaticale du mot traduit
var nature = "";
for (var kk=0; kk<ligne_trad; kk++){
if(/-adj-\|/.test(codesplit)) { nature = "adj"; }
if(/-adv-\|/.test(codesplit)) { nature = "adv"; }
if(/-nom-\|/.test(codesplit)) { nature = "nom"; }
if(/-verb-\|/.test(codesplit) || /-verbe-\|/.test(codesplit) || /-verb-pr-\|/.test(codesplit)) { nature = "verbe"; }
if(/-phr-\|/.test(codesplit)) { nature = "phr"; }
var diese = '#';
var etoile = '*';
if( codesplit.charAt(0) == diese && codesplit.charAt(1) != etoile) {
cmptDef = cmptDef+1;
ligne_def = codesplit;
}
}
//s'il n'y a qu'une seule définition, on récupère un éventuel modèle de spécificité (biologie, astronomie, ...)
var domaine = "";
if(cmptDef==1) {
if(ligne_def.indexOf("{{")>0) {
domaine = ligne_def.substr(ligne_def.indexOf("{{")+2,ligne_def.indexOf("}}"));
if(domaine.indexOf("|")>0)
domaine = domaine.substr(0,domaine.indexOf("|"));
}
}
// on écrit maintenant le code wiki
new_codewiki="";
if(codelangue=="ca")
new_codewiki = remplir_ca(nature,CrTr_Trad,CrTr_Mot,domaine);
else if(codelangue=="eo")
new_codewiki = remplir_eo(nature,CrTr_Trad,CrTr_Mot,domaine);
else if(codelangue=="es")
new_codewiki = remplir_es(nature,CrTr_Trad,CrTr_Mot,domaine);
else if(codelangue=="oc")
new_codewiki = remplir_oc(nature,CrTr_Trad,CrTr_Mot,domaine);
else
new_codewiki = remplir_generique(codelangue,nature,CrTr_Trad,CrTr_Mot, transcription, dif, domaine);
}
//ouvrir la nouvelle page en édition
var urlTrad = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(CrTr_Trad);
CommonWikt_ajax.http({
url: urlTrad + "&action=edit",
text: new_codewiki,
onSuccess:CrTr_CreerTrad3
});
}
//--------------------------------------------------------------------------------------
// Troisième étape suite à clic :
// * charger le code wiki dans la zone d'édition
// * rendre la main à l'utilisateur
//--------------------------------------------------------------------------------------
function CrTr_CreerTrad3(Req,data){
var TexteFinal = data.text;
while(document.body.firstChild){ document.body.removeChild(document.body.firstChild); }
document.body.innerHTML = Req.responseText;
document.getElementById('wpTextbox1').value = TexteFinal;
document.getElementById('wpSummary').value = "Création avec ]";
}
//--------------------------------------------------------------------------------------
// Permet de tester si une expression est une locution
// Ça passe par la recherche d'au moins une espace
//--------------------------------------------------------------------------------------
function estUneLocution(Trad){
if(//.test(Trad))
return true;
return false;
}
//--------------------------------------------------------------------------------------
// Permet de remplir le code wiki de la nouvelle page
//--------------------------------------------------------------------------------------
function remplir_generique(codelangue,nature,CrTr_Trad,CrTr_Mot, transcription, dif, domaine) {
var new_codewiki = "";
new_codewiki = "== {{langue|" + codelangue + "}} ==\n";
new_codewiki += "{{ébauche|"+ codelangue + "}}\n";
new_codewiki += "{{-étym-}}\n";
new_codewiki += ": {{ébauche-étym|" + codelangue + "}}\n\n";
if(estUneLocution(CrTr_Trad))
new_codewiki += "{{-loc";
else
new_codewiki += "{{";
new_codewiki += "-" + nature + "-|" + codelangue + "}}\n";
if(dif.length>0)
new_codewiki += "'''" + dif + "'''";
else
new_codewiki += "'''" + CrTr_Trad + "'''";
if(transcription.length>0)
new_codewiki += " (" + transcription + ")";
new_codewiki += " {{pron||" + codelangue + "}}\n";
var motEnMaj = CrTr_Mot.charAt(0).toUpperCase() + CrTr_Mot.substring(1);
if(domaine.length>0)
new_codewiki += "# {{" + domaine + "|" + codelangue + "}} ].\n\n";
else
new_codewiki += "# ].\n\n";
return new_codewiki;
}
function remplir_ca(nature,CrTr_Trad,CrTr_Mot,domaine) {
var new_codewiki = "";
new_codewiki = "== {{langue|ca}} ==\n";
new_codewiki += "{{ébauche|ca}}\n";
new_codewiki += "{{-étym-}}\n";
new_codewiki += ": {{ébauche-étym|ca}}\n\n";
if(estUneLocution(CrTr_Trad))
new_codewiki += "{{-loc";
else
new_codewiki += "{{";
new_codewiki += "-" + nature + "-|ca}}\n";
if(nature == "nom")
new_codewiki += "{{ca-rég|}}\n";
new_codewiki += "'''" + CrTr_Trad + "''' {{pron||ca}}\n";
var motEnMaj = CrTr_Mot.charAt(0).toUpperCase() + CrTr_Mot.substring(1);
if(domaine.length>0)
new_codewiki += "# {{" + domaine + "|ca}} ].\n\n";
else
new_codewiki += "# ].\n\n";
return new_codewiki;
}
function remplir_eo(nature,CrTr_Trad,CrTr_Mot,domaine) {
var new_codewiki = "";
new_codewiki = "== {{langue|eo}} ==\n";
new_codewiki += "{{ébauche|eo}}\n";
new_codewiki += "{{-étym-}}\n";
new_codewiki += ": {{ébauche-étym|eo}}\n\n";
if(estUneLocution(CrTr_Trad))
new_codewiki += "{{-loc";
else
new_codewiki += "{{";
new_codewiki += "-" + nature + "-|eo}}\n";
if(nature=="adj" || nature=="nom")
new_codewiki += "{{eo-rég|}}\n";
if(nature=="verbe")
new_codewiki += "{{eo-conj|" + CrTr_Trad.substring(-1) + "}}\n";
new_codewiki += "'''" + CrTr_Trad + "''' {{pron||eo}}\n";
var motEnMaj = CrTr_Mot.charAt(0).toUpperCase() + CrTr_Mot.substring(1);
if(domaine.length>0)
new_codewiki += "# {{" + domaine + "|eo}} ].\n\n";
else
new_codewiki += "# ].\n\n";
return new_codewiki;
}
function remplir_es(nature,CrTr_Trad,CrTr_Mot,domaine) {
var new_codewiki = "";
new_codewiki = "== {{langue|es}} ==\n";
new_codewiki += "{{ébauche|es}}\n";
new_codewiki += "{{-étym-}}\n";
new_codewiki += ": {{ébauche-étym|es}}\n\n";
if(estUneLocution(CrTr_Trad))
new_codewiki += "{{-loc";
else
new_codewiki += "{{";
new_codewiki += "-" + nature + "-|es}}\n";
if(nature=="nom")
new_codewiki += "{{es-rég|}}\n";
new_codewiki += "'''" + CrTr_Trad + "''' {{pron||es}}";
new_codewiki += "\n";
var motEnMaj = CrTr_Mot.charAt(0).toUpperCase() + CrTr_Mot.substring(1);
if(domaine.length>0)
new_codewiki += "# {{" + domaine + "|es}} ].\n\n";
else
new_codewiki += "# ].\n\n";
return new_codewiki;
}
function remplir_oc(nature,CrTr_Trad,CrTr_Mot,domaine) {
var new_codewiki = "";
new_codewiki = "== {{langue|oc}} ==\n";
new_codewiki += "{{ébauche|oc}}\n";
new_codewiki += "{{-étym-}}\n";
new_codewiki += ": {{ébauche-étym|oc}}\n\n";
if(estUneLocution(CrTr_Trad))
new_codewiki += "{{-loc";
else
new_codewiki += "{{";
new_codewiki += "-" + nature + "-|oc}}\n";
if(nature=="adj")
new_codewiki += "{{oc-accord-mixte|}}\n";
if(nature=="nom")
new_codewiki += "{{oc-rég|}}\n";
new_codewiki += "'''" + CrTr_Trad + "''' {{pron||oc}}\n";
var motEnMaj = CrTr_Mot.charAt(0).toUpperCase() + CrTr_Mot.substring(1);
if(domaine.length>0)
new_codewiki += "# {{" + domaine + "|oc}} ].\n\n";
else
new_codewiki += "# ].\n\n";
return new_codewiki;
}
// </nowiki>