// --------------------------------------------------------------------------------------------
// Création de conjugaison en français
// à partir de Catégorie:Wiktionnaire:Conjugaisons manquantes en français
// en quelques clics dans une boite de dialogue
//
// --------------------------------------------------------------------------------------------
// Code en partie inspiré de w:MediaWiki:Gadget-RenommageCategorie.js
// Le reste est fait par ArséniureDeGallium, sous CC-BY-SA.
// --------------------------------------------------------------------------------------------
// <nowiki>
// Libellé de l'onglet
var CrConjFr_TextOnglet = "Conjugaisons manquantes en fr";
// Catégorie où chercher
var CrConjFr_Categ = 'Catégorie:Wiktionnaire:Conjugaisons manquantes en français';
// Préfixe des noms de pages
var CrConjFr_PfxMdl = 'fr-conj-';
var CrConjFr_PfxAnx = 'Conjugaison en français/';
// Variables globales
var CrConjFr_ListeVerbes = new Array();
var CrConjFr_ListePtr = -1;
var CrConjFr_VerbeEnCours = "";
var CrConjFr_PronEnCours = "";
// --------------------------------------------------------------------------------------------
// Ajout du lien dans les onglets après "renommer" & cie
$(CrConjFr_AddLink);
function CrConjFr_AddLink(){
CommonWikt_AddTabMenu("javascript:CrConjFr_Demarre()",CrConjFr_TextOnglet);
}
/***********************************************************************************************/
/* Initialisation (juste au démarrage) */
/***********************************************************************************************/
// --------------------------------------------------------------------------------------------
// démarrage du bidule
// --------------------------------------------------------------------------------------------
function CrConjFr_Demarre(){
if(document.getElementById('CrConjFr_Boite')) return; // boiboite déjà ouverte
setTimeout("CrConjFr_ListCat1()",1);
}
// --------------------------------------------------------------------------------------------
// requête api du contenu de la cat
// --------------------------------------------------------------------------------------------
function CrConjFr_ListCat1(CatArray, category, categorycontinue){
if(!CatArray) CatArray = new Array();
if(!category) category = CrConjFr_Categ;
if(!categorycontinue) categorycontinue = '';
var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=categorymembers'
+ '&cmtitle=' + encodeURIComponent(category)
+ '&cmlimit=499'
+ '&cmnamespace='
+ categorycontinue;
CommonWikt_ajax.http({
url: URL,
cat: category,
catlist: CatArray,
onSuccess:CrConjFr_ListCat2
});
}
// --------------------------------------------------------------------------------------------
// récupération des résultats de la requête api sur la catég (càd la liste des verbes)
// --------------------------------------------------------------------------------------------
function CrConjFr_ListCat2(Req, data){
var CatArray = data.catlist;
var category = data.cat;
var ElementTraitement = Req.responseXML;
var Pages = ElementTraitement.getElementsByTagName('cm');
for(a=0;a<Pages.length;a++){
var TitrePage = Pages.getAttribute('title');
CrConjFr_ListeVerbes.push(TitrePage);
}
CrConjFr_ListePtr = -1;
setTimeout("CrConjFr_VerbeSuivant1()",10);
}
/***********************************************************************************************/
/* Boucle sur tous les verbes de la liste */
/***********************************************************************************************/
// --------------------------------------------------------------------------------------------
// Passage au verbe suivant, requête du code html de l'article
// --------------------------------------------------------------------------------------------
function CrConjFr_VerbeSuivant1(){
if (CrConjFr_ListePtr >= CrConjFr_ListeVerbes.length-1 ){
alert("C'est fini : t'as fait toute la liste !");
}else{
// verbe suivant
CrConjFr_ListePtr ++;
CrConjFr_VerbeEnCours = CrConjFr_ListeVerbes;
// requête pour obtenir le contenu de l'article sur le verbe
var urlVerbe = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + encodeURIComponent(CrConjFr_VerbeEnCours);
CommonWikt_ajax.http({
url: urlVerbe + '&action=view',
onSuccess:CrConjFr_VerbeSuivant2
});
}
}
// --------------------------------------------------------------------------------------------
// Affichage de l'article du verbe suivant, récup de certaines données dedans
// --------------------------------------------------------------------------------------------
function CrConjFr_VerbeSuivant2(Req,data){
// remplacer contenu page en cours par l'article
while(document.body.firstChild){ CommonWikt_Delete(document.body.firstChild); }
document.body.innerHTML = Req.responseText;
// récupérer prononciation
var api = document.getElementsByClassName("API");
if (api.length>0){
var pron = api.innerHTML;
CrConjFr_PronEnCours = pron.substr(1, pron.length-2);
}else{
CrConjFr_PronEnCours = "";
}
setTimeout("CrConjFr_OpenMenu()",10);
}
// --------------------------------------------------------------------------------------------
// Création de la boite de dialogue
// --------------------------------------------------------------------------------------------
function CrConjFr_OpenMenu(){
//récup taille écran
var scrn=CommonWikt_Screen();
// création boiboite en html
var Menu = document.createElement('div');
Menu.id='CrConjFr_Boite';
Menu.className ='CrConjFr_Boite';
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= '400px';
Menu.style.height= '280px';
Menu.style.left= ( (scrn.largeur - Menu.clientWidth) / 2 ) + 'px';
Menu.style.top= '0px';
Menu.innerHTML = '<center><b>Création semi-auto de conjugaisons en français.</b></center><br />'
+ 'Verbe : <b>' + CrConjFr_VerbeEnCours + '</b> '
+ '<input type="button" style="cursor:pointer;" value="Éditer" onclick="CrConjFr_EditeVerbe();"/> '
+ '(<input type="text" id="IdNum" value="' + CrConjFr_ListePtr
+ '" size="3" style="text-align:right;" onchange="CrConjFr_AllerA();"/>'
+ ' / <small>' + (CrConjFr_ListeVerbes.length) + '</small>)<br />'
+ 'Prononcé : <input type="text" id="IdPron" value="' + 'ma.ʃi.n' + '" size="40" onchange="CrConjFr_WikiCode();"/><br />'
+ '<select id="IdModl" onchange="CrConjFr_WikiCode();">'
+ '<option value="0">aucun</option>'
+ '<option value="1">fr-conj-1</option>'
+ '<option value="1-cer">fr-conj-1-cer</option>'
+ '<option value="1-ger">fr-conj-1-ger</option>'
+ '<option value="1-ier">fr-conj-1-ier</option>'
+ '<option value="1-uer">fr-conj-1-uer</option>'
+ '<option value="1-é*er">fr-conj-1-é*er</option>'
+ '<option value="2">fr-conj-2</option>'
+ '</select> <br />'
+ '<input type="checkbox" id="IdActiv" style="cursor:pointer;" onchange="CrConjFr_WikiCode();" />'
+ '<label for="IdActiv">Conjugaison active</label> '
+ '<input type="checkbox" id="IdÊtre" style="cursor:pointer;" onchange="CrConjFr_WikiCode();" />'
+ '<label for="IdÊtre">Être</label><br />'
+ '<input type="checkbox" id="IdRéfl" style="cursor:pointer;" onchange="CrConjFr_WikiCode();" />'
+ '<label for="IdRéfl">Conjugaison pronominale</label> '
+ '<input type="checkbox" id="IdRécip" style="cursor:pointer;" onchange="CrConjFr_WikiCode();" />'
+ '<label for="IdRécip">Réciproque</label><br />'
+ '<input type="checkbox" id="IdApo" style="cursor:pointer;" onchange="CrConjFr_WikiCode();" />'
+ '<label for="IdApo">Apostrophe</label><br />'
+ '<br /><center>'
+ '<input type="button" style="cursor:pointer;" value="Créer" title="Créer" onclick="CrConjFr_Creer1();"/> '
+ '<input type="button" style="cursor:pointer;" value="Passer" title="Passer" onclick="CrConjFr_VerbeSuivant1();"/> '
+ '<input type="button" style="cursor:pointer;" value="Terminer" title="Fermer" onclick="CrConjFr_Fin();"/>'
+ '</center>'
+ '<textarea id="IdBlabla" rows="3">texte</textarea><br />';
document.body.appendChild(Menu);
setTimeout("CrConjFr_Proposition()",10);
}
// --------------------------------------------------------------------------------------------
// Proposition pour le verbe suivant
// --------------------------------------------------------------------------------------------
function CrConjFr_Proposition(){
// présélection modèle
var lv = CrConjFr_VerbeEnCours.length;
var term2 = CrConjFr_VerbeEnCours.substr(lv-2);
var term3 = CrConjFr_VerbeEnCours.substr(lv-3);
var term4 = CrConjFr_VerbeEnCours.substr(lv-4);
var mdl = "0";
var patt=/é/g;
if (patt.test(term4)){ mdl = "1-é*er"; }
else if ((term4=="quer")||(term4=="guer")){ mdl = "1"; }
else if (term3=="cer"){ mdl = "1-cer"; }
else if (term3=="ger"){ mdl = "1-ger"; }
else if (term3=="ier"){ mdl = "1-ier"; }
else if (term3=="uer"){ mdl = "1-uer"; }
else if (term2=="er") { mdl = "1"; }
else if (term2=="ir") { mdl = "2"; }
// verbe pronominal ou réciproque ?
var prnl = ( (CrConjFr_VerbeEnCours.substr(0,3) == "se ")||(CrConjFr_VerbeEnCours.substr(0,4)== "auto") );
var recipr = ( CrConjFr_VerbeEnCours.substr(0,4) == "entr" );
prnl = prnl || recipr;
// voyelle initiale
var c0 = CrConjFr_VerbeEnCours.substr(0,1);
var apo = ((c0=="a")||(c0=="e")||(c0=="é")||(c0=="i")||(c0=="o")||(c0=="u")||(c0=="h")||(c0=="œ"));
// màj de la boite avec les propositions
document.getElementById('IdActiv').checked = !prnl;
document.getElementById('IdRéfl').checked = prnl;
document.getElementById('IdRécip').checked = recipr;
document.getElementById('IdModl').value = mdl;
document.getElementById('IdPron').value = CrConjFr_PronEnCours;
document.getElementById('IdApo').checked = apo;
CrConjFr_WikiCode();
}
// --------------------------------------------------------------------------------------------
// Calcul du code wiki selon le contenu de la boite de dialogue
// --------------------------------------------------------------------------------------------
function CrConjFr_WikiCode(){
// récupération des données de la boite de dialogue
var verbe = CrConjFr_VerbeEnCours;
var lv = verbe.length;
var pron = document.getElementById('IdPron').value;
var lp = pron.length;
var mdl = document.getElementById('IdModl').value;
var activ = document.getElementById('IdActiv').checked;
var refl = document.getElementById('IdRéfl').checked;
var recipr = document.getElementById('IdRécip').checked;
var apo = document.getElementById('IdApo').checked;
var etre = document.getElementById('IdÊtre').checked;
// calcul du "préfixe" orthographique
if ((mdl=="1-cer")||(mdl=="1-ger")||(mdl=="1-ier")||(mdl=="1-uer")){
verbe=verbe.substr(0,lv-3);
if (mdl=="1-ier"){alert("fr-conj-1-ier pas géré correctement");}
}else if ((mdl=="1-é*er")){
verbe=verbe.substr(0,lv-4);
alert("fr-conj-1-é*er pas géré correctement");
}else if ((mdl=="1")||(mdl=="2")){
verbe=verbe.substr(0,lv-2);
}else{
verbe = "?";
}
var cle = CommonWikt_CleTri(verbe);
// "splitage" de la prononciation
var lp = pron.length;
var pos = pron.lastIndexOf(".");
if ((mdl=="1-cer")||(mdl=="1-ger")||(mdl=="1-ier")||(mdl=="1-uer")){
var pronstr = pron.substr(0,pos);
}else if (mdl=="1"){
var pronstr = pron.substr(0,pos) + "|" + pron.substr(pos+1,lp-pos-2);
}else if (mdl=="2"){
var pronstr = pron.substr(0,pos) + "|" + pron.substr(pos+1,lp-pos-3);
}else if (mdl=="1-é*er"){
var pronstr = pron.substr(0,pos);
}else{
var pronstr = "?";
}
// génération code
var codewiki0 = "{{" + CrConjFr_PfxMdl + mdl + "|" + verbe + "|" + pronstr;
if (cle != verbe) { var codewiki8 = "|clé=" + cle; }
else { var codewiki8 = ""; }
if (apo) { var codewiki9 = "|'=1" + codewiki8 + "}}"; }
else { var codewiki9 = codewiki8 + "}}"; }
if (etre) { var codewiki1 = codewiki0 + "|aux-être=1" + codewiki9; }
else { var codewiki1 = codewiki0 + codewiki9; }
if (!recipr) { var codewiki2 = codewiki0 + "|réfl=1" + codewiki9; }
else { var codewiki2 = codewiki0 + "|réfl=1|1s.gris=1|2s.gris=1" + codewiki9; }
var codewiki = "";
if (activ && refl){
codewiki = "{{Onglets conjugaison\n"
+ "|onglet1 = Conjugaison active\n"
+ "|contenu1 = " + codewiki1 + "\n"
+ "| onglet2 = Conjugaison pronominale\n"
+ "|contenu2 = " + codewiki2 + "\n"
+ "|sél = {{{sél|1}}}\n"
+ "}}" ;
}else if (activ){
codewiki = codewiki1;
}else if (refl){
codewiki = codewiki2;
}
document.getElementById('IdBlabla').value = codewiki;
}
// --------------------------------------------------------------------------------------------
// Traitement du bouton "créer"
// --------------------------------------------------------------------------------------------
function CrConjFr_Creer1(){
var codewiki = document.getElementById('IdBlabla').value;
var urlAnx = wgServer+wgScript + "?title="
+ wgFormattedNamespaces + ":"
+ encodeURIComponent(CrConjFr_PfxAnx)
+ encodeURIComponent(CrConjFr_VerbeEnCours)
+ "&action=edit";
CommonWikt_ajax.http({
url: urlAnx,
text: codewiki,
onSuccess:CrConjFr_Creer2
});
}
// --------------------------------------------------------------------------------------------
// Création de la page
//----------------------------------------------------------------
function CrConjFr_Creer2(Req,data){
var TexteFinal = data.text;
document.body.innerHTML = Req.responseText;
var TextArea = document.getElementById('wpTextbox1');
var SommaireFinal = "";
document.getElementById('wpTextbox1').value = TexteFinal;
document.getElementById('wpSummary').value = SommaireFinal;
var action = document.getElementById("editform").action;
var headers = new Array();
headers = 'application/x-www-form-urlencoded';
CommonWikt_ajax.http({
url: action,
method: "POST",
headers: headers,
data: CrConjFr_GetPostValues(),
onSuccess:CrConjFr_Creer3
});
}
// --------------------------------------------------------------------------------------------
// Fin création de la page
//----------------------------------------------------------------
function CrConjFr_Creer3(Req,data){
while(document.body.firstChild){ CommonWikt_Delete(document.body.firstChild); }
document.body.innerHTML = Req.responseText;
if(!document.getElementById("editform")){
setTimeout("CrConjFr_VerbeSuivant1()",2499);
}else{
alert("La création a échoué.");
}
}
// --------------------------------------------------------------------------------------------
// Traitement du bouton "fermer"
// --------------------------------------------------------------------------------------------
function CrConjFr_Fin(){
// destruction de la boite
var Menu = document.getElementById('CrConjFr_Boite');
if(Menu) { CommonWikt_Delete(Menu) }
// rétablissement de la page initiale
window.location.reload(false);
}
// --------------------------------------------------------------------------------------------
// Traitement du "aller à"
// --------------------------------------------------------------------------------------------
function CrConjFr_AllerA(){
var newpos = document.getElementById('IdNum').value;
CrConjFr_ListePtr = newpos-1;
setTimeout("CrConjFr_VerbeSuivant1()",10);
}
// --------------------------------------------------------------------------------------------
// Ouverture d'un onglet en édition sur la page du verbe
//----------------------------------------------------------------
function CrConjFr_EditeVerbe(){
var urlVrb = wgServer+wgScript + "?title="
+ encodeURIComponent(CrConjFr_VerbeEnCours)
+ "&action=edit";
window.open(urlVrb);
}
/***********************************************************************************************/
/* diverses fonctions système */
/***********************************************************************************************/
// --------------------------------------------------------------------------------------------
// FONCTION : Récupération des paramètres de publications
function CrConjFr_GetPostValues(){
var data="";
var Params = new Array("wpTextbox1", "wpSection", "wpSummary", "wpWatchthis", "wpMinoredit", "wpStarttime", "wpEdittime", "wpEditToken");
for(var a=0,l=Params.length;a<l;a++){
var Element = document.getElementById(Params);
if(!Element) Element = document.getElementsByName(Params);
if(Element){
if(!(Element.tagName && Element.tagName.toLowerCase()=='input' && Element.type == 'checkbox' && !Element.checked)){
data += '&'+Params+'=' + encodeURIComponent(Element.value);
}
}
}
return (data+'&wpsave=1');
}
//</nowiki>