MediaWiki:Gadget-BandeauxPages.js

Une nouvelle de Wikinews, la source d'informations que vous pouvez écrire.

Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.

  • Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
  • Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
  • Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
  • Opera : appuyez sur Ctrl + F5.
// ==================================================================================================================== DEBUT DU CODE
// ====================================================================================================================
//<pre><nowiki>

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


if(typeof(BandeauxPages_AutoEdit)=='undefined') var BandeauxPages_AutoEdit = true;         // Publication automatique

if(typeof(BandeauxPages_MinorEdit)=='undefined') var BandeauxPages_MinorEdit = true;       // Modification mineure

if(typeof(BandeauxPages_TailleListe)=='undefined') var BandeauxPages_TailleListe = 10;     // Nombre de suggestions

if(typeof(BandeauxPages_ListeBas)=='undefined') var BandeauxPages_ListeBas = false;        // Affichage des suggestions vers le bas

if(typeof(BandeauxPages_KeyboardDelay)=='undefined') var BandeauxPages_KeyboardDelay = 5;  // Délai (en secondes) lors de la sélection d'une suggestion au clavier



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

if( ((mw.config.get('wgAction')=="view")||(mw.config.get('wgAction')=="purge"))&&(mw.config.get('wgNamespaceNumber')==0)){
      $(BandeauxPages);
}else if((mw.config.get('wgAction')=="edit")&&(mw.config.get('wgNamespaceNumber')==0)){
      $(BandeauxPages_Edit);
}

function BandeauxPages(){ 
      var UlBandeaux = document.getElementById('bandeau-page');
      if(!UlBandeaux) BandeauxPages_CreateUl();
      BandeauxPages_ModifyUl();
}
 
function BandeauxPages_CreateUl(){
      var CatLinks = document.getElementById('catlinks');
      if(!CatLinks){ alert('Pas Catlinks'); return; }
      var Bandeau = document.createElement('ul');
      Bandeau.id = 'bandeau-page';
      Bandeau.className = 'bandeau-page';
      CatLinks.parentNode.insertBefore(Bandeau,CatLinks);
}
 
function BandeauxPages_ModifyUl(){
      var BandeauUl = document.getElementById('bandeau-page');
      if(!BandeauUl) return;
      var BandeauLi = BandeauUl.getElementsByTagName('li');
      for(var a=0;a<BandeauLi.length;a++){
            Li = BandeauLi[a];
            var Lien = Li.getElementsByTagName('a')[1];
            if(Lien){
                  var TitreDecode = Lien.title.split('Page:').join('')
                  TitreDecode = TitreDecode.replace(/ \(page inexistante\)/g, "");
                  var Titre = encodeURIComponent(TitreDecode).replace(/'/g, "ZAPOSTROPHE");
                  var SpanLien = Lien.parentNode
                  SpanLien.id = 'lienPortail_' + a;
                  SpanLien.innerHTML += ' • '
                                       +'<a href="javascript:BandeauxPages_SupprOne(\''+Titre+'\')" title="Supprimer le bandeau '+TitreDecode+'">(-)</a>'
                                       +' • '
                                       +'<a href="javascript:BandeauxPages_ModifyOne(\''+a+'\',\''+Titre+'\')" title="Modifier le bandeau  '+TitreDecode+'">(±)</a>';
            }          
      }
      var BandeauInexistant = BandeauUl.getElementsByTagName('a');
      for(var a=100;a<(BandeauInexistant.length+100);a++){
            if(hasClass(BandeauInexistant[(a-100)], "new")){
                  var Lien = BandeauInexistant[(a-100)];
                  if(Lien.title.indexOf("Page:")==-1){
                        var TitreDecode = Lien.innerHTML.split('Modèle:Page').join('');
                        TitreDecode = TitreDecode.replace(/^ /,'');
                        Titre = encodeURIComponent(TitreDecode);
                        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:BandeauxPages_SupprOne(\''+Titre+'\')" title="Supprimer le bandeau '+TitreDecode+'">(-)</a>'
                                         +' • '
                                         +'<a href="javascript:BandeauxPages_ModifyOne(\''+a+'\',\''+Titre+'\')" title="Modifier le bandeau '+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-page-element">'
                        +'<span class="bandeau-page-texte" id="BandeauxPages_Add" >'
                        +'<b><a href="javascript:BandeauxPages_AddOne()" title="Ajouter un bandeau" >(+)</a></b>'
                        +'</span>'
                        +'</span>';
      BandeauUl.appendChild(AddLi);
 
}
 
/////////////////////////////////////////////////////////////////////////////////// Formulaires
 
window.BandeauxPages_Cancel = function (id){ 
          var Span = document.getElementById(id); 
          Span.style.display = 'inline'; 
          var Parent = Span.parentNode; 
          var Form = Parent.getElementsByTagName('form')[0]; 
          Parent.removeChild(Form); 
}
 
window.BandeauxPages_SupprOne = function (Page) { 
          Page = Page.replace(/ZAPOSTROPHE/g, "'")
          var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href;
          var url = editlk + '&removeportail=' + Page + 'ENDR' ;
          document.location = url ;
}
 
window.BandeauxPages_ModifyOne = function ( id, portail ) {
     var Span = document.getElementById('lienPortail_' + id);
     Span.style.display = "none";
     var Form = document.createElement('form');
     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.replace(/ZAPOSTROPHE/g, "'")+'" onkeyup="BandeauxPages_TextChanged(\'SelectModify_'+id+'\')" />'
+'<input type="button" onclick="BandeauxPages_ModifyThatOne(\''+id+'\',\''+portail+'\');" onselect="BandeauxPages_ModifyThatOne(\''+id+'\',\''+portail+'\');" value="OK"/>'
+'<input type="button" onclick="BandeauxPages_Cancel(\'lienPortail_'+id+'\')" onselect="BandeauxPages_Cancel(\'lienPortail_'+id+'\')" value="Annuler"/>';
     Span.parentNode.insertBefore(Form,Span);
     document.getElementById('InputModify_'+id).focus() ;
}
 
window.BandeauxPages_ModifyThatOne = function (id, oldportail){ 
     var Input = document.getElementById('InputModify_'+id);
     var Portail = Input.value;
     if((Portail!='')&&(Portail!=oldportail)){
          Portail = Portail.substr(0,1).toUpperCase() + Portail.substr(1,Portail.length);
          var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href;
          var url = editlk + '&removeportail=' + encodeURIComponent( oldportail ) + 'ENDR&newportail=' + encodeURIComponent( Portail ) + 'ENDA';
          document.location = url ;
     }else{
          BandeauxPages_Cancel('lienPortail_'+id);
     }
}
 
window.BandeauxPages_AddOne = function (){ 
     var Span = document.getElementById('BandeauxPages_Add');
     Span.style.display = "none";
     var Form = document.createElement('form');
     Form.style.display ="inline";
     Form.innerHTML = '<select id="SelectAdd" style="display:none;" title="Suggestions de bandeaux" />'
+'<input id="InputAdd" type="text" value="" onkeyup="BandeauxPages_TextChanged(\'SelectAdd\')" />'
+'<input type="button" onclick="BandeauxPages_AddThatOne();" onselect="BandeauxPages_AddThatOne();"value="OK"/>'
+'<input type="button" onclick="BandeauxPages_Cancel(\'BandeauxPages_Add\')" onselect="BandeauxPages_Cancel(\'BandeauxPages_Add\')" value="Annuler"/>';
     Span.parentNode.insertBefore(Form,Span);
     document.getElementById('InputAdd').focus() ;
 
}
 
window.BandeauxPages_AddThatOne = function (){ 
     var Input = document.getElementById('InputAdd');
     var Portail = Input.value;
     if(Portail!=''){
          Portail = Portail.substr(0,1).toUpperCase() + Portail.substr(1,Portail.length);
          var editlk = document.getElementById('ca-edit').getElementsByTagName('a')[0].href;
          var url = editlk + '&newportail=' + encodeURIComponent( Portail ) + 'ENDA';
          document.location = url ;
     }else{
          BandeauxPages_Cancel('BandeauxPages_Add');
     }
}
 

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

var BandeauxPages_TextChanged_running = 0 ;
 
window.BandeauxPages_TextChanged = function (id){
     if ( BandeauxPages_TextChanged_running ) return ;
     if(BandeauxPages_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;
     if(Value=='') return;
     BandeauxPages_TextChanged_running = 1;
  
     //Value = Value.substr(0,1).toUpperCase() + Value.substr(1,Value.length) ;
 
     var url = mw.config.get('wgServer') + '/w/api.php?action=query&list=allpages&apnamespace=10&aplimit='+BandeauxPages_TailleListe+'&apfrom=Page%20'+Value;
 
     var BandeauxPages_Request = sajax_init_object();
     BandeauxPages_Request.open("GET", url, true);
     BandeauxPages_Request.send(null);
     BandeauxPages_Request.onreadystatechange = function() {
          if(BandeauxPages_Request.readyState == 4 && BandeauxPages_Request.status == 200) {
               Select.innerHTML = '';
 
               var Temp = document.createElement('div');
               //document.body.insertBefore(Temp, document.body.firstChild);
               Temp.innerHTML = BandeauxPages_Request.responseText;
               var Infos = Temp.getElementsByTagName('span');
               var NbOptions = 0;
               for(var a=0;a<Infos.length;a++){
                    Info = Infos[a].innerHTML;
                    if(Info.indexOf('title=')!=-1){
                         var TitrePage = Info.split('Page')[1].split('"')[0];
                         TitrePage = TitrePage.replace(/^ /,'');
                         while(TitrePage.indexOf('&amp;')!=-1){
                              TitrePage = TitrePage.split('&amp;').join("&");
                              if(TitrePage.indexOf('&amp;')==-1) break;
                         }
                         while(TitrePage.indexOf('&#039;')!=-1){
                              TitrePage = TitrePage.split('&#039;').join("'");
                              if(TitrePage.indexOf('&#039;')==-1) break;
                         }
                         TitrePageEncode = TitrePage.replace(/'/g,"ZAPOSTROPHE");
                         Select.innerHTML +=  '<option value="'+TitrePage+'" '
                                             +'onclick="BandeauxPages_TextChanged_Set(\''+idInput+'\', \''+TitrePageEncode+'\'); '
                                             +'BandeauxPages_TextChanged(\''+id+'\');" '
                                             +'>'+TitrePage+'</option>';
                         NbOptions++
                    }
               }
               if(NbOptions>0){
                    Select.onchange = function(){
                         var Selected = this.getElementsByTagName('option');
                         for(var a=0;a<Selected.length;a++){
                               if(Selected[a].selected){
                                     var TextSelected = Selected[a].value;
                                     document.getElementById(idInput).value = TextSelected;
                                     setTimeout("BandeauxPages_TextChanged(\'"+id+"\');", BandeauxPages_KeyboardDelay*1000);
                               } 
                         }
                    }

                    Select.size = NbOptions;
                    Select.style.display = 'inline';
                    Select.style.zIndex = 5 ;
                    Select.style.position = "absolute" ;
                    Input.style.width = Select.offsetWidth + "px" ;

                    if(BandeauxPages_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 = '';
               }
               BandeauxPages_TextChanged_running = 0;
          }
     }
}
 
window.BandeauxPages_TextChanged_Set = function (id, text){
     text = text.replace(/ZAPOSTROPHE/g,"'");
     document.getElementById(id).value = text; 
     document.getElementById(id).focus() ;
}

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

function BandeauxPages_Edit(){ 
     var TextArea = document.getElementById('wpTextbox1');
     if(!TextArea) return;
     var URL = location.href;
     if((URL.indexOf('&removeportail=')==-1)&&(URL.indexOf('&newportail=')==-1)) return;
     document.editform.style.display = "none";

     var EditURL = URL.substring(0, URL.indexOf("&removeportail="));
     var URL = URL.split(EditURL).join('');


     var  RemovePortalText = decodeURIComponent(URL.substring(0, URL.indexOf("ENDR")).replace(/.*=/g,''));

     var  AddPortalText = decodeURIComponent(URL.substring(0, URL.indexOf("ENDA")).replace(/.*=/g,''));

     var OldText = TextArea.value;

     // Mise en forme

     OldText = OldText.replace(/\{\{page/ig, "\{\{Page");
     OldText = OldText.replace(/\{\{Page /ig, "\{\{Page\|"); // {{Page Truc}} -> {{Page|Truc}}

     // Modèles qui n'ont rien à voir avec {{Page}} : à éviter

     OldText = OldText.replace(/\{\{Page\|actualisée/ig, "\{\{Page actualisée");
     OldText = OldText.replace(/\{\{Page\|géographique/ig, "\{\{Page géographique");


     // Recherche d'un modèle {{Page}}
     if((OldText.indexOf('{{Page|')!=-1)||(OldText.indexOf('{{page|')!=-1)){ 
// ==================================================================================== Il y a déjà un modèle {{Page}}
          var AvantModeleUp = OldText.substring(0, OldText.indexOf('{{Page|'));
          var AvantModeleLow = OldText.substring(0, OldText.indexOf('{{page|'));
          var ApresModele = OldText.split(AvantModeleUp).join('').split(AvantModeleLow).join('');
          var DebutModele = OldText.split(ApresModele).join('');
          var OldModele = ApresModele.substring(0, ApresModele.indexOf('\n'));
          OldModele = OldModele.replace(/\n/ig, ""); // Nettoyage ancien modèle (espaces, retour à la ligne, pipes)
          OldModele = OldModele.replace(/ \|/ig, "\|");
          OldModele = OldModele.replace(/\| /ig, "\|");
          OldModele = OldModele.replace(/\|\|/ig, "\|");
          OldModele = OldModele.replace(/\|\}/ig, "\}");

          if((URL.indexOf('&newportail=')!=-1)&&(OldModele.indexOf(AddPortalText)!=-1)){
               alert('Le bandeau ' + AddPortalText + ' est déjà présent.');
               document.editform.style.display = "block";
               return;
          }
          var SuiteModele = ApresModele.split(OldModele).join('');
          if((URL.indexOf('&removeportail=')!=-1)&&(URL.indexOf('&newportail=')!=-1)){
               var NouveauModele = OldModele;
               NouveauModele = NouveauModele.split('|' +RemovePortalText+ '|').join('|');
               NouveauModele = NouveauModele.split('|' +RemovePortalText+ '}}').join('}}');
               NouveauModele = NouveauModele.split('}}').join('|' + AddPortalText + '}}');
               var Sommaire = 'Changement rapide de {{Page}} : - '+RemovePortalText+' , + '+AddPortalText.replace(/\|/g," , + ");
          }else if(URL.indexOf('&removeportail=')!=-1){
               var NouveauModele = OldModele;
               NouveauModele = NouveauModele.split('|' +RemovePortalText+ '|').join('|');
               NouveauModele = NouveauModele.split('|' +RemovePortalText+ '}}').join('}}');
               var Sommaire = 'Retrait rapide de {{Page}} : - '+RemovePortalText;          
          }else if(URL.indexOf('&newportail=')!=-1){
               var NouveauModele = OldModele.split('}}').join('|' + AddPortalText + '}}');
               var Sommaire = 'Ajout rapide de {{Page}} : + '+AddPortalText.replace(/\|/g," , + ");          
          }     
          if(NouveauModele.indexOf('|')==-1){
               alert('Erreur :\nLe modèle {{Page}} doit avoir au moins un paramètre.');
               document.editform.style.display = "block";
               return;
          }
     }else{ 
// ==================================================================================== Il n'y a pas de modèle {{Page}}
          var NouveauModele = '{{Page|' + AddPortalText + '}}\n\n';
          var Sommaire = 'Ajout rapide de {{Page}} : + '+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 (todo : et si il y a des interwikis ? )
               var DebutModele = OldText + '\n';
               var SuiteModele = '';
          }
     }

     document.getElementById('wpMinoredit').checked = BandeauxPages_MinorEdit;
     var TexteFinal = DebutModele + NouveauModele + SuiteModele;
     document.getElementById('wpTextbox1').value = TexteFinal;
     document.getElementById('wpSummary').value = Sommaire + ' ; avec [[MediaWiki:Gadget-BandeauxPages.js|BandeauxPages]]';
     if(BandeauxPages_AutoEdit){
           document.editform.submit();
     }else{
           document.editform.style.display = 'block';
     }
}
//</nowiki></pre>
// ====================================================================================================================
// ==================================================================================================================== FIN DU CODE
//</source>