Utilisateur:Stephane8888/CreerConjugFr.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 conjugaison en français
// à partir de 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 = "Créer conjugaisons";
// Catégorie où chercher
var CrConjFr_Categ = 'Catégorie:Wiktionnaire:Conjugaisons manquantes en français';
// Préfixe des noms de modèles
var CrConjFr_PfxMdl = 'fr-conj-';
var CrConjFr_PfxAnx = 'Conjugaison en français/';
// Variables globales
var CrConjFr_ListeVerbes = new Array();
var CrConjFr_ListePtr = 0;
var CrConjFr_VerbeEnCours = '';
// --------------------------------------------------------------------------------------------
// Ajout du lien dans les onglets après "renommer" & cie
$(CrConjFr_AddLink);
function CrConjFr_AddLink(){
var OngletsCactions = document.getElementById('p-cactions');
if(OngletsCactions){
var CactionsUl = OngletsCactions.getElementsByTagName('ul')[0];
CactionsUl.innerHTML += '<li><a href="javascript:CrConjFr_ListCat1();">'+CrConjFr_TextOnglet+'</a></li>';
if(OngletsCactions.className){
OngletsCactions.className = OngletsCactions.className.replace(/[ ]*emptyPortlet[ ]*/, " ");
}
}
}
/***********************************************************************************************/
/* */
/***********************************************************************************************/
// --------------------------------------------------------------------------------------------
// requête api du contenu de la cat
// --------------------------------------------------------------------------------------------
function CrConjFr_ListCat1(CatArray, category, categorycontinue){
if(document.getElementById('CrConjFr_Boite')) return; // boiboite déjà ouverte
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;
CrConjFr_ajax.http({
url: URL,
cat: category,
catlist: CatArray,
onSuccess:CrConjFr_ListCat2
});
}
// --------------------------------------------------------------------------------------------
// récupération des résultats de la requête api
// --------------------------------------------------------------------------------------------
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[a].getAttribute('title');
CrConjFr_ListeVerbes.push(TitrePage);
}
setTimeout("CrConjFr_OpenMenu()",10);
}
// --------------------------------------------------------------------------------------------
// Création de la boite de dialogue
// --------------------------------------------------------------------------------------------
function CrConjFr_OpenMenu(){
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);
}
// 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= '300px';
document.body.appendChild(Menu);
PositionGauche = parseInt((LargeurEcran-Menu.clientWidth)/2) ;
PositionHaut = parseInt(0) ;
Menu.style.left=PositionGauche + 'px';
Menu.style.top=PositionHaut + 'px';
Menu.innerHTML = '<center><b>Création semi-auto de conjugaisons en français.</b></center><br />'
+ 'Verbe : <input type="text" id="IdVerbNom" disabled="disabled" size="25"/> '
+ ' (<input type="text" id="IdVerbNum" disabled="disabled" align="right" size="3"/>/'
+ ' <input type="text" id="IdVerbNbr" disabled="disabled" size="3"/>)<br />'
+ 'Prononcé : <input type="text" id="IdPron" value="' + 'ma.ʃi.n' + '" size="40"/><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><br />'
+ '<input type="checkbox" id="IdRéfl" style="cursor:pointer;" onchange="CrConjFr_WikiCode();" />'
+ '<label for="IdRéfl">Conjugaison pronominale</label><br />'
+ '<input type="checkbox" id="IdRécip" style="cursor:pointer;" onchange="CrConjFr_WikiCode();" />'
+ '<label for="IdRécip">Réciproque</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_Suivant1();"/> '
+ '<input type="button" style="cursor:pointer;" value="Terminer" title="Fermer" onclick="CrConjFr_Fin();"/>'
+ '</center>'
+ '<textarea id="IdBlabla" rows="3">texte</textarea><br />';
// Ouverture sur le premier verbe de la liste
CrConjFr_ListePtr = -1;
setTimeout("CrConjFr_Suivant1()",10);
}
// --------------------------------------------------------------------------------------------
// Traitement du bouton "fermer"
// --------------------------------------------------------------------------------------------
function CrConjFr_Fin(){
var Menu = document.getElementById('CrConjFr_Boite');
if(Menu){
var agt=navigator.userAgent.toLowerCase();
var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
if(is_ie){
Menu.removeNode(true);
}else{
if(Menu.parentNode){ document=Menu.parentNode.removeChild(Menu); }
}
}
}
// --------------------------------------------------------------------------------------------
// Passage au le verbe suivant
// --------------------------------------------------------------------------------------------
function CrConjFr_Suivant1(){
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[CrConjFr_ListePtr];
document.getElementById('IdVerbNom').value = CrConjFr_VerbeEnCours;
document.getElementById('IdVerbNum').value = CrConjFr_ListePtr+1;
document.getElementById('IdVerbNbr').value = CrConjFr_ListeVerbes.length;
document.getElementById('IdPron').value = '';
// 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);
CrConjFr_ajax.http({
url: urlVerbe + '&action=raw',
onSuccess:CrConjFr_Suivant2
});
}
}
// --------------------------------------------------------------------------------------------
// Proposition pour le verbe suivant
// --------------------------------------------------------------------------------------------
function CrConjFr_Suivant2(Req, data){
// récupération de la prononciation
var txt = Req.responseText;
var pos1 = txt.search( /{{pron/m ) + 7;
if (pos1>7) {
var pos2 = txt.substr(pos1).search( /[\|}]/m );
var pron = txt.substr(pos1, pos2);
}else{
var pron = "";
}
// 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";
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 " );
var recipr = ( CrConjFr_VerbeEnCours.substr(0,5) == "auto-" );
prnl = prnl || recipr;
// 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 = pron;
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 = document.getElementById('IdVerbNom').value;
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;
// calcul du "préfixe" orthographique
if ((mdl=="1-cer")||(mdl=="1-ger")||(mdl=="1-ier")||(mdl=="1-uer")){
verbe=verbe.substr(0,lv-3);
}else if ((mdl=="1")||(mdl=="2")){
verbe=verbe.substr(0,lv-2);
}else{
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{
var pronstr = "?";
}
// génération code
var codewiki0 = "{{" + CrConjFr_PfxMdl + mdl + "|" + verbe + "|" + pronstr;
var codewiki1 = codewiki0 + "}}";
if (!recipr) { var codewiki2 = codewiki0 + "|réfl=1}}"; }
else { var codewiki2 = codewiki0 + "|réfl=1|1s.gris=1|2s.gris=1}}"; }
var codewiki = "";
if (activ && refl){
codewiki = "{{Onglets conjugaison\n"
+ "|onglet1 = Conjugaison active\n"
+ "|contenu1 = " + codewiki1 + "\n"
+ "| onglet2 = Conjugaison pronominale"
+ "|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[100] + ":"
+ encodeURIComponent(CrConjFr_PfxAnx)
+ encodeURIComponent(CrConjFr_VerbeEnCours)
+ "&action=edit";
CrConjFr_ajax.http({
url: urlAnx,
onSuccess:CrConjFr_Creer2
});
}
// --------------------------------------------------------------------------------------------
// Création de la page
//----------------------------------------------------------------
function CrConjFr_Creer2(Req,data){
alert("salut GaAs 2");
setTimeout("CrConjFr_Creer3()",10);
}
// --------------------------------------------------------------------------------------------
// Création de la page
//----------------------------------------------------------------
function CrConjFr_Creer3(){
alert("salut GaAs 3");
setTimeout("CrConjFr_Suivant1()",10);
}
/***********************************************************************************************/
/* diverses fonctions système */
/***********************************************************************************************/
// --------------------------------------------------------------------------------------------
// Fonction de requête ajax
// --------------------------------------------------------------------------------------------
var CrConjFr_ajax = {
http:function(bundle){ var xmlhttp; try{ xmlhttp = new XMLHttpRequest(); }catch(e){ try{ xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }catch(e){ xmlhttp = false; }}}; if(xmlhttp){ xmlhttp.onreadystatechange = function(){ if (xmlhttp.readyState == 4){ CherCats_ajax.httpComplete(xmlhttp,bundle);}}; xmlhttp.open(bundle.method ? bundle.method : "GET",bundle.url,bundle.async == false ? false : true); if (bundle.headers) { for (var field in bundle.headers){ try{ xmlhttp.setRequestHeader(field,bundle.headers[field]); }catch(err){}}}; xmlhttp.send(bundle.data ? bundle.data : null); }; return xmlhttp;},
httpComplete: function(xmlhttp,bundle){ if(xmlhttp.status == 200 || xmlhttp.status == 302){ if(bundle.onSuccess) bundle.onSuccess(xmlhttp,bundle); }else if(bundle.onFailure){ bundle.onFailure(xmlhttp,bundle); }else{ }}
};
//</nowiki>