Aller au contenu

Utilisateur:Hiob/monobook-test.js

Une page de Wikipédia, l'encyclopédie libre.
Note : après avoir enregistré la page, vous devrez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

Mozilla / Firefox / Konqueror / Safari : maintenez la touche Majuscule (Shift) en cliquant sur le bouton Actualiser (Reload) ou pressez Maj-Ctrl-R (Cmd-R sur Apple Mac) ;

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/**
* SuiviDeTraductionFacile
*
* Le gadget "SuiviDeTraductionFacile" transforme le bandeau de traduction
* en un formulaire permettant de modifier la page de suivi de traduction
* facilement.
*
* Auteur : Romainhk
* Date de dernière révision : 4 janvier 2010
* Licence : Domaine publique
*
* Notes :
* – seul le premier bandeau est pris en compte ;
* – dans la page de suivi, il ne faut pas d'espace entre le '''|''' et le nom du paramètre.
*/
 
//////////////////////ZONE PERSONNALISABLE//////////////////////
// Permet d'enregistrer sans passer par la fenêtre d'édition (par défaut == true)
// var suividetraductionfacile_autocommit = false;
 
/////////////////FIN DE LA ZONE PERSONNALISABLE/////////////////
 
/* Renvoie le premier fils de "pere" dont le tagName vaut "balise"
*/
function premiereSousBaliseX(pere, balise) {
//getElementByTagName() ?
var childs = pere.childNodes;
var i = 0;
var tmp = childs[i];
while ( tmp.tagName != balise && i < childs.length )
{
i++;
tmp = childs[i];
}
return pere.childNodes[i];
}
 
/* Retourne le nom de la page de suivi associée à la page courante
*/
function donnePageDeSuivi() {
var pds = 'Discussion';
if ( mw.config.get('wgCanonicalNamespace') != '' && mw.config.get('wgCanonicalNamespace') != 'Talk' ) {
pds += ' ' + mw.config.get('wgCanonicalNamespace');
}
pds += ':';
 
var Title = mw.config.get('wgTitle').split('/');
var last = Title.pop();
if ( last != 'Traduction' ) {
Title.push(last);
}
Title.push('Traduction');
pds += Title.join('/');
return pds;
}
 
/* ################################################################
#                   Ajout du formulaire                        #
################################################################
*/
function surArticle() {
if (document.createTextNode)
{
var content = $('.bandeau-traduction').first().find('.NavContent')[0];
if (!content) return;
 
content.innerHTML = '<form>' + content.innerHTML + '</form>';
var form = premiereSousBaliseX( content, 'FORM' );
var li = premiereSousBaliseX( premiereSousBaliseX( form, 'UL' ), 'LI' );
var status = premiereSousBaliseX( li, 'B' );
var hr = premiereSousBaliseX( form, 'HR' );
var plainlinks = $(form).find('.plainlinks')[0];
 
/* === FORMULAIRE === */
form.setAttribute("method", 'get');
form.setAttribute("style", 'vertical-align:middle; margin-left:1em; display:inline;' );
form.setAttribute("action", mw.config.get('wgServer') + mw.config.get('wgScript') );
var hiddenTitle = document.createElement('input');
hiddenTitle.setAttribute("type", 'hidden');
hiddenTitle.setAttribute("name", 'title');
hiddenTitle.setAttribute("value", donnePageDeSuivi() );
form.appendChild(hiddenTitle);
var hiddenAction = document.createElement('input');
hiddenAction.setAttribute("type", 'hidden');
hiddenAction.setAttribute("name", 'action');
hiddenAction.setAttribute("value", 'edit');
form.appendChild(hiddenAction);
 
/* === STATUS === */
var select = document.createElement('select');
li.appendChild(select);
select.setAttribute("name", 'status');
select.setAttribute("style", 'vertical-align:bottom;');
 
var opt1 = document.createElement('option');
opt1.innerHTML = 'Demande de traduction';
opt1.value = '1';
select.appendChild(opt1);
var opt2 = document.createElement('option');
opt2.innerHTML = 'En cours de traduction';
opt2.value = '2';
select.appendChild(opt2);
var opt3 = document.createElement('option');
opt3.innerHTML = 'Demande de relecture';
opt3.value = '3';
select.appendChild(opt3);
var opt4 = document.createElement('option');
opt4.innerHTML = 'En cours de relecture';
opt4.value = '4';
select.appendChild(opt4);
var opt5 = document.createElement('option');
opt5.innerHTML = 'Traduction terminée';
opt5.value = '5';
select.appendChild(opt5);
switch ( $(status).text() ) {
case 'Demande':
opt1.selected = true; break;
case 'En cours':
opt2.selected = true; break;
case 'A relire':
opt3.selected = true; break;
case 'En relecture':
opt4.selected = true; break;
case 'Terminée':
opt5.selected = true; break;
default :
/*                        var err = document.createElement('i');
err.innerHTML = 'Statut illisible! ';
$(err).insertAfter(status);
*/
}
li.replaceChild(select, status);
 
/* === PRISE EN CHARGE === */
var labelPec = document.createElement('label');
labelPec.setAttribute("for", 'pecTraduction');
labelPec.setAttribute("style", 'font-style:italic; color:#8f5d3d; margin-right:1ex;');
labelPec.innerHTML = "S'ajouter comme :";
$(labelPec).insertAfter(premiereSousBaliseX( form, 'UL' ));
 
/* ====== ... DE LA TRADUCTION ====== */
var pecTraduction = document.createElement('input');
pecTraduction.setAttribute("type", 'checkbox');
pecTraduction.setAttribute("name", 'pecTraduction');
pecTraduction.setAttribute("value", 'trad');
pecTraduction.setAttribute("style", 'margin-right:5px;');
$(pecTraduction).insertAfter(labelPec);
var TNpecTraduction = document.createTextNode('Traducteur');
$(TNpecTraduction).insertAfter(pecTraduction);
 
/* ====== ... DE LA RELECTURE ====== */
var pecRelecture = document.createElement('input');
pecRelecture.setAttribute("type", 'checkbox');
pecRelecture.setAttribute("name", 'pecRelecture');
pecRelecture.setAttribute("value", 'rel');
pecRelecture.setAttribute("style", 'margin-left:1em; margin-right:5px;');
$(pecRelecture).insertAfter(TNpecTraduction);
var TNpecRelecture = document.createTextNode('Relecteur');
$(TNpecRelecture).insertAfter(pecRelecture);
 
/* === AVANCEMENT TRADUCTION === */
var spanAvancement = document.getElementById('avancementTraduction');
if ( spanAvancement ) {
var valeurAvancement = '0';
if ( spanAvancement.parentNode.lastChild.hasChildNodes() ) {
valeurAvancement =  spanAvancement.parentNode.lastChild.firstChild.innerHTML.split('&')[0];
}
if ( valeurAvancement.search(/[0-9]{1,3}/) == -1 ) {
valeurAvancement = '0';
}
var avancementTraduction = document.createElement('input');
avancementTraduction.setAttribute("type", 'text');
avancementTraduction.setAttribute("name", 'avancementTraduction');
avancementTraduction.setAttribute("size", '3');
avancementTraduction.setAttribute("maxlength", '3');
avancementTraduction.setAttribute("value", valeurAvancement);
avancementTraduction.setAttribute("style", 'vertical-align:top; margin-right:0.6ex;');
//spanAvancement.parentNode.appendChild(avancementTraduction);
spanAvancement.parentNode.insertBefore(avancementTraduction, premiereSousBaliseX(spanAvancement.parentNode, 'A') );
}
 
/* === AVANCEMENT RELECTURE === */
var spanRelecture = document.getElementById('avancementRelecture');
if ( spanRelecture ) {
var valeurAvancementRelecture = '0';
if ( spanRelecture.parentNode.lastChild.hasChildNodes() ) {
valeurAvancementRelecture = spanRelecture.parentNode.lastChild.firstChild.innerHTML.split('&')[0];
}
if ( valeurAvancementRelecture.search(/[0-9]{1,3}/) == -1 ) {
valeurAvancementRelecture = '0';
}
var avancementRelecture = document.createElement('input');
avancementRelecture.setAttribute("type", 'text');
avancementRelecture.setAttribute("name", 'avancementRelecture');
avancementRelecture.setAttribute("size", '3');
avancementRelecture.setAttribute("maxlength", '3');
avancementRelecture.setAttribute("value", valeurAvancementRelecture);
avancementRelecture.setAttribute("style", 'vertical-align:top; margin-right:0.6ex;');
spanRelecture.parentNode.insertBefore(avancementRelecture, premiereSousBaliseX(spanRelecture.parentNode, 'A') );
}
 
/* === SUBMIT === */
var submit = document.createElement('input');
submit.setAttribute("type", 'submit');
submit.setAttribute("value", 'Mettre à jour les valeurs');
submit.setAttribute("style", 'vertical-align:bottom; margin:2px 2em 0 7ex; float:left;');
plainlinks.setAttribute("style", 'float:right;');
plainlinks.parentNode.insertBefore(submit, plainlinks);
}
}
/* ########## Structure html finale ##########
bt ('bandeau-traduction')
|->content ('NavContent')
|->form (get)
|->ul li ...
|->checkboxS
|->hr
|->ul
|->li textarea ...
|->input button submit
|->p ('plainlinks')
*/
 
/* ################################################################
#       Partie sur le mode édition de la page de suivi         #
################################################################
*/
function enEdition(){
/* Ne rien faire mode edit + preload */
if( encodeURIComponent(document.location).search(/%26preload%3D/) != -1 ) return; // /&preload=/
 
if ( !mw.config.get('wgPageName').match(/Discussion.*\/Traduction/) ) return;
var diff = new Array();
var status; var pecTraduction; var pecRelecture;
var avancementTraduction; var avancementRelecture;
 
/* ************ Parser ************ */
var params = document.location.search.substr(1, document.location.search.length).split('&');
var i = 0;
var tmp; var name;
while ( i < params.length )
{
tmp = params[i].split('=');
name = tmp[0];
switch( name ) {
case 'title': case 'action':
break;
case 'status':
status = tmp[1];
break;
case 'pecTraduction':
pecTraduction = tmp[1];
break;
case 'pecRelecture':
pecRelecture = tmp[1];
break;
case 'avancementTraduction':
avancementTraduction = tmp[1];
break;
case 'avancementRelecture':
avancementRelecture = tmp[1];
break;
default:
//alert('Paramètre '+name+' inconnu');
}
i++;
}
/* Vérifications sur les valeurs */
if( status < 1 || status > 5 ) { status = null; }
if( avancementTraduction < 0 ) { avancementTraduction = 0; }
if( avancementTraduction > 100) { avancementTraduction = 100; }
if( avancementRelecture < 0 ) { avancementRelecture = 0; }
if( avancementRelecture > 100) { avancementRelecture = 100; }
 
/* ************ Modification du contenu de wpTextbox1 ************ */
var textarea = document.editform.wpTextbox1.value;
try {
if ( status != null ) {
var statusRE = /(\| *status\s*=\s*)([1-5])/;
textarea = textarea.replace(statusRE, '$1'+status);
if( RegExp.$2 != status ) { diff.push('status'); }
}
 
if ( pecTraduction != null ) {
var pecTraductionRE = /\|traducteur\s*= *([^\f\n\t\v\r]*)/;
var ligne = '';
if ( textarea.search(pecTraductionRE) != -1) {
ligne = textarea.match(pecTraductionRE)[0];
} else {
alert('Gadget-SuiviDeTraductionFacile : Impossible de trouver la ligne « |traducteur = »');
}
ligne = ligne.split('=')[0]+'= ';
if( RegExp.$1 != '' ) { ligne += '$1, '; }
ligne += '~'+'~'+'~'+'~';
textarea = textarea.replace(pecTraductionRE, ligne);
if ( avancementTraduction == null ) { avancementTraduction = 0; }
diff.push('traducteur');
}
if ( pecRelecture != null ) {
var pecRelectureRE = /\|relecteur\s*= *([^\f\n\t\v\r]*)/;
var ligne = '';
if ( textarea.search(pecRelectureRE) != -1) {
ligne = textarea.match(pecRelectureRE)[0];
} else {
alert('Gadget-SuiviDeTraductionFacile : Impossible de trouver la ligne « |relecteur = »');
}
ligne = ligne.split('=')[0]+'= ';
if( RegExp.$1 != '' ) { ligne += '$1, '; }
ligne += '~'+'~'+'~'+'~';
textarea = textarea.replace(pecRelectureRE, ligne);
if ( avancementRelecture == null ) { avancementRelecture = 0; }
diff.push('relecteur');
}
 
if ( avancementTraduction != null ) {
var avancementTraductionRE = /(\|avancement_traduction\s*=[^\|\r\n\w\[]*)([0-9]{0,3})/;
textarea = textarea.replace(avancementTraductionRE, '$1'+avancementTraduction);
if( RegExp.$2 != avancementTraduction ) { diff.push('avancement_traduction'); }
}
if ( avancementRelecture != null ) {
var avancementRelectureRE = /(\|avancement_relecture\s*=[^\|\r\n\w\[]*)([0-9]{0,3})/;
textarea = textarea.replace(avancementRelectureRE, '$1'+avancementRelecture);
if( RegExp.$2 != avancementRelecture ) { diff.push('avancement_relecture'); }
}
document.editform.wpTextbox1.value = textarea;
}
catch (err) {
alert("Gadget-SuiviDeTraductionFacile : Impossible de mettre à jour les valeurs suite à l'erreur\n"+err+"\n"
+"\nVeuillez re-formatter le code de la page de suivi ou contacter Utilisateur:Romainhk");
return;
}
 
/* ************ Résumé wpSummary ************ */
if ( diff.length > 0 ) {
var messageDiff = 'Modification ';
if ( diff.length == 1 ) {
messageDiff += 'du champ ' + diff[0];
} else {
messageDiff += 'des champs ' + diff.join(', ');
}
messageDiff += ' par Gadget-SuiviDeTraductionFacile';        
document.editform.wpSummary.value = messageDiff;
}
/* Autocommit */
if ( typeof suividetraductionfacile_autocommit == 'undefined' || suividetraductionfacile_autocommit ) {
document.getElementById("bodyContent").style.display = "none" ;
document.editform.wpSave.click();
}
}
 
if( mw.config.get('wgAction') == 'edit' ) {
$(enEdition);
} else {
$(surArticle);
}