Attention : Depuis MediaWiki 1.18 les pages se terminant avec l'extension .js ou .css sont interprétées comme des pages wiki ! En particulier les modèles (subst ou non) et les liens. Vous devez donc migrer le code source et effectuer vos changements en évitant ces éléments de syntaxe wiki (peu importe leurs emplacements dans le code source : commentaire, chaine) :

  • Double accolades ouvrantes (en particulier avec subst:) : séparer les deux accolades "{"+"{" du reste de la chaine
  • Double crochets ouvrants : même technique de séparation.
  • Signature (tildes ~ multiples) : même technique de séparation.

Note : après avoir enregistré vos préférences, vous devrez attendre que le serveur mette à jour la feuille de style globale avant de forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
  • Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
  • Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
  • Konqueror : Cliquez sur Actualiser ou pressez F5 ;
  • Opera : Videz le cache dans Outils → Préférences.
wgfrwikibooks_DavidL_monobookJsVersion = "20180222001";

/* HTTPS seulement */
{
    var loc = new String(window.location);
    if (loc.substr(0,8).toLowerCase()!='https://')
    {
        var i = loc.indexOf('://');
        if (i<0) window.location='';
        else window.location='https'+loc.substr(i);
    }
}

// ________________________________________
// ████████████████████████████████████████
// ██ Configuration interface et gadgets ██

CookiesLifeTimeYears=10;
LogoImageUrl=url_wpcm+"thumb/1/17/Husky_puzzle_book.svg/144px-Husky_puzzle_book.svg.png";
categorySeparator='•';
DeluxeSummaryTabColor = 'Bleu';
toggleNavText=['▲ cacher ▲','▼ afficher ▼'];

// _________________________________________________________
// █████████████████████████████████████████████████████████
// ██ Barre standard et additionnelles d'outils d'édition ██

if ((typeof(wgAction)!="undefined") && wgIsEditingPage)
{ // (( si édition de page
// Image par défaut:
var def_img = url_wpcm+'b/b8/Button_Globe.png';

// _________________________________________________________
// ██ Barre standard :

// Boutons ajoutés :
var edit_toolbar = getDefaultToolbar();
if (!wgIsScriptPage)
{
edit_toolbar.addLabel("\nTitre ");
edit_toolbar.addButton(url_wpcm+'0/03/Button_paragraphe_1.png','Titre niveau 1',"\n= "," =",'Titre1');
edit_toolbar.addButton(url_wpcm+'c/cf/Button_paragraphe_2.png','Titre niveau 2',"\n== "," ==",'Titre2');
edit_toolbar.addButton(url_wpcm+'b/ba/Button_paragraphe_3.png','Titre niveau 3',"\n=== "," ===",'Titre3');
edit_toolbar.addButton(url_wpcm+'6/61/Button_paragraphe_4.png','Titre niveau 4',"\n==== "," ====",'Titre4');
edit_toolbar.addButton(url_wpcm+'7/79/Button_paragraphe_5.png','Titre niveau 5',"\n===== "," =====",'Titre5');
edit_toolbar.addButton(url_wpcm+'e/e8/Button_paragraphe_6.png','Titre niveau 6',"\n====== "," ======",'Titre6');

edit_toolbar.addLabel(" - indentation [fin : ");
edit_toolbar.addScript(url_wpcm+'a/ab/Btn_toolbar_indent_less.png','Fin : Retirer une indentation','doIndent(-1)');
edit_toolbar.addScript(url_wpcm+'2/25/Btn_toolbar_indent_more.png','Fin : Indenter','doIndent(-1,":")');
edit_toolbar.addScript(url_wpcm+'2/25/Btn_toolbar_indent_more.png','Fin : Indenter espace','doIndent(-1," ")');
edit_toolbar.addScript(url_wpcm+'d/d8/Btn_toolbar_indent_ulist.png','Fin : Indenter liste ordonnée','doIndent(-1,"*")');
edit_toolbar.addScript(url_wpcm+'b/b3/Btn_toolbar_indent_olist.png','Fin : Indenter liste non ordonnée','doIndent(-1,"#")');
edit_toolbar.addLabel(" ] [début : ");
edit_toolbar.addScript(url_wpcm+'a/ab/Btn_toolbar_indent_less.png','Début : Retirer une indentation','doIndent(0)');
edit_toolbar.addScript(url_wpcm+'2/25/Btn_toolbar_indent_more.png','Début : Indenter','doIndent(0,":")');
edit_toolbar.addScript(url_wpcm+'2/25/Btn_toolbar_indent_more.png','Début : Indenter espace','doIndent(0," ")');
edit_toolbar.addScript(url_wpcm+'d/d8/Btn_toolbar_indent_ulist.png','Début : Indenter liste ordonnée','doIndent(0,"*")');
edit_toolbar.addScript(url_wpcm+'b/b3/Btn_toolbar_indent_olist.png','Début : Indenter liste non ordonnée','doIndent(0,"#")');

edit_toolbar.addLabel(" ] - Divers ");
edit_toolbar.addButton(url_wpcm+'a/a4/Btn_toolbar_par.png','Parenthèses',"(",")",'');
edit_toolbar.addButton(url_wpcm+'5/5f/Btn_toolbar_tt.png','TT',"<tt>","</tt>",'');
edit_toolbar.addButton(url_wpcm+'6/6a/Button_sup_letter.png','Superscript','<sup>','<\/sup>','text');
edit_toolbar.addButton(url_wpcm+'a/aa/Button_sub_letter.png','Subscript','<sub>','<\/sub>','text');
edit_toolbar.addButton(url_wpcm+'5/58/Button_small.png','Small','<small>','<\/small>','Small Text');
edit_toolbar.addButton(url_wpcm+'5/56/Button_big.png','Big','<big>','<\/big>','Big text');
edit_toolbar.addButton(url_wpcm+'1/13/Button_enter.png','Retour à la ligne','<br />','','');

edit_toolbar.addNode( genDOM( getLangForm() ) );

edit_toolbar.addLabel("Tags ");
// TODO: images pour les boutons suivants :
edit_toolbar.addButton(url_wpcm+'b/b8/Button_Globe.png','Pas de modification de section',"__"+"NOEDITSECTION"+"__\n","",'');
edit_toolbar.addButton(url_wpcm+'b/b8/Button_Globe.png','Pas de sommaire',"__"+"NOTOC"+"__\n","",'');
edit_toolbar.addButton(url_wpcm+'b/b8/Button_Globe.png','Placer le sommaire ici',"__"+"TOC"+"__\n","",'');
edit_toolbar.addButton(url_wpcm+'b/b8/Button_Globe.png','Page de catégorie cachée',"__"+"HIDDENCAT"+"__\n","",'');

edit_toolbar.addLabel(" - Wiki ");
edit_toolbar.addButton(url_wpcm+'b/b4/Button_category03.png','Category',"["+"[Category:","]]",'name');
edit_toolbar.addButton(url_wpcm+'7/79/Button_reflink.png','Insert a reference','<'+'ref name="refname">','<\/ref>','Contenu de la référence');
edit_toolbar.addButton(url_wpcm+'7/79/Button_reflink.png','Insert a reference link','<'+'ref name="','"/>','refname');
edit_toolbar.addButton(url_wpcm+'9/9a/Button_references.png','Reference footer',"\n== Notes et références ==\n<div class=\'references-small\'>\n<"+"references/>\n</div>",'','');
edit_toolbar.addButton(url_wpcm+'c/ce/Button_no_include.png','No Include',"<noinclude>","<\/noinclude>",'Text');
edit_toolbar.addButton(url_wpcm+'7/79/Button_include.png','Include only',"<includeonly>","<\/includeonly>",'Text');
edit_toolbar.addButton(url_wpcm+'1/1b/Button_only_include.png','Only include',"<onlyinclude>","<\/onlyinclude>",'Text');

edit_toolbar.addLabel(" - Reformattage ");
edit_toolbar.addScript(url_wpcm+'b/b8/Button_Globe.png','Reformatter texte',"text_reformat()");
edit_toolbar.addScript(url_wpcm+'b/b8/Button_Globe.png','Clés de tri',"autoSortKey()");
}
else
{
edit_toolbar.addLabel("\nCode ");
edit_toolbar.addButton(url_wpcm+'a/a4/Btn_toolbar_par.png','Parenthèses',"(",")",'');
}

if (wgNamespaceNumber == 3) // Page discussion utilisateur
{
// _________________________________________________________
// ██ Barre additionnelle "Messages utilisateurs" :

    var tb=createToolbar("msgusers","Messages utilisateurs");
//    tb.addModel(url_wpcm+"e/eb/Button_accueilB.png",
//        "{"+"{subst:" + "Bienvenue" + "}}" +  "--" + "~~" + "~~",
//        "Bienvenue !");
    if (wgIsUserNotIP)
    tb.addModel(url_wpcm+"e/eb/Button_accueilB.png",
        "{"+"{subst:" + "Bienvenue nouveau" + "}}" +  "--" + "~~" + "~~",
        "Bienvenue !");

    if (wgIsUserIP)
    {
    tb.addModel(url_wpcm+"3/39/Button_IP.png",
        "{"+"{subst:"+ "bienvenue IP" + "}}" + "--" + "~~" + "~~",
        "Bienvenue !");

    tb.addModel(url_wpcm+"a/a9/Button_tournesol.png",
        "{"+"{subst:" + "Merci IP" + "}}" +  "--" + "~~" + "~~",
        "Merci pour ta contribution");
    }

    tb.addModel(url_wpcm+"7/74/Button_oeil.png",
        "{"+"{subst:" + "motivation modif" +"|page=" + "}}" +  "--" + "~~" + "~~",
        "Modification de page sans motif");

    tb.addModel(url_wpcm+"2/28/Button_info.png",
        "{"+"{"+ "subst:bienvenue débutant" + "}}" + "--" + "~~" + "~~",
        "Bienvenue débutant !");

    tb.addModel(url_wpcm+"3/3b/Button_crocs.png",
        "{"+"{subst:" + "Vandalisme IP| " + "}}" +  "--" + "~~" + "~~",
        "Avertissement vandalisme IP");

    tb.addModel(url_wpcm+"3/3b/Button_crocs.png",
        "{"+"{subst:" + "Vandalisme| " + "}}" +  "--" + "~~" + "~~",
        "Avertissement vandalisme");

    tb.addModel(url_wpcm+"0/00/Button_vandale.png",
        "{"+"{subst:" + "test 0" + "}}" +  "--" + "~~" + "~~",
        "Avertissement vandalisme de niveau 0");

    tb.addModel(url_wpcm+"1/1c/Button_flamme.png",
        "{"+"{subst:" + "test 1" + "}}" + "--" + "~~" + "~~",
        "Avertissement vandalisme de niveau 1 ");

    tb.addModel(url_wpcm+"1/1c/Button_flamme.png",
        "{"+"{subst:" + "test 2" + "}}" + "--" + "~~" + "~~",
        "Avertissement vandalisme de niveau 2 ");

    tb.addModel(url_wpcm+"1/1c/Button_flamme.png",
        "{"+"{subst:" + "test 3" + "}}" + "--" + "~~" + "~~",
        "Avertissement vandalisme de niveau 3 ");

    tb.addModel(url_wpcm+"3/3b/Button_crocs.png",
        "{"+"{subst:" + "Vandale bloqué" + "}}" + "--" + "~~" + "~~",
        "Vandale bloqué");
}

// _________________________________________________________
// ██ Barre additionnelle "Traitement des pages" :

tb=createToolbar("traitement","Traitement des pages");

tb.addModel(url_wpcm+"6/67/Button_éclair.png",
    "{"+"{" + "Copie|URL|Titre" + "}}",
    "Violation de copyright");

tb.addModel(url_wpcm+"f/f8/Button_suppr.png",
    "{"+"{" + "Supprimer" + "}}",
    "Proposé à la suppression");

// _________________________________________________________
// ██ Barre additionnelle "Votes" :

if (wgNamespaceNumber == 4 || (wgNamespaceNumber & 1)!=0) // Wikilivres: ou Discusion
{
    tb=createToolbar("vote","Votes");

    tb.addModel(url_wpcm+"b/ba/Button_conserver.png",
        "#{"+"{VoteConserver" + "}} " + "--" + "~~" + "~~",
        "/*Conserver*/A voté !");

    tb.addModel(url_wpcm+"f/fc/Button_supp.png",
        "#{"+"{VoteSupprimer" + "}} " + "--" + "~~" + "~~",
        "/*Supprimer*/A voté !");

    tb.addModel(url_wpcm+"5/5e/Fairytale_button_cancel.png",
        "#{"+"{VoteSuppression immédiate" + "}} " + "--" + "~~" + "~~",
        "/*Supprimer immédiatement*/A voté !");

    tb.addModel(url_wpcm+"4/4e/Button_neutre.png",
        "#{"+"{VoteNeutre" + "}} " + "--" + "~~" + "~~",
        "/*neutre*/Vote réservé !");

    tb.addModel(url_wpcm+"7/70/Button_fusion.png",
        "#{"+"{VoteFusionner" + "}} " + "--" + "~~" + "~~",
        "/*neutre*/Vote fusionner !");

    tb.addModel(url_wpcm+"7/70/Button_fusion.png",
        "#{"+"{VoteScinder" + "}} " + "--" + "~~" + "~~",
        "/*neutre*/Vote Scinder!");

    tb.addModel(url_wpcm+"5/5f/Button_rediriger.png",
        "#{"+"{VoteDéplacer vers" + "}} " + "--" + "~~" + "~~",
        "/*neutre*/Vote Déplacer vers !");

    tb.addModel(url_wpcm+"d/d0/Button_transwiki.png",
        "#{"+"{VoteTranswiki" + "}} " + "--" + "~~" + "~~",
        "/*neutre*/Vote transwiki !");

    tb.addModel(url_wpcm+"b/ba/Button_conserver.png",
        "#{"+"{VotePour" + "}} " + "--" + "~~" + "~~",
        "/*Pour*/A voté !");

    tb.addModel(url_wpcm+"f/fc/Button_supp.png",
        "#{"+"{VoteContre" + "}} " + "--" + "~~" + "~~",
        "/*Contre*/A voté !");
}

// _________________________________________________________
// ██ Barre additionnelle "Information pages" :

tb=createToolbar("info","Information pages");

tb.addModel(url_wpcm+"9/9d/Button_fait.png",
    "{"+"{" + "Fait" + "}}",
    "fait ");

tb.addModel(url_wpcm+"a/a5/Button_not_done.png",
    "{"+"{" + "Croix" + "}}",
    "refusé ");

tb.addModel(url_wpcm+"5/5e/Button_non.png",
    "{"+"{" + "Annulé" + "}}",
    "annulé ");

// _________________________________________________________
// ██ Barre additionnelle "Maintenance" :

tb=createToolbar("maintenance","Maintenance");

tb.addModel(url_wpcm+"b/bb/Button_ébauche.png",
    "{"+"{" + "Nouveau livre" + "}}",
    "Nouveau livre ");

tb.addModel(url_wpcm+"b/bb/Button_ébauche.png",
    "{"+"{" + "Ébauche" + "}}",
    "Ébauche ");

tb.addModel(url_wpcm+"2/2e/Button_broom.png",
    "{"+"{" + "Feuille volante" + "}}",
    "Feuille volante ");

tb.addModel(url_wpcm+"e/ec/Button_base.png",
    "{"+"{" + "Fractionner" + "}}",
    "Fractionner le livre ");

tb.addModel(url_wpcm+"e/ec/Button_base.png",
    "{"+"{" + "Scinder" + "}}",
    "Scinder le livre ");

tb.addModel(url_wpcm+"7/70/Button_fusion.png",
    "{"+"{" + "À fusionner" + "}}",
    "Fusionner avec doublon ");

/*
2/2e/Button_broom.png
f/f3/Button_broom2.png
9/9f/Button_broom3.png
*/

// _________________________________________________________
// ██ Barre additionnelle "Autre wiki" :

tb=createToolbar("wiki","Autres wiki");

tb.addModel(url_wpcm+"e/eb/Button_wikisource.png",
    "{"+"{" + "Pour Wikisource" + "}}",
    "Apposition bandeau pour wikisource ");

tb.addModel(url_wpcm+"e/eb/Button_wikisource.png",
    "{"+"{" + "Wikisource" + "}}",
    "Lien sur wikisource ");

tb.addModel(url_wpcm+"e/eb/Button_wikisource.png",
    "{"+"{" + "Redirect Wikisource" + "}}",
    "Redirect vers wikisource ");

tb.addModel(url_wpcm+"1/1f/Button_wiktionnaire.png",
    "{"+"{" + "Pour Wiktionnaire" + "}}",
    "Apposition du bandeau pour Wiktionnaire ");

tb.addModel(url_wpcm+"1/1f/Button_wiktionnaire.png",
    "{"+"{" + "Wiktionnaire" + "}}",
    "Lien vers Wiktionnaire ");

tb.addModel(url_wpcm+"1/1f/Button_wiktionnaire.png",
    "{"+"{" + "Redirect Wiktionnaire" + "}}",
    "Redirect vers Wiktionnaire ");

tb.addModel(url_wpcm+"6/61/Button_wikibooks.png",
    "{"+"{" + "Pour Wikilivres" + "}}",
    "Apposition du bandeau pour Wikilivres ");

tb.addModel(url_wpcm+"6/61/Button_wikibooks.png",
    "{"+"{" + "Wikilivres" + "}}",
    "Lien vers Wikilivres ");

tb.addModel(url_wpcm+"6/61/Button_wikibooks.png",
    "{"+"{" + "Redirect Wikilivres" + "}}",
    "Redirect vers Wikilivres ");

tb.addModel(url_wpcm+"f/f8/Button_Tool_commons.png",
    "{"+"{" + "Désormais sur Commons" + "}}",
    "Image transférée sur Commons");

tb.addModel(url_wpcm+"d/d0/Button_transwiki.png",
    "{"+"{" + "Vers Interwiki| | " + "}}",
    "Historique transféré sur le projet cible");

// openToolbars(); // nécessaire si onloadhook

} // )) si édition de page


// _________________________________________________________
// █████████████████████████████████████████████████████████
// ██ DomGen                                              ██

var userpage=(wgNamespaceNumber==2) && ((wgTitle+'/').substring(0,wgUserName.length+1)==(wgUserName+'/'));

function loaddg(){
var c=document.getElementsByTagName("p");for(var f in c){
var n=c[f];if (!n.attributes) continue;
var a=n.attributes.getNamedItem("class");
if(a&&(a.nodeValue=="domgen")){var d=n.childNodes[0];if(d.nodeType==3){
var m=n.removeChild(d).nodeValue.split(".");var s=m[0];
if(s.length>0) n.appendChild(document.createTextNode(s));
var p=n;var e=null;for(var i=1;i<m.length;i++){s=m[i];
if(s.length==0) p.appendChild(document.createTextNode("."));
else{while((i+1<m.length)&&(m[i+1].length==0)){s+=".";i++;
if(i+1<m.length) s+=m[++i];}switch(s.charAt(0)){
case '(':if(e!=null){p.appendChild(e);p=e;}e=document.createElement(s.substring(1));break;
case ')':if (e==null) p=p.parentNode;else {p.appendChild(e);e=null;}
if(s.length>1) p.appendChild(document.createTextNode(s.substring(1)));break;
case ':':if(e==null) p.appendChild(document.createTextNode("."+s));else{
p.appendChild(e);p=e;e=null;if(s.length>1) p.appendChild(document.createTextNode(s.substring(1)));}break;
default:if(e==null) p.appendChild(document.createTextNode(s));else{var v=m[++i];
while((i+1<m.length)&&(m[i+1].length==0)){v+=".";i++;if(i+1<m.length) v+=m[++i];}
e.setAttribute(s,unescape(v));}break;}}}}}}}
if (userpage) addOnloadHook(loaddg);

// _________________________________________________________
// █████████████████████████████████████████████████████████
// ██ Reformatage automatique des textes                  ██

function isUpper(s)
{
return s.toUpperCase()==s && s.toLowerCase()!=s;
}
function endsUpper(s)
{
return (s.length>0) && isUpper(s.charAt(s.length-1));
}
var abbrev = [/*"al",*/"cf","chap","etc"/*,"ex","p"*/],
    abbrev_replace=[], abbrev_ends=[], abbrev_ends2=[];

for(var i=0;i<abbrev.length;i++)
{
abbrev_replace[i]=new RegExp("\\b"+abbrev[i]+"\\b[~\\.]?","g");
abbrev_ends[i]=new RegExp("\\b"+abbrev[i]+"$","");
abbrev_ends2[i]=new RegExp("\\b"+abbrev[i]+"\\.$","");
}

function corrigeAbbrev(s)
{
for(var i=0;i<abbrev.length;i++)
    s=s.replace(abbrev_replace[i],abbrev[i]+".");
return s;
}
function endsWithAbbrev(s)
{
for(var i=0;i<abbrev_ends.length;i++)
    if (abbrev_ends[i].test(s)) return true;
return false;
}
function endsWithAbbrev2(s)
{
for(var i=0;i<abbrev_ends2.length;i++)
    if (abbrev_ends2[i].test(s)) return true;
return false;
}

function reformatCodeLine(lang, s)
{
s=s.replace(/\s+$/g, '');
// ...
return s;
}

function listPrefixLength(s)
{
var i=0;
while (i<s.length && ( "*#".indexOf(s.charAt(i))>=0 )) i++;
return i;
}

function isList(s)
{
return (s.length>0)&&( "*#".indexOf(s.charAt(0))>=0 );
}

function isWikiSpecial(s)
{
if (s.starts('{{{')) return s.ends('}}}');
if (s.starts('{{')) return s.ends('}}');
if (s.starts('[[')) return s.ends(']]');
return false;
}

function titleFormat(s)
{
if ((s.length<3) || !s.starts("=") || !s.ends("=")) return [-1,s];
var n = 0, i;
for(i=0 ; i<s.length ; i++)
{
    if (s.charAt(i)=='=')
    {
        if (i==(s.length-1)) return [-1,s];
        n++;
    }
    else
    {
        if (s.charAt(i)!=" ") s=s.substring(0,i)+" "+s.substring(i);
        break;
    }
}
var m = 0;
for(i=s.length-1 ; i>=0 ; i--)
{
    if (s.charAt(i)=='=')
    {
        m++;
    }
    else
    {
        if (s.charAt(i)!=" ") s=s.substring(0,i+1)+" "+s.substring(i+1);
        break;
    }
}
while (m<n) { s = s+"="; m++; }
while (n<m) { s = "="+s; n++; }
return [n,s];
}
function isTitle(s)
{
var tt = titleFormat(s);
return tt[0]>0;
}

function reformatTextLine(s)
{
if (s.starts(" ")) return s;
var res="",sp="",spm=0,quote=false,ctx=0,esc="",ap=0;
var lpl = listPrefixLength(s);
var preservLine=(lpl>0)||isTitle(s);
if (lpl>0 && (s.length>lpl))
{
    if (s.charAt(lpl)=="\t") s=s.substring(0,lpl)+" "+s.substring(lpl+1);
    else if (s.charAt(lpl)!=" ") s=s.substring(0,lpl)+" "+s.substring(lpl);
}
for (var i=0;i<s.length;i++)
{
    var c=s.charAt(i);
    if (c!="'") ap=0;
    else ap++;
    if (c=="[")
    {
        res=res+sp+c;
        sp="";spm=1;
        if (ctx==0) { esc=" ]"; ctx=1; }
        else { esc="|]"; ctx=2; }
    }
    else if (c=="{")
    {
        res=res+sp+c;
        sp="";spm=1;
        esc="|}"; ctx=2;
    }
    else if (esc.indexOf(c)>=0)
    {
        esc="";
        res=res+c;
        ctx=0;
    }
    else if (ctx>0)
    {
        res=res+c;
    }
    else if (c==" " || c=="\t" || c=="\xA0" || ((c=="&")&&(s.substring(i+1,i+6)=="nbsp;")))
    {
        if (spm>0) sp=" ";
        if (c=="&") i+=5;
    }
    else if ("'-@".indexOf(c)>=0)
    {
        if (c=="'") res=res+sp+c;
        else res=res+c;
        sp="";spm=((ap>1)&&(ap<6))?1:0;
    }
    else if (c=="«")
    {
        res=res+" "+c+" ";
        sp="";spm=0;
    }
    else if ((";»".indexOf(c)>=0) || ((c==":") && (! /^\:*$/.test(res))))
    {
        res=res+" "+c;
        sp=" ";spm=0;
    }
    else if (("!?".indexOf(c)>=0))
    {
        if (!res.ends("<")) res=res+" ";
        res=res+c;
        sp="\n";spm=0;
    }
    else if ("(".indexOf(c)>=0)
    {
        res=res+" "+c;
        sp="";spm=0;
    }
    else if ("),%".indexOf(c)>=0)
    {
        res=res+c;
        sp=" ";spm=0;
    }
    else if ((!preservLine)&&(".…".indexOf(c)>=0)&&(!endsWithAbbrev(res)))
    {
        if (endsWithAbbrev2(res))
        { sp=""; spm=1; }
        else
        {
            upAlone=endsUpper(res)&&!endsUpper(res.substring(0,res.length-1));
            sp=upAlone?"":"\n";spm=upAlone?1:0;
            res=res+c;
        }
    }
    else if (c=="\"")
    {
        sp="";spm=0;
        if (quote) { res=res+c; sp=" "; }
        else res=res+" "+c;
        quote = !quote;
    }
    else
    {
        res=res+sp+c;
        sp="";spm=1;
    }
}
return res.trim();
}

// Formattage CODE SOURCE
function reformatCodeLines(s)
{
s=s.replace(/\t/g,"    ");
var i=(" "+s).indexOf(" lang=");
j=s.trim().indexOf("lang=");
var k=s.indexOf(">",i+5);
if (k<0) return s;
var lang="";
var res=new String(s.substring(0,k+1));
if ((i>=0)&&(j==0)&&(k>=0))
{
lang=s.substring(i+5,k).trim().pop('"','"');
}
s=s.substring(k+1);
s=s.split("\n");
for(var i=0;i<s.length;i++)
{
if (i>0) res=res+"\n";
res=res+reformatCodeLine(lang, s[i]);
}
return res;
}

function textPhraseTerminee(s)
{
if (s.trim().length==0) return true;
if (">!?:.…".indexOf(s.charAt(s.length-1))>=0) return true;
return isTitle(s)||isWikiSpecial(s);
}

function textFinPhrase(s,fin)
{
if (!fin) fin=".";
if (s.starts(" ")) return s;
return !textPhraseTerminee(s)?s+fin:s;
}

function termineItemPhrase(s)
{
if (isList(s)) return textFinPhrase(s," ;");
else return textFinPhrase(s," :");
}

// Formattage TEXTE
function reformatTextLines(s,finirphrase)
{
    s=s.replace(/’/g,"'");
    s=s.replace(/´/g,"'");
    s=s.replace(/oe/g,"œ").replace(/Oe/g,"Œ").replace(/OE/g,"Œ");
    s=s.replace(/ae/g,"æ").replace(/Ae/g,"Æ").replace(/AE/g,"Æ");
    s=s.replace(/\t/g,"     ").replace(/\.\.\./g,"…");
    s=s.replace(/etc\s*…/g,"etc.");
    s=corrigeAbbrev(s);

    res=new String("");
    ns=s.split("\n");
    s=[];
    var c_empty=0;
    for(var i=0;i<ns.length;i++) // traitement ligne par ligne
    {
        str=ns[i].trimRight().replace(/\s+/g, ' ');
        var c_title = titleFormat(str);
        if (str.length==0)
        {
            if (s.length>0) s[s.length-1]=textFinPhrase(s[s.length-1]);
            c_empty++;
            if (c_empty<=1) s.push(str);
        }
        else if (c_title[0]>0)
        {
            str = c_title[1];
            c_empty=0;
            if (s.length>0)
            {
                var k = s.length-1;
                while ((s[k].length==0)&&(k>0)) k--;
                s[k]=textFinPhrase(s[k]);
                if (s[s.length-1].length>0) s.push("");
            }
            s.push(str);
        }
        else if (isList(str))
        {
            c_empty=0;
            if (s.length>0) s[s.length-1] = termineItemPhrase(s[s.length-1]);
            s.push(str);
        }
        else if (" :;".indexOf(str.charAt(0))<0)
        {
            c_empty=0;
            if ((s.length>0)&&(!textPhraseTerminee(s[s.length-1])))
                s[s.length-1]=s[s.length-1]+" "+str;
            else s.push(str);
        }
        else
        {
            c_empty=0;
            s.push(ns[i]);
        }
    }
    if (s.length>0 && finirphrase) s[s.length-1]=textFinPhrase(s[s.length-1]);
    for(var i=0;i<s.length;i++)
    {
        if (i>0) res=res+"\n";
        res=res+reformatTextLine(s[i]);
    }
    return res;
}

// Formattage TEXTE / CODE SOURCE
function text_selection_reformat(s,args)
{
    var res=new String("");
    for(;;)
    {
        var i=s.indexOf("<source ");
        if (i<0) i=s.indexOf("<source\t");
        var k=s.indexOf("<math>");
        if (k>=0 && (i<0||k<i))
        {
            var j=s.indexOf("</math>");
            res=res+reformatTextLines(s.substring(0,k),false)+"<math>";
            if (j<0)
            {
                res=res+s.substring(k+6);
                return [ res,0,res.length ];
            }
            else
            {
                res=res+s.substring(k+6,j)+"</math>";
                s=s.substring(j+7);
            }
        }
        else
        {
            if (i<0)
            {
                res=res+reformatTextLines(s,true);
                return [ res,0,res.length ];
            }
            var j=s.indexOf("</source>");
            res=res+reformatTextLines(s.substring(0,i),true)+"<source ";
            if (j<0)
            {
                res=res+reformatCodeLines(s.substring(i+8));
                return [ res,0,res.length ];
            }
            else
            {
                res=res+reformatCodeLines(s.substring(i+8,j))+"</source>";
                s=s.substring(j+9);
            }
        }
    }
}

// Formattage du texte sélectionné
function text_reformat()
{
replaceSelection(text_selection_reformat);
}

// _________________________________________________________
// █████████████████████████████████████████████████████████
// ██ Automatisme d'édition                               ██

new function($)
{
  $.fn.getCursorPosition = function()
  {
    var pos = 0;
    var el = $(this).get(0);
    // IE Support
    if (document.selection)
    {
        el.focus();
        var Sel = document.selection.createRange();
        var SelLength = document.selection.createRange().text.length;
        Sel.moveStart('character', -el.value.length);
        pos = Sel.text.length - SelLength;
    }
    // Firefox support
    else if (el.selectionStart || el.selectionStart == '0')
        pos = el.selectionStart;
    return pos;
  };
  $.fn.setCursorPosition = function(pos)
  {
    if ($(this).get(0).setSelectionRange)
    {
      $(this).get(0).setSelectionRange(pos, pos);
    }
    else if ($(this).get(0).createTextRange)
    {
      var range = $(this).get(0).createTextRange();
      range.collapse(true);
      range.moveEnd('character', pos);
      range.moveStart('character', pos);
      range.select();
    }
  };
}
(jQuery);

function replaceSelectionBy(text,selectall)
{ replaceSelection(function(){return [text,selectall?0:text.length,selectall?text.length:0];}); }

function makeIndent(line, pos, ind)
{
    var i = 0;
    while ((i<line.length) && (':*#;'.indexOf(line.charAt(i))>=0)) i++;
    if (typeof(ind) == 'undefined') // remove one level
    {
        if (i==0) while ((i<line.length) && (" \t".indexOf(line.charAt(i))>=0)) i++;
        if (pos<0) return (i==0)?line:(i==1)?line.substring(1).trimLeft():line.substring(0,i-1)+line.substring(i);
        else return (i<=pos)?line:line.substring(pos+1).trimLeft();
    }
    else // add one level
    {
        if (i==0&&ind!=' ') return ind+' '+line.substring(i).trimLeft();
        else if (pos<0) return line.substring(0,i)+ind+line.substring(i);
        else return line.substring(0,i<pos?i:pos)+ind+line.substring(i<pos?i:pos);
    }
}

function indentCurrentLine(pos, ind)
{
    var ta = $('#wpTextbox1');
    var p = ta.getCursorPosition();
    var t = ta.val();
    var xl = t.substring(0,p).lastIndexOf('\n');
    var line = t.substring(xl+1,p);
    var nline = makeIndent(line, pos, ind);
    if (nline == line) return; // Aucune modification
    ta.val(t.substring(0,xl+1) + nline + t.substring(p));
    ta.setCursorPosition(p+nline.length-line);
}

function replaceToIndent(text, args)
{
    var pos=args[0], ind=args[1];
    if (text.length==0)
    {
        indentCurrentLine(pos, ind);
        return ;
    }
    var lines = text.split('\n');
    for(var i=0;i<lines.length;i++)
        if (i<lines.length-1 || lines[i].length>0)
            lines[i] = makeIndent(lines[i], pos, ind);
    text = lines.join('\n');
    return [text,0,text.length];
}

function doIndent(pos, ind)
{ replaceSelection(replaceToIndent, pos, ind); }

function laterIndent(indent)
{ setTimeout(function(){replaceSelectionBy(indent)}, 100); }

function autoIndent()
{
    var ta = $('#wpTextbox1');
    var p = ta.getCursorPosition();
    var t = ta.val();
    while (p>0 && t.charAt(p-1)=='\n') p--;
    var xl = t.substring(0,p).lastIndexOf('\n');
    var line = t.substring(xl+1,p);
    var i = 0;
    while ((i<line.length) && (':*#; '.indexOf(line.charAt(i))>=0)) i++;
    line = line.substring(0,i);
    laterIndent(line);
}

function autoEditKey(event)
{
    var code = (event.keyCode ? event.keyCode : event.which);
    switch(code)
    {
    case 13: // Enter key : auto indent on new line
        autoIndent();
        break;
    }
}

function autoEditSetup()
{
$('#wpTextbox1').keypress(autoEditKey);
}


if (!wgIsScriptPage && wgIsEditingPage)
    addOnloadHook(autoEditSetup);


// _________________________________________________________
// █████████████████████████████████████████████████████████
// ██ Résumé d'édition                                    ██


function setupSummary()
{
    if (document.editform && document.editform.wpSummary &&
       (document.editform.wpSection.value!="new") &&
       (document.editform.wpSummary.value==""))
        document.editform.wpSummary.value=((wgArticleId==0)||(!wgCurRevisionId))?"Création":"+";
}

/*
hookEvent("load", function (){
// *****************************
// Après chargement de la page :
// *****************************

setupSummary();

// *****************************
});
*/

// _________________________________________________________
// █████████████████████████████████████████████████████████
// ██ Génération automatique de la clé de tri             ██

function getKey(mots)
{
return mots
.replace(/[ÈÉÊËĒĔĖĘĚȄȆȨЀЁЕΕΈɆ]/g,"E")
.replace(/[ÀÁÂÃÄÅĀĂĄǍǞǠǺȀȂȦȺΑΆАӐӒ]/g,"A")
.replace(/[ÆǼǢӔ]/g,"Ae")
.replace(/[ÑŃǸŅŇΝɴ]/g,"N")
.replace(/[ÌÍÎÏĨĪĬĮİΐΪ]/g,"I")
.replace(/[ÒÓÔÕÖØŌŎŐƠǑǪǬȌȎȪȬȮȰΌΟОӦǾ]/g,"O")
.replace(/[ÙÚÛÜŨŪŬŮŰŲƯǓǕǗǙǛȔȖ]/g,"U")
.replace(/[ÝŶŸȲɎΫӮӰӲ]/g,"Y")
.replace(/[ĜĞĠĢƓǤǦǴ]/g,"G")
.replace(/[Œɶ]/g,"Oe")
.replace(/[DZDzDŽDž]/g,"Dz")
.replace(/[IJ]/g,"Ij")
.replace(/[NJNj]/g,"Nj")
.replace(/[LJLj]/g,"Lj")
.replace(/[ÐĎĐ]/g,"D")
.replace(/[ÇĆĈĊČ]/g,"C")
.replace(/[Ĵ]/g,"J")

.replace(/[ĵ]/g,"j")
.replace(/[ij]/g,"ij")
.replace(/[nj]/g,"nj")
.replace(/[lj]/g,"lj")
.replace(/[dzʣʤʥdž]/g,"dz")
.replace(/[æǣǽӕ]/g,"ae")
.replace(/[œ]/g,"oe")
.replace(/[èéêëēĕėęěȅȇȩе]/g,"e")
.replace(/[àáâãäåāăąǟǡǻȁȃɐɑɒ]/g,"a")
.replace(/[ìíîïĩīĭįıȉȋ]/g,"i")
.replace(/[òóôõöøōŏőǫǭǒǿȍȏȱȫȭȯ]/g,"o")
.replace(/[ùúûüũūŭůűųǔǖǘǚǜȕȗ]/g,"u")
.replace(/[çćĉċč]/g,"c")
.replace(/[ðđď]/g,"d")
.replace(/[ýÿŷɏӯӱӳ]/g,"y")
.replace(/[ĝğġģǥǧǵɡɠ]/g,"g")
.replace(/[ñǹńņňʼn]/g,"n");
}

function getSortKey(mots, def)
{
  var k = getKey(mots);
  if (k==mots) return (def?"|"+def:"");
  return "|"+k;
}

function getPageSortKey(pagename)
{
  var i = pagename.lastIndexOf('/');
  if (i>=0)
    return getSortKey(pagename.substring(i+1),"{"+"{SUBPAGENAME}"+"}");
  else return getSortKey(pagename,"{"+"{PAGENAME}"+"}");
}

// Remplace les clés de tri pour les catégories sélectionnées
function autoSortKeyReplace(s,args)
{
    var j=0;
    for(;;)
    {
        var i=s.indexOf("[[Catégorie:",j);
        var k=s.indexOf("[[Category:",j);
        if (i<0 ||(k>=0 && k<i)) i=k;
        if (i<0) break;
        k = s.indexOf(":",j)+1;
        var m = s.indexOf("]]",k);
        if (m<0) break;
        var p = s.indexOf("|",k); if (p>=m) p=-1;
        var psk = getPageSortKey(wgTitle);
        var cpsk = (p<0)?"":s.substring(p,m);
        if (cpsk!=psk)
        {
            s=s.substring(0,p<0?m:p)+psk+s.substring(m);
            j=(p<0?m:p)+2+psk.length;
        }
        else j = m+2;
    }
    return [ s,0,s.length ];
}

function autoSortKey()
{
replaceSelection(autoSortKeyReplace);
}

// _________________________________________________________
// █████████████████████████████████████████████████████████
// ██ Boîte de liens                                      ██

/* Liens utiles */

function LinkSubpages(title)
{return "Special:Prefixindex/"+title+"/";}

function ThisLinkSubpages()
{return LinkSubpages(wgPageName);}

function LinkUserRename()
{
var i=wgTitle.indexOf('/');
return ["Spécial:Renommer utilisateur","oldusername="+encodeURIComponent((i<0)?wgTitle:wgTitle.substring(0,i))];
}

function LinkUserRights()
{
var i=wgTitle.indexOf('/');
return ["Spécial:Permissions","user="+encodeURIComponent((i<0)?wgTitle:wgTitle.substring(0,i))];
}

/* ------ */

// _________________________________________________________
// ██ Boîte Spécial :

var lb = createLinkbox("pagelinks","Spécial","pgl");
if ((wgNamespaceNumber==2)||(wgNamespaceNumber==3))
{
  lb.addWikiLink("user_rename", "Renommer l'utilisateur", "Changer le nom de l'utilisateur", LinkUserRename());
  lb.addWikiLink("user_rights", "Droits de l'utilisateur", "Changer les droits de l'utilisateur", LinkUserRights());
}
lb.addWikiLink("page_rename", "Renommer la page", "Changer le nom de la page", "Spécial:Renommer_une_page/"+wgPageName);
lb.addWikiLink("subpages", "Sous-pages", "Liste des sous-pages", ThisLinkSubpages());
lb.addWikiLink("special", "Pages spéciales", "Les pages spéciales", "Special:Specialpages");
lb.addWikiLink("import", "Importer pages", "Importer des pages d'autres projets", "Special:Import");
lb.addWikiLink("modeltest", "Test de modèles", "Tester l'expansion d'un modèle", "Special:ExpandTemplates");
lb.addWikiLink("filtreaa", "Filtre anti-abus", "Accéder aux filtres anti-abus", "Spécial:Filtre antiabus");

// _________________________________________________________
// ██ Boîte Mediawiki :

lb = createLinkbox("mediawiki","MediaWiki","pgmw");
lb.addWikiLink("version", "Version", "Information sur la version courante", "Spécial:Version");
lb.addLink("all_messages", "Tous les messages", "par page de 5000 messages", localurl("Spécial:Messages système","prefix=","lang=fr","limit=5000"));
lb.addWikiLink("gadgets", "Gadgets", "Tous les gadgets", "Spécial:Gadgets");
lb.addWikiLink("gadgetsdef", "Définir gadgets", "Définitions des gadgets", "MediaWiki:Gadgets-definition");
lb.addWikiLink("gadgetspref", "Utiliser gadgets", "Liste des gadgets utilisés", "Spécial:Préférences#mw-prefsection-gadgets");