Aller au contenu

Utilisateur:Arh'lupia/GlobalManager.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) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
//  {{Catégorisation JS|GlobalManager}}  <pre><nowiki>
/***************************************************************************************************************
 *  GLOBAL-MANAGER                                                                                             *
 * Pour installer et configurer ce gestionnaire : Voir [[Discussion utilisateur:Dr Brains/GlobalManager.js]]   *
 ***************************************************************************************************************/
 
////////////////////////////// PARTIE PERSONNALISABLE (1/8) : DÉFINITION DU SKIN ACTIF ET DES SKINS SUPPORTÉS ////////////////////////////////////////////////////////////////////// 
 
var UserNamespace= mw.config.get('wgFormattedNamespaces')[2].replace(/ /g,"_");
 
if( skin == "monobook" ){
     var cspSkin = "monobook";
     var cspSkinalt1 = "modern";
     var cspSkinalt2 = "vector";
     var cspSkinalt3 = "cologneblue";
     var cspSkinalt4 = "chick";
     var cspSkinalt5 = "simple";
     var cspSkinalt6 = "nostalgia";
     var cspSkinalt7 = "standard";
     var cspSkinalt8 = "myskin";
}
if( skin == "modern" ){
     var cspSkin = "modern";
     var cspSkinalt1 = "monobook";
     var cspSkinalt2 = "vector";
     var cspSkinalt3 = "cologneblue";
     var cspSkinalt4 = "chick";
     var cspSkinalt5 = "simple";
     var cspSkinalt6 = "nostalgia";
     var cspSkinalt7 = "standard";
     var cspSkinalt8 = "myskin";
}
if( skin == "vector" ){
     var cspSkin = "vector";
     var cspSkinalt1 = "monobook";
     var cspSkinalt2 = "modern";
     var cspSkinalt3 = "cologneblue";
     var cspSkinalt4 = "chick";
     var cspSkinalt5 = "simple";
     var cspSkinalt6 = "nostalgia";
     var cspSkinalt7 = "standard";
     var cspSkinalt8 = "myskin";
}
if( skin == "cologneblue" ){
     var cspSkin = "cologneblue";
     var cspSkinalt1 = "monobook";
     var cspSkinalt2 = "modern";
     var cspSkinalt3 = "vector";
     var cspSkinalt4 = "chick";
     var cspSkinalt5 = "simple";
     var cspSkinalt6 = "nostalgia";
     var cspSkinalt7 = "standard";
     var cspSkinalt8 = "myskin";
}
if( skin == "chick" ){
     var cspSkin = "chick";
     var cspSkinalt1 = "monobook";
     var cspSkinalt2 = "modern";
     var cspSkinalt3 = "vector";
     var cspSkinalt4 = "cologneblue";
     var cspSkinalt5 = "simple";
     var cspSkinalt6 = "nostalgia";
     var cspSkinalt7 = "standard";
     var cspSkinalt8 = "myskin";
}
if( skin == "nostalgia" ){
     var cspSkin = "nostalgia";
     var cspSkinalt1 = "monobook";
     var cspSkinalt2 = "modern";
     var cspSkinalt3 = "vector";
     var cspSkinalt4 = "cologneblue";
     var cspSkinalt5 = "chick";
     var cspSkinalt6 = "simple";
     var cspSkinalt7 = "standard";
     var cspSkinalt8 = "myskin";
}
if( skin == "standard" ){
     var cspSkin = "standard";
     var cspSkinalt1 = "monobook";
     var cspSkinalt2 = "modern";
     var cspSkinalt3 = "vector";
     var cspSkinalt4 = "cologneblue";
     var cspSkinalt5 = "chick";
     var cspSkinalt6 = "simple";
     var cspSkinalt7 = "nostalgia";
     var cspSkinalt8 = "myskin";
}
if( skin == "myskin" ){
     var cspSkin = "myskin";
     var cspSkinalt1 = "monobook";
     var cspSkinalt2 = "modern";
     var cspSkinalt3 = "vector";
     var cspSkinalt4 = "cologneblue";
     var cspSkinalt5 = "chick";
     var cspSkinalt6 = "simple";
     var cspSkinalt7 = "nostalgia";
     var cspSkinalt8 = "standard";
}
if( skin == "simple" ){
     var cspSkin = "simple";
     var cspSkinalt1 = "monobook";
     var cspSkinalt2 = "modern";
     var cspSkinalt3 = "vector";
     var cspSkinalt4 = "cologneblue";
     var cspSkinalt5 = "chick";
     var cspSkinalt6 = "myskin";
     var cspSkinalt7 = "nostalgia";
     var cspSkinalt8 = "standard";
}
var cspEntryPage = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkin + '.js';                             //Pages JS où le script s'active
var cspEntryPagealt1 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt1 + '.js';  
var cspEntryPagealt2 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt2 + '.js';
var cspEntryPagealt3 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt3 + '.js';
var cspEntryPagealt4 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt4 + '.js';
var cspEntryPagealt5 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt5 + '.js';
var cspEntryPagealt6 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt6 + '.js';
var cspEntryPagealt7 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt7 + '.js';
var cspEntryPagealt8 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt8 + '.js';
 
var cspCssPage = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkin + '.css';                              //Pages CSS où le script s'active
var cspCssPagealt1 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt1 + '.css';  
var cspCssPagealt2 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt2 + '.css';
var cspCssPagealt3 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt3 + '.css';
var cspCssPagealt4 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt4 + '.css';
var cspCssPagealt5 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt5 + '.css';
var cspCssPagealt6 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt6 + '.css';
var cspCssPagealt7 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt7 + '.css';
var cspCssPagealt8 = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' + cspSkinalt8 + '.css';
 
 
////////////////////////////// PARTIE PERSONNALISABLE (2/8) : PARAMÈTRES ///////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
//Adresses du site d'acceuil: 
var SiteURL = mw.config.get('wgServer') + '/wiki/'  ;
//* Adresse normale
var SiteURLbis = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' ;
//* Adresse en cours d'action
 
//Adresses du site où se trouve les scripts:
var SiteLangFrom = ':fr:' ;
var SiteURLFrom = 'http://fr.wikipedia.org/wiki/' ;
//* Adresse normale
var SiteURLFrombis = 'http://fr.wikipedia.org/w/index.php?title=' ; 
//* Adresse en cours d'action
 
var cspCssRepos = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' ;
//Répertoire par défaut des pages personnelles css
var cspCssLinks = SiteURLFrom + cspCssRepos ;
//Url du répertoire par défaut des pages personnelles css
var cspScriptRepos = UserNamespace+':' + mw.config.get('wgUserName').replace(/ /g,"_") + '/' ;
//Répertoire par défaut des scripts personnels
var cspScriptLinks = SiteURLFrom + cspScriptRepos ;
//Url du répertoire par défaut
var cspGadgetsRepos = 'MediaWiki:Gadget-' ;
//Répertoire des gadgets
var cspGadgetsLinks = SiteURLFrom + cspGadgetsRepos ;
//Url du répertoire des gadgets
 
var cspMainScript = 'Utilisateur:' + mw.config.get('wgUserName').replace(/ /g,"_") + '/GlobalManager.js' ;
//Page où est copié le code du manager
 
 
var cspSummary = 'Mise &agrave; jour avec [[' + SiteLangFrom + cspMainScript + '|GlobalManager]]' ;
//Résumé de modification JS
var cspCssSummary = 'Mise &agrave; jour avec [[' + SiteLangFrom + cspMainScript + '|GlobalManager]]' ;
//Résumé de modification CSS
 
 
var cspCssStartComment = '/\* jncsp-start';                                                                          
//Commentaire inséré au début du .css
var cspCssStartComment2 = ' La section ci-dessous est produite par le script : [' + SiteURLFrom + cspMainScript + ' ext] \*/' ;
//Commentaire supplémentaire inséré au début du .css 
var cspCssConfigComment = '/\* jncsp-config' ;
//Commentaire de configuration du .css
var cspCssEndComment = '/\* jncsp-end \*/' ;
 
//Commentaire inséré à la fin du .css
 
var cspStartComment = '// jncsp-start' ;
//Commentaire inséré au début du .js
var cspStartComment2 = ' La section ci-dessous est produite par le script : [' + SiteURLFrom + cspMainScript + ' ext]' ;
//Commentaire supplémentaire inséré au début du .js 
var cspConfigComment = '// jncsp-config' ;
//Commentaire de configuration du .js
var cspEndComment = '// jncsp-end' ;
//Commentaire inséré à la fin du .js
 
 
var SautLigne = true ;
// false pour ne pas revenir à la ligne à chaque coche
 
var ID_Div = "siteNotice" ;
// id du div remplacé par le script
var Manager_Div = "mw-GlobalManager" ;
// id du <fieldset> créé par le script
 
 
////////////////////////////// PARTIE PERSONNALISABLE (3/8) : DÉFINITION CSS /////////////////////////////////////////////////////////////////////////////////////////////////////////////
var cspCssFragments = [
 
/**********************************************************************************************************************************************
 *   id   = un identifiant unique, généralement le nom de la fonction principale                                                              *
 *   type = 0 (défaut) : inclusion d'une page .css                                                                                            *
 *          1 : le contenu de la variable page est recopié dans la page css                                                                   *
 *          2 : Titre de chapitre niveau 2                                                                                                    *
 *          3 : Titre de chapitre niveau 3                                                                                                    *
 *          4 : Titre de chapitre niveau 4                                                                                                    *
 *          5 : Titre de chapitre niveau 5                                                                                                    *
 *          6 : Titre de chapitre niveau 6                                                                                                    *
 *          8 : Texte normal (HTML)                                                                                                           *
 *   page = nom de la page où le css à inclure est stocké                                                                                     *
 *   rev  = numéro de révision de la page (si inclusion d'une page archivée)                                                                  *
 *   desc = description du css                                                                                                                *
 **********************************************************************************************************************************************/
 
{ desc: 'Comment ça marche ?', type: 2 },
 
{ desc: 'Insertion d\'une page personnelle', type: 3 },
 
  { id: 'setup-BacASable', 
    page: cspCssRepos + 'BacASable.css', 
    type: 0, 
    desc: '<a href=' + cspCssLinks + 'BacASable.css>BacASable</a>' 
  },
 
  { id: 'setup-MagicSidebox', 
    page: 'Utilisateur:Dr_Brains/MagicSidebox.css', 
    type: 0, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/MagicSidebox.css>MagicSidebox</a>' 
  },
 
  { id: 'setup-MenuActions', 
    page: 'Utilisateur:Dr_Brains/MenuActions.css', 
    type: 0, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/MenuActions.css>MenuActions</a>' 
  },
 
{ desc: 'Composition', type: 3 },
 
{ desc: 'Liens', type: 4 },
 
  { id: 'setup-Liens-Roses', 
    page: 'a {text-decoration: none;color:#ff00ff;background: none;}', 
    type: 1, 
    desc: 'Rose  '
  },
  { id: 'setup-Liens-Rouges', 
    page: 'a {text-decoration: none;color:#ff0000;background: none;}', 
    type: 1, 
    desc: 'Rouge  '
  },
  { id: 'setup-Liens-Bleus', 
    page: 'a {text-decoration: none;color:#0000ff;background: none;}', 
    type: 1, 
    desc: 'Bleu  '
  },
  { id: 'setup-Liens-Verts', 
    page: 'a {text-decoration: none;color:#00ff00;background: none;}', 
    type: 1, 
    desc: 'Vert  '
  },
  { id: 'setup-Liens-Noirs', 
    page: 'a {text-decoration: none;color:#000000;background: none;}', 
    type: 1, 
    desc: 'Noir  '
  },
 
{ desc: 'Liens visités', type: 4 },
 
  { id: 'setup-Liens-Visités-Roses', 
    page: 'a:visited {color: #ff00ff;}', 
    type: 1, 
    desc: 'Rose  '
  },
  { id: 'setup-Liens-Visités-Rouges', 
    page: 'a:visited {color: #ff0000;}', 
    type: 1, 
    desc: 'Rouge  '
  },
  { id: 'setup-Liens-Visités-Bleus', 
    page: 'a:visited {color: #0000ff;}', 
    type: 1, 
    desc: 'Bleu  '
  },
  { id: 'setup-Liens-Visités-Verts', 
    page: 'a:visited {color: #00ff00;}', 
    type: 1, 
    desc: 'Vert  '
  },
  { id: 'setup-Liens-Visités-Noirs', 
    page: 'a:visited {color: #ffffff;}', 
    type: 1, 
    desc: 'Noir  '
  },
 
{ desc: 'Liens actif', type: 4 },
 
  { id: 'setup-Liens-Actifs-Roses', 
    page: 'a:active {color: #ff00ff;}', 
    type: 1, 
    desc: 'Rose  '
  },
  { id: 'setup-LiensActifs-Rouges', 
    page: 'a:active {color: #ff0000;}', 
    type: 1, 
    desc: 'Rouge  '
  },
  { id: 'setup-Liens-Actifs-Bleus', 
    page: 'a:active {color: #0000ff;}', 
    type: 1, 
    desc: 'Bleu  '
  },
  { id: 'setup-Liens-Actifs-Verts', 
    page: 'a:active {color: #00ff00;}', 
    type: 1, 
    desc: 'Vert  '
  },
  { id: 'setup-Liens-Actifs-Noirs', 
    page: 'a:active {color: #ffffff;}', 
    type: 1, 
    desc: 'Noir  '
  },
 
 
];
////////////////////////////// PARTIE PERSONNALISABLE (4/8) : DÉFINITION JS /////////////////////////////////////////////////////////////////////////////////////////////////////////////
var cspFragments = [
 
/**********************************************************************************************************************************************
 *   id   = un identifiant unique, généralement le nom de la fonction principale                                                              *
 *   type = 0 (défaut) : Le script sera entièrement recopié dans la page. (Peut se révéler problématique avec certains caractères spéciaux.)  *
 *          1 : Le script sera inclus par un élément <script> (solution préférable)                                                           *
 *          2 : Titre de chapitre niveau 2                                                                                                    *
 *          3 : Titre de chapitre niveau 3                                                                                                    *
 *          4 : Titre de chapitre niveau 4                                                                                                    *
 *          5 : Titre de chapitre niveau 5                                                                                                    *
 *          6 : Titre de chapitre niveau 6                                                                                                    *
 *          8 : Texte normal (HTML)                                                                                                           *
 *   page = nom de la page où le script à inclure est stocké                                                                                  *
 *   rev  = numéro de révision de la page (si inclusion d'une page archivée)                                                                  *
 *   deps = liste des dépendances, à ignorer si il n'y en a pas                                                                               *
 *   desc = description du script                                                                                                             *
 **********************************************************************************************************************************************/
 
 
{ desc: 'Bots', type: 4 }, ///////////////////////////////////////
 
  { id: 'setup-PageAuHasard', 
    page: 'Utilisateur:Dr_Brains/PageAuHasard.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/PageAuHasard.js>PageAuHasard</a>' 
+' : Création automatique d\'un modèle de lien "page au hasard" à partir des pages d\'une catégorie.'
  },
 
  { id: 'setup-LumiereSur', 
    page: 'Utilisateur:Dr_Brains/LumiereSur.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/LumiereSur.js>LumiereSur</a>' 
+' : Création automatique d\'un modèle de page "Lumière sur..." à partir des pages d\'une catégorie.'
  },
 
  { id: 'setup-VerifEval', 
    page: 'Utilisateur:Dr_Brains/VerifEval.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/VerifEval.js>VerifEval</a>' 
+' : Création automatique d\'un tableau triable de l\'évaluation des pages d\'une catégorie.'
  },
 
  { id: 'setup-MaintenanceCategorie', 
    page: 'Utilisateur:Dr_Brains/MaintenanceCategorie.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/MaintenanceCategorie.js>MaintenanceCategorie</a>' 
+' : Création automatique d\'un tableau triable avec diverses informations sur les pages d\'une catégorie.'
  },
 
  { id: 'setup-ImagesUtilisees', 
    page: 'Utilisateur:Dr_Brains/ImagesUtilisees.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/ImagesUtilisees.js>ImagesUtilisees</a>' 
+' : Création automatique d\'un tableau triable des images utilisées par les pages d\'une catégorie.'
  },
 
  { id: 'setup-ArticlesRecents', 
    page: 'Utilisateur:Dr_Brains/ArticlesRecents.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/ArticlesRecents.js>ArticlesRecents</a>' 
+' : Création automatique d\'un tableau triable des dernières modifications des pages d\'une catégorie.'
  },
 
  { id: 'setup-ArticlesManquants', 
    page: 'Utilisateur:Dr_Brains/ArticlesManquants.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/ArticlesManquants.js>ArticlesManquants</a>' 
+' : Création automatique d\'un tableau triable des pages demandées à partir d\'une catégorie.'
  },
 
  { id: 'setup-BandeauxPortailsCategorieMulti', 
    page: 'Utilisateur:Dr_Brains/BandeauxPortailsCategorieMulti.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/BandeauxPortailsCategorieMulti.js>BandeauxPortailsCategorieMulti</a>' 
+' : Ajout/retrait/modification automatique de bandeaux de portail aux pages d\'une catégorie et de ses sous-catégories.'
  },
 
  { id: 'setup-BandeauxPortailsBOT', 
    page: 'Utilisateur:Dr_Brains/BandeauxPortailsBOT.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/BandeauxPortailsBOT.js>BandeauxPortailsBOT</a>'
+ ' : Ajout ou retrait rapide de bandeaux de portails. Script spécifique pour bot.'
  },
 
  { id: 'setup-BandeauxPortailsAutoRedirect', 
    page: 'Utilisateur:Dr_Brains/BandeauxPortailsAutoRedirect.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/BandeauxPortailsAutoRedirect.js>BandeauxPortailsAutoRedirect</a>'
+ ' : Redirection automatique vers <a href="'+mw.config.get('wgServer') + mw.config.get('wgArticlePath').split('$1').join('Special:Randompage') +'">Page au Hasard</a> pour trouver des pages sans bandeaux de portail.'
  },
 
{ desc: 'Scripts opérationnels', type: 4 }, ///////////////////////////////////////
 
  { id: 'setup-Arrondis', 
    page: 'Utilisateur:Dr_Brains/Arrondis.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Arrondis.js>Arrondis</a>' 
+' : Arrondit les angles de l\'interface.'
  },
 
  { id: 'setup-GlobalWatchlist', 
    page: 'Utilisateur:Dr_Brains/GlobalWatchlist.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/GlobalWatchlist.js>GlobalWatchlist</a>' 
+ ' : Liste de suivi globale.'
  },
 
  { id: 'setup-BlocNote', 
    page: 'Utilisateur:Dr_Brains/BlocNote.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/BlocNote.js>BlocNote</a>' 
+' : Ajout d\'un ou plusieurs bloc-notes sur les bords de la page.'
  },
 
  { id: 'setup-CollapseSidebox', 
    page: 'Utilisateur:Dr_Brains/CollapseSidebox.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/CollapseSidebox.js>CollapseSidebox</a>'
+ ' : Permet d\'enrouler les panneaux de la barre de navigation gauche.' 
  },
 
  { id: 'setup-wikEd', 
    page: 'Utilisateur:Dr_Brains/wikEd.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/wikEd.js>wikEd</a>'
+ ' : Édition améliorée.' 
  },
 
  { id: 'setup-Edit', 
    page: 'Utilisateur:Dr_Brains/Edit.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Edit.js>Edit</a>' 
+ ' : Divise la zone d\'édition en plusieurs parties.'
  },
 
  { id: 'setup-BandeauxEbauches', 
    page: 'Utilisateur:Dr_Brains/BandeauxEbauches.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/BandeauxEbauches.js>BandeauxEbauches</a>'
+ ' : Ajout/retrait/modification rapide de bandeaux d\'ébauche.'
  },
 
  { id: 'setup-BandeauxPortails', 
    page: 'Utilisateur:Dr_Brains/BandeauxPortails.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/BandeauxPortails.js>BandeauxPortails</a>'
+ ' : Ajout/retrait/modification rapide de bandeaux de portails.'
  },
 
  { id: 'setup-HotCatsPerso', 
    page: 'Utilisateur:Dr_Brains/HotCatsPerso.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/HotCatsPerso.js>HotCatsPerso</a>'
+ ' : Ajout ou retrait rapide de catégories <sup>(<a href=http://fr.wikipedia.org/wiki/MediaWiki:Gadget-HotCats.js>Gadget</a>)</sup>.'
  },
 
  { id: 'setup-MenuClicDroit_Dev', 
    page: 'Utilisateur:Dr_Brains/MenuClicDroit_Dev.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/MenuClicDroit_Dev.js>MenuClicDroit_Dev</a>' 
  },
 
  { id: 'setup-SpecialPagePreview', 
    page: 'Utilisateur:Dr_Brains/SpecialPagePreview.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/SpecialPagePreview.js>SpecialPagePreview</a>' 
+ ' : Permet de prévisualiser chaque entrée de diverses <a href=http://fr.wikipedia.org/wiki/Special:Specialpages>Pages spéciales</a>.'
  },
 
  { id: 'setup-MessageWatchlist', 
    page: 'Utilisateur:Dr_Brains/MessageWatchlist.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/MessageWatchlist.js>MessageWatchlist</a>' 
+ ' : Affiche la dernière modification de la liste de suivi en haut de la page.'
  },
 
  { id: 'setup-ListeSuivi', 
    page: 'Utilisateur:Dr_Brains/ListeSuivi.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/ListeSuivi.js>ListeSuivi</a>' 
+ ' : Permet de sélectionner facilement les pages à supprimer de la liste de suivi.'
  },
 
  { id: 'setup-NukeDeluxe', 
    page: 'Utilisateur:Dr_Brains/NukeDeluxe.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/NukeDeluxe.js>NukeDeluxe</a>' 
+ ' : Permet de sélectionner/dé-sélectionner facilement les pages à supprimer de la page <a href="'+mw.config.get('wgServer')+'/wiki/Spécial:Nuke">Spécial:Nuke</a>.'
  },
 
  { id: 'setup-UndeleteDeluxe', 
    page: 'Utilisateur:Dr_Brains/UndeleteDeluxe.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/UndeleteDeluxe.js>UndeleteDeluxe</a>'
+ ' : Permet de sélectionner/dé-sélectionner facilement les versions à restaurer.' 
  },
 
  { id: 'setup-MoveDeluxe', 
    page: 'Utilisateur:Dr_Brains/MoveDeluxe.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/MoveDeluxe.js>MoveDeluxe</a>'
+ ' : Améliore la page spéciale de renommage : pages liées et résumés de renommage prédéfinis.' 
  },
 
  { id: 'setup-DoubleActions', 
    page: 'Utilisateur:Dr_Brains/DoubleActions.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/DoubleActions.js>DoubleActions</a>'
+ ' : Ajoute un onglet \"Modifier\" et \"Historique\" pour la page associée.'
  },
 
  { id: 'setup-MenuActions', 
    page: 'Utilisateur:Dr_Brains/MenuActions.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/MenuActions.js>MenuActions</a>'
+' : Transforme les onglets en menus déroulants.'
  },
 
  { id: 'setup-MenuClicDroit', 
    page: 'Utilisateur:Dr_Brains/MenuClicDroit.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/MenuClicDroit.js>MenuClicDroit</a>'
+ ' : Procure un menu contextuel complet (clic droit).' 
  },
 
  { id: 'setup-Remplace', 
    page: 'Utilisateur:Dr_Brains/Remplace.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Remplace.js>Remplace</a>' 
+' : Ajout d\'un bouton pour remplacer une chaîne de caractère par une autre.'
  },
 
  { id: 'setup-AcaiToolbar', 
    page: 'Utilisateur:Dr_Brains/AcaiToolbar.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/AcaiToolbar.js>AcaiToolbar</a>'
+' : Ajoute l\'ancienne barre d\'outils au\-dessus de la nouvelle (bêta Açai).'
  },
 
  { id: 'setup-FixSidebar', 
    page: 'Utilisateur:Dr_Brains/FixSidebar.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/FixSidebar.js>FixSidebar</a>'
+ ' : Fixe la position de la barre de navigation gauche, des onglets et des liens personnels.' 
  },
 
  { id: 'setup-MagicSidebox', 
    page: 'Utilisateur:Dr_Brains/MagicSidebox.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/MagicSidebox.js>MagicSidebox</a>'
+ ' : Panneaux de la barre de navigation gauche enroulables et réorganisables (skin Monobook).' 
  },
 
  { id: 'setup-VectorMagicSidebox', 
    page: 'Utilisateur:Dr_Brains/VectorMagicSidebox.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/VectorMagicSidebox.js>VectorMagicSidebox</a>' 
+ ' : Panneaux de la barre de navigation gauche enroulables et réorganisables (skin Vector).' 
  },
 
  { id: 'setup-SysopPortlet', 
    page: 'Utilisateur:Dr_Brains/SysopPortlet.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/SysopPortlet.js>SysopPortlet</a>'
+' : Ajoute un panneau avec des liens utiles pour l\'administration.' 
  },
 
  { id: 'setup-TranslatePortlet', 
    page: 'Utilisateur:Dr_Brains/TranslatePortlet.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/TranslatePortlet.js>TranslatePortlet</a>'
+' : Ajoute un panneau dans la barre de gauche pour traduire un terme en différentes langues.' 
  },
 
  { id: 'setup-SuiviRC', 
    page: 'Utilisateur:Dr_Brains/SuiviRC.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/SuiviRC.js>SuiviRC</a>'
+' : Suivi dans un panneau de la barre de gauche des articles les plus modifiés actuellement (mise à jour à intervalle régulier (100 secondes).' 
  },
 
  { id: 'setup-Evaluation', 
    page: 'Utilisateur:Dr_Brains/Evaluation.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Evaluation.js>Evaluation</a>'
+' : Permet d\'évaluer rapidement un article.' 
  },
 
  { id: 'setup-SourceCliquable', 
    page: 'Utilisateur:Dr_Brains/SourceCliquable.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/SourceCliquable.js>SourceCliquable</a>' 
+ ' : Rend les liens cliquables à l\intérieur d\'une balise source.'
  },
 
  { id: 'setup-BandeauxFaciles', 
    page: 'Utilisateur:Dr_Brains/BandeauxFaciles.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/BandeauxFaciles.js>BandeauxFaciles</a>' 
+ ' : Permet d\'ajouter des bandeaux au début d\'une page ou d\'une section.'
  },
 
  { id: 'setup-Scroll', 
    page: 'Utilisateur:Dr_Brains/Scroll.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Scroll.js>Scroll</a>'
+ ' : Ajout de flèches pour atteindre le sommet ou le bas de la page.'
  },
 
  { id: 'setup-TestExist', 
    page: 'Utilisateur:Dr_Brains/TestExist.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/TestExist.js>TestExist</a>' 
+ ' : Ajout en dessous de la zone de recherche d\'un champ pour tester l\'existence d\'une page.'
  },
 
  { id: 'setup-Popups', 
    page: 'Utilisateur:Dr_Brains/Popups.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Popups.js>Popups</a>' 
+ ' : Ouverture de pop-up lors du passage de la souris au dessus d\'un lien.'
  },
 
  { id: 'setup-ReferencesPopUp', 
    page: 'Utilisateur:Dr_Brains/ReferencesPopUp.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/ReferencesPopUp.js>ReferencesPopUp</a>'
+ ' : Références en pop-up au survol de la souris.' 
  },
 
  { id: 'setup-Consult', 
    page: 'Utilisateur:Dr_Brains/Consult.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Consult.js>Consult</a>'
+ ' : Ajout d\'un compteur de consultation de la page courante.' 
  },
 
   { id: 'setup-SuiviCat', 
    page: 'Utilisateur:Dr_Brains/SuiviCat.js', 
    type: 1,
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/SuiviCat.js>SuiviCat</a>'
+ ' : Permet le suivi d\'une ou plusieurs catégories.' 
  },
 
  { id: 'setup-myName', 
    page: 'Utilisateur:Dr_Brains/myName.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/myName.js>myName</a>'
+ ' : Permet de surligner son nom d\'utilisateur.' 
  },
 
  { id: 'setup-PageSize', 
    page: 'Utilisateur:Dr_Brains/PageSize.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/PageSize.js>PageSize</a>'
+ ' : Ajoute dans le footer la taille de la page courante.' 
  },
 
  { id: 'setup-LiveRC', 
    page: 'User:EDUCA33E/LiveRC.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/User:EDUCA33E/LiveRC>LiveRC</a>' 
+ ' : Modifications récentes en temps réel.'
  },
 
  { id: 'setup-demineur', 
    page: 'Utilisateur:Dr_Brains/demineur.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Delhovlyn/Démineur>Démineur</a>'
+ ' : Jeu du démineur.' 
  },
 
  { id: 'setup-WindowPatrol', 
    page: 'Utilisateur:Dr_Brains/WindowPatrol.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/WindowPatrol.js>WindowPatrol</a>'
+ ' : Patrouille dans une nouvelle fenêtre.' 
  },
 
  { id: 'setup-SkinManager', 
    page: 'Utilisateur:Dr_Brains/SkinManager.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/SkinManager.js>SkinManager</a>'
+ ' : Divers gadgets concernant l\'affichage.' 
  },
 
  { id: 'setup-ColorSection', 
    page: 'Utilisateur:Dr_Brains/ColorSection.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/ColorSection.js>ColorSection</a>'
+ ' : Colore la section visée lors du survol de la souris sur un lien de section \"modifier\".' 
  },
 
  { id: 'setup-Video', 
    page: 'Utilisateur:Dr_Brains/Video.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Video.js>Video</a>'
+ ' : Remplace le logo par un clip vidéo issu de DailyMotion, YouTube ou Google.' 
  },
 
 
{ desc: 'Scripts en Tests', type: 4 },  ///////////////////////////////////////
 
  { id: 'setup-Twinkle', 
    page: 'Utilisateur:Dr_Brains/Twinkle.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Twinkle.js>Twinkle</a>' 
  },
 
  { id: 'setup-BacASable', 
    page: 'Utilisateur:Dr_Brains/BacASable.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/BacASable.js>Bac à Sable</a>' 
  },
 
  { id: 'setup-QuickEdit', 
    page: 'Utilisateur:Dr_Brains/QuickEdit.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/QuickEdit.js>QuickEdit</a>' 
+ ' : Permet d\'éditer la page en sélectionnant simplement du texte.'
  },
 
  { id: 'setup-Jeux', 
    page: 'Utilisateur:Dr_Brains/Jeux.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Jeux.js>Jeux</a>'
+ ' : Jeux WidgetBox. (<a href=http://fr.wikipedia.org/wiki/Utilisateur:'+mw.config.get('wgUserName').replace(/ /g,"_")+'/Jeux>Salle de jeux</a>)' 
  },
 
{ desc: 'Scripts obsolètes ou archivés', type: 4 }, ///////////////////////////////////////
 
  { id: 'setup-FullScreen', 
    page: 'Utilisateur:Dr_Brains/FullScreen.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/FullScreen.js>Fullscreen</a>'
+ ' : Permet de basculer du mode normal au mode plein écran.' 
  },
 
  { id: 'setup-favoris', 
    page: 'Utilisateur:Dr_Brains/favoris.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/favoris.js>favoris</a>'
+ ' : Ajoute une boîte favoris dans la barre de gauche.' 
  }, 
 
  { id: 'setup-CacheLiens', 
    page: 'Utilisateur:Dr_Brains/CacheLiens.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/CacheLiens.js>CacheLiens</a>'
+ ' : Permet de masquer les liens de la page.' 
  },
 
  { id: 'setup-Google', 
    page: 'Utilisateur:Dr_Brains/Google.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Google.js>Google</a>'
+ ' : Ajoute des onglets pour effectuer une recherche Google basée sur la titre de la page courante.' 
  },
 
  { id: 'setup-TailleEdit', 
    page: 'Utilisateur:Dr_Brains/TailleEdit.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/TailleEdit.js>TailleEdit</a>' 
+ ' : Permet de moduler la taille de la zone d\'édition.'
  },
 
  { id: 'setup-Balise', 
    page: 'Utilisateur:Dr_Brains/Balise.js', 
    type: 1, 
    desc: '<a href=http://fr.wikipedia.org/wiki/Utilisateur:Dr_Brains/Balise.js>Balise</a>'
+ ' : Permet d\'insérer n\'importe quelle balise.'
  },
 
];
 
//////////////////////////////////////////////////// FIN DE LA PARTIE PERSONNALISABLE ///////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
// LANCEMENT DU BOUZIN ...
 
$(RunManager);
 
if( 
(
mw.config.get('wgPageName').match( cspEntryPage ) ||
mw.config.get('wgPageName').match( cspEntryPagealt1 )||
mw.config.get('wgPageName').match( cspEntryPagealt2 )||
mw.config.get('wgPageName').match( cspEntryPagealt3 )||
mw.config.get('wgPageName').match( cspEntryPagealt4 )||
mw.config.get('wgPageName').match( cspEntryPagealt5 )||
mw.config.get('wgPageName').match( cspEntryPagealt6 )||
mw.config.get('wgPageName').match( cspEntryPagealt7 )||
mw.config.get('wgPageName').match( cspEntryPagealt8 )
) && mw.config.get('wgAction')=="view" ){
   addOnloadHook(clientSidePreferencesLoadFunction);
} 
if( 
(
mw.config.get('wgPageName').match( cspCssPage ) ||
mw.config.get('wgPageName').match( cspCssPagealt1 )||
mw.config.get('wgPageName').match( cspCssPagealt2 )||
mw.config.get('wgPageName').match( cspCssPagealt3 )||
mw.config.get('wgPageName').match( cspCssPagealt4 )||
mw.config.get('wgPageName').match( cspCssPagealt5 )||
mw.config.get('wgPageName').match( cspCssPagealt6 )||
mw.config.get('wgPageName').match( cspCssPagealt7 )||
mw.config.get('wgPageName').match( cspCssPagealt8 )
) && mw.config.get('wgAction')=="view" ){
   addOnloadHook(CSSclientSidePreferencesLoadFunction);
}
 
function cspCSSGetForm(CSS_oldconfig){
   var f, i, CSS_res;
//////////////////////////////////////// PARTIE PERSONNALISABLE (5/8) : ENTÊTE CSS /////////////////////////////////////////////////////////////////////////////////////////////////////
 
   CSS_res = '<fieldset id="'+Manager_Div+'"><legend><span style="font-size:150%;">Sélectionner les styles à ajouter à la page : <b>' + mw.config.get('wgPageName').replace(/_/g," ") + '</b> '
+ '<sup><small><a href=http://fr.wikipedia.org/wiki/Discussion_Utilisateur:Dr_Brains/GlobalManager.js>(Aide)</a></small></sup></span></legend>'
+ '<table style=\"float:right;clear:right;\">'
+ '<td>'
+ '<div style=\"background:#EEE;\">'
+ '<center><h5><a href=\"http://fr.wikiversity.org/wiki/Cascading_Style_Sheet\">Styles CSS</a></h5></center>'
+ '<div style=\"font-size: 95%;background-color: white;color: black;border-collapse: collapse;border: 1px solid #aaa;padding: 0 .8em .3em .5em;\"><ul>'
+ '<li><b><a href=' + SiteURL + cspCssPage + '>' + cspSkin + '</a></b></li>'
+ '<li><a href=' + SiteURL + cspCssPagealt1 + '>' + cspSkinalt1 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt2 + '>' + cspSkinalt2 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt3 + '>' + cspSkinalt3 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt4 + '>' + cspSkinalt4 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt5 + '>' + cspSkinalt5 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt6 + '>' + cspSkinalt6 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt7 + '>' + cspSkinalt7 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt8 + '>' + cspSkinalt8 + '</a></li>'
+ '</ul></div></div>'
+ '</td>'
+ '<td>'
+ '<div style=\"background:#EEE;\">'
+ '<center><h5><a href=\"http://fr.wikiversity.org/wiki/JavaScript\">Scripts JS</a></h5></center>'
+ '<div style=\"font-size: 95%;background-color: white;color: black;border-collapse: collapse;border: 1px solid #aaa;padding: 0 .8em .3em .5em;\"><ul>'
+ '<li><b><a href=' + SiteURL + cspEntryPage + '>' + cspSkin + '</a></b></li>'
+ '<li><a href=' + SiteURL + cspEntryPagealt1 + '>' + cspSkinalt1 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt2 + '>' + cspSkinalt2 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt3 + '>' + cspSkinalt3 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt4 + '>' + cspSkinalt4 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt5 + '>' + cspSkinalt5 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt6 + '>' + cspSkinalt6 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt7 + '>' + cspSkinalt7 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt8 + '>' + cspSkinalt8 + '</a></li>'
+ '</ul></div></div>'
+ '</td>'
+ '</table>'
+ '<form>\n';
 
//////////////////////////////////////// FIN DE LA PARTIE PERSONNALISABLE ///////////////////////////////////////////////////////////////////////////////////////////////////////////
 
   for (i=0; i<cspCssFragments.length; i++) {
      f = cspCssFragments[i];
      if (!f.desc) continue;
      if (f.type == 2) {
	 if (i != 0) CSS_res += '</p>\n';
	 CSS_res += '<h2><span class="mw-headline">' + f.desc
	    + '</span></h2>\n'
	    + '<p>\n';
      } else {
         if (f.type == 3) {
	    if (i != 0) CSS_res += '</p>\n';
	       CSS_res += '<h3><span class="mw-headline">' + f.desc
	       + '</span></h3>\n'
	       + '<p>\n';
         } else {
            if (f.type == 4) {
	       if (i != 0) CSS_res += '</p>\n';
	          CSS_res += '<h4><span class="mw-headline">' + f.desc
	          + '</span></h4>\n'
	          + '<p>\n';
            } else {
               if (f.type == 5) {
	          if (i != 0) CSS_res += '</p>\n';
	             CSS_res += '<h5><span class="mw-headline">' + f.desc
	             + '</span></h5>\n'
	             + '<p>\n';
               } else {
                  if (f.type == 6) {
	             if (i != 0) CSS_res += '</p>\n';
	                CSS_res += '<h6><span class="mw-headline">' + f.desc
	                + '</span></h6>\n'
	                + '<p>\n';
                  } else {
                     if (f.type == 8) {
	                if (i != 0) CSS_res += '</p>\n';
	                   CSS_res +=  f.desc + '<p>\n';
                     } else {
                        if (f.type == 1) {
	                   CSS_res += '<input type="checkbox" name="' + f.id + '" ';
	                   if (CSS_oldconfig.indexOf(f.id) != -1)
	                      CSS_res += 'checked ';
	                      CSS_res += '/>&nbsp;' + f.desc + '\n';
                              if(SautLigne)CSS_res += '<br/>';
                        } else {
	                   CSS_res += '<input type="checkbox" name="' + f.id + '" ';
	                   if (CSS_oldconfig.indexOf(f.id) != -1)
	                      CSS_res += 'checked ';
	                      CSS_res += '/>&nbsp;' + f.desc + '<br/>\n';
                        }
                     }
                  }
               }
            }
         }
      }
   }
if ( mw.config.get('wgPageName').match( cspMainScript )){
   CSS_res += '<br /><br /><input type="button" onclick="window.location.reload();" value="<Générer le style> Masquer le menu" /></p>\n'
      + '</form></fieldset>\n';
} else {
   CSS_res += '<br /><br /><input type="button" onclick="cspCSSProcessForm();" value="Générer le style" /></p>\n'
      + '</form></fieldset>\n';
}
   return CSS_res;
}
 
function cspGetForm(oldconfig){
   var f, i, res;
 
//////////////////////////////////////// PARTIE PERSONNALISABLE (6/8) : ENTÊTE JS /////////////////////////////////////////////////////////////////////////////////////////////////////
 
   res = '<fieldset id="'+Manager_Div+'"><legend><span style="font-size:150%;">Sélectionner les scripts à ajouter à la page : <b>' + mw.config.get('wgPageName').replace(/_/g," ") + '</b> '
+ '<sup><small><a href=http://fr.wikipedia.org/wiki/Discussion_Utilisateur:Dr_Brains/GlobalManager.js>(Aide)</a></small></sup></span></legend>'
+ '<table style=\"float:right;clear:right;\">'
+ '<td>'
+ '<div style=\"background:#EEE;\">'
+ '<center><h5><a href=\"http://fr.wikiversity.org/wiki/Cascading_Style_Sheet\">Styles CSS</a></h5></center>'
+ '<div style=\"font-size: 95%;background-color: white;color: black;border-collapse: collapse;border: 1px solid #aaa;padding: 0 .8em .3em .5em;\"><ul>'
+ '<li><b><a href=' + SiteURL + cspCssPage + '>' + cspSkin + '</a></b></li>'
+ '<li><a href=' + SiteURL + cspCssPagealt1 + '>' + cspSkinalt1 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt2 + '>' + cspSkinalt2 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt3 + '>' + cspSkinalt3 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt4 + '>' + cspSkinalt4 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt5 + '>' + cspSkinalt5 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt6 + '>' + cspSkinalt6 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt7 + '>' + cspSkinalt7 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspCssPagealt8 + '>' + cspSkinalt8 + '</a></li>'
+ '</ul></div></div>'
+ '</td>'
+ '<td>'
+ '<div style=\"background:#EEE;\">'
+ '<center><h5><a href=\"http://fr.wikiversity.org/wiki/JavaScript\">Scripts JS</a></h5></center>'
+ '<div style=\"font-size: 95%;background-color: white;color: black;border-collapse: collapse;border: 1px solid #aaa;padding: 0 .8em .3em .5em;\"><ul>'
+ '<li><b><a href=' + SiteURL + cspEntryPage + '>' + cspSkin + '</a></b></li>'
+ '<li><a href=' + SiteURL + cspEntryPagealt1 + '>' + cspSkinalt1 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt2 + '>' + cspSkinalt2 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt3 + '>' + cspSkinalt3 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt4 + '>' + cspSkinalt4 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt5 + '>' + cspSkinalt5 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt6 + '>' + cspSkinalt6 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt7 + '>' + cspSkinalt7 + '</a></li>' 
+ '<li><a href=' + SiteURL + cspEntryPagealt8 + '>' + cspSkinalt8 + '</a></li>'
+ '</ul></div></div>'
+ '</td>'
+ '</table>'
+ '<form>\n';
 
//////////////////////////////////////// FIN DE LA PARTIE PERSONNALISABLE ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
   for (i=0; i<cspFragments.length; i++) {
      f = cspFragments[i];
      if (!f.desc) continue;
      if (f.type == 2) {
	 if (i != 0) res += '</p>\n';
	 res += '<h2><span class="mw-headline">' + f.desc
	    + '</span></h2>\n'
	    + '<p>\n';
      } else {
         if (f.type == 3) {
	    if (i != 0) res += '</p>\n';
	       res += '<h3><span class="mw-headline">' + f.desc
	       + '</span></h3>\n'
	       + '<p>\n';
         } else {
            if (f.type == 4) {
	       if (i != 0) res += '</p>\n';
	          res += '<h4><span class="mw-headline">' + f.desc
	          + '</span></h4>\n'
	          + '<p>\n';
            } else {
               if (f.type == 5) {
	          if (i != 0) res += '</p>\n';
	             res += '<h5><span class="mw-headline">' + f.desc
	             + '</span></h5>\n'
	             + '<p>\n';
               } else {
                  if (f.type == 6) {
	             if (i != 0) res += '</p>\n';
	                res += '<h6><span class="mw-headline">' + f.desc
	                + '</span></h6>\n'
	                + '<p>\n';
                  } else {
                     if (f.type == 8) {
	                if (i != 0) res += '</p>\n';
	                   res +=  f.desc + '<p>\n';
                     } else {
	                res += '<input type="checkbox" name="' + f.id + '" ';
	                if (oldconfig.indexOf(f.id) != -1)
	                   res += 'checked ';
	                   res += '/>&nbsp;' + f.desc + '\n';
                           if(SautLigne)res += '<br/>';
                     }
                  }
               }
            }
         }
      }
   }
if ( mw.config.get('wgPageName').match( cspMainScript )){
   res += '<br /><br /><input type="button" onclick="window.location.reload();" value="<Générer le script> Masquer le menu" /></p>\n'
      + '</form></fieldset>\n';
} else {
   res += '<br /><br /><input type="button" onclick="cspProcessForm();" value="Générer le script" /></p>\n'
      + '</form></fieldset>\n';
 
}
   return res;
}
 
//*********************************
 
function RunManager(){ 
 
//////////////////////////////////////// PARTIE PERSONNALISABLE (7/8) : PETITS LIENS PERMANENTS (1/2) /////////////////////////////////////////////////////////////////////////////////////////////////////
if((cspSkin == "monobook")||
(cspSkin == "vector")||
(cspSkin == "modern") ||
(cspSkin == "chick")||
(cspSkin == "myskin")||
(cspSkin == "simple")){
 
 
    var ManagerLinks = ""
+ "<li id=\"pt-manager\" ><a href=" + SiteURLFrom + cspMainScript + ">GlobalManager</a></li>"
+ "<li id=\"pt-csspage\" ><a href=" + SiteURL + cspCssPage  + ">" + cspSkin + ".css</a></li>"
+ "<li id=\"pt-jspage\" ><a href=" + SiteURL + cspEntryPage  + ">" + cspSkin + ".js</a></li>";
 
 
   var ManagerTestLinks = ""
 
if(mw.config.get('wgPageName').match( cspMainScript )){
 
ManagerTestLinks += "<li id=\"pt-cssmenu\" ><a href=\"javascript:CSSclientSidePreferencesLoadFunction()\">Menu CSS</a></li>"
+ "<li id=\"pt-jsmenu\" ><a href=\"javascript:clientSidePreferencesLoadFunction()\">Menu JS</a></li>";
 
}
 
//////////////////////////////////////// FIN DE LA PARTIE PERSONNALISABLE ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    var conteneur = document.getElementById("p-personal").getElementsByTagName('ul')[0];
    conteneur.innerHTML = conteneur.innerHTML + ManagerLinks + ManagerTestLinks ;
 
    }
 
//////////////////////////////////////// PARTIE PERSONNALISABLE (7/8) : PETITS LIENS PERMANENTS (2/2) /////////////////////////////////////////////////////////////////////////////////////////////////////
if((cspSkin == "cologneblue")||
( skin == "standard" )||
( skin == "nostalgia" )){
 
 
    var ManagerLinks = "<small><center>"
+ "<a href=" + SiteURL + cspCssPage  + ">" + cspSkin + ".css</a> • "
+ "<sup><a href=" + SiteURL + cspMainScript + ">GlobalManager</a></sup> • "
+ "<a href=" + SiteURL + cspEntryPage  + ">" + cspSkin + ".js</a>"
+ "</center></small>";
 
   var ManagerTestLinks = ""
 
if(mw.config.get('wgPageName').match( cspMainScript )){
 
ManagerTestLinks += "<br /><center><a href=\"javascript:CSSclientSidePreferencesLoadFunction()\">Menu CSS</a> • "
+ "<a href=\"javascript:clientSidePreferencesLoadFunction()\">Menu JS</a></center>";
 
}
 
//////////////////////////////////////// FIN DE LA PARTIE PERSONNALISABLE ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
    var ManagerlinkDiv = document.createElement("div");
    ManagerlinkDiv.innerHTML = ManagerLinks + ManagerTestLinks;
    var contentNode = document.getElementById("article");
    contentNode.insertBefore(ManagerlinkDiv, contentNode.firstChild);
    ManagerlinkDiv.id = "ManagerLink";
    }
}
 
 
function cspReplacePage(x){
 
//////////////////////////////////////// PARTIE PERSONNALISABLE (8/8) : AFFICHAGE DU MENU /////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
if(( skin == "monobook" )||( skin == "vector" )||( skin == "chick" )||( skin == "myskin" )||( skin == "simple" )){                                                          
   var el = document.getElementById('content').childNodes[0];
}
 
if( skin == "modern" ){
   var TopBoxesContainer = document.getElementById('mw_contentholder');
   var TopBoxes = TopBoxesContainer.getElementsByTagName('div');
   for(i=0;i<TopBoxes.length;i++){
      if ($(TopBoxes[i]).hasClass( "mw-topboxes" )){
            var el = TopBoxes[i].childNodes[0];
         }
   }
}
 
if(( skin == "cologneblue" )||( skin == "nostalgia" )||( skin == "standard" )){
   var el = document.getElementById('article').childNodes[0];
}
 
   while (el.nextSibling) {
      el = el.nextSibling;
      if ((el.tagName && el.tagName.toLowerCase() == 'div')&&(el.id==ID_Div)) 
         break;
   }
   el.parentNode.replaceChild(x, el);
   el.style.display='block';  
}
 
 
function cspCSSReplacePage(x){
 
 
if(( skin == "monobook" )||( skin == "vector" )||( skin == "chick" )||( skin == "myskin" )||( skin == "simple" )){                                                          
   var CSS_el = document.getElementById('content').childNodes[0];
}
 
if( skin == "modern" ){
   var TopBoxesContainer = document.getElementById('mw_contentholder');
   var TopBoxes = TopBoxesContainer.getElementsByTagName('div');
   for(i=0;i<TopBoxes.length;i++){
      if ($(TopBoxes[i]).hasClass( "mw-topboxes" )){
            var CSS_el = TopBoxes[i].childNodes[0];
         }
   }
}
 
if(( skin == "cologneblue" )||( skin == "nostalgia" )||( skin == "standard" )){
   var CSS_el = document.getElementById('article').childNodes[0];
}
 
   while (CSS_el.nextSibling) {
      CSS_el = CSS_el.nextSibling;
      if ((CSS_el.tagName && CSS_el.tagName.toLowerCase() == 'div')&&(CSS_el.id==ID_Div))
         break;
   }
   CSS_el.parentNode.replaceChild(x, CSS_el);
 
}
 
 
//////////////////////////////////////// FIN DE LA PARTIE PERSONNALISABLE ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
/* Construct an XMLHttpRequest **************************************************************************/
 
function cspCSSConstructHttpRequest()
{
   var CSS_res;
 
   // Copied from http://developer.mozilla.org/en/docs/AJAX:Getting_Started
   if (window.XMLHttpRequest) { // Mozilla, Safari, ...
      CSS_res = new XMLHttpRequest();
   } else if (window.ActiveXObject) { // IE
      CSS_res = new ActiveXObject("Microsoft.XMLHTTP");
   }else {
      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
   }
   return CSS_res;
}
 
 /**************************************************************************************************************/
function getCSSXmlObj(req) {
   if (req.responseXML && req.responseXML.documentElement) 
      return req.responseXML;
 
   // Note: this doesn't work in konqueror, and the natural fix
   // var doc=document.implementation.createDocument(); doc.loadXML(req.responseXML)
   // results in a segfault :-(
   try {
      var CSS_doc = new ActiveXObject("Microsoft.XMLDOM");
      CSS_doc.async = "false";
      CSS_doc.loadXML(req.responseText);
   } 
   catch (err) {
      return null;
   }
 
   return CSS_doc;
}
 
/* Checks whether the request has finished successfully   req = XMLHtmlRequest    Returns true or false **************************/
 
function cspCSSRequestDone(req)
{
   if (req.readyState != 4) {
      // still not ready
      return false;
   } 
   if (window.http_request.status != 200) {
      alert('Il y a eu un problème avec la requête.');
      return false;
   }
   return true;
}
 
// Source: http://www.albionresearch.com/misc/urlencode.php ************************************************************
function URLEncode( plaintext ) 
{
   // The Javascript escape and unescape functions do not correspond
   // with what browsers actually do...
   var SAFECHARS = "0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "-_.!~*'()";
   var HEX = "0123456789ABCDEF";
   var encoded = "";
   for (var i = 0; i < plaintext.length; i++ ) {
      var ch = plaintext.charAt(i);
      if (ch == " ") {
	 encoded += "+";				// x-www-urlencoded, rather than %20
      } else if (SAFECHARS.indexOf(ch) != -1) {
	 encoded += ch;
      } else {
	 var charCode = ch.charCodeAt(0);
	 if (charCode > 255) {
	    alert( "Le caractère Unicode '" + ch + "' ne peut pas être encodé en URL standard.\n" +
		   "(l'encodage URL supporte seulement les caractères de 8 bits.)\n" + 
		   "Un espace (+) sera substitué." );
	    encoded += "+";
	 } else {
	    encoded += "%";
	    encoded += HEX.charAt((charCode >> 4) & 0xF);
	    encoded += HEX.charAt(charCode & 0xF);
	 }
      }
   } // for
   return encoded;
}
 
/* Returns dictionary with form data *****************************************************************/ 
function cspCSSFormData(CSS_form) {
   var CSS_res = new Object();
   for (var i=0; i<CSS_form.elements.length; ++i) {
      var CSS_el = CSS_form.elements[i];
      var CSS_data;
 
      if (!CSS_el.name)
	 continue;
      if (CSS_el.tagname && CSS_el.tagname == 'textarea')
	 CSS_data = CSS_el.childNodes[0].CSS_data;
      else if (CSS_el.checked)
	 CSS_data = ((CSS_el.checked == 'checked') ? 'on' : 'off');
      else if (CSS_el.value)
	 CSS_data = CSS_el.value;
      else
	 continue;
 
      CSS_res[CSS_el.name] = CSS_data;
   }
   return CSS_res;
}
 
/* Returns index of fragment with given id in fraglist, or -1 if it is not there. ******************************************/
 
function cspCSSFindFragment(id, fraglist)
{
   for (var n=0; n<fraglist.length; n++) {
      if (fraglist[n].id == id)
	 return n;
   }
   return -1;
}
 
/* Add fragment f to the list of fragments to be downloaded */
 
function cspCSSAddFragment(f)
{
   var d, pos, i, tmp;
 
   /* If f is already on the list, we're done */
   if (cspCSSFindFragment(f.id, window.fragments) != -1)
      return; 
 
   pos = -1;
 
   if (f.deps) {
      /* Add all dependencies */
      for (i=0; i<f.deps.length; i++) {
	 tmp = cspCSSFindFragment(f.deps[i], cspCssFragments);
	 if (tmp == -1)
	    alert("Erreur dans cspCSSAddFragment : Impossible de trouver " + f.deps[i]);
	 cspCSSAddFragment(cspCssFragments[tmp]);
      }
 
      /* Find the last dependency */
      for (i=0; i<f.deps.length; i++) {
	 tmp = cspCssFindFragment(f.deps[i], window.fragments);
	 if (tmp>pos) 
	    pos = tmp;
      }
   }
 
   /* Add f after all its dependencies */
   window.fragments.splice(pos+1, 0, f);
}
 
/**************************************************************************************************** Main script ****************/
 
/* This function is called if the user visits the entry page. */
 
function CSSclientSidePreferencesLoadFunction() 
{
   var CSS_p = document.createElement("div");
   CSS_p.id=ID_Div;
   CSS_p.innerHTML = "Veuillez patienter pendant l\'analyse de votre configuration …";
   cspCSSReplacePage(CSS_p);
 
   window.http_request = cspCSSConstructHttpRequest();
   window.http_request.onreadystatechange = cspCSSReceivedOldScript;
   var url = SiteURLbis + mw.config.get('wgPageName') + '&action=raw'; /////////////////////////////////////////////////////////////////////////////////////////////////////////// Analyse
   window.http_request.open('GET', url, true);
   window.http_request.send(null);
}
 
/* This function is called when the old user script is received. ***********************************************/
 
function cspCSSReceivedOldScript() 
{
   if (!cspCSSRequestDone(window.http_request))
      return;
   window.oldscript = window.http_request.responseText;
 
   var CSS_oldconfig = [];
   var i = window.oldscript.indexOf(cspCssConfigComment);
   if (i != -1) {
      var i2 = window.oldscript.indexOf('\n', i);
      var CSS_oldconfig = window.oldscript.substring(i+cspCssConfigComment.length+1, i2).split(' ');
   }
 
   cspCSSDisplayForm(CSS_oldconfig);
}
 
/* Creates and display the HTML form. ****************************************************************************************************************/
 
function cspCSSDisplayForm(CSS_oldconfig)
{
   var cspCssForm = document.createElement("form");
   cspCssForm.innerHTML = cspCSSGetForm(CSS_oldconfig);
   cspCssForm.name = 'cspCssForm';
   cspCssForm.style.padding="1em";
   cspCSSReplacePage(cspCssForm);
}
 
/* This function is called when the user presses the "Generate script" button. **************************************************************************
   It collects all fragments that should be downloaded in window.fragments
   and starts building the new script in window.newscript */
 
function cspCSSProcessForm() 
{
   window.fragments = new Array();
   var CSS_newconfig = '';
 
   for (var i=0; i<cspCssFragments.length; i++) {
      var f = cspCssFragments[i];
      if (f.desc && f.type <= 1 && document.cspCssForm[f.id].checked) {
	 cspCSSAddFragment(f);
	 CSS_newconfig += ' ' + f.id;
      }
   }
 
   window.newscript = '';
 
   var i = window.oldscript.indexOf(cspStartComment);
   if (i != -1) 
      window.newscript += window.oldscript.substr(0, i)
 
   window.newscript += cspCssStartComment + cspCssStartComment2 + '\n';
   window.newscript += cspCssConfigComment + CSS_newconfig + " \*/" + '\n\n';
 
   var s = '';
 
   window.newscript += s;
 
   window.bottom = document.cspCssForm;
   cspCSSGetFragments();
}
 
/* Go through the fragments listed in window.fragments and  ************************************************************************
   build window.newscript */
 
function cspCSSGetFragments() 
{
   if (window.fragments.length == 0) {
      cspCSSFinalizeScript();
      return;
   } 
 
   var f = window.fragments[0];
   if (f.type == 1) 
      cspCSSImportFragment(f);
   else
      cspCSSImportPage(f) 
}
 
/* Callback for HTTP request initiated in cspDownloadFragment() **********************************************************************************************/
 
function cspCSSReceivedFragment() 
{
   if (!cspCSSRequestDone(window.http_request))
      return;
 
   var msg = document.createTextNode(' OK');
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
   window.bottom = window.bottom.parentNode.insertBefore(document.createElement('BR'), bottom.nextSibling);
 
   var txt = window.http_request.responseText;   
 
   var tmp = /\/\/[ ]*<pre><nowiki>[ ]*\n/.exec(txt);
   if (tmp)
      txt = txt.slice(tmp.index + tmp[0].length);
   tmp = /\/\/[ ]*<\/nowiki><\/pre>[ ]*(\n|$)/.exec(txt);
   if (tmp)
      txt = txt.slice(0, tmp.index);
   else {
      tmp = /\/\*.*<pre>.*\*\/\n/.exec(txt);
      if (tmp)
	 txt = txt.slice(tmp.index + tmp[0].length);
      tmp = /\/\*.*<\/pre>.*\*\/(\n|$)/.exec(txt);
      if (tmp)
	 txt = txt.slice(0, tmp.index);
      else {
	 tmp = /<pre>[ ]*\n/.exec(txt);
	 if (tmp)
	    txt = txt.slice(tmp.index + tmp[0].length);
	 tmp = /<\/pre>[ ]*(\n|$)/.exec(txt);
	 if (tmp)
	    txt = txt.slice(0, tmp.index);
      }
   }
 
   window.newscript += '\n/\* Copie de [[' + (window.fragments[0].page).replace('_', ' ')
                        + ', revision ' + window.fragments[0].rev + '\n\n' + txt + ' \*/\n';
   window.fragments = window.fragments.slice(1);
   cspCSSGetFragments();
}
 
/*  *********************************************************************************************/
 
function cspCSSImportFragment(f)
{
   var msg = document.createTextNode('Copie de ' + f.page);
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
   window.bottom = window.bottom.parentNode.insertBefore(document.createElement('BR'), bottom.nextSibling);
 
   window.newscript += '\n/\* Copie de ' + (window.fragments[0].page).replace('_', ' ') + ' \*/ \n\n'
      +  f.page ;
 
   window.fragments = window.fragments.slice(1);
   cspCSSGetFragments();
}
 
/*  *********************************************************************************************/
 
function cspCSSImportPage(f)
{
   var msg = document.createTextNode('Importation de ' + f.page);
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
   window.bottom = window.bottom.parentNode.insertBefore(document.createElement('BR'), bottom.nextSibling);
 
   window.newscript += '\n/\* Importation de [[' + (window.fragments[0].page).replace('_', ' ') + ']] \*/\n\n'
      + '@import url(' + SiteURLFrombis + f.page + '&action=raw&ctype=text/css); \n';
 
   window.fragments = window.fragments.slice(1);
   cspCSSGetFragments();
}
 
/****************************************************************************************************/
function cspCSSFinalizeScript()
{
   window.newscript += '\n' + cspCssEndComment;
 
   var i = window.oldscript.indexOf(cspCssEndComment);
   if (i != -1) 
      window.newscript += window.oldscript.substr(i+cspCssEndComment.length)
 
   cspCSSLoadEditPage();
}
 
 
/****************************************************************************************************/
function cspCSSLoadEditPage() 
{
   var msg = document.createTextNode('Chargement de votre style ...');
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
 
   window.http_request = cspCSSConstructHttpRequest();
   window.http_request.overrideMimeType('text/xml');
   window.http_request.onreadystatechange = cspCSSReceivedEditPage;
   var url = SiteURLbis + mw.config.get('wgPageName') + '&action=edit';  /////////////////////////////////////////////////////////////////////////////////////////////////////////// Édition
 
   window.http_request.open('GET', url, true);
   window.http_request.send(null);
}
 
 
/****************************************************************************************************/ 
function cspCSSReceivedEditPage() 
{
   if (!cspCSSRequestDone(window.http_request))
      return;
 
   var doc = window.http_request.responseXML;
   var editform = doc.getElementById('editform');
   var CSS_data = cspCSSFormData(editform);
   CSS_data['wpTextbox1'] = window.newscript;
   CSS_data['wpSummary'] = cspCssSummary;
   CSS_data['wpMinoredit'] = 'on';
   CSS_data['wpPreview'] = null;
   CSS_data['wpDiff'] = null;
 
   var msg = document.createTextNode(' Sauvegarde de votre style ...');
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
 
   window.http_request = cspCSSConstructHttpRequest();
   window.http_request.overrideMimeType('text/xml');
   window.http_request.onreadystatechange = cspCSSEditPageSaved;
   var url = SiteURLbis + mw.config.get('wgPageName') + '&action=submit'; /////////////////////////////////////////////////////////////////////////////////////////////////////////// Sauvegarde
   window.http_request.open('POST', url, true);
   window.http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 
   CSS_sendMe = '';
   for (var name in CSS_data) {
      if (CSS_data[name]) {
	 if (CSS_sendMe.length > 0) 
	    CSS_sendMe += '&';
	 CSS_sendMe += URLEncode(name) + '=' + URLEncode(CSS_data[name]);
      }
   }
   window.http_request.send(CSS_sendMe);
}
 
 
/****************************************************************************************************/
function cspCSSEditPageSaved() 
{
   if (!cspCSSRequestDone(window.http_request))
      return;
 
   var msg = document.createTextNode(' OK');
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
   window.bottom = window.bottom.parentNode.insertBefore(document.createElement('BR'), bottom.nextSibling);
   window.location.reload();
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// SCRIPT
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 
/***********************************************************************************************************************************
 *  GLOBAL-SCRIPT-MANAGER                                                                                                          *
 * Permet de gérer une liste de scripts à la manière des gadgets mais pour n'importe quelle page.                                  *
 * Pour installer et configurer ce gestionnaire : Voir [[Discussion utilisateur:Dr Brains/GlobalScriptManager.js]]                 *
 ***********************************************************************************************************************************/
 
 
 
 
/* Construct an XMLHttpRequest */
 
function cspConstructHttpRequest()
{
   var res;
 
   // Copied from http://developer.mozilla.org/en/docs/AJAX:Getting_Started
   if (window.XMLHttpRequest) { // Mozilla, Safari, ...
      res = new XMLHttpRequest();
   } else if (window.ActiveXObject) { // IE
      res = new ActiveXObject("Microsoft.XMLHTTP");
   }else {
      alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
   }
   return res;
}
 
function getXmlObj(req) {
   if (req.responseXML && req.responseXML.documentElement) 
      return req.responseXML;
 
   // Note: this doesn't work in konqueror, and the natural fix
   // var doc=document.implementation.createDocument(); doc.loadXML(req.responseXML)
   // results in a segfault :-(
   try {
      var doc = new ActiveXObject("Microsoft.XMLDOM");
      doc.async = "false";
      doc.loadXML(req.responseText);
   } 
   catch (err) {
      return null;
   }
 
   return doc;
}
 
/* Checks whether the request has finished successfully
   req = XMLHtmlRequest 
   Returns true or false */
 
function cspRequestDone(req)
{
   if (req.readyState != 4) {
      // still not ready
      return false;
   } 
   if (window.http_request.status != 200) {
      alert('Il y a eu un problème avec la requête.');
      return false;
   }
   return true;
}
 
// Source: http://www.albionresearch.com/misc/urlencode.php
function URLEncode( plaintext ) 
{
   // The Javascript escape and unescape functions do not correspond
   // with what browsers actually do...
   var SAFECHARS = "0123456789" + "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "abcdefghijklmnopqrstuvwxyz" + "-_.!~*'()";
   var HEX = "0123456789ABCDEF";
   var encoded = "";
   for (var i = 0; i < plaintext.length; i++ ) {
      var ch = plaintext.charAt(i);
      if (ch == " ") {
	 encoded += "+";				// x-www-urlencoded, rather than %20
      } else if (SAFECHARS.indexOf(ch) != -1) {
	 encoded += ch;
      } else {
	 var charCode = ch.charCodeAt(0);
	 if (charCode > 255) {
	    alert( "Le caractère Unicode '" + ch + "' ne peut pas être encodé en URL standard.\n" +
		   "(l'encodage URL supporte seulement les caractères de 8 bits.)\n" + 
		   "Un espace (+) sera substitué." );
	    encoded += "+";
	 } else {
	    encoded += "%";
	    encoded += HEX.charAt((charCode >> 4) & 0xF);
	    encoded += HEX.charAt(charCode & 0xF);
	 }
      }
   } // for
   return encoded;
}
 
/* Returns dictionary with form data */
 
function cspFormData(form) {
   var res = new Object();
   for (var i=0; i<form.elements.length; ++i) {
      var el = form.elements[i];
      var data;
 
      if (!el.name)
	 continue;
      if (el.tagname && el.tagname == 'textarea')
	 data = el.childNodes[0].data;
      else if (el.checked)
	 data = ((el.checked == 'checked') ? 'on' : 'off');
      else if (el.value)
	 data = el.value;
      else
	 continue;
 
      res[el.name] = data;
   }
   return res;
}
 
/* Returns index of fragment with given id in fraglist, or -1 if it is not there. */
 
function cspFindFragment(id, fraglist)
{
   for (var n=0; n<fraglist.length; n++) {
      if (fraglist[n].id == id)
	 return n;
   }
   return -1;
}
 
/* Add fragment f to the list of fragments to be downloaded */
 
function cspAddFragment(f)
{
   var d, pos, i, tmp;
 
   /* If f is already on the list, we're done */
   if (cspFindFragment(f.id, window.fragments) != -1)
      return; 
 
   pos = -1;
 
   if (f.deps) {
      /* Add all dependencies */
      for (i=0; i<f.deps.length; i++) {
	 tmp = cspFindFragment(f.deps[i], cspFragments);
	 if (tmp == -1)
	    alert("Erreur dans cspAddFragment : Impossible de trouver " + f.deps[i]);
	 cspAddFragment(cspFragments[tmp]);
      }
 
      /* Find the last dependency */
      for (i=0; i<f.deps.length; i++) {
	 tmp = cspFindFragment(f.deps[i], window.fragments);
	 if (tmp>pos) 
	    pos = tmp;
      }
   }
 
   /* Add f after all its dependencies */
   window.fragments.splice(pos+1, 0, f);
}
 
/********** Main script **********/
 
/* This function is called if the user visits the entry page. */
 
function clientSidePreferencesLoadFunction() 
{
   var p = document.createElement("div");
   p.id=ID_Div; 
   p.innerHTML = "Veuillez patienter pendant l'analyse de votre configuration …";
   cspReplacePage(p);
 
   window.http_request = cspConstructHttpRequest();
   window.http_request.onreadystatechange = cspReceivedOldScript;
   var url = SiteURLbis + mw.config.get('wgPageName') + '&action=raw'; ////////////////////////////////////////////*********************************************
   window.http_request.open('GET', url, true);
   window.http_request.send(null);
}
 
/* This function is called when the old user script is received. */
 
function cspReceivedOldScript() 
{
   if (!cspRequestDone(window.http_request))
      return;
   window.oldscript = window.http_request.responseText;
 
   var oldconfig = [];
   var i = window.oldscript.indexOf(cspConfigComment);
   if (i != -1) {
      var i2 = window.oldscript.indexOf('\n', i);
      var oldconfig = window.oldscript.substring(i+cspConfigComment.length+1, i2).split(' ');
   }
 
   cspDisplayForm(oldconfig);
}
 
/* Creates and display the HTML form. */
 
function cspDisplayForm(oldconfig)
{
   var cspForm = document.createElement("form");
   cspForm.innerHTML = cspGetForm(oldconfig);
   cspForm.name = 'cspForm';
   cspForm.style.padding="1em";
   cspReplacePage(cspForm);
}
 
/* This function is called when the user presses the "Generate script" button. 
   It collects all fragments that should be downloaded in window.fragments
   and starts building the new script in window.newscript */
 
function cspProcessForm() 
{
   window.fragments = new Array();
   var newconfig = '';
 
   for (var i=0; i<cspFragments.length; i++) {
      var f = cspFragments[i];
      if (f.desc && f.type <= 1 && document.cspForm[f.id].checked) {
	 cspAddFragment(f);
	 newconfig += ' ' + f.id;
      }
   }
 
   window.newscript = '';
 
   var i = window.oldscript.indexOf(cspStartComment);
   if (i != -1) 
      window.newscript += window.oldscript.substr(0, i)
 
   window.newscript += cspStartComment + cspStartComment2 + '\n';
   window.newscript += cspConfigComment + newconfig + '\n\n';
 
   var s = 'document.write(\'<script type="text/javascript" src="' + SiteURLFrombis + cspMainScript + '&action=raw&ctype=text/javascript"></script>\'); \n';
 
   window.newscript += s;
 
   window.bottom = document.cspForm;
   cspGetFragments();
}
 
/* Go through the fragments listed in window.fragments and 
   build window.newscript */
 
function cspGetFragments() 
{
   if (window.fragments.length == 0) {
      cspFinalizeScript();
      return;
   } 
 
   var f = window.fragments[0];
   if (f.type == 1) 
      cspImportFragment(f);
   else
      cspDownloadFragment(f) 
}
 
/* Download a JavaScript fragment to be included in the user script */
 
function cspDownloadFragment(f)
{
   var msg = document.createTextNode('Copie de ' + f.page + ' ...');
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
 
   window.http_request = cspConstructHttpRequest();
   window.http_request.onreadystatechange = cspReceivedFragment;
   var url = + SiteURLFrombis + f.page + '&oldid=' + f.rev + '&action=raw&ctype=text/javascript'; 
   window.http_request.open('GET', url, true);
   window.http_request.send(null);
}
 
/* Callback for HTTP request initiated in cspDownloadFragment() */
 
function cspReceivedFragment() 
{
   if (!cspRequestDone(window.http_request))
      return;
 
   var msg = document.createTextNode(' OK');
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
   window.bottom = window.bottom.parentNode.insertBefore(document.createElement('BR'), bottom.nextSibling);
 
   var txt = window.http_request.responseText;   
 
   var tmp = /\/\/[ ]*<pre><nowiki>[ ]*\n/.exec(txt);
   if (tmp)
      txt = txt.slice(tmp.index + tmp[0].length);
   tmp = /\/\/[ ]*<\/nowiki><\/pre>[ ]*(\n|$)/.exec(txt);
   if (tmp)
      txt = txt.slice(0, tmp.index);
   else {
      tmp = /\/\*.*<pre>.*\*\/\n/.exec(txt);
      if (tmp)
	 txt = txt.slice(tmp.index + tmp[0].length);
      tmp = /\/\*.*<\/pre>.*\*\/(\n|$)/.exec(txt);
      if (tmp)
	 txt = txt.slice(0, tmp.index);
      else {
	 tmp = /<pre>[ ]*\n/.exec(txt);
	 if (tmp)
	    txt = txt.slice(tmp.index + tmp[0].length);
	 tmp = /<\/pre>[ ]*(\n|$)/.exec(txt);
	 if (tmp)
	    txt = txt.slice(0, tmp.index);
      }
   }
 
   window.newscript += '\n// Copie de [[' + (window.fragments[0].page).replace('_', ' ')
                        + ']], revision ' + window.fragments[0].rev + '\n\n' + txt + '\n';
   window.fragments = window.fragments.slice(1);
   cspGetFragments();
}
 
/* Import JavaScript using a <script> tag */
 
function cspImportFragment(f)
{
   var msg = document.createTextNode('Importation de ' + f.page);
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
   window.bottom = window.bottom.parentNode.insertBefore(document.createElement('BR'), bottom.nextSibling);
 
   window.newscript += '\n// Importation de [[' + (window.fragments[0].page).replace('_', ' ') + ']]\n\n'
      + 'document.write(\'<script type="text/javascript" src="' + SiteURLFrombis + f.page + '&action=raw&ctype=text/javascript"></script>\'); \n';
 
   window.fragments = window.fragments.slice(1);
   cspGetFragments();
}
 
function cspFinalizeScript()
{
   window.newscript += '\n' + cspEndComment;
 
   var i = window.oldscript.indexOf(cspEndComment);
   if (i != -1) 
      window.newscript += window.oldscript.substr(i+cspEndComment.length)
 
   cspLoadEditPage();
}
 
function cspLoadEditPage() 
{
   var msg = document.createTextNode('Chargement de votre script ...');
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
 
   window.http_request = cspConstructHttpRequest();
   window.http_request.overrideMimeType('text/xml');
   window.http_request.onreadystatechange = cspReceivedEditPage;
   var url = SiteURLbis + mw.config.get('wgPageName') + '&action=edit'; ////////////////////////////////////////******************************************************
 
   window.http_request.open('GET', url, true);
   window.http_request.send(null);
}
 
function cspReceivedEditPage() 
{
   if (!cspRequestDone(window.http_request))
      return;
 
   var doc = window.http_request.responseXML;
   var editform = doc.getElementById('editform');
   var data = cspFormData(editform);
   data['wpTextbox1'] = window.newscript;
   data['wpSummary'] = cspSummary;
   data['wpMinoredit'] = 'on';
   data['wpPreview'] = null;
   data['wpDiff'] = null;
 
   var msg = document.createTextNode(' Sauvegarde de votre script ...');
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
 
   window.http_request = cspConstructHttpRequest();
   window.http_request.overrideMimeType('text/xml');
   window.http_request.onreadystatechange = cspEditPageSaved;
   var url = SiteURLbis + mw.config.get('wgPageName') + '&action=submit'; ///////////////////////////////////******************************************
   window.http_request.open('POST', url, true);
   window.http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
 
   sendMe = '';
   for (var name in data) {
      if (data[name]) {
	 if (sendMe.length > 0) 
	    sendMe += '&';
	 sendMe += URLEncode(name) + '=' + URLEncode(data[name]);
      }
   }
   window.http_request.send(sendMe);
}
 
function cspEditPageSaved() 
{
   if (!cspRequestDone(window.http_request))
      return;
 
   var msg = document.createTextNode(' OK');
   window.bottom = window.bottom.parentNode.insertBefore(msg, bottom.nextSibling);
   window.bottom = window.bottom.parentNode.insertBefore(document.createElement('BR'), bottom.nextSibling);
   window.location.reload();
}
 
 
 
 
/****************************************************************************************************/ 
//</nowiki></pre>