Revision 10883744 of "Utilisateur:ArséniureDeGallium/Gadget-CreerNouveauMot.js" on frwiktionary

// --------------------------------------------------------------------------------------------
// Création d'un mot à partir d'un patron généré automatiquement
// à partir de quelques clics dans une boite de dialogue
//
// --------------------------------------------------------------------------------------------
// Code en partie inspiré de w:MediaWiki:Gadget-RenommageCategorie.js
// et aussi de MediaWiki:Gadget-SpecialChar.js
// Le reste est fait par ArséniureDeGallium, sous CC-BY-SA.
// --------------------------------------------------------------------------------------------

// Libellé de l'onglet
var CrNoMo_Text_Onglet = "Ajouter avec un patron (beta)";

// --------------------------------------------------------------------------------------------
// Valeurs par défaut

// Valeurs par défaut dépendant du nom de la page (qui est non modifiable)
var CrNoMo_MotVedette = wgTitle; // page en cours, non modifiable
var CrNoMo_CleVedette = ""; CrNoMo_CleTri(); // clé de tri
var CrNoMo_Locution = / /g.test(CrNoMo_MotVedette);;  // locution par déf si un espace dans le titre

// Valeurs par défaut (à terme personnalisables)
var CrNoMo_LangueMot = "fr"; // code langue selon ISO639
var CrNoMo_TypeMot = "-nom-";
var CrNoMo_LangueSection = true;
var CrNoMo_Flexion = false;
var CrNoMo_Sigle = false;
var CrNoMo_GenreMot = "m";

// --------------------------------------------------------------------------------------------
// Ajout du lien dans les onglets après "renommer" & cie

//if ( mw.config.get( 'wgNamespaceNumber' ) == 0 ) { //limiter (plus tard) aux articles
var tb = document.getElementById("wpTextbox1")
if(tb) addOnloadHook(CrNoMo_AddLink); // ne créer qu'en mode édit

function CrNoMo_AddLink(){
     var OngletsCactions = document.getElementById('p-cactions');
     if(OngletsCactions){
          var CactionsUl = OngletsCactions.getElementsByTagName('ul')[0];
          CactionsUl.innerHTML += '<li><a href="javascript:CrNoMo_OpenMenu();">'+CrNoMo_Text_Onglet+'</a></li>';
          if(OngletsCactions.className){
               OngletsCactions.className = OngletsCactions.className.replace(/[ ]*emptyPortlet[ ]*/, " ");
          }
     }
}

/***********************************************************************************************/
/*                          BOITE DE DIALOGUE                                                  */
/***********************************************************************************************/
// --------------------------------------------------------------------------------------------
// Création de la boite de dialogue

importScript('Utilisateur:ArséniureDeGallium/Gadget-CreerNouveauMot.js/fr.js');

 
function CrNoMo_OpenMenu(){
    if(document.getElementById('CrNoMo_Menu')) return; // boiboite déjà ouverte
 
    var agt=navigator.userAgent.toLowerCase();
    var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
    if(is_ie){
        var LargeurEcran = parseInt(screen.width);
        var HauteurEcran = parseInt(screen.height);
    }else{
        var LargeurEcran = parseInt(window.innerWidth);
        var HauteurEcran = parseInt(window.innerHeight);
    }

    // html selon la langue
    var MenuContent = CrNoMo_DialogHtml_fr();
 
    // création boiboite en html
    var Menu = document.createElement('div');
    Menu.id='CrNoMo_IdMenu';
    Menu.className ='CrNoMo_Menu';
    Menu.style.position='fixed';
    Menu.style.zIndex= 500;
    Menu.style.padding='5px';
    Menu.style.backgroundColor='white';
    Menu.style.border='3px double black';
    Menu.style.width= '450px';
    Menu.style.height= '140px';
    document.body.appendChild(Menu);
    PositionGauche = parseInt((LargeurEcran-Menu.clientWidth)/2) ;
    PositionHaut = parseInt((HauteurEcran-Menu.clientHeight)/3) ;
    Menu.style.left=PositionGauche + 'px';
    Menu.style.top=PositionHaut + 'px'; 
    Menu.innerHTML = MenuContent;

}

// --------------------------------------------------------------------------------------------
// Traitement du bouton "fermer"
// * ferme la boite de dialogue
 
function CrNoMo_CloseMenu(){
    var Menu = document.getElementById('CrNoMo_IdMenu');
    if(Menu) CrNoMo_DeleteElement(Menu);
}

// --------------------------------------------------------------------------------------------
// Traitement du bouton "insérer"
// * teste la validité des saisies de l’utilisateur, et si possible…
// * lance le calcul du patron à insérer
// * insère le texte du patron dans la boite d’édition
 
function CrNoMo_CheckMenu(){
     var tb = document.getElementById("wpTextbox1")
     if( !tb ) {
       alert("Ouvrez la page en en édition avant.");
       return;
     }

     // récupération des données de la boite de dialogue
     var MotVedette = document.getElementById('MotVedette');
     var LangueMot = document.getElementById('LangueMot');
     var TypeMot = document.getElementById('TypeMot');
     var LangueSection = document.getElementById('LangueSection');
     var Locution = document.getElementById('Locution');
     var Flexion = document.getElementById('Flexion');
     var Sigle = document.getElementById('Sigle');
     var GenreMot = document.getElementById('GenreMot');
     if( (!MotVedette)||(!LangueMot)||(!TypeMot)||(!LangueSection)||(!Locution)||(!Flexion)||(!Sigle)||(!GenreMot) ) return;
 
     CrNoMo_MotVedette = MotVedette.value; // redondant puisque champ verrouillé
     CrNoMo_LangueMot = LangueMot.value;
     if( (CrNoMo_LangueMot.length<2) ) {
       alert("Code langue invalide");
       return;
     }
     CrNoMo_TypeMot = TypeMot.value;
     CrNoMo_LangueSection = !LangueSection.checked;
     CrNoMo_Locution = Locution.checked;
     CrNoMo_Flexion = Flexion.checked;
     CrNoMo_Sigle = Sigle.checked;
     CrNoMo_GenreMot = GenreMot.value;

     // calcul du texte à insérer
     CrNoMo_Insert();

     // position initiale du curseur
     var startPos = tb.selectionStart;
     var endPos = tb.selectionEnd;
     var textScroll = tb.scrollTop;

     // insertion du texte
     var DebTxt = tb.value.substring(0, startPos);
     var FinTxt = tb.value.substring(startPos);
     tb.value = DebTxt + CrNoMo_InsTxt + FinTxt;

     // résumé de modif
     document.getElementById('wpSummary').value = "Ajout d'un mot en {{"
          + CrNoMo_LangueMot
          + "}} assisté par [[Aide:Gadget-CreerNouveauMot|Gadget-CreerNouveauMot]]";

     // repositionnement du curseur
     tb.selectionStart = startPos + CrNoMo_Curseur;
     tb.selectionEnd = tb.selectionStart;
     tb.scrollTop = textScroll;

}

/***********************************************************************************************/
/*                          CREATION PATRON                                                    */
/***********************************************************************************************/
// --------------------------------------------------------------------------------------------
// Création du texte à insérer

function CrNoMo_Insert() {

    // ---------- patrons -----------
    // les variables à remplacer sont préfixées d'un point d'exclamation "!" et en capitales
    // !IB : infobox
    // !LG : code langue
    // !TM : type de mot
    // !CT : clé de tri

    // patron pour le début de la section de section de langue
    var Ptrn_DebutSectionLangue =""
      + "== {{=!LG=}} ==\n"
      + "{{ébauche|!LG}}\n"
      + "{{-étym-}}\n"
      + ": {{ébauche-étym|!LG}}\n"
      + "\n";

    // patron générique pour une section de mot
    var Ptrn_SectionMot_Gen =""
      + "{{!TM|!LG}}\n"
      + "!IB"
      + "'''" + CrNoMo_MotVedette + "''' {{pron||!LG}}!DIVR\n"
      + "# {{ébauche-déf|!LG}}\n"
      + "#* {{ébauche-exe|!LG}}\n"
      + "\n";

  //-- section langue (début)
  CrNoMo_InsTxt = "";
  if ( CrNoMo_LangueSection ) 
    CrNoMo_InsTxt = Ptrn_DebutSectionLangue.replace(/!LG/g,CrNoMo_LangueMot);

  //-- section mot selon la langue sélectionnée
  CrNoMo_InsTxt += CrNoMo_Patron_fr( CrNoMo_MotVedette, CrNoMo_TypeMot, CrNoMo_Flexion, CrNoMo_Locution, CrNoMo_GenreMot )

  CrNoMo_Curseur = CrNoMo_InsTxt.length; // mémo pos curseur pour enchainement création

  //-- section langue (fin)
  if (CrNoMo_CleVedette != CrNoMo_MotVedette) {
    CrNoMo_InsTxt += "{{clé de tri|" + CrNoMo_CleVedette + "}}\n";
  }

}

// --------------------------------------------------------------------------------------------
// Calcul de la clé de tri

function CrNoMo_CleTri() {

  var key = CrNoMo_MotVedette.toLowerCase();
  key = key.replace( /[àáâãäå]/g, "a" );
  key = key.replace( /[æ]/g, "ae" );
  key = key.replace( /[ç]/g, "c" );
  key = key.replace( /[èéêë]/g, "e" );
  key = key.replace( /[ìíîï]/g, "i" );
  key = key.replace( /[ñ]/g, "n" );
  key = key.replace( /[òóôõö]/g, "o" );
  key = key.replace( /[œ]/g, "oe" );
  key = key.replace( /[òóôõö]/g, "o" );
  key = key.replace( /[ùúûü]/g, "u" );
  key = key.replace( /[ýÿ]/g, "y" );
  key = key.replace( /['’]/g, "" );
  key = key.replace( /[-/]/g, " " );
  CrNoMo_CleVedette = key;

}

// --------------------------------------------------------------------------------------------
// FONCTION : Suppression d'un objet
 
function CrNoMo_DeleteElement(OldElement){
    var agt=navigator.userAgent.toLowerCase();
    var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
    if(is_ie){
        OldElement.removeNode(true);
    }else{
        if(OldElement.parentNode){document=OldElement.parentNode.removeChild(OldElement);}
    }
}