Utilisateur:Dr Brains/BandeauxPortails.js

Dans le monde d'aujourd'hui, Utilisateur:Dr Brains/BandeauxPortails.js est devenu un sujet d'une grande pertinence et d'un grand intérêt pour un large spectre de la société. De son impact sur l'économie mondiale à son influence sur la vie quotidienne des gens, Utilisateur:Dr Brains/BandeauxPortails.js a suscité des débats et des discussions dans différents domaines. Afin de mieux comprendre ce phénomène, il est essentiel d’analyser ses différentes dimensions et répercussions. Dans cet article, nous explorerons les nombreuses facettes de Utilisateur:Dr Brains/BandeauxPortails.js et sa pertinence aujourd'hui, ainsi que les perspectives d'avenir qu'elle soulève.
//
//<source lang=javascript>

// Documentation : ]

// Licence : Domaine public

// <source lang=javascript>
// ==================================================================================================================== DEBUT DU CODE
// ====================================================================================================================
//<pre><nowiki>

/////////////////////////////////////////////////////////////////////////////////// Variables personnalisables

// Publication automatique
if(typeof window.BandeauxPortails_AutoEdit === 'undefined') window.BandeauxPortails_AutoEdit = true;

// Modification mineure
if(typeof window.BandeauxPortails_MinorEdit === 'undefined') window.BandeauxPortails_MinorEdit = true;

// Ajout à la liste de suivi ( -1 = défaut préférences, 0 = jamais, 1 = toujours)
if(typeof window.BandeauxPortails_Watchthis === 'undefined') window.BandeauxPortails_Watchthis = -1;

// Nombre de suggestions
if(typeof window.BandeauxPortails_TailleListe === 'undefined') window.BandeauxPortails_TailleListe = 10;

// Affichage des suggestions vers le bas
if(typeof window.BandeauxPortails_ListeBas === 'undefined') window.BandeauxPortails_ListeBas = false;

// Affichage des redirections de bandeaux
if(typeof window.BandeauxPortails_ShowRedirect === 'undefined') window.BandeauxPortails_ShowRedirect = false;

// Non-confirmation de la suppression des bandeaux
if(typeof window.BandeauxPortails_SkipConfirm === 'undefined') window.BandeauxPortails_SkipConfirm = false;

// Groupe nécessaire pour appliquer une balise
if(typeof window.BandeauxPortails_TagGroup === 'undefined') window.BandeauxPortails_TagGroup = "user";

// Balise à appliquer aux modifs
if(typeof window.BandeauxPortails_Tag === 'undefined'){
  window.BandeauxPortails_Tag = "";
  if(mw.config.get('wgServer') == '//fr.wikipedia.org') window.BandeauxPortails_Tag = "BandeauxPortails";
}

var BandeauxPortails_EditParams = {};

/////////////////////////////////////////////////////////////////////////////////// Édition

var BandeauxPortails_ajax = {
  http: function(bundle) {
    var xmlhttp;
    try {
      xmlhttp = new XMLHttpRequest();
    } catch(e) {
      try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
          xmlhttp = false;
        }
      }
    }
    if (xmlhttp) {
      xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4)
          BandeauxPortails_ajax.httpComplete(xmlhttp,bundle);
      };
      xmlhttp.open(bundle.method ? bundle.method : "GET",bundle.url,bundle.async == false ? false : true);
      if (bundle.headers) {
        for (var field in bundle.headers)
          try {
            xmlhttp.setRequestHeader(field,bundle.headers);
          } catch(err) {  }
      }
      xmlhttp.send(bundle.data ? bundle.data : null);
    }
    return xmlhttp;
  },
  httpComplete: function(xmlhttp,bundle) {
    if (xmlhttp.status == 200 || xmlhttp.status == 302) {
      if (bundle.onSuccess) bundle.onSuccess(xmlhttp,bundle);
    } else if (bundle.onFailure) {
      bundle.onFailure(xmlhttp,bundle);
    }
  }
};

// Nettoyage modèle (espaces, retour à la ligne, pipes)
function  BandeauxPortails_CleanModele(Modele){
          Modele = Modele.replace(/\n/ig, "");
          Modele = Modele.replace(/ \|/ig, "\|");
          Modele = Modele.replace(/\| /ig, "\|");
          Modele = Modele.replace(/\|\|/ig, "\|");
          Modele = Modele.replace(/\|\}/ig, "\}");
          return Modele;
}
 
window.BandeauxPortails_gettag = function(){
  if(!BandeauxPortails_Tag || !BandeauxPortails_TagGroup) return false;
  var UserGroups = mw.config.get('wgUserGroups');
  if(UserGroups.indexOf(BandeauxPortails_TagGroup) !== -1) return BandeauxPortails_Tag;
  return false;
}

function BandeauxPortails_DoEdit(Req, data){
     while(document.body.firstChild){ document.body.removeChild(document.body.firstChild); }
     document.body.innerHTML = Req.responseText;
     var TextArea = document.getElementById('wpTextbox1');
     if(!TextArea) return;
     if(BandeauxPortails_AutoEdit) document.editform.style.display = "none";

     var  RemovePortalText = data.remove;
     var  AddPortalText = data.add;
     if(AddPortalText) AddPortalText = AddPortalText.replace(/\|$/g,'');

     var OldText = TextArea.value;
     OldText = OldText.replace(/\{\{Portail /ig, "\{\{Portail\|"); // Cas d'un bandeau unique : {{Portail Truc}} -> {{Portail|Truc}}

     if((OldText.indexOf('{{Portail|')!=-1)||(OldText.indexOf('{{portail|')!=-1)){
// ==================================================================================== Il y a déjà un modèle {{Portail}}
          var AvantModeleUp = OldText.substring(0, OldText.indexOf('{{Portail'));
          var AvantModeleLow = OldText.substring(0, OldText.indexOf('{{portail'));
          var ApresModele = OldText.split(AvantModeleUp).join('').split(AvantModeleLow).join('');
          var DebutModele = OldText.split(ApresModele).join('');
          var OldModele = ApresModele.substring(0, ApresModele.indexOf('}}')) + '}}';
          var SuiteModele = ApresModele.split(OldModele).join('');

          OldModele = BandeauxPortails_CleanModele(OldModele);

          if(AddPortalText){
               if(((OldModele.indexOf('|'+AddPortalText+'|')!=-1)||(OldModele.indexOf('|'+AddPortalText+'}')!=-1))){
                    alert('Le portail ' + AddPortalText + ' est déjà présent.');
                    document.editform.style.display = "";
                    return;
               }
          }
          if(RemovePortalText && AddPortalText){
               var NouveauModele = OldModele;
               NouveauModele = NouveauModele.split('|' +RemovePortalText+ '|').join('|');
               NouveauModele = NouveauModele.split('|' +RemovePortalText+ '}}').join('}}');
               NouveauModele = NouveauModele.split('}}').join('|' + AddPortalText + '}}');
               var Sommaire = 'Changement rapide de {{portail}} : - '+RemovePortalText+' , + '+AddPortalText.replace(/\|/g," , + ");
          }else if(RemovePortalText){
               var NouveauModele = OldModele;
               NouveauModele = NouveauModele.split('|' +RemovePortalText+ '|').join('|');
               NouveauModele = NouveauModele.split('|' +RemovePortalText+ '}}').join('}}');
               var Sommaire = 'Retrait rapide de {{portail}} : - '+RemovePortalText;
          }else if(AddPortalText){
               var NouveauModele = OldModele.split('}}').join('|' + AddPortalText + '}}');
               var Sommaire = 'Ajout rapide de {{portail}} : + '+AddPortalText.replace(/\|/g," , + ");
          }
          NouveauModele = BandeauxPortails_CleanModele(NouveauModele);
          if(NouveauModele.indexOf('|')==-1){
               if(BandeauxPortails_SkipConfirm || confirm('Erreur :\nLe modèle {{Portail}} doit avoir au moins un paramètre.\n\nSupprimer le modèle {{Portail}} ?')){
                    NouveauModele = "";
               }else{
                    document.editform.style.display = "block";
                    return;
               }
          }
     }else{
// ==================================================================================== Il n'y a pas de modèle {{Portail}}
          if(!AddPortalText){
               alert('Pas de portail à ajouter.');
               document.editform.style.display = "";
               return;
          }
          var NouveauModele = '{{Portail|' + AddPortalText + '}}\n\n';
          var Sommaire = 'Ajout rapide de {{portail}} : + '+AddPortalText.replace(/\|/g," , + ");
          if((OldText.indexOf('{{DEFAULTSORT:')!=-1)||(OldText.indexOf('[[Catégorie:')!=-1)||(OldText.indexOf('[[catégorie:')!=-1)||(OldText.indexOf('[[Categorie:')!=-1)||(OldText.indexOf('[[categorie:')!=-1)){
// ------------------------------------------------------------------------------------ Il y a des catégories
               var DebutModele1 = OldText.substring(0, OldText.indexOf('{{DEFAULTSORT:'));
               var DebutModele2 = OldText.substring(0, OldText.indexOf('[[Catégorie:'));
               var DebutModele3 = OldText.substring(0, OldText.indexOf('[[catégorie:'));
               var DebutModele4 = OldText.substring(0, OldText.indexOf('[[Categorie:'));
               var DebutModele5 = OldText.substring(0, OldText.indexOf('[[categorie:'));
               var SuiteModele = OldText.split(DebutModele1).join('').split(DebutModele2).join('').split(DebutModele3).join('').split(DebutModele4).join('').split(DebutModele5).join('');
               var DebutModele = OldText.split(SuiteModele).join('');
          }else{
// ------------------------------------------------------------------------------------ Il n'y a pas de catégories
               var interWiki = new RegExp('^\\s*\\.?(x?-]+)?|simple|tokipona):(]*)\\]\\]\\s*$');
               var blank = new RegExp('^\\s*$');
               var lines = OldText.split('\n');
               var DebutModele = '';
               var SuiteModele = '';
               var FoundInterwiki = false;
               for (var lineId = lines.length - 1; lineId >= 0; --lineId){
                    if (!interWiki.exec(lines) && !blank.exec(lines)){
                         DebutModele = lines.slice(0, lineId + 1).join('\n');
                         SuiteModele = lines.slice(lineId + 1).join('\n');
                         break;
                    }
               }
               DebutModele = DebutModele + '\n\n';
               while(SuiteModele.indexOf('\n\n')!=-1){
                    SuiteModele = SuiteModele.split("\n\n").join("\n");
               }
               SuiteModele = SuiteModele.replace(/^\n/, "");
          }
     }
     var TexteFinal = DebutModele + NouveauModele + SuiteModele;
     var SommaireFinal = Sommaire + ' ; avec ]';
     document.getElementById('wpMinoredit').checked = BandeauxPortails_MinorEdit;
     if(BandeauxPortails_Watchthis==1) document.getElementById('wpWatchthis').checked = "checked";
     if(BandeauxPortails_Watchthis==0) document.getElementById('wpWatchthis').checked = false;
     document.getElementById('wpTextbox1').value = TexteFinal;
     document.getElementById('wpSummary').value = SommaireFinal;
     if(BandeauxPortails_AutoEdit){
        var watchthisparam = {};
        watchthisparam = "nochange";
        watchthisparam = "unwatch";
        watchthisparam = "watch";
        var datas = {
              action    : 'edit',
              title     : mw.config.get('wgPageName'),
              text      : TexteFinal,
              summary   : SommaireFinal,
              minor     : (document.editform.wpMinoredit.checked ? 1 : 0),
              watchlist : watchthisparam,
              token     : document.editform.wpEditToken.value
        };
        var ApplyTag = BandeauxPortails_gettag();
        if(ApplyTag){
            datas.summary = Sommaire;
            datas.tags = ApplyTag;
        }
        var api = new mw.Api();
        api.post( datas, {'contentType':'application/x-www-form-urlencoded'} ).then( function ( data ) {
                  window.location.reload();
        });
     }
}

function BandeauxPortails_Edit(){
     var ToRemove = (BandeauxPortails_EditParams ? BandeauxPortails_EditParams : ( BandeauxPortails_EditParams ? BandeauxPortails_EditParams : false ) );
     var ToAdd = (BandeauxPortails_EditParams ? BandeauxPortails_EditParams : (BandeauxPortails_EditParams ? BandeauxPortails_EditParams : false ) );
     var URL = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScript' ) + "?title=" +encodeURIComponent(mw.config.get( 'wgPageName' )) + "&action=edit";
     BandeauxPortails_ajax.http({url       : URL,
                                 onSuccess : BandeauxPortails_DoEdit,
                                 remove    : ToRemove,
                                 add       : ToAdd
     });
}

/////////////////////////////////////////////////////////////////////////////////// Mise à jour des bandeaux effectivement présents

function BandeauxPortails_Update(){
     var URL = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScript' ) + '?title=' + encodeURIComponent(mw.config.get( 'wgPageName' )) + '&oldid='+ mw.config.get( 'wgCurRevisionId' ) + '&action=raw';
     BandeauxPortails_ajax.http({url: URL, onSuccess:BandeauxPortails_UpdateDone});
}
window.BandeauxPortails_UpdateDone = function(Req, data){
     var Contenu = Req.responseText;
     if(Contenu=='') return;
     Contenu = Contenu.replace(/\{\{portail/ig, "\{\{Portail");
     Contenu = Contenu.replace(/\{\{Portail /ig, "\{\{Portail\|");
     if(Contenu.indexOf('{{Portail|')==-1) return;
     var ParamsModele = Contenu.split('{{Portail|').split('}}') + '|';
     ParamsModele = BandeauxPortails_CleanModele(ParamsModele);
     var AllParamsModele = new Array();
     while(ParamsModele.indexOf('|')!=-1){
          var NewParam = ParamsModele.split('|');
          if(NewParam!='') AllParamsModele.push(NewParam);
          ParamsModele = ParamsModele.split(NewParam+'|');
     }
     for(var m=0;m<AllParamsModele.length;m++){
          var Span = document.getElementById('lienPortail_'+m);
          if(!Span) continue;
          var LienRemove = Span.getElementsByTagName('a');
          LienRemove.href= "javascript:BandeauxPortails_SupprOne(\'"+encodeURIComponent(AllParamsModele).replace(/'/g,"ZAPPOSTROPHE")+"\')";
          LienRemove.title= "Supprimer le bandeau de portail "+AllParamsModele;
          var LienModify = Span.getElementsByTagName('a');
          LienModify.href= "javascript:BandeauxPortails_ModifyOne(\'"+m+"\',\'"+encodeURIComponent(AllParamsModele).replace(/'/g,"ZAPPOSTROPHE")+"\')";
          LienModify.title= "Modifier le bandeau de portail "+AllParamsModele;
     }
}

/////////////////////////////////////////////////////////////////////////////////// Formulaires

window.BandeauxPortails_Cancel = function(id){
          var Span = document.getElementById(id);
          Span.style.display = 'inline';
          var Parent = Span.parentNode;
          var Form = Parent.getElementsByTagName('form');
          Parent.removeChild(Form);
};

window.BandeauxPortails_SupprOne = function(Portail){
          Portail = Portail.replace(/ZAPPOSTROPHE/g,"'");
          if (BandeauxPortails_SkipConfirm || confirm('Voulez-vous vraiment supprimer le bandeau « '+Portail+' » ?')) {
              BandeauxPortails_EditParams = Portail;
              BandeauxPortails_Edit();
	  }
// ********************************************************************************************************
};

window.BandeauxPortails_ModifyThatOne = function(id, oldportail){
     oldportail = oldportail.replace(/ZAPPOSTROPHE/g,"'");
     var Input = document.getElementById('InputModify_'+id);
     var Portail = Input.value;
     if((Portail!='')&&(Portail!=oldportail)){
// ********************************************************************************************************
          BandeauxPortails_EditParams = oldportail;
          BandeauxPortails_EditParams = Portail;
          BandeauxPortails_Edit();
// ********************************************************************************************************
     }else{
          BandeauxPortails_Cancel('lienPortail_'+id);
     }
};

window.BandeauxPortails_ModifyOne = function( id, portail ) {
     portail = portail.replace(/ZAPPOSTROPHE/g,"'");
     var Span = document.getElementById('lienPortail_' + id);
     Span.style.display = "none";
     var Form = document.createElement('form');
     Form.id = "BP_Form_"+id;
     Form.portail = portail.replace(/'/g,"ZAPPOSTROPHE");
     Form.method = "post" ;
     Form.onsubmit = function () {
        var FormIndex = this.id.split("BP_Form_").join("");
        var OldPortail = this.portail;
        BandeauxPortails_ModifyThatOne(FormIndex,OldPortail);
        return false;
    } ;

     Form.style.display ="inline";
     Form.innerHTML = '<select id="SelectModify_'+id+'" style="display:none;" title="Suggestions de bandeaux" />'
                     +'<input id="InputModify_'+id+'" type="text" value="'+portail+'" '
                     +'onkeyup="BandeauxPortails_TextChanged(\'SelectModify_'+id+'\')" />'
                     +'<input type="button" '
                     +'onclick="BandeauxPortails_ModifyThatOne(\''+id+'\',\''+portail.replace(/'/g,"ZAPPOSTROPHE")+'\');" '
                     +'onselect="BandeauxPortails_ModifyThatOne(\''+id+'\',\''+portail.replace(/'/g,"ZAPPOSTROPHE")+'\');" '
                     +'value="OK"/>'
                     +'<input type="button" '
                     +'onclick="BandeauxPortails_Cancel(\'lienPortail_'+id+'\')" '
                     +'onselect="BandeauxPortails_Cancel(\'lienPortail_'+id+'\')" '
                     +'value="Annuler"/>';
     Span.parentNode.insertBefore(Form,Span);
     document.getElementById('InputModify_'+id).focus() ;
};

window.BandeauxPortails_AddThatOne = function(){
     var Input = document.getElementById('InputAdd');
     var Portail = Input.value;
     if(Portail!=''){
// ********************************************************************************************************
          BandeauxPortails_EditParams = Portail;
          BandeauxPortails_Edit();
// ********************************************************************************************************
     }else{
          BandeauxPortails_Cancel('BandeauxPortails_Add');
     }
};

window.BandeauxPortails_AddOne = function(){
     var Span = document.getElementById('BandeauxPortails_Add');
     Span.style.display = "none";
     var Form = document.createElement('form');
     Form.style.display ="inline";
     Form.id = "BP_Form_Add";
     Form.method = "post" ;
     Form.onsubmit = function () {
        BandeauxPortails_AddThatOne();
        return false;
    } ;
     Form.innerHTML = '<select id="SelectAdd" style="display:none;" title="Suggestions de bandeaux" />'
                     +'<input id="InputAdd" type="text" value="" onkeyup="BandeauxPortails_TextChanged(\'SelectAdd\')" />'
                     +'<input type="button" '
                     +'onclick="BandeauxPortails_AddThatOne();" '
                     +'onselect="BandeauxPortails_AddThatOne();" '
                     +'value="OK"/>'
                     +'<input type="button" '
                     +'onclick="BandeauxPortails_Cancel(\'BandeauxPortails_Add\')" '
                     +'onselect="BandeauxPortails_Cancel(\'BandeauxPortails_Add\')" '
                     +'value="Annuler"/>';
     Span.parentNode.insertBefore(Form,Span);
     document.getElementById('InputAdd').focus() ;

};

/////////////////////////////////////////////////////////////////////////////////// Suggestions

var BandeauxPortails_TextChanged_running_Up = 0 ;
var BandeauxPortails_TextChanged_running_Low = 0 ;
var BandeauxPortails_Up_Results = new Array();
var BandeauxPortails_Low_Results = new Array();

function BandeauxPortails_KeypressedOnList(e){
    if (!e) var e = window.event;
    if (e.keyCode != 13){
        var IsEnter = false;
    }else{
        var IsEnter = true;
    }
    return IsEnter;
}

function BandeauxPortails_TextChanged_MergeNoaccent(text){
     text=text.toLowerCase();
     text=text.replace(/â/g,"a");
     text=text.replace(/å/g,"a");
     text=text.replace(/é/g,"e");
     text=text.replace(/è/g,"e");
     text=text.replace(/ê/g,"e");
     text=text.replace(/ë/g,"e");
     text=text.replace(/î/g,"i");
     text=text.replace(/ï/g,"i");
     text=text.replace(/ô/g,"o");
     text=text.replace(/œ/g,"oe");
     text=text.replace(/ç/g,"c");
     text=text.replace(/š/g,"s");
     text=text.replace(/-/g," ");
     text=text.replace(/'/g," ");
     text=text.replace(/;/g,"");
     return text;
}

function BandeauxPortails_TextChanged_Set(id, text){
     text = text.replace(/ZAPOSTROPHE/g,"'");
     var OldValue = document.getElementById(id).value;
     if(OldValue.indexOf('|')!=-1){
          var AllParams = OldValue.split("|");
          AllParams = text;
          var NewValue = AllParams.join("|");
     }else{
          var NewValue = text;
     }
     document.getElementById(id).value = NewValue;
     document.getElementById(id).focus() ;
}

function BandeauxPortails_TextChanged_Display(ResultArray, id){
     var Select = document.getElementById( id ) ;
     var idInput = id.split('Select').join('Input');
     var Input = document.getElementById(idInput) ;
     if((!Input)||(!Select)) return;
     Select.innerHTML = '';
     var NbOptions = 0;
     for(var a=0;a<ResultArray.length;a++){
          var TitrePage = ResultArray;
          var TitrePageEncode = TitrePage.replace(/'/g,"ZAPOSTROPHE");
          var Option = document.createElement('option');
          Option.value = TitrePage;
          Option.innerHTML = TitrePage;
          Option.onclick = function(){
               var PageEncode = this.value;
               BandeauxPortails_TextChanged_Set(this.parentNode.id.split('Select').join('Input'),PageEncode);
               BandeauxPortails_TextChanged(this.parentNode.id);
          };
          if(a==0) Option.selected = "selected";
          Select.appendChild(Option);
          NbOptions++;
     }
     if(NbOptions>0){
          Select.onkeyup = function(e){
               if (!e) var e = window.event;
               var IsEnter = BandeauxPortails_KeypressedOnList(e);
               if(!IsEnter) return;

               var Selected = this.getElementsByTagName('option');
               for(var a=0;a<Selected.length;a++){
                    if(Selected.selected){
                         var TextSelected = Selected.value;
                    }
               }
               BandeauxPortails_TextChanged_Set(idInput, TextSelected);
               BandeauxPortails_TextChanged(id);
          };
          Select.size = NbOptions;
          Select.style.display = 'inline';
          Select.style.zIndex = 5 ;
          Select.style.position = "absolute" ;
          Input.style.width = Select.offsetWidth + "px" ;

          if(BandeauxPortails_ListeBas){
               Select.style.top = (parseInt(Input.offsetTop) + parseInt(Input.offsetHeight)) + 'px';
          }else{
               Select.style.top = (parseInt(Input.offsetTop) - Select.offsetHeight) + 'px';
          }
          Select.style.left = (parseInt(Input.parentNode.offsetLeft ) - 1) + 'px';
     }else{
          Select.style.display = 'none';
          Select.innerHTML = '';
     }
}

function BandeauxPortails_TextChanged_Merge(id){
     var UpResults = BandeauxPortails_Up_Results;
     var LowResults = BandeauxPortails_Low_Results;
     var ResultArray = new Array();
     for(var a=0;a<LowResults.length;a++){
          LowResults = LowResults.substr(0,1).toUpperCase() + LowResults.substr(1,LowResults.length)+ ";";
          UpResults.push(LowResults);
     }
     for(var b=0;b<UpResults.length;b++){
          UpResults = BandeauxPortails_TextChanged_MergeNoaccent(UpResults)+"|"+UpResults;
     }
     UpResults.sort();
     for(var b=0;b<UpResults.length;b++){
          var ThisPage = UpResults;
          ThisPage = ThisPage.replace(/.*\|/g, "");
          if(ThisPage.indexOf(";")!=-1){
               ThisPage = ThisPage.replace(/;/g, "");
               ThisPage = ThisPage.substr(0,1).toLowerCase() + ThisPage.substr(1,ThisPage.length);
          }
          if(b<BandeauxPortails_TailleListe){
               ResultArray.push(ThisPage);
          }
     }
     BandeauxPortails_TextChanged_Display(ResultArray, id);
}

function BandeauxPortails_TextChanged_RequestUp(Value, id){
     if(BandeauxPortails_TextChanged_running_Up) return;
     BandeauxPortails_TextChanged_running_Up = 1;
     Value = Value.substr(0,1).toUpperCase() + Value.substr(1,Value.length);
     var Redirect = (BandeauxPortails_ShowRedirect ? "" : "&apfilterredir=nonredirects");
     var URL = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?format=xml&action=query&list=allpages&apnamespace=10&aplimit='+BandeauxPortails_TailleListe+ Redirect +'&apfrom=Portail%20'+encodeURIComponent(Value);
     BandeauxPortails_ajax.http({url       : URL,
                                 onSuccess : BandeauxPortails_TextChanged_RequestUpBis,
                                 value     : Value, 
                                 id        : id
     });
}
 
function BandeauxPortails_TextChanged_RequestUpBis(Req, data){
     var Value = data.value;
     var id = data.id;
     BandeauxPortails_Up_Results = ;
     var ObjetXML = Req.responseXML;
     var AllPages = ObjetXML.getElementsByTagName('p');
     for(var b=0;b<AllPages.length;b++){
          var Titre = AllPages.getAttribute('title').replace(/Modèle:Portail /, "");
          var TitreUp = Titre.substr(0,1).toUpperCase() + Titre.substr(1,Titre.length);
          if(Titre==TitreUp && Titre.indexOf("Modèle:")==-1){
               BandeauxPortails_Up_Results.push(Titre);
          }
     }
     BandeauxPortails_TextChanged_running_Up = 0;
     if(BandeauxPortails_TextChanged_running_Low==0) BandeauxPortails_TextChanged_Merge(id);
}

function BandeauxPortails_TextChanged_RequestLow(Value, id){
     if(BandeauxPortails_TextChanged_running_Low) return;
     BandeauxPortails_TextChanged_running_Low = 1;
     Value = Value.substr(0,1).toLowerCase() + Value.substr(1,Value.length);
     var Redirect = (BandeauxPortails_ShowRedirect ? "" : "&apfilterredir=nonredirects");
     var URL = mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' ) + '/api.php?format=xml&action=query&list=allpages&apnamespace=10&aplimit='+BandeauxPortails_TailleListe+Redirect+'&apfrom=Portail%20'+encodeURIComponent(Value);
     BandeauxPortails_ajax.http({url       : URL,
                                 onSuccess : BandeauxPortails_TextChanged_RequestLowBis,
                                 value     : Value, 
                                 id        : id
     });
}
 
function BandeauxPortails_TextChanged_RequestLowBis(Req, data){
     var Value = data.value;
     var id = data.id;
     BandeauxPortails_Low_Results = ;
     var ObjetXML = Req.responseXML;
     var AllPages = ObjetXML.getElementsByTagName('p');
     for(var b=0;b<AllPages.length;b++){
          var Titre = AllPages.getAttribute('title').replace(/Modèle:Portail /, "");
          var TitreLow = Titre.substr(0,1).toLowerCase() + Titre.substr(1,Titre.length);
          if(Titre==TitreLow &&  Titre.indexOf("Modèle:")==-1){
               BandeauxPortails_Low_Results.push(Titre);
          }
     }
     BandeauxPortails_TextChanged_running_Low = 0;
     if(BandeauxPortails_TextChanged_running_Up==0) BandeauxPortails_TextChanged_Merge(id);
}

window.BandeauxPortails_TextChanged = function(id){
     if(BandeauxPortails_TailleListe==0) return;
     var Select = document.getElementById( id ) ;
     var idInput = id.split('Select').join('Input');
     var Input = document.getElementById(idInput) ;
     if((!Input)||(!Select)) return;
     var Value = Input.value;
     Value = Value.replace(/.*\|/g, "");
     if(Value=='') return;
     BandeauxPortails_TextChanged_RequestLow(Value, id);
     BandeauxPortails_TextChanged_RequestUp(Value, id);
};

/////////////////////////////////////////////////////////////////////////////////// Fonctions actives au chargement de la page

function BandeauxPortails_CreateUl(){
      var CatLinks = document.getElementById('catlinks');
      if(!CatLinks) return;
      var Bandeau = document.createElement('ul');
      Bandeau.id = 'bandeau-portail';
      Bandeau.className = 'bandeau-portail';
      CatLinks.parentNode.insertBefore(Bandeau,CatLinks);
}

function BandeauxPortails_ModifyUl(){
      var BandeauUl = document.getElementById('bandeau-portail');
      if(!BandeauUl) return;
      var BandeauLi = BandeauUl.getElementsByTagName('li');
      for(var a=0;a<BandeauLi.length;a++){
            Li = BandeauLi;
            var Lien = Li.getElementsByTagName('a');
            if(Lien){
                  var TitreDecode = Lien.title.split('Portail:').join('');
                  TitreDecode = TitreDecode.replace(/ \(page inexistante\)/g, "");
                  var Titre = encodeURIComponent(TitreDecode);
                  var SpanLien = Lien.parentNode;
                  SpanLien.id = 'lienPortail_' + a;
                  SpanLien.innerHTML += ' • '
                                       +'<a href="javascript:BandeauxPortails_SupprOne(\''+Titre+'\')" title="Supprimer le bandeau de portail '+TitreDecode+'">(-)</a>'
                                       +' • '
                                       +'<a href="javascript:BandeauxPortails_ModifyOne(\''+a+'\',\''+Titre+'\')" title="Modifier le bandeau de portail '+TitreDecode+'">(±)</a>';
            }
      }
      var BandeauInexistant = BandeauUl.getElementsByTagName('a');
      for(var a=100;a<(BandeauInexistant.length+100);a++){
            if($(BandeauInexistant).hasClass('new')){
                  var Lien = BandeauInexistant;
                  if(Lien.title.indexOf("Portail:")==-1){
                        var TitreDecode = Lien.innerHTML.split('Modèle:Portail').join('');
                        TitreDecode = TitreDecode.replace(/^ /,'');
                        Titre = encodeURIComponent(TitreDecode).replace(/'/g,"ZAPPOSTROPHE");
                        var NewLi = document.createElement('li');
                        NewLi.innerHTML = '<span id="lienPortail_' + a + '" >'
                                         +'<a class="new" href="' + Lien.href + '" title="'+Lien.title+'" >'+TitreDecode+'</a>'
                                         +' • '
                                         +'<a href="javascript:BandeauxPortails_SupprOne(\''+Titre+'\')" title="Supprimer le bandeau de portail '+TitreDecode+'">(-)</a>'
                                         +' • '
                                         +'<a href="javascript:BandeauxPortails_ModifyOne(\''+a+'\',\''+Titre+'\')" title="Modifier le bandeau de portail '+TitreDecode+'">(±)</a>';
                        Lien.parentNode.insertBefore(NewLi, Lien);
                        Lien.parentNode.removeChild(Lien);
                  }
            }
      }
      var AddLi = document.createElement('li');
      AddLi.id = 'lienPortail_add';
      AddLi.innerHTML += '<span class="bandeau-portail-element">'
                        +'<span class="bandeau-portail-texte" id="BandeauxPortails_Add" >'
                        +'<a href="javascript:BandeauxPortails_AddOne()" title="Ajouter un bandeau de portail" >(+)</a>'
                        +'</span>'
                        +'</span>';
      BandeauUl.appendChild(AddLi);
      BandeauxPortails_Update();
}

function BandeauxPortails(){
      var Homonymie = document.getElementById("homonymie");
      var UlBandeaux = document.getElementById('bandeau-portail');
      if( Homonymie && !UlBandeaux) return;

      if(!UlBandeaux) BandeauxPortails_CreateUl();
      BandeauxPortails_ModifyUl();
}

if ( ( mw.config.get( 'wgAction' ) === 'view' || mw.config.get( 'wgAction' ) === 'purge' ) && mw.config.get( 'wgNamespaceNumber' ) === 0 ) {
	$( BandeauxPortails );
}

//</nowiki></pre>
// ====================================================================================================================
// ==================================================================================================================== FIN DU CODE
//</source>