Utilisateur:Dr Brains/AutoTemplate.js

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

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

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
// <nowiki>

if((mw.config.get('wgAction')=="edit")||(mw.config.get('wgAction')=="submit")){
    addOnloadHook(AutoTemplate_AddButton);
}

function AutoTemplate_AddButton(){
     if(!document.editform) return;
     var Toolbar = document.getElementById('toolbar');
     if(!Toolbar){
          Toolbar = document.createElement('div');
          Toolbar.id = 'toolbar';
          document.editform.insertBefore(Toolbar, document.editform.firstChild);
     }
     var button = '<img src="http://upload.wikimedia.org/wikipedia/commons/9/97/Template_button.png" heigth="23" width="23" alt="Gestion des modèles" />';
 
     var NewButton = document.createElement('a')
     NewButton.title = "Mettre à jour les modèles de la page";
     NewButton.href="javascript:AutoTemplate_OpenMenu();";
     NewButton.innerHTML = button;
     Toolbar.appendChild(NewButton);
}

function AutoTemplate_Cancel(ID){
     var MenuDiv = document.getElementById(ID);
     MenuDiv.parentNode.removeChild(MenuDiv);
}

function AutoTemplate_OpenMenu(){
     var OldMenuDiv = document.getElementById('Menu_AutoTemplate');
     if(OldMenuDiv) return;
 
     var Toolbar = document.getElementById('toolbar');
     var MenuDiv = document.createElement('div');
     MenuDiv.id = 'Menu_AutoTemplate';
     Toolbar.parentNode.insertBefore(MenuDiv, Toolbar.nextSibling);
     var HTMLMenu = MenuDiv
     MenuDiv.innerHTML = '<input type="button" onclick="AutoTemplate_Cancel(\'Menu_AutoTemplate\');" onselect="AutoTemplate_Cancel(\'Menu_AutoTemplate\');" value="Annuler" /><br/>'
                        +'<table width="100%">'
                        +'<tr>'
                        +'<td width=30%" valign="top"><ul id="Menu_AutoTemplate_TemplatesList"></ul></td>'
                        +'<td width="70%" id="Menu_AutoTemplate_Form" valign="top"></td>'
                        +'</tr></table>';
     AutoTemplate_SearchTemplates();
}

function AutoTemplate_SearchTemplates(){
     var AllTemplates = new Array();
     var AllTemplatesName = new Array();
     var Texte = document.getElementsByTagName('textarea')[0].value;
     var count = 15;
     while(Texte.indexOf('}}')!=-1){
          count++
          var Modele = Texte.split('}}')[0];
          var AvantFin =  Texte.split('}}')[0] + '}}';
          if(count<10) alert(Modele);
          while(Modele.indexOf('{{')!=-1){
               var AvantModele = Modele.split('{{')[0] + '{{';
               Modele = Modele.split(AvantModele).join('');
          }
          CodedModele = Modele.replace(/</g,'&lt;');
          CodedModele = CodedModele.replace(/>/g,'&gt;');
          AllTemplates.push('{{' + CodedModele + '}}');
          if(count<10) alert(Modele);
          var NomModele = Modele;
          while(NomModele.indexOf('|')!=-1){ NomModele = NomModele.split('|')[0]; }
          NomModele = NomModele.replace(/\n/g,"");
          AllTemplatesName.push(NomModele);
          if(count<10) alert(NomModele);
          var patt = "{{" + Modele + "}}";
          var Result = "DEBUTMODELE" + Modele + "FINMODELE";
          var AvantFinMod = AvantFin.split(patt).join(Result);
          Texte = Texte.split(AvantFin).join(AvantFinMod);
          if(count<10) alert(Texte);
          if(count>100) break;
     }
     var UL = document.getElementById("Menu_AutoTemplate_TemplatesList");
     for( var a=0;a<AllTemplates.length;a++){
            UL.innerHTML += '<li id="Menu_AutoTemplate_TemplatesList_'+a+'" ><a href="javascript:AutoTemplate_CreateForm('+a+');">'+AllTemplatesName[a]+'</a><input type="text" style="display:none" value="'+AllTemplates[a]+'" /></li>';            
     }
}

function AutoTemplate_CreateForm(position){
     var FormContainer = document.getElementById('Menu_AutoTemplate_Form');
     var ModeleLi = document.getElementById('Menu_AutoTemplate_TemplatesList_'+position);
     if((!FormContainer)||(!ModeleLi)) return;
     var TemplateName = ModeleLi.getElementsByTagName('a')[0].innerHTML;
     var Template = ModeleLi.getElementsByTagName('input')[0].value;
     var TemplateOldParams = new Array();
     var TemplateOldParamsCount = -1;
     if(Template.indexOf('|')!=-1) Template = Template + '|';
     Template = Template.replace(/\n/g,"");
     Template = Template.replace(/ \|/g,"\|");
     Template = Template.replace(/\| /g,"\|");
     Template = Template.replace(/ \]/g,"\]");
     Template = Template.replace(/\[ /g,"\[");
     Template = Template.replace(/ =/g,"\=");
     Template = Template.replace(/= /g,"\=");
     Template = Template.split('{{'+TemplateName + '|').join('').split('{{'+TemplateName).join('').split('}}').join('');
     Template = Template.replace(/DEBUTMODELE/g,"\{\{");
     Template = Template.replace(/FINMODELE/g,"\}\}");
     while(Template.indexOf(']]')!=-1){ 
          var DebutTemplate = Template.split('[[')[0];
          var FinTemplate = Template.split(']]')[1];
          var Lien = Template.split(DebutTemplate).join('').split(FinTemplate).join('');
          var LienCode = Lien.replace(/\[\[/g,"DEBUTLIEN");
          LienCode = LienCode.replace(/\]\]/g,"FINLIEN");
          LienCode = LienCode.replace(/\|/g,"MILIEULIEN");
          Template = Template.split(Lien).join(LienCode);
     }
     //alert(Template);
     while(Template.indexOf('|')!=-1){ 
          TemplateOldParamsCount++
          var Param = Template.split('|')[0];
          Template = Template.split(Param + '|').join('');
          Param = Param.replace(/DEBUTLIEN/g,"\[\[");
          Param = Param.replace(/FINLIEN/g,"\]\]");
          Param = Param.replace(/MILIEULIEN/g,"\|");
          TemplateOldParams.push(Param);
          if(TemplateOldParamsCount>100){alert('boucle probable'); break;}
     }
     var Page = TemplateName;
     if(Page.indexOf(mw.config.get('wgFormattedNamespaces')[10] +':')==-1) Page = mw.config.get('wgFormattedNamespaces')[10] +':' + Page;
      var url = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + Page +'&action=edit';
      var Request = new XMLHttpRequest();
      Request.open("GET", url, true);
      Request.send(null);
      Request.onreadystatechange = function() {
           if(Request.readyState == 4 && Request.status == 200) {
                  var Temp = document.createElement('div');
                  //document.body.insertBefore(Temp, document.body.firstChild);
                  Temp.innerHTML = Request.responseText; 
                  var OldText = Temp.getElementsByTagName('textarea')[0].value;
                  var AllParams = new Array();
                  var Paramcount = 15;
                  var NoParam = false;
                  if(OldText.indexOf('}}}')==-1){
                       var NoParam = true;
                  }else{
                       while(OldText.indexOf('}}}')!=-1){
                            Paramcount++
                            var Param = OldText.split('}}}')[0];
                            if(Param.indexOf('{{{')==-1){
                                 OldText = OldText.split(Param+'}}').join(Param+'FINMODELE');
                                 if(Paramcount<10) alert(OldText);
                                 if(Paramcount>100){alert('Boucle probable'); return; }
                                 if(OldText.indexOf('}}}')==-1) break;
                            }else{
                                 while(Param.indexOf('{{{')!=-1){
                                      var AvantParam = Param.split('{{{')[0] + '{{{';
                                      Param = Param.split(AvantParam).join('');
                                 }
                                 var ParamName = Param.replace(/\|.*/g,'')
                                 AllParams.push(ParamName);
                                 if(Paramcount<10) alert(ParamName);
                                 var patt = "{{{" + Param + "}}}";
                                 var Result = "DEBUTPARAM" + Param + "FINPARAM";
                                 NewText = OldText.split(patt).join(Result);
                                 if(NewText!=OldText){
                                     OldText = NewText;
                                 }else{
                                     alert('Problème');
                                 }
                                 if(Paramcount<10) alert(OldText);
                                 if(Paramcount>100){alert('Boucle probable'); return; }
                                 if(OldText.indexOf('}}}')==-1) break;
                            }
                       }
                  }
                  AllParams = AllParams.sort();
                  var SortedParams = new Array();
                  for(var b=0;b<AllParams.length;b++){
                       if((b>0)&&(AllParams[(b-1)]!=AllParams[b])) SortedParams.push(AllParams[b]);

                  }
                  var FormContent = '';
                  if(!NoParam){
                       FormContent += '<input type="text" size="100" value="{{'+TemplateName+'" /><br/>';
                       for(var c=0;c<SortedParams.length;c++){
                             var ThatParam = SortedParams[c];
                             var MatchParam = false;
                             for(var a=0;a<TemplateOldParams.length;a++){
                                    var ThisParam = TemplateOldParams[a];
                                    //alert(ThisParam +' - '+ThatParam);
                                    if(ThisParam.indexOf(ThatParam+'=')!=-1){
                                          var MatchParam = true;
                                          var THEParam = ThisParam;
                                    }
                             }
                             if(MatchParam==true){
                                   FormContent += '<input type="text" size="100" value="'+THEParam+'" /><br/>';
                             }else{
                                   FormContent += '<input type="text" size="100" value="'+ThatParam+'=" /><br/>';
                             }
                             //alert(FormContent);
                       }
                       FormContent += '<input type="text" size="100" value="}}" /><br/>';
                       FormContent += '<input type="button" onclick="AutoTemplate_Modify('+position+');" onselect="AutoTemplate_Modify('+position+');" value="Valider" />';

                  }else{
                       FormContent += '<span class="error">Ce modèle ne nécessite pas de paramètres.</span>';
                  }
                  FormContainer.innerHTML = FormContent;
           }
      }
}

function AutoTemplate_Modify(position){


}

// </nowiki>