Utilisateur:Pamputt/Gadget-CreerTrad.js
Remarque: après avoir sauvegardé, vous devez vider le cache de votre navigateur pour que les changements prennent effet. Mozilla, cliquez sur Actualiser (ou ctrl-r). Internet Explorer / Opera: ctrl-f5. Safari: cmd-r. Konqueror ctrl-r.
//==========================================================================================
// 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
// -----------------------------------------------------------------------------------------
//[[Catégorie:JavaScript du Wiktionnaire|CreerTrad.js]]
//==========================================================================================
// <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[t].getElementsByClassName("new");
for (var k=0; k<atbl.length; k++){
var trad=atbl[k].innerHTML;
//atbl[k].style.color="#008000";
atbl[k].style.backgroundColor="#77B5FE";
atbl[k].title="cliquez pour créer " + trad + " avec le gadget";
atbl[k].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){
alert("on vient de cliquer");
CrTr_Mot=wgPageName.replace(/_/g," ");
CrTr_Trad=trad;
alert("CrTr_Mot :" + CrTr_Mot + ", CrTr_Trad:" + CrTr_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";
//javascript:CrTr_CreerTrad1('<span class="lang-ca" lang="ca">pôster</span>')
//javascript:CrTr_CreerTrad1('<span class="lang-en" xml:lang="en" lang="en">cash%20cow</span>')
codelangue = CrTr_Trad.substring(CrTr_Trad.indexOf("\"")+1,CrTr_Trad.indexOf("\"",CrTr_Trad.indexOf("\"")+1));
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[k].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[ligne_trad].indexOf("|R=")>0)
transcription = codesplit[ligne_trad].substring(codesplit[ligne_trad].indexOf("|R=")+3,codesplit[ligne_trad].indexOf("}}",codesplit[ligne_trad].indexOf("|R=")));
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[kk])) { nature = "adj"; }
if(/-adv-\|/.test(codesplit[kk])) { nature = "adv"; }
if(/-nom-\|/.test(codesplit[kk])) { nature = "nom"; }
if(/-verb-\|/.test(codesplit[kk]) || /-verbe-\|/.test(codesplit[kk]) || /-verb-pr-\|/.test(codesplit[kk])) { nature = "verbe"; }
if(/-phr-\|/.test(codesplit[kk])) { nature = "phr"; }
alert(codesplit[kk]);
if(nature=="phr")
alert("on a trouve phr");
var diese = '#';
var etoile = '*';
if( codesplit[kk].charAt(0) == diese && codesplit[kk].charAt(1) != etoile) {
cmptDef = cmptDef+1;
ligne_def = codesplit[kk];
}
}
//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,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 [[Aide:Gadget-CreerTrad|Gadget-CreerTrad]]";
}
//--------------------------------------------------------------------------------------
// 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,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";
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 + "}} [[" + CrTr_Mot + "#fr|" + motEnMaj + "]].\n\n";
else
new_codewiki += "# [[" + CrTr_Mot + "#fr|" + motEnMaj + "]].\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}} [[" + CrTr_Mot + "#fr|" + motEnMaj + "]].\n\n";
else
new_codewiki += "# [[" + CrTr_Mot + "#fr|" + motEnMaj + "]].\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}} [[" + CrTr_Mot + "#fr|" + motEnMaj + "]].\n\n";
else
new_codewiki += "# [[" + CrTr_Mot + "#fr|" + motEnMaj + "]].\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}} [[" + CrTr_Mot + "#fr|" + motEnMaj + "]].\n\n";
else
new_codewiki += "# [[" + CrTr_Mot + "#fr|" + motEnMaj + "]].\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}} [[" + CrTr_Mot + "#fr|" + motEnMaj + "]].\n\n";
else
new_codewiki += "# [[" + CrTr_Mot + "#fr|" + motEnMaj + "]].\n\n";
return new_codewiki;
}
// </nowiki>