Utilisateur:Pamputt/Gadget-CreerTrad.js

Définition, traduction, prononciation, anagramme et synonyme sur le dictionnaire libre Wiktionnaire.

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>