Utilisateur:Àncilu/Gadget-CreerFlexionIt.js
Apparence
(Redirigé depuis Utilisateur:XANA000/Gadget-CreerFlexionIt.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 flexions en français depuis le lien rouge dans la page principale
// Ce script prend en compte les modèles it-accord et génère des modèles it-flexion
// Voir la documentation du Modèle:it-flexion
//<nowiki>
// import de Gadget-CommonWikt.js
mw.loader.load("//fr.wiktionary.org/wiki/MediaWiki:Gadget-CommonWikt.js?action=raw&ctype=text/javascript");
// variables globales
// mot concerné
var CreerFlexionsIt_Mot = '';
// prononciation flexion
var CreerFlexionsIt_Prononciation_flexion = '';
// activation du gadget dans l'espace principal
//if ( mw.config.get('wgNamespaceNumber') === 0 )
CreerFlexionsIt_ChangerLiensRouges();
// création de liens vers le gadget en remplaçant les liens rouges
// dans les infobox ayant la classe flextable-it-mfsp
function CreerFlexionsIt_ChangerLiensRouges()
{
$('.flextable-it-mfsp .new').each(function()
{
// sauvegarde du mot original et de la flexion
CreerFlexionsIt_Mot = mw.config.get('wgPageName').replace(/_/g," ");
var flexion = $(this).text().replace(/ /g, ' ');
// récupération de la première balise H3 parente, parmi plusieurs balises DIV
var divList = ['.flextable-it-mfsp', '.content-table', '.content-table-wrapper'];
var type_mot = '';
for (var d = 0; d < divList.length; d++)
{
var h = $(this).parents(divList[d]).prevAll('h3').first()
if (h)
{
// récupération du texte dans la balise de classe .titredef
type_mot = h.find('.titredef').text();
if (type_mot)
{
break;
}
}
}
// liste des sections prises en compte
var sections_valides = ['Nom commun', 'Nom commun 1', 'Nom commun 2', 'Nom commun 3',
'Locution adjectivale', 'Locution adjectivale 1', 'Locution adjectivale 2',
'Locution nominale', 'Locution nominale 1', 'Locution nominale 2',
'Adjectif', 'Adjectif 1', 'Adjectif 2',
'Suffixe', 'Suffixe 1', 'Suffixe 2'];
// si la section n'est pas dans la liste, on s'arrête là
if (sections_valides.indexOf(type_mot) < 0) {
console.error('Nom de la flexion introuvable');
return;
}
// sinon on surligne
$(this).css('background-color','#00ff00');
$(this).prop('title', 'Cliquez pour créer « ' + flexion + ' » avec le gadget');
$(this).click(function(e) {
// l'utilisateur a cliqué sur le lien surligné, on empêche le navigateur de le suivre
e.preventDefault();
CFIt_requete_recuperation_code_page(flexion);
});
});
}
// construction et appel de la requête pour obtenir le code de l'article
function CFIt_requete_recuperation_code_page(flexion)
{
var urlMot = mw.config.get('wgServer') + mw.config.get('wgScript')
+ '?title=' + encodeURIComponent(CreerFlexionsIt_Mot);
CommonWikt_ajax.http({
url: urlMot + '&action=raw',
flexion: flexion,
onSuccess: CFIt_requete_creation_nouvelle_page
});
}
function CFIt_requete_creation_nouvelle_page(Req, data)
{
// code original de la page
var r = Req.responseText;
// message d'erreur s'il n'y a pas la section {{langue|it}}
if (! /\{\{langue\|it\}\}/.test(r))
{
alert('Erreur : pas de section italien trouvée dans la page!');
return;
}
// édition dans une nouvelle page
var urlMot = mw.config.get('wgServer') + mw.config.get('wgScript')
+ '?title=' + encodeURIComponent(data.flexion);
CommonWikt_ajax.http({
url: urlMot + '&action=edit',
text: Recuperation_section_italien(r, data.flexion),
page_origine: CreerFlexionsIt_Mot,
onSuccess: CFIt_code_nouvelle_page
});
}
function CFIt_code_nouvelle_page(Req, data)
{
// on vide la page
while(document.body.firstChild)
{
document.body.removeChild(document.body.firstChild);
}
// on colle à la place la page d'édition
document.body.innerHTML = Req.responseText;
// on met le code récupéré dans la zone d'édition
document.getElementById('wpTextbox1').value = data.text;
// avec un petit résumé
document.getElementById('wpSummary').value = "Création avec [[Aide:Gadget-CreerFlexionIt|Gadget-CreerFlexionIt]]" +
" depuis [[" + data.page_origine + "]]";
}
// filtration du code de la page
function Recuperation_section_italien(code_page, flexion)
{
// tableau contenant les lignes du code original
var lignes = code_page.split("\n");
// tableau des lignes du code de la page de flexion
var lignes_it = [];
lignes_it.push('== {{langue|it}} ==');
// récupération des sections de noms italiens
for (var k = 0; k < lignes.length; k++)
{
var ligne = lignes[k];
// si on est arrivés à une section S|nom|it ou S|adjectif|it (peut être suivi de |num=n)
if (/\{\{S\|nom\|it/.test(ligne)
|| /\{\{S\|nom commun\|it/.test(ligne)
|| /\{\{S\|adj\|it/.test(ligne)
|| /\{\{S\|adjectif\|it/.test(ligne)
|| /\{\{S\|suffixe\|it/.test(ligne))
{
// remplacement |nom commun| par |nom|
ligne = ligne.replace('|nom commun|', '|nom|');
// ajout titre section, avec flexion
ligne = ligne.replace('|it}}', '|it|flexion}}');
lignes_it.push(ligne);
// ajout des lignes suivantes : jusqu'à arriver au mot en gras
var m = 0;
while (true)
{
m++;
if (k + m > lignes.length)
{
// fin du code
break;
}
ligne = CFIt_ligne_a_garder(lignes[k+m], flexion);
if (ligne !== false)
{
lignes_it.push(ligne)
}
if (/^'''/.test(ligne))
{
// on s'arrête au mot en gras
break;
}
}
// ajout pluriel
lignes_it.push("# ''Pluriel de'' {{lien|"+CreerFlexionsIt_Mot+"|it}}.");
// ajout ligne vide
lignes_it.push('');
}
}
// renvoi de la section
return lignes_it.join("\n");
}
function CFIt_ligne_a_garder(ligne, flexion)
{
// paramètres dans le cas où la ligne contient it-flexion ou it-accord
var accord = ''; // it-flexion ou it-accord
var type_flexion = ''; // f= ou fl=
var singulier = ''; // s=
var pluriel = ''; // p=
var singulier2 = ''; // s2=
var pluriel2 = ''; // p2=
var superlatif = ''; // super=
var superlatif_p = ''; // superp=
var prononciations = [];
var prononciation = ''; // prononciation du pluriel, en deuxième position (sinon première)
var mot = '';
var post = '';
var postp = '';
if (/\{\{it\-/.test(ligne))
{
var elements = ligne.split('|');
accord = elements[0].replace('{{', '');
for (var i = 1; i < elements.length; i++)
{
var e = elements[i].replace('}}', '');
if (e.indexOf('=') > 0)
{
// paramètre
var params = e.split('=');
switch (params[0])
{
case 'f':
case 'fl':
type_flexion = params[1];
break;
case 's':
singulier = params[1];
break;
case 'p':
pluriel = params[1];
break;
case 's2':
singulier2 = params[1];
break;
case 'p2':
pluriel2 = params[1];
break;
case 'super':
superlatif = params[1];
break;
case 'superp':
superlatif_p = params[1];
break;
case 'mot':
mot = params[1];
break;
case 'post':
post = params[1];
break;
case 'postp':
postp = params[1];
break;
default:
console.error('Paramètre inconnu : ' + params[0]);
}
}
else
{
// si ce n'est pas un paramètre, c'est une prononciation
prononciations.push(e);
}
}
if (pluriel2 != '' && pluriel2 === flexion && prononciations.length >= 4)
{
prononciation = prononciations[3];
}
else if (singulier2 != '' && singulier2 === flexion && prononciations.length >= 3)
{
prononciation = prononciations[2];
}
else if (prononciations.length > 1)
{
// la prononciation est en deuxième position
prononciation = prononciations[1];
}
else if (prononciations.length > 0)
{
// sinon en première position
prononciation = prononciations[0];
}
}
if (/\{\{it\-flexion\|/.test(ligne))
{
// flexion
if (type_flexion == '')
{
// pas de f=, on calcule les valeurs par défaut: ae, ei ou oi
var derniere_lettre = CreerFlexionsIt_Mot.slice(-1);
switch (derniere_lettre)
{
case 'a':
type_flexion = 'ae';
break;
case 'e':
type_flexion = 'ei';
break;
case 'o':
type_flexion = 'oi';
break;
default:
alert('Type de flexion non trouvé pour ' + CreerFlexionsIt_Mot);
}
}
}
if (accord != '')
{
if (/\s/.test(flexion))
{
// locution composée (contient une espace)
// on ne change pas la prononciation, mais la laisse telle quelle pour modification
CreerFlexionsIt_Prononciation_flexion = prononciation;
}
else
{
// modification de la prononciation pour le modèle {{pron||it}}
CFIt_prononciation_flexion(flexion, type_flexion, prononciation, superlatif, superlatif_p);
}
var f = '{{it-flexion';
if (singulier != '' || pluriel != '')
{
// locution nominale
f = f + '|s=' + CreerFlexionsIt_Mot;
if (singulier2 != '' && pluriel2 != '')
{
f = f + '|p=' + pluriel + '|s2=' + singulier2 + '|p2=' + pluriel2;
}
for (var i = 0; i < prononciations.length; i++)
{
f = f + '|' + prononciations[i];
}
}
else
{
// forme régulière
f = f + '|f='+type_flexion;
if (prononciations.length > 0)
{
f = f + '|' + prononciations[0];
}
}
if (superlatif != '')
{
f = f + '|super=' + superlatif;
}
if (superlatif_p != '')
{
f = f + '|superp=' + superlatif_p;
}
if (mot != '')
{
f = f + '|mot=' + mot;
}
if (post != '')
{
f = f + '|post=' + post;
}
if (postp != '')
{
f = f + '|postp=' + postp;
}
return f + '}}';
}
if (/^'''/.test(ligne))
{
// ligne du mot défini, on le remplace avec la flexion
ligne = ligne.replace(CreerFlexionsIt_Mot, flexion);
// remplacement de la prononciation, si elle existe
if (CreerFlexionsIt_Prononciation_flexion.length > 0)
{
ligne = ligne.replace(/pron\|.*?\|it/, 'pron|'+CreerFlexionsIt_Prononciation_flexion+'|it');
}
return ligne;
}
return false;
}
// prépare la prononciation de la nouvelle flexion à partir de celle du mot de base
function CFIt_prononciation_flexion(flexion, type_flexion, racine_pron, superlatif, superlatif_p)
{
// si la prononciation n'était pas spécifiée dans la page d'origine
if (racine_pron.indexOf('=') >= 0)
{
// erreur : la prononciation contient en fait un paramètre
return '';
}
// dernière lettre de la flexion
var lettre = flexion.slice(-1);
// deux dernières lettres de la flexion
var lettres2 = flexion.slice(-2);
var x = '';
if (superlatif != '')
{
if (superlatif_p != '')
{
racine_pron = superlatif_p;
x = lettre;
}
}
else
{
switch (type_flexion)
{
case 'ae':
case 'ahe':
x = 'e';
break;
case 'ai':
case 'ahi':
case 'ei':
case 'ohi':
case 'oi':
case 'ioi':
case 'e':
case 'o':
x = 'i';
break;
case 'si':
x = 'j';
break;
case 'oa':
x = 'a';
break;
case 'aie':
case 'iae':
case 'oia':
case 'eaie':
case 'oae':
case 'oaie':
case 'oahihe':
case 'ioiaie':
// ajout dernière lettre de la flexion
x = lettre;
break;
case 'coci':
x = 't͡ʃi';
break;
case 'gogi':
x = 'd͡ʒi';
break;
case 'cocaciche':
// dernière lettre de la flexion
if (lettre == 'a' || lettre == 'e')
{
x = 'k' + lettre;
}
else
{
// i
x = 't͡ʃi';
}
break;
case 'gogagighe':
// dernière lettre de la flexion
if (lettre == 'a' || lettre == 'e')
{
x = 'ɡ' + lettre;
}
else
{
// i
x = 'd͡ʒi';
}
break;
case 'ioiaiie':
if (lettre == 'a')
{
x = 'ja';
}
else if (lettre == 'e')
{
x = 'je';
}
else
{
// i
x = 'i';
}
break;
case 'tore':
if (lettres2 == 'ri')
{
x = '\'to.ri';
}
else
{
// ci
x = '\'tri.t͡ʃi';
}
break;
default:
alert('Type de flexion non pris en charge : ' + type_flexion);
}
}
CreerFlexionsIt_Prononciation_flexion = racine_pron + x;
}
//</nowiki>