Utilisateur:Dr Brains/LumiereSur.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.
/*
== Code JavaScript ==
 
* Durée de la mise à jour : 

{{Projet:JavaScript/Script}} 
{{Boîte déroulante début|titre=Lumière sur...}}<!--
*/
// --><source lang=javascript>
// <nowiki>

var LumiereSur_Adresse = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=";

var LumiereSur_ModeleDefaut = '<noinclude>\n'
                              + '{{Lumière sur...\n'
                              + '|page=$1\n'
                              + '|catégorie=$2\n'
                              + '|miseAjour=$3\n'
                              + '|nbArticles=$4\n'
                              + '}}</noinclude>\n'

var LumiereSur_DebutModele = '<!-- Ce modèle est créé automatiquement par un robot. Lumière sur DEBUT -->\n';

var LumiereSur_FinModele = '<!-- Ce modèle est créé automatiquement par un robot. Lumière sur FIN -->\n';

var LumiereSur_ResumeModif = 'Mise à jour du modèle {{Lumière sur}}';

// Boîtes déroulantes fenêtre de rendu

var LumiereSur_Enrouler = '[-]';
var LumiereSur_Derouler = '[+]';
var LumiereSur_indexBoitesDeroulantes = 0;


// Lancement 

if( (mw.config.get('wgAction')!="edit")&&(mw.config.get('wgAction')!="submit") ){
     addOnloadHook(LumiereSur_makeUpdateLinks);
}

// recherche des modèles de la page et ajout des liens de mise à jour

var LumiereSur_AnalysisDivCount = 0;
function LumiereSur_makeUpdateLinks(){
     var Cadres = document.getElementsByTagName('span');
     for(s=0;s<Cadres.length;s++){
            if( $(Cadres[s]).hasClass('categoryLumiereSur') ){          
                  LumiereSur_AnalysisDivCount++
                  Cadres[s].id = 'categoryLumiereSur_'+LumiereSur_AnalysisDivCount;
                  var ParamCategorie = Cadres[s].firstChild.innerHTML;
                  var ParamPage = Cadres[s].firstChild.title;
                  var NewButton = '<a href="javascript:LumiereSur_makeControlPanel(\'categoryLumiereSur_'
                  +LumiereSur_AnalysisDivCount+ '\');" title="Cliquer pour  mettre à jour l\'analyse de la catégorie ' + ParamCategorie + ' sur la page '+ParamPage+'" >Mettre à jour le modèles {{Lumière sur}}</a><br/>' ;
                  Cadres[s].innerHTML += NewButton ;
            }
     }
}

// vérifie les paramètres du modèle cliqué et crée le tableau de bord 

var LumiereSur_Categorie;            // Catégorie à analyser
var LumiereSur_PagePortail;          // Page à éditer
var LumiereSur_Informations;         // Tableau de bord : cadre informations
var LumiereSur_BoutonCancel;         // Tableau de bord : cadre bouton pour annuler
var LumiereSur_PageCible;            // Tableau de bord : cadre affichage de la page ciblée
var LumiereSur_PageRequete;          // Tableau de bord : cadre affichage des requêtes
var LumiereSur_ListeArticles;        // Tableau de bord : liste des articles de la catégorie

var LumiereSur_PagesCategorieCible = 1;   // Compte des pages de catégorie
var LumiereSur_TotalArticles = 0;         // Compte des pages incluses dans la catégorie 
var LumiereSur_Result = new Array();      // "Rangées" du futur modèle
 
function LumiereSur_makeControlPanel(id){
        if(!id) return;
        var Cadre = document.getElementById(id);
        var Bouton = Cadre.firstChild;           
        LumiereSur_Categorie = Bouton.innerHTML;
        LumiereSur_PagePortail = Bouton.title;
        
        if( (LumiereSur_Categorie=='')||(LumiereSur_PagePortail=='') ) return;
        window.scrollTo(0,0); void 0;
        var TableauDeBord = document.createElement('div');
        TableauDeBord.id = 'Tableau_de_bord';
        TableauDeBord.innerHTML = ''
+ '<div style="position:absolute;top:0px;left:0px;width:800px;height:40px;padding:5px;font-weight:bold;background-color:white;border:3px double black;" ><ul id="Informations" ></ul></div>'
+ '<div id="Bouton_Cancel" style="position:absolute;top:0px;left:820px;width:600px;height:40px;padding:5px;font-weight:bold;background-color:white;border:3px double black;text-align:center;" ></div>'
+ '<div id="Page_cible" style="position:absolute;top:60px;left:0px;width:800px;height:800px;overflow:scroll;padding: 0.5em;background-color:white;border:3px double black;" ></div>'
+ '<div id="Page_requete" style="position:absolute;top:880px;left:0px;width:800px;height:800px;overflow:scroll;padding: 0.5em;background-color:white;border:3px double black;" ></div>'
+ '<div style="position:absolute;top:60px;left:820px;height:1620px;overflow-y: auto;width:600px; padding: 0.5em;background-color:white;border:3px double black;" >'
+ '<center>Pages de la catégorie <b>'+LumiereSur_Categorie.replace(/Catégorie:/g,'')+'</b></center><hr size="1" style="margin:0.5em;" /><ul id="Liste_Articles"></ul></div>';
        document.body.appendChild(TableauDeBord);
        TableauDeBord.style.position = 'absolute';
        TableauDeBord.style.zIndex = '150';
        TableauDeBord.style.top = '20px';
        TableauDeBord.style.left = '20px';
        LumiereSur_Informations = document.getElementById("Informations");
        LumiereSur_BoutonCancel = document.getElementById("Bouton_Cancel");
        LumiereSur_PageRequete = document.getElementById("Page_requete");
        LumiereSur_PageCible = document.getElementById("Page_cible");
        LumiereSur_ListeArticles = document.getElementById("Liste_Articles");
        if( (!LumiereSur_PageCible)||(!LumiereSur_BoutonCancel)||(!LumiereSur_ListeArticles)||(!LumiereSur_PageRequete) ){
                return;
        }else{
                LumiereSur_BoutonCancel.innerHTML = '<a href="'+LumiereSur_Adresse + encodeURIComponent(mw.config.get('wgPageName'))+'"title="Arrêter la mise à jour" >'
                                        +'<img src="http://upload.wikimedia.org/wikipedia/commons/0/0c/Crystal_Clear_action_exit.png" height="40" width="40" alt="Arrêter la mise à jour"/></a>';

                var ajaxRequest = new XMLHttpRequest();
                if (!ajaxRequest){
                        alert('Méthode ajax non supportée : new XMLHttpRequest()');
                        return;
                }else{
                        var url = LumiereSur_Adresse + decodeURIComponent(LumiereSur_PagePortail).replace(/ /g, "_").replace(/%3A/g, ":").replace(/%2F/g, "/").replace(/%27/g, "\'")+ '&action=render' ;
                        LumiereSur_Informations.innerHTML = '<li>Requête ajax de la page à éditer : '+LumiereSur_PagePortail+'</li><li>' + url + '</li>';
                        ajaxRequest.open("GET", url, true);
                        ajaxRequest.send(null);
                        ajaxRequest.onreadystatechange = function() {
                                if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
                                        var ajaxResponse;    
                                        ajaxResponse = ajaxRequest.responseText;
                                        LumiereSur_PageCible.innerHTML = ajaxResponse;
                                        LumiereSur_cleanContent(LumiereSur_PageCible);

                                        var Suretcertain = confirm('Paramètres :'
                                                               + '\n* Page à mettre à jour : - ' + LumiereSur_PagePortail + ' - '
                                                               + '\n* Catégorie : - ' + LumiereSur_Categorie + ' - '
                                                               + '\n\n Lancer la mise à jour ?' );
                                        if(!Suretcertain) return;
                                        LumiereSur_checkCategory(LumiereSur_Adresse + encodeURIComponent(LumiereSur_Categorie) + '&action=render');
                                }
                        }
                }
        }
}

// analyse la catégorie : requête ajax, recopie des liens dans une colonne du tableau de bord, renouvellement si il y a d'autres pages puis lancement de la fonction analyse d'historique

function LumiereSur_checkCategory(Cible){
        var AutrePage=false;
        var AutrePageAdresse ='';
        LumiereSur_PageRequete.innerHTML = '';
        var ajaxRequest = new XMLHttpRequest();
        if (!ajaxRequest){
                alert('Méthode ajax non supportée : new XMLHttpRequest()');
                return;
        }else{
                var url = decodeURIComponent(Cible).replace(/ /g, "_").replace(/%3A/g, ":").replace(/%2F/g, "/").replace(/%27/g, "\'") ;
                LumiereSur_Informations.innerHTML = '<li>Requête ajax de la catégorie : page '+LumiereSur_PagesCategorieCible+'</li><li>' + url + '</li>';
                ajaxRequest.open("GET", url, true);
                ajaxRequest.send(null);
                ajaxRequest.onreadystatechange = function() {
                        if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
                                var ajaxResponse;    
                                ajaxResponse = ajaxRequest.responseText;
                                LumiereSur_PageRequete.innerHTML = ajaxResponse; 
                                var ContenuCategorie = getElementWithId(LumiereSur_PageRequete, 'div', 'mw-pages');
                                var LiensCategorie = ContenuCategorie.getElementsByTagName('li');
                                for(a=0;a<LiensCategorie.length;a++){
                                        PageCibleCategory = LiensCategorie[a].innerHTML;
                                        if(PageCibleCategory.indexOf(mw.config.get('wgFormattedNamespaces')[10])==-1){
                                                LumiereSur_ListeArticles.innerHTML += '<li>' + PageCibleCategory + '</li>';
                                                LumiereSur_TotalArticles++
                                        }
                                }
                                LumiereSur_Informations.innerHTML = 'Recherche de page supplémentaires';
                                var TousLiens = LumiereSur_PageRequete.getElementsByTagName('a');
                                var length = TousLiens.length;
                                var dernierLien = TousLiens[(length-1)].href;
                                if(dernierLien.indexOf("&from=")!=-1){
                                        LumiereSur_PagesCategorieCible++
                                        AutrePageAdresse = dernierLien + '&action=render';
                                        LumiereSur_checkCategory(AutrePageAdresse);
                                }else{
                                        LumiereSur_checkPage( 0, LumiereSur_TotalArticles)
                                }
                        }
                }
        } 
}

// analyse la page : requête ajax, recopie les infos recherchées dans le tableau de bord sous chaque lien puis lancement de la fonction d'édition

var LumiereSur_checkedPages=0;
function LumiereSur_checkPage(Position, LumiereSur_TotalArticles){



        var Lien = LumiereSur_ListeArticles.getElementsByTagName('a')[Position];
        if(!Lien) {
                LumiereSur_editPage();
        }
        LiParent = Lien.parentNode;
        TitrePage = Lien.innerHTML.replace(/&amp;/, "&"); 
        TitrePage = TitrePage.split(mw.config.get('wgFormattedNamespaces')[1]+":").join(""); 
        LumiereSur_PageRequete.innerHTML = '';

        var ajaxRequest = new XMLHttpRequest();
        if (!ajaxRequest){
                alert('Méthode ajax non supportée : new XMLHttpRequest()');
                return;
        }else{
                var url = LumiereSur_Adresse + decodeURIComponent(TitrePage).replace(/ /g, "_").replace(/%3A/g, ":").replace(/%2F/g, "/").replace(/%27/g, "\'").replace(/&/g, "%26") + '&action=edit' ;
                LumiereSur_Informations.innerHTML = '<li>Requête ajax de la page ' + Position + ' sur ' + LumiereSur_TotalArticles + '</li><li>'  + url + '</li>';
                ajaxRequest.open("GET", url, true);
                ajaxRequest.send(null);
                ajaxRequest.onreadystatechange = function() {
                        if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) { 
                                var ajaxResponse;    
                                ajaxResponse = ajaxRequest.responseText;
                                LumiereSur_PageRequete.innerHTML = ajaxResponse;

                                var ContenuPage = document.getElementById("wpTextbox1").value;

                                var Introduction = ContenuPage;
                                if(Introduction.indexOf("==")!=-1){
                                        while((Introduction.indexOf("==")!=-1)){
                                                Introduction = Introduction .substring(0, Introduction.indexOf("=="));
                                        }
                                        if(Introduction.indexOf("<ref>")!=-1) Introduction += '\n<references />\n';


                                        //alert(Introduction);
                                        LumiereSur_Result[LumiereSur_checkedPages] = '<noinclude>\n'
                                                                            + '== [[' + TitrePage + ']] ==\n'
                                                                            + '</noinclude>\n'
                                                                            + '| '+(LumiereSur_checkedPages+1)+' = <!-- ------------------------------------------------------------------------- DÉBUT -->\n'
                                                                            + Introduction + '\n'
                                                                            + '\'\'[[' + TitrePage + '|Lire la suite]]\'\'<br clear="all" />'
                                                                            + '<!-- -------------------------------------------------------------------------- FIN -->\n';
                                        LiParent.innerHTML =  LiParent.innerHTML + '<li style="color:green;" >OK</li>';
                                        LumiereSur_checkedPages++

                                }
                                LumiereSur_checkPage((Position+1), LumiereSur_TotalArticles);
                        }
                }
        } 
}

// édition de la page : cherche la présence d'un tableau précédent, crée un tableau et remplace le tableau existant

function  LumiereSur_editPage(){
        LumiereSur_PageRequete.innerHTML = '';
        var ajaxRequest = new XMLHttpRequest();
        if (!ajaxRequest){
                alert('Méthode ajax non supportée : new XMLHttpRequest()');
                return;
        }else{
                url = LumiereSur_Adresse + decodeURIComponent(LumiereSur_PagePortail).replace(/ /g, "_").replace(/%3A/g, ":").replace(/%2F/g, "/").replace(/%27/g, "\'").replace(/&/g, "%26") + '&action=edit';
                LumiereSur_Informations.innerHTML = '<li>Édition de la page : ' + LumiereSur_PagePortail + '</li><li>' + url + '</li>';
                ajaxRequest.open("GET", url, true);
                ajaxRequest.send(null);
                ajaxRequest.onreadystatechange = function() {
                        if(ajaxRequest.readyState == 4 && ajaxRequest.status == 200) {
                                var ajaxResponse;    
                                ajaxResponse = ajaxRequest.responseText;
                                LumiereSur_PageCible.innerHTML = ajaxResponse;

// -----------------------------------------------------------------------------------------------------------------------

/*
var LumiereSur_ModeleDefaut = '<noinclude>\n'
                              + '{{Lumière sur\n'
                              + '|page=$1\n'
                              + '|catégorie=$2\n'
                              + '|miseAjour=$3\n'
                              + '|nbArticles=$4\n'
                              + '}}</noinclude>\n'
*/

                                var NouveauModele = LumiereSur_ModeleDefaut;

                                var Aujourdhui = new Date();
                                var Minutes   = Aujourdhui.getMinutes()
                                if(Minutes<10){ var ZeroMinutes = "0" ; }else{ var ZeroMinutes = "";}
                                var Heures   = Aujourdhui.getHours()
                                if(Heures<10){ var ZeroHeures = "0" ; }else{ var ZeroHeures = "";}
                                var Jour   = Aujourdhui.getDate();
                                if(Jour<10){ var ZeroJour = "0" ; }else{ var ZeroJour = "";}
                                var Mois = Aujourdhui.getMonth() + 1;
                                if(Mois<10){ var ZeroMois = "0" ; }else{ var ZeroMois = "";}
                                var Annee  = Aujourdhui.getYear();
                                if (Annee < 2000){
                                        Annee = Annee + 1900;
                                }
                                var LumiereSur_miseAjour = 'le '+ZeroJour+Jour+'/'+ZeroMois+Mois+'/'+Annee+' à '+ZeroHeures+Heures+':'+ZeroMinutes+Minutes;


                                NouveauModele = NouveauModele.split('$1').join(LumiereSur_PagePortail);
                                NouveauModele = NouveauModele.split('$2').join(LumiereSur_Categorie);
                                NouveauModele = NouveauModele.split('$3').join(LumiereSur_miseAjour);
                                NouveauModele = NouveauModele.split('$4').join(LumiereSur_checkedPages);

                                NouveauModele += '<includeonly>{{#switch: {{{1}}} </includeonly><noinclude>' + LumiereSur_DebutModele + '<noinclude>';



                                for(a=0;a<LumiereSur_Result.length;a++){
                                        NouveauModele += LumiereSur_Result[a];
                                }

                                NouveauModele += '<includeonly>}}</includeonly>' + LumiereSur_FinModele + '\n';

                                var ContenuPage = document.getElementById("wpTextbox1").value;
                                var AncienResumeModif = document.editform.wpSummary.value;

// -----------------------------------------------------------------------------------------------------------------------

                                document.getElementById ("wpTextbox1").value = NouveauModele ;
                                document.editform.wpSummary.value = AncienResumeModif + LumiereSur_ResumeModif ;

                                LumiereSur_Informations.innerHTML = '<li>Sauvegarde de la page : ' + LumiereSur_PagePortail + '</li>';
                                var SurEtCertain = confirm('Sauvegarder la modification ?');
                                if(SurEtCertain) document.editform.submit();
                                LumiereSur_Informations.innerHTML += '<li>' + decodeURIComponent(action) +'</li>';
                        }
                }
        }
}

// * Recherche d'un élement dont on connait l'Id mais non unique, donc sans utiliser document.getElementById() 
 
function getElementWithId( elementParentNode , elementTagName , elementId ){
      if(!elementParentNode) elementParentNode = document; 
      var TheElement = false;
      var Elements = elementParentNode.getElementsByTagName(elementTagName);
      var elementcount = 0;
      while(elementcount<Elements.length){
            var Id = Elements[elementcount].id;
            if(Id){
                  if(Id.indexOf(elementId)!=-1){
                        TheElement = Elements[elementcount];
                  }
            }
            elementcount++
      }
      return TheElement;
}

function LumiereSur_cleanContent(element){
        if(!element) element = document;
 
        var newContentWrapper = element.getElementsByTagName("div");
        var div=0;
        while(div<newContentWrapper.length){
                if( ($(newContentWrapper[div]).hasClass("portlet")) || ($(newContentWrapper[div]).hasClass("printfooter"))){
                        newContentWrapper[div].style.display="none";
                }
                if (
                ($(newContentWrapper[div]).hasClass("NavFrame"))  // ************************************* Boîtes déroulantes
                ){          
                    LumiereSur_indexBoitesDeroulantes++;
                    var NavFrame = newContentWrapper[div];
                    NavFrame.title= LumiereSur_Enrouler;
                    NavFrame.id =  'LumiereSur_NavFrame_' + LumiereSur_indexBoitesDeroulantes;
                    NavHead =  NavFrame.firstChild;
                    var NavToggle = document.createElement("a");
                    NavToggle.className = 'NavToggle';
                    NavToggle.id = 'LumiereSur_NavToggle_' + LumiereSur_indexBoitesDeroulantes;
                    NavToggle.href = 'javascript:LumiereSur_toggleCollapsibleTables(' + LumiereSur_indexBoitesDeroulantes + ');'; 
                    NavToggle.innerHTML = LumiereSur_Enrouler;
                    newContentWrapper[div].insertBefore( NavToggle, NavHead );  
                    var Content = newContentWrapper[div].getElementsByTagName("div");
                    for( var c=0;c<Content.length; c++ ) {
                        if ($(Content[c]).hasClass("NavContent")) { 
                           Content[c].id = 'LumiereSur_NavContent_' + LumiereSur_indexBoitesDeroulantes;
                        }
                    }
                    LumiereSur_toggleCollapsibleTables(LumiereSur_indexBoitesDeroulantes);
               }

                Div_Id = newContentWrapper[div].id;
                if(Div_Id){
                        if((Div_Id=="globalWrapper")||(Div_Id=="column-content")||(Div_Id=="content")||(Div_Id=="bodyContent")||(Div_Id=="article")||(Div_Id=="mw_main")||(Div_Id=="mw_contentwrapper")||(Div_Id=="mmw_content")||(Div_Id=="mmw_contentholder")){
                                newContentWrapper[div].id = newContentWrapper[div].id + '_' + div; 
                        }
                        if((Div_Id=="siteNotice")||(Div_Id=="p-personal")||(Div_Id=="topbar")||(Div_Id=="quickbar")||(Div_Id=="column-one")||(Div_Id=="mw_portlets")||(Div_Id=="page-base")||(Div_Id=="head-base")||(Div_Id=="head")||(Div_Id=="panel")||(Div_Id=="footer")||(Div_Id=="previewnote")){
                                newContentWrapper[div].style.display= "none";
                        }   
                }
                div++        
        }
}

function LumiereSur_toggleCollapsibleTables(index) {
    var NavToggle = document.getElementById("LumiereSur_NavToggle_" + index);
    var NavContent = document.getElementById("LumiereSur_NavContent_" + index);
    var NavFrame = document.getElementById("LumiereSur_NavFrame_" + index);
 
    if( (!NavToggle) || (!NavContent) ) return; 
 
    var Caption = NavToggle.innerHTML;  
    if (Caption == LumiereSur_Enrouler) {
        NavContent.style.display = 'none';
        NavToggle.innerHTML = LumiereSur_Derouler; 
        NavFrame.title = LumiereSur_Derouler; 
    } else if (Caption == LumiereSur_Derouler) {
        NavContent.style.display = 'block';
        NavToggle.innerHTML = LumiereSur_Enrouler;
        NavFrame.title = LumiereSur_Enrouler;
    }
}

// </nowiki>
//</source>{{Boîte déroulante fin}}