_ _    _ _____  ___   __                       
 __      _(_) | _(_)___ / ( _ ) / /_   ___ ___  _ __ ___  
 \ \ /\ / / | |/ / | |_ \ / _ \| '_ \ / __/ _ \| '_ ` _ \ 
  \ V  V /| |   <| |___) | (_) | (_) | (_| (_) | | | | | |
   \_/\_/ |_|_|\_\_|____/ \___/ \___(_)___\___/|_| |_| |_|

Utilisateur:Dr Brains/LiveRC/BandeauPortail.js

Dans le monde d'aujourd'hui, Utilisateur:Dr Brains/LiveRC/BandeauPortail.js est devenu un sujet d'une grande pertinence et d'un grand intérêt pour une grande variété de personnes. Que ce soit en raison de son impact sur la société, de sa pertinence historique ou de son influence sur la culture populaire, Utilisateur:Dr Brains/LiveRC/BandeauPortail.js est un sujet qui suscite curiosité et débat dans différents domaines. Dans cet article, nous explorerons les différentes facettes et perspectives liées à Utilisateur:Dr Brains/LiveRC/BandeauPortail.js, en analysant son importance et ses implications dans le monde d'aujourd'hui. Grâce à une approche multidisciplinaire, nous chercherons à approfondir la compréhension de Utilisateur:Dr Brains/LiveRC/BandeauPortail.js, en offrant une vision globale qui permet aux lecteurs d'approfondir ce sujet fascinant et d'élargir leurs connaissances à ce sujet.
/* 
 --------------------------------------------------------------------------------------
 ---------LLLL---------III--------------------------RRRRRRRRRR--------CCCCC------------
 ---------LLLL---------III--------------------------RRRRRRRRRRRR----CCCCCCCCC----------
 ---------LLLL--------------------------------------RRR------RRR---CCC-----CCC---------
 ---------LLLL---------III--VV-----VV--EEEEEEEEE----RRR------RRR--CCC------------------
 ---------LLLL---------III---VV---VV---EEE----------RRRRRRRRRRR---CCC------------------
 ---------LLLL---------III---VV---VV---EEEEEE-------RRRRRRRRRR----CCC------------------
 ---------LLLL---------III----VV-VV----EEEEEE-------RRR-----RRR----CCC-----CCC---------
 ---------LLLLLLLLLLL--III----VVVVV----EEE----------RRR------RRR----CCCCCCCCC----------
 ---------LLLLLLLLLLL--III-----VVV-----EEEEEEEEE----RRR-------RRR-----CCCCC------------
 --------------------------------------------------------------------------------------
 
'''Extension de LiveRC'''
 
Permet d'améliorer la prévisualisation avec les fonctions de ]

* Licence : ...?
* Documentation : ]
* Auteur : ]
* Développement et maintenance :

 
{{Catégorisation JS|LiveRC}}

<source lang=javascript> */

if (typeof(lrcHooks)!="undefined") { // DÉBUT IF
 

///////////////////////// VARIABLES ////////////////////////////////////////////////////////

//// PARAMÈTRES PERSONNALISABLES ////

var lrcBandeauPortailVariables = {
     BP_MinoreditState   : "1",        // Modification mineure ( -1 = défaut ; 0 = jamais ; 1 = toujours )
     BP_WatchthisState   : "nochange", // Suivre la page modifiée ( "watch", "unwatch", "preferences", "nochange" )
     BP_suggestion_delay : 200,   // Délai avant les suggestions, en ms
     BP_list_size        : 5,     // Taille de la liste déroulante (en items)
     BP_list_items       : 10,    // Nombre de bandeaux suggérés lors de la recherche (maximum autorisé : 4999 pour les sysop et les bots, 499 pour les autres utilisateurs)
     BP_list_down        : false, // Permet d'afficher la liste de suggestion vers le bas
     BP_ShowInline       : false, // Afficher sur une seule ligne
     BP_autocommit       : true,  // Permet d'enregistrer automatiquement la modification
     BP_SkipRecap        : false  // Ne pas demander de confirmation
}

//// TEXTES ////

lrcTexts   = "(–)";
lrcTexts  = "Supprimer le bandeau de portail";
lrcTexts    = "Voulez-vous vraiment supprimer le bandeau de portail";
lrcTexts      = "(+)";
lrcTexts     = "Ajouter un bandeau de portail";
lrcTexts          = "OK";
lrcTexts      = "Annuler";
lrcTexts   = "(±)";
lrcTexts  = "Modifier les bandeaux de portail";
lrcTexts        = "Édition mineure";
lrcTexts        = "Suivre cette page";
lrcTexts    = "Pas de changement";
lrcTexts     = "Préférences";
lrcTexts         = "Oui";
lrcTexts          = "Non";
lrcTexts    = "Nouveau modèle";

UnTranslatedTexts = "] : ";


// Paramètres de personnalisation
lrcParamDesc = 'Paramètres de l’extension BandeauPortail';
lrcParamDesc = 'BandeauPortail';

lrcParamDesc   = "Modification mineure";
lrcParamDesc   = "Suivre la page modifiée";
lrcParamDesc = "Délai avant les suggestions, en ms";
lrcParamDesc        = "Taille de la liste déroulante (en items)";
lrcParamDesc       = "Nombre de bandeaux suggérés lors de la recherche (maximum autorisé : 4999 pour les sysop et les bots, 499 pour les autres utilisateurs)";
lrcParamDesc        = "Afficher la liste de suggestion vers le bas";
lrcParamDesc       = "Afficher sur une seule ligne";
lrcParamDesc       = "Publication automatique";
lrcParamDesc        = "Ne pas demander de confirmation";

lrcParamDesc   = " Texte du lien pour supprimer un bandeau de portail";
lrcParamDesc  = " Infobulle du lien pour supprimer un bandeau de portail";
lrcParamDesc    = " Message de confirmation";
lrcParamDesc      = " Texte du lien pour ajouter un bandeau de portail";
lrcParamDesc     = " Infobulle du lien pour ajouter un bandeau de portail";
lrcParamDesc          = " Texte du bouton de validation";
lrcParamDesc      = " Texte du bouton d’annulation";
lrcParamDesc   = " Texte du lien pour modifier les bandeaux de portail";
lrcParamDesc  = " Infobulle du lien pour modifier les bandeaux de portail";
lrcParamDesc     = " Début du résumé de modification";
lrcParamDesc        = " Infobulle pour boutons \"Édition mineure\"";
lrcParamDesc        = " Infobulle pour boutons \"Suivre cette page\"";
lrcParamDesc    = " Infobulle pour boutons : Pas de changement";
lrcParamDesc     = " Infobulle pour boutons : Préférences";
lrcParamDesc         = " Infobulle pour boutons : Oui";
lrcParamDesc          = " Infobulle pour boutons : Non";
lrcParamDesc    = " Texte \"Nouveau modèle\" dans le récapitulatif";


//// VARIABLES NON PERSONNALISABLES ////

LiveRC_Config = new Array();

LiveRC_Config = {
     Li              : new Array(),
     Form            : new Array(),
     Input           : new Array(),
     Select          : new Array(),
     Exist           : new Array(),
     BandeauName     : new Array(),
     suggest_running : new Array()
}

LiveRC_Config
LiveRC_Config = 2000;
LiveRC_Config = false ;
LiveRC_Config = 0 ;
LiveRC_Config = "" ;
LiveRC_Config = "";
LiveRC_Config = "";
LiveRC_Config = "";
LiveRC_Config = 1000;
LiveRC_Config = mw.config.get('wgFormattedNamespaces')+':';
LiveRC_Config = false;
LiveRC_Config = false;
LiveRC_Config = new Array();
LiveRC_Config = false;
LiveRC_Config = false;

var lrcBandeauPortailVariables_Custom = new Array(); 
var Custom_lrcBandeauPortailVariables = new Array(); 
function LiveRC_getBandeauPortailVariables(text){
  if(typeof(lrcBandeauPortailVariables_Custom)!="undefined") return lrcBandeauPortailVariables_Custom;
  if(typeof(Custom_lrcBandeauPortailVariables)!="undefined") return Custom_lrcBandeauPortailVariables;
  return lrcBandeauPortailVariables;
}

///////////////////////// LANCEMENT ////////////////////////////////////////////////////////

importStylesheetURI('//fr.wikipedia.org/w/index.php?title='
                  + 'MediaWiki:Gadget-LiveRC.js/Extensions/BandeauPortail.css'
                  + '&action=raw&ctype=text/css'
);

function lrcRunBandeauPortail(data){
    LiveRC_Config = false;
    LiveRC_Config = LiveRC_getBandeauPortailVariables("BP_MinoreditState");
    LiveRC_Config = LiveRC_getBandeauPortailVariables("BP_WatchthisState");
    var Preview = document.getElementById("livePreview");
    if(!Preview || !data) return;
    LiveRC_Config = data.page
    if(getNamespaceInfoFromPage(LiveRC_Config)!=0) return;
    for(var El in LiveRC_Config){
        while(LiveRC_Config.length!=0) LiveRC_Config.pop();
    }
    while(LiveRC_Config.length!=0) LiveRC_Config.pop();
    var Homonymie = getElementWithId("homonymie", "*", Preview);
    var UlBandeaux = getElementWithId('bandeau-portail', "ul", Preview);
    if( Homonymie && !UlBandeaux) return; 
    if(!UlBandeaux) UlBandeaux = lrcBandeauxPortails_CreateUl(Preview);
    lrcBandeauxPortails_AddLink(UlBandeaux);
    lrcBandeauPortail_getOldPageContent(LiveRC_Config, true);
}
 
function  lrcBandeauPortail_AvoidEditMode(){
    LiveRC_Config = false;
}

////////////////////////////////////////// HOOKS
 
LiveRC_AddHook("AfterPreviewArticle", lrcRunBandeauPortail); 


LiveRC_AddHook("AfterPreviewDiff", lrcBandeauPortail_AvoidEditMode);
LiveRC_AddHook("AfterPreviewHistory", lrcBandeauPortail_AvoidEditMode);
LiveRC_AddHook("AfterPreviewContribs", lrcBandeauPortail_AvoidEditMode);
LiveRC_AddHook("AfterPreviewDeletedContribs", lrcBandeauPortail_AvoidEditMode);
LiveRC_AddHook("AfterPreviewLog", lrcBandeauPortail_AvoidEditMode);
LiveRC_AddHook("AfterPreviewFilter", lrcBandeauPortail_AvoidEditMode);
LiveRC_AddHook("AfterPreviewMove", lrcBandeauPortail_AvoidEditMode);
LiveRC_AddHook("AfterPreviewProtect", lrcBandeauPortail_AvoidEditMode);
LiveRC_AddHook("AfterPreviewDelete", lrcBandeauPortail_AvoidEditMode);
LiveRC_AddHook("AfterPreviewBlock", lrcBandeauPortail_AvoidEditMode);
LiveRC_AddHook("AfterPreviewRevisiondelete", lrcBandeauPortail_AvoidEditMode);
LiveRC_AddHook("AfterPreviewWhatlinkshere", lrcBandeauPortail_AvoidEditMode);

function defineCustomBandeauPortailVariable(textcode, BandeauPortailVariable){
  if(typeof(lrcBandeauPortailVariables)!=="undefined")
    Custom_lrcBandeauPortailVariables = BandeauPortailVariable;
}
LiveRC_AddHook("AfterFillParamPanel", function(){
    LiveRC_ManageParams_Fill(lrcBandeauPortailVariables, "lrcBandeauPortailVariables");
});

function lrcBandeauxPortails_TransformOptions(){
  var InputsToTransform = new Array();
  var MEOptions = [
   {value:"-1",text:lrcMakeText("BP_RadioDefault")},
   {value:"0",text:lrcMakeText("BP_RadioNo")},
   {value:"1",text:lrcMakeText("BP_RadioYes")}
  ];
  InputsToTransform = MEOptions;
  var WLOptions = [
   {value:"nochange",text:lrcMakeText("BP_RadioNoChange")},
   {value:"preferences",text:lrcMakeText("BP_RadioDefault")},
   {value:"unwatch",text:lrcMakeText("BP_RadioNo")},
   {value:"watch",text:lrcMakeText("BP_RadioYes")}
  ];
  InputsToTransform = WLOptions;
  LiveRC_ManageParams_CheckInputsToTransform(InputsToTransform)
}
LiveRC_AddHook("AfterCreateParamPanel", lrcBandeauxPortails_TransformOptions);



//<source lang=javascript><pre><nowiki>

function lrcBandeauxPortails_CreateUl(Preview){
      var Bandeau = document.createElement('ul');
      Bandeau.id = 'bandeau-portail';
      Bandeau.className = 'bandeau-portail';
      var CatLinks = getElementWithId('catlinks', 'div', Preview);
      if(CatLinks){
            CatLinks.parentNode.insertBefore(Bandeau,CatLinks);
      }else{
            Preview.appendChild(Bandeau);
      }
      return Bandeau;
}

function lrcBandeauxPortails_AddLink(UlBandeaux){
      var Li = document.createElement('li');
      var Link = document.createElement('a');
      Link.appendChild(document.createTextNode(lrcMakeText("BP_ModifyLinkText")));
      Link.title = lrcMakeText("BP_ModifyLinkTitle");
      Link.href = "javascript:;";
      Link.onclick = function (){
            lrcBandeauxPortails_ModifyUl(lrcBandeauxPortails_CheckBandeaux(LiveRC_Config));
            return false;
      };
      Li.appendChild(Link);
      UlBandeaux.appendChild(Li);
}

// RÉCUPÉRATION DU CONTENU ACTUEL DE LA PAGE PREVISUALISEE (asynchrone ou synchrone)
 
function lrcBandeauPortail_getOldPageContent(Page, Mode){
    var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + encodeURIComponent(Page) + '&action=raw';
    wpajax.http({ url: URL, 
                  async : Mode,
                  onSuccess: lrcBandeauPortail_UpdateOldPageContent
    });
}

function lrcBandeauPortail_UpdateOldPageContent(Req, data){
    try{
        LiveRC_Config = Req.responseText;
    }catch(e){
        LiveRC_Config = "";
    }
}

function lrcBandeauxPortails_CheckBandeaux(Contenu){
    var Bandeaux = new Array();
    Contenu = Contenu.replace(/\{\{portail/ig, "\{\{Portail");
    Contenu = Contenu.replace(/\{\{Portail /ig, "\{\{Portail\|");
    var Reg = new RegExp("\\{\\{Portail\\|*\\}\\}", "ig")
    var matches = Contenu.match(Reg);
    if(matches!=null){
        for(var a=0,l=matches.length;a<l;a++){
            var ParamsModele = matches.split('{{Portail|').split('}}') + '|';
            ParamsModele = lrcBandeauxPortails_CleanModele(ParamsModele);
            while(ParamsModele.indexOf('|')!=-1){
                var NewParam = ParamsModele.split('|');
                if(NewParam!='') Bandeaux.push(NewParam);
                ParamsModele = ParamsModele.split(NewParam+'|');               
            }
        }
    }
    return Bandeaux;
}

// Nettoyage modèle (espaces, retour à la ligne, pipes)
function  lrcBandeauxPortails_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;
}

///////////////////////// TRANSFORMATIONS ////////////////////////////////////////////////////////

function lrcBandeauxPortails_ModifyUl(Bandeaux){
      var Preview = document.getElementById("livePreview");
      if(!Preview) return;
      var BandeauUl = getElementWithId('bandeau-portail', 'ul', Preview);
      if(!BandeauUl) return;
      var OldBandeauUlForm = getElementWithId('bandeau-portail-form', 'ul', Preview);
      if(OldBandeauUlForm) OldBandeauUlForm.parentNode.removeChild(OldBandeauUlForm);
      for(var El in LiveRC_Config){
            while(LiveRC_Config.length!=0) LiveRC_Config.pop();
      }
      var BandeauForm = document.createElement('ul');
      BandeauForm.id = 'bandeau-portail-form';
      for(var a=0,l=Bandeaux.length;a<l;a++){
            if(a>2000 || !Bandeaux) continue;
            var NewLI = document.createElement('li');
            BandeauForm.appendChild(NewLI);
            NewLI.appendChild(lrcBandeauxPortails_CreateForm(Bandeaux, a));
            LiveRC_Config.Li = NewLI;
      }
      var Inputs = lrcBandeauxPortails_CreateInputs();
      BandeauForm.appendChild(Inputs);
      BandeauUl.style.display = "none";
      BandeauUl.parentNode.insertBefore(BandeauForm, BandeauUl);
      if(Bandeaux.length==0) lrcBandeauxPortails_AddNewForm(Inputs.getElementsByTagName('input'));
      BandeauForm.getElementsByTagName("input").focus();
}

function lrcBandeauxPortails_CreateForm(Bandeau, Index){
      var Li = document.createElement('li')
      var Form = document.createElement("form");
      Form.onsubmit = function(){
            lrcBandeauPortail_CheckForms();
            return false;
      };
      var Input = document.createElement("input");
      Input.className = "Bandeau_Input";
      Input.type = "text";
      Input.value = Bandeau;
      Input.onkeyup = function () { 
            var FormIndex = lrcBandeauPortail_getIndex(this, LiveRC_Config.Input);
            window.setTimeout("lrcBandeauPortail_TextChanged("+FormIndex+");", LiveRC_getBandeauPortailVariables("BP_suggestion_delay "));
      }
      var Select = document.createElement('select');
      Select.style.display = "none";
      Select.onclick = function () { 
            var FormIndex = lrcBandeauPortail_getIndex(this, LiveRC_Config.Select);
            lrcBandeauPortailText_replace(FormIndex);
      }
      var ExistIcon = document.createElement('span');
      ExistIcon.innerHTML = lrcMakeIcon("SuggestNoExistIcon").split("$1").join("").split("  ").join(" ");
      var SupLink = document.createElement('input');
      SupLink.value = lrcMakeText("BP_RemoveLinkText");
      SupLink.title = lrcMakeText("BP_RemoveLinkTitle") + " « "+Bandeau+" »";
      SupLink.type = "button";
      SupLink.onclick = function(){
            lrcBandeauxPortails_DeleteForm(this)
            return false;
      }
      SupLink.onselect = function(){
            lrcBandeauxPortails_DeleteForm(this)
            return false;
      }
      Form.appendChild(Input);
      Form.appendChild(Select);
      Form.appendChild(ExistIcon);
      Form.appendChild(SupLink);
      LiveRC_Config.Form = Form;
      LiveRC_Config.Input = Input;
      LiveRC_Config.Select = Select;
      LiveRC_Config.Exist = ExistIcon;
      LiveRC_Config.BandeauName = Bandeau;
      LiveRC_Config = false;
      Li.appendChild(Form);
      lrcBandeauPortail_TextChanged(Index);
      return Li;
}

function lrcBandeauxPortails_CreateInputs(){
      var Li = document.createElement("li");
      var Form = document.createElement("form");
      Form.onsubmit = function(){
            return false;
      };
      var AddInput = document.createElement('input');
      AddInput.value = lrcMakeText("BP_AddLinkText");
      AddInput.title = lrcMakeText("BP_AddLinkTitle");
      AddInput.type = "button";
      AddInput.onclick = function (){
            lrcBandeauxPortails_AddNewForm(this);
            return false;
      };
      AddInput.onselect = function (){
            lrcBandeauxPortails_AddNewForm(this);
            return false;
      };
      var OKInput = document.createElement("input");
      OKInput.type = "button";
      OKInput.value = lrcMakeText("BP_InputOK");
      OKInput.onclick = function(){
            lrcBandeauPortail_CheckForms();
      };
      OKInput.onselect = function(){
            lrcBandeauPortail_CheckForms();
      };
      var CancelInput = document.createElement("input");
      CancelInput.type = "button";
      CancelInput.value = lrcMakeText("BP_InputCancel");
      CancelInput.onclick = function(){
            lrcBandeauPortail_CloseForms();
      };
      CancelInput.onselect = function(){
            lrcBandeauPortail_CloseForms();
      };
      Form.appendChild(AddInput);
      Form.appendChild(OKInput);
      Form.appendChild(CancelInput);
      Form.appendChild(lrcBandeauxPortails_CreateMinoreditAndWatchthisButtons());
      if(!LiveRC_getBandeauPortailVariables("BP_ShowInline")) Li.appendChild(document.createElement("br"))
      Li.appendChild(Form);
      return Li;
}

function lrcBandeauxPortails_CreateMinoreditAndWatchthisButtons(){
  var Span = document.createElement('span');
  Span.id = "lrcBandeauxPortails_RadioBoxes";

  var MinorValue = LiveRC_Config;
  var WatchValue = LiveRC_Config;
 
  var MinorOneChecked =   ( (MinorValue=="-1") ? 'checked="checked" ' : '' );
  var MinorTwoChecked =   ( (MinorValue=="0")  ? 'checked="checked" ' : '' );
  var MinorThreeChecked = ( (MinorValue=="1")  ? 'checked="checked" ' : '' );
  var WatchOneChecked =   ( (WatchValue=="preferences") ? 'checked="checked" ' : '' );
  var WatchTwoChecked =   ( (WatchValue=="unwatch")     ? 'checked="checked" ' : '' );
  var WatchThreeChecked = ( (WatchValue=="watch")       ? 'checked="checked" ' : '' );
  var WatchFourChecked =  ( (WatchValue=="nochange")    ? 'checked="checked" ' : '' );

  var RadioBox = '&nbsp;&nbsp;'
               + '<span style="border:1px dotted silver;padding:0.2em;padding-top:0.5em">'
               + '<label for="MinorEditStatus">'+lrcMakeText("BP_Minoredit")+'</label>'
               + '&nbsp;'
               + '<input value="-1" type="radio" name="MinorEditStatus" '+MinorOneChecked+' style="cursor:pointer;" '
               + 'title="'+lrcMakeText("BP_Minoredit")+' : '+lrcMakeText("BP_RadioDefault")+'" />'
               + '<input value="0" type="radio" name="MinorEditStatus" '+MinorTwoChecked+' style="cursor:pointer;" '
               + 'title="'+lrcMakeText("BP_Minoredit")+' : '+lrcMakeText("BP_RadioNo")+'" />'
               + '<input value="1" type="radio" name="MinorEditStatus" '+MinorThreeChecked+' style="cursor:pointer;" '
               + 'title="'+lrcMakeText("BP_Minoredit")+' : '+lrcMakeText("BP_RadioYes")+'" />'
               + '</span>'
               + '&nbsp;&nbsp;'
               + '<span style="border:1px dotted silver;padding:0.2em;padding-top:0.5em">'
               + '<label for="WatchStatus">'+lrcMakeText("BP_Watchthis")+'</label>'
               + '&nbsp;'
               + '<input value="preferences" type="radio" name="WatchStatus" '+WatchOneChecked+' style="cursor:pointer;" '
               + 'title="'+lrcMakeText("BP_Watchthis")+' : '+lrcMakeText("BP_RadioDefault")+'" />'
               + '<input value="unwatch" type="radio" name="WatchStatus" '+WatchTwoChecked+' style="cursor:pointer;" '
               + 'title="'+lrcMakeText("BP_Watchthis")+' : '+lrcMakeText("BP_RadioNo")+'" />'
               + '<input value="watch" type="radio" name="WatchStatus" '+WatchThreeChecked+' style="cursor:pointer;" '
               + 'title="'+lrcMakeText("BP_Watchthis")+' : '+lrcMakeText("BP_RadioYes")+'" />'
               + '<input value="nochange" type="radio" name="WatchStatus" '+WatchFourChecked+' style="cursor:pointer;" '
               + 'title="'+lrcMakeText("BP_Watchthis")+' : '+lrcMakeText("BP_RadioNoChange")+'" />'
               + '</span>'
  Span.innerHTML = RadioBox;
  return Span;
}  

function lrcBandeauxPortails_DeleteForm(Input){
      var ThisForm = Input.parentNode;
      var FormIndex = lrcBandeauPortail_getIndex(ThisForm, LiveRC_Config.Form);
      var Text = lrcMakeText("BP_RemoveConfirm") + " « "+LiveRC_Config.BandeauName+" »"
      var ConfirmFunction = function(){
            var ThisLi = ThisForm.parentNode;
            ThisLi.parentNode.removeChild(ThisLi);
      }
      if(LiveRC_getBandeauPortailVariables("BP_SkipRecap")){
            ConfirmFunction();
      }else{
            LiveRC_confirm(Text, ConfirmFunction);
      }
}

function lrcBandeauxPortails_AddNewForm(Input){
      LiveRC_Config++;
      var Li = Input.parentNode.parentNode;
      var NewLi = document.createElement('li');
      Li.parentNode.insertBefore(NewLi, Li);
      NewLi.appendChild(lrcBandeauxPortails_CreateForm("", LiveRC_Config));
      LiveRC_Config.Li] = NewLi;
}

function lrcBandeauPortail_CloseForms(){
      var Preview = document.getElementById("livePreview");
      if(!Preview) return;
      var BandeauUl = getElementWithId('bandeau-portail', 'ul', Preview);
      if(!BandeauUl) return;
      var OldBandeauUlForm = getElementWithId('bandeau-portail-form', 'ul', Preview);
      if(OldBandeauUlForm) OldBandeauUlForm.parentNode.removeChild(OldBandeauUlForm);
      BandeauUl.style.display = "";
}

////////////////////////////////////////////////////// SUGGESTIONS


function lrcBandeauPortail_TextChanged(FormIndex){
    if ( LiveRC_Config ) return ;
    var text = LiveRC_Config.Input;
    var v = text.value ;
    if(v==="") return;
    LiveRC_Config = true ;
    var APILimit = LiveRC_Config.APIlimit;
    if(LiveRC_getBandeauPortailVariables("BP_list_items")>APILimit) lrcBandeauPortailVariables_Custom.list_items = APILimit; // API max
    var URL =  mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&generator=allpages&gapnamespace=10&gaplimit='+LiveRC_getBandeauPortailVariables("BP_list_items")+'&gapfrom=Portail%20'+encodeURIComponent(v)+'&prop=info';
    wpajax.http({ url: URL, 
                  onSuccess: lrcBandeauPortailText_changed_getSuggests,
                  index:FormIndex
    });
}

function lrcBandeauPortailText_changed_getSuggests(Req, data){
    var xml = Req.responseXML ;
    if ( xml == null ) return ;
    var titles = new Array();
    var isredirect = new Array();
    var pages = xml.getElementsByTagName("page") ;
    for( var i=0,l=pages.length;i<l;i++) {
        var s = pages.getAttribute("title").replace(/Modèle:Portail /, "");
        titles.push ( s ) ;
        var R = pages.getAttribute("redirect");
        var Redirect = (R==null ? false : true);
        isredirect.push(Redirect);
    }
    lrcBandeauPortail_show_suggestions(titles, isredirect, data.index) ;
    LiveRC_Config = false ;
}

// AFFICHAGE DES SUGGESTIONS

function lrcBandeauPortail_show_suggestions (titles, isredirect, FormIndex) {
    var text = LiveRC_Config.Input ;
    var list = LiveRC_Config.Select ;
    var ExistIcon = LiveRC_Config.Exist;
    if(titles.length==0){
        list.style.display = "none" ;
        ExistIcon.innerHTML = lrcMakeIcon("SuggestNoExistIcon").split("$1").join("").split("  ").join(" ");
        return ;
    }  
    var TailleListe = LiveRC_getBandeauPortailVariables("BP_list_size");
    if (titles.length < TailleListe ) TailleListe = titles.length;
    var listh = TailleListe * 20 ;
    list.size = TailleListe ;
    list.style.align = "left" ;
    list.style.zIndex = 5 ;
    list.style.position = "relative" ;
    list.style.width = text.offsetWidth + "px" ;
    list.style.height = listh + "px" ;
    if (LiveRC_getBandeauPortailVariables("BP_list_down")) {
        list.style.top = parseInt(text.offsetHeight) + "px";
        list.style.marginBottom = "-" + ((TailleListe * 20) + parseInt(text.offsetHeight)) + "px" ;
    }else{
        list.style.marginTop = "-" + (TailleListe * 20) + "px" ;
    }
    list.style.marginLeft = "-" + text.offsetWidth + "px" ;

    while ( list.firstChild ) list.removeChild ( list.firstChild ) ;
    for ( var i = 0 ; i < titles.length ; i++ ) {
        var opt = document.createElement ( "option" ) ;
        var ot = document.createTextNode ( titles ) ;
        opt.appendChild ( ot ) ;
        opt.value = titles;
        list.appendChild ( opt ) ;
        if(isredirect) opt.setAttribute('style', 'font-style:italic !important;');
    }  
    list.onkeyup = lrcBandeauPortail_KeypressedOnList;
    list.style.display = "inline" ;
    var first_title = titles.shift () ;
    LiveRC_Config = text.value;
    ExistIcon.innerHTML = lrcMakeIcon("SuggestExistIcon").split("$1").join("Modèle:Portail "+first_title);
    if ( first_title == LiveRC_Config ) return ;
    var suggestion = first_title;
    if (text.createTextRange) {
        var ra = text.createTextRange();
        ra.moveStart("character", LiveRC_Config.length);
        ra.moveEnd("character", suggestion.length);
        ra.select();
    } else if( text.setSelectionRange ) {
        text.setSelectionRange( LiveRC_Config.length, suggestion.length );
    } else {
        text.selectionStart = LiveRC_Config.length ;
        text.selectionEnd = suggestion.length ;
    }
}

// SÉLECTION D'UNE SUGGESTION AU CLAVIER

function lrcBandeauPortail_KeypressedOnList(e){
    if (!e) var e = window.event;
    if (e.keyCode != 13) return;
    lrcBandeauPortailText_replace(lrcBandeauPortail_getIndex(this, LiveRC_Config.Select))
}

// REMPLACEMENT DU CHAMP DE TEXTE PAR UNE SUGGESTION

function lrcBandeauPortailText_replace(Index){
    var Text = LiveRC_Config.Input;
    var TextValue = Text.value;
    var List = LiveRC_Config.Select;
    var Options = List.getElementsByTagName('option');
    for(var a=0;a<Options.length;a++){
        if(Options.selected){
            var ListValue = Options.value;
            Text.value = ListValue;
            lrcBandeauPortail_TextChanged(Index) ;
            Text.focus();
            return;
        }
    }
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// VALIDATION DU FORMULAIRE + LISTING DES BANDEAUX À ENLEVER/MODIFIER/AJOUTER 

function lrcBandeauPortail_CheckForms(){
      var Preview = document.getElementById("livePreview");
      if(!Preview) return;
      var OldBandeauUlForm = getElementWithId('bandeau-portail-form', 'ul', Preview);
      var RadioBoxes = document.getElementById("lrcBandeauxPortails_RadioBoxes");
      if(!OldBandeauUlForm || !RadioBoxes) return;
      while(LiveRC_Config.length!=0) LiveRC_Config.pop();
      var Inputs = OldBandeauUlForm.querySelectorAll('input.Bandeau_Input');
      if(Inputs.length==0) return;
      for(var a=0,l=Inputs.length;a<l;a++){
            if(Inputs.value!="") LiveRC_Config.push(Inputs.value);
      }
      var RecapText = "<ul>"+ lrcMakeText("BP_TemplateRecap")+" : "
                      +"<li>{{Portail|"+LiveRC_Config.join("|")+"}}</li>"
                      +"</ul>";

      var RadioNameTexts = {"MinorEditStatus":"BP_Minoredit","WatchStatus":"BP_Watchthis"};
      var RadioValueTexts = {"watch":"BP_RadioYes","unwatch":"BP_RadioNo","preferences":"BP_RadioDefault","nochange":"BP_RadioNoChange","1":"BP_RadioYes","0":"BP_RadioNo","-1":"BP_RadioDefault"};

      var Radios = RadioBoxes.getElementsByTagName('input');
      for(var a=0,l=Radios.length;a<l;a++){
          var Radio = Radios;
          if(Radio.type!="radio") continue;
          if(!Radio.checked) continue;
          var BoxName = Radio.name;
          var Value = Radio.value;
          LiveRC_Config = Value;
          RecapText += "<ul>"+lrcMakeText(RadioNameTexts)+" : "
                     + "<li>"+lrcMakeText(RadioValueTexts) + "</li>"
                     +"</ul>";
      }
      var LaunchEditFunction = function(){
        LiveRC_Config = true;
        liveEdit(LiveRC_Config);
      }
      if(LiveRC_getBandeauPortailVariables("BP_SkipRecap")){
            LaunchEditFunction();
      }else{
            LiveRC_confirm(RecapText, LaunchEditFunction);
      }
}

function lrcBandeauPortail_DoEdit(){
    var Preview = document.getElementById("livePreview");
    if(!Preview || !LiveRC_Config) return;
    var TextArea = getElementWithId('wpTextbox1', 'textarea', Preview);
    if(!TextArea) return;
    if(LiveRC_getBandeauPortailVariables("BP_autocommit")) getElementWithId('editform', 'form', Preview).style.display = "none";
    var prevent_autocommit = 0;
    var NewTemplate = "{{Portail|"+LiveRC_Config.join("|")+"}}";
    var OldText = TextArea.value;
    OldText = OldText.replace(/\{\{portail/ig, "\{\{Portail");
    OldText = OldText.replace(/\{\{Portail /ig, "\{\{Portail\|");
    var Reg = new RegExp("\\{\\{Portail\\|*\\}\\}", "ig")
    var matches = OldText.match(Reg);
    if(matches!=null){
        var Replaced = false;
        for(var a=0,l=matches.length;a<l;a++){
            if(Replaced){
                OldText = OldText.replace(matches, "");
            }else{
                OldText = OldText.replace(matches, NewTemplate);
                Replaced = true;
            }
        }
    }else{          
        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/, "");
        }
        OldText = DebutModele + NewTemplate + SuiteModele;
    } 
    var Summary = lrcMakeText("RESUMESTART") +lrcMakeText("BP_CommentStart")+NewTemplate;
    var IsMinor = LiveRC_Config;
    var MinorEditCheckBox = getElementWithId("wpMinoredit", "input", Preview); 
    var MustWatchthis  = LiveRC_Config;
    var WathThisCheckBox = getElementWithId("wpWatchthis", "input", Preview);
    getElementWithId("wpTextbox1", "textarea", Preview).value = OldText;
    getElementWithId("wpSummary", "input", Preview).value = Summary;
    if(IsMinor==="1") MinorEditCheckBox.checked = true;
    if(IsMinor==="0") MinorEditCheckBox.checked = false;
    if(MustWatchthis=="watch") WathThisCheckBox.checked = true;
    if(MustWatchthis=="unwatch") WathThisCheckBox.checked = false;
    if(MustWatchthis=="nochange") WathThisCheckBox.checked = !!(LiveRC_Config]);
    if((LiveRC_getBandeauPortailVariables("BP_autocommit"))&&(prevent_autocommit != 1)){
        var Input = getElementWithId("Live_wpSave", "input", Preview);
        if(Input){
          var Params = getFormParams(Preview);
          var EditParam = new Array();
          EditParam = document.getElementsByName("wpEditToken").value;
          EditParam = OldText;
          EditParam = Summary;
          EditParam = LiveRC_Config;
          EditParam = MustWatchthis;
          EditParam = "1";
          EditParam = "1";
          var ParamsInURL = new Array();
          for(var P in EditParam){
            if(typeof(EditParam)=="string") ParamsInURL.push(P+"="+encodeURIComponent(EditParam));
          }
          ParamsInURL  = ParamsInURL.join("&")+"&wpSave=1";
          var action = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=edit';
          var headers = new Array();
          headers = 'application/x-www-form-urlencoded';
          wpajax.http({ url: action,
                        method: "POST",
                        headers: headers,
                        data: ParamsInURL,
                        onSuccess:lrcBandeauPortail_EditDone,
                        page:EditParam
          });
        }else{
            prevent_autocommit = 1;
        }
    }
    if(prevent_autocommit == 1) getElementWithId("editform", "form", Preview).style.display = "";
    LiveRC_Config = false;
}
LiveRC_AddHook("AfterPreviewEdit", lrcBandeauPortail_DoEdit);

function lrcBandeauPortail_EditDone(Req, data){
  var Page = data.page;  
  liveArticle(Page);
}

///////////////////////// DIVERS ////////////////////////////////////////////////////////

// RÉCUPÉRATION DU N° D'INDEX

function lrcBandeauPortail_getIndex( Element, TheArray ){
    for(var a in TheArray){
        if(Element === TheArray) return a;
    }
    return null;
}

// PREMIÈRE LETTRE EN MAJUSCULE

String.prototype.ucFirst = function () {
    return this.substr(0,1).toUpperCase() + this.substr(1,this.length);
}

// PREMIÈRE LETTRE EN MINUSCULE

String.prototype.lcFirst = function () {
    return this.substr(0,1).toLowerCase() + this.substr(1,this.length);
}

/* ************************************************************************************************************************************************ */
} // FIN IF

//</source>