Inscris-toi pour écrire dans l'encyclopédie Wikimini!

MediaWiki:Gadgets-Body.js

Aller à : navigation, rechercher

Note : après avoir enregistré tes préférences, tu devras forcer son rechargement complet en ignorant le contenu actuel du cache de ton explorateur pour voir les changements : Mozilla / Firefox / Konqueror / Safari : maintiens la touche Majuscule (Shift) en cliquant le bouton Actualiser (Reload,) ou presse Maj-Ctrl-R (Maj-Cmd-R sur Apple Mac) ; Internet Explorer / Opera : maintiens la touche Ctrl en cliquant le bouton Actualiser ou presse Ctrl-F5.

// __NORICHEDITOR__
/* ********************************************************************************
Ce script est destiné à mettre à jour automatiquement la page Utilisateur:<Pseudo>/wikimini.js de tout utilisateur enregistré.

Les gadgets sélectionnables sont à définir dans une fonction "Gadgets_GetUserScripts()" dans la page [[Mediawiki:Gadgets_Definitions.js]]

La sélection/déselection se fait à l'aide de cases à cocher.

TODO :
* Trouver un moyen pour forcer le navigateur à purger le cache
* Séparer les gadgets par types dans différents onglets, comme sur [[Spécial:Préférences]]

******************************************************************************** */
// <pre><nowiki>
// ******************************************************************************** VARIABLES
 
// //////////////////////////////////////////////////////////// VARIABLES PERSONNALISABLES
 
var Gadgets_Text_Title = "Mes Gadgets";
var Gadgets_Text_H1Title = "Mes Gadgets";
var Gadgets_Text_SelectScripts = "Sélectionner les gadgets à installer";
var Gadgets_Text_Help = "Aide";

var Gadgets_Text_InputOK = "Installer les gadgets";
var Gadgets_Text_NoGadget = "<span class=\"error\">Aucun gadget n'est encore configuré</span>";

var Gadgets_Text_Import = "Importation des gadgets";
var Gadgets_Text_Edit = "Édition des gadgets";
var Gadgets_Text_Save = "Sauvegarde des gadgets";
var Gadgets_Text_OK = "OK";

var Gadgets_Resume = 'Mise à jour des gadgets';

// //////////////////////////////////////////////////////////// VARIABLES NON PERSONNALISABLES

var Gadgets_CommStart = '// __NORICHEDITOR__\n//DebutSectionAuto'
var Gadgets_CommPlus = ' : Cette section est produite automatiquement';
var Gadgets_CommConfig = '//ConfigSectionAuto';
var Gadgets_CommEnd = '//FinSectionAuto';

var Gadgets_URL = wgServer + wgArticlePath.split('$1').join('');
var Gadgets_URLBis = wgServer + wgScriptPath + '?title=';

var Gadgets_IsGadgetPage = false;
var Gadgets_Running = 0;
var Gadgets_ScriptEnabled = 0;

var Gadgets_ScriptType = new Array();
var Gadgets_ScriptText = new Array();
var Gadgets_ScriptPage = new Array();
var Gadgets_ScriptId  =  new Array();

var Gadgets_InstalledScriptIds = new Array();
var Gadgets_NewScript = '';
var Gadgets_NewScriptConfig = Gadgets_CommStart + Gadgets_CommPlus + '\n' +Gadgets_CommConfig;

// ******************************************************************************** FONCTIONS


////////////////////////// LANCEMENTS

if(wgUserGroups!=null){
    if(wgNamespaceNumber==2 && wgTitle === wgUserName + "/" + skin + ".js" && wgAction=="view"){ 
        importScript('Mediawiki:Gadgets-Definitions.js');
        addOnloadHook(Gadgets_Init);
        Gadgets_IsGadgetPage = true;
    }
    addOnloadHook(Gadgets_AddLink);
}


////////////////////////// AJOUT DU LIEN "Gadgets" DANS LES LIENS PERSONNELS

function Gadgets_AddLink(){
    var Prefs = document.getElementById('pt-preferences');
    if(!Prefs) return;
    var GadgetsLi = document.createElement('li');
    GadgetsLi.id = "pt-gadgets";

    var LiContent = '<a href="'+wgServer + wgArticlePath.split('$1').join("User:" + wgUserName + "/" + skin + ".js") +'" title="Modifier tes gadgets" '+ (Gadgets_IsGadgetPage ? 'style="font-weight:bold;"' :'') +' >Gadgets</a>'
    GadgetsLi.innerHTML = LiContent;
    insertAfter(GadgetsLi, Prefs);
    
}


////////////////////////// SCRIPTS PAR DÉFAUT

function Gadgets_GetDefaultScripts(){
     Gadgets_ScriptType.push(4);
     Gadgets_ScriptText.push(Gadgets_Text_NoGadget);
     Gadgets_ScriptId.push('');
     Gadgets_ScriptPage.push('');
}


////////////////////////// CRÉATION D'UN LIEN

function Gadgets_MakeLink(Page, Mode, Text, Title){
    if(!Page) return '';
    if(!Text) Text = Page;
    if(!Title) Title = Page;
    var URL = wgServer + wgArticlePath.split('$1').join('');
    var URLBis = wgServer + wgScriptPath + '?title=';
    var Lien ='<a href="'+(Mode ? URLBis : URL) + Page + '" title="'+Title+'">'+Text+'</a>';
    return Lien;
}


////////////////////////// INITIALISATION DE LA PAGE .JS

function Gadgets_Init(){
    if(Gadgets_Running==1) return;
    Gadgets_Running = 1;
    var Title = document.getElementsByTagName('title')[0];
    var Titre = document.getElementsByTagName('h1')[0];
    var Content = document.getElementById('bodyContent');
    if(!Title || !Titre || !Content) return;
    var Pre = Content.getElementsByTagName('pre')[0];
    if(!Pre) return;

    Title.innerHTML = Gadgets_Text_Title;
    Titre.innerHTML = Gadgets_Text_H1Title;
    var NewContent = document.createElement('div');
    NewContent.id = "GadgetsContent";
    var Center = document.createElement('center');
    var Loading = document.createElement('h2');
    Loading.innerHTML = "Chargement";
    var LoadingImage = document.createElement('img');
    LoadingImage.src = "http://upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif";
    LoadingImage.width = "100"; 
    LoadingImage.height = "100"; 
    Center.appendChild(Loading);  
    Center.appendChild(LoadingImage);  
    NewContent.appendChild(Center);
    Pre.parentNode.insertBefore(NewContent, Pre);
    Pre.parentNode.removeChild(Pre);
    Gadgets_GetConfig();
}


////////////////////////// ANALYSE CONFIGURATION ACTUELLE
 
function Gadgets_GetConfig(){
    if(typeof(Gadgets_GetUserScripts)=="function"){
        Gadgets_GetUserScripts();
        Gadgets_ScriptEnabled = 1;
    }else{
        Gadgets_GetDefaultScripts();
        Gadgets_ScriptEnabled = 0;
    }
   var Adresse = Gadgets_URLBis + wgPageName.replace(/&/g, '%26') + '&oldid='+wgCurRevisionId+'&action=raw';
   var RequeteEdition = sajax_init_object();
   RequeteEdition.open("GET", Adresse, true);
   RequeteEdition.onreadystatechange = function() {
      if( !(RequeteEdition.readyState == 4 && RequeteEdition.status == 200) )  return;
      var Resultat = RequeteEdition.responseText;
      if(Resultat.indexOf(Gadgets_CommConfig)!=-1)
      var Configuration = Resultat.split(Gadgets_CommConfig)[1].split('\n')[0];
      if(Configuration){
         for(var a=0;a<Gadgets_ScriptType.length;a++){
            if(Gadgets_ScriptType[a]==1){
               if(Configuration.indexOf('setup-'+Gadgets_ScriptId[a]+'.js')!=-1){
                  Gadgets_InstalledScriptIds[a] = ' checked="checked" ';
               }else{
                  Gadgets_InstalledScriptIds[a] = '';
               }
            }else{
               Gadgets_InstalledScriptIds[a] = '';
            }
         }
      }else{
         for(var a=0;a<Gadgets_ScriptType.length;a++){
            Gadgets_InstalledScriptIds[a] = '';
         }
      }
      Gadgets_CreateForm();
   }
   RequeteEdition.send(null);
}


////////////////////////// CRÉATION FORMULAIRE

function Gadgets_CreateForm(){
   var DivRepere = document.getElementById('GadgetsContent');
   if(!DivRepere) return;
   while(DivRepere.firstChild){ DivRepere.removeChild(DivRepere.firstChild); }
   var Form = document.createElement('div');
   DivRepere.appendChild(Form);
 
   var OKInput = '<p>'
                + '<input type="button" class="GlobalManager_Input" '
                + 'onclick="Gadgets_CreateNewScript();" '
                + 'onselect="Gadgets_CreateNewScript();" '
                + (Gadgets_ScriptEnabled ? '' : 'disabled="disabled" ')
                + 'value="'+Gadgets_Text_InputOK+'" />'
                + '</p>'
 
   var FormContent = '<fieldset id="Gadgets_Fieldset" >'
                   +'<legend>'
                   + '<span style="font-size:120%;">'+Gadgets_Text_SelectScripts
                   + '</span> <sup><small>'
                   + Gadgets_MakeLink('Aide:Gadgets', false, '('+Gadgets_Text_Help+')')
                   + '</small></sup>'
                   + '</legend>'
                   + '<div id=\"Gadgets_ScriptList\">'
                   + '<form id="Gadgets_Form">' + OKInput;
   var HeadLineCount = 0
   for(var c=0;c<Gadgets_ScriptType.length;c++){
      if(Gadgets_ScriptType[c] == 1){
         FormContent += '<p><input type=\"checkbox\" '
                      + 'id=\"'+Gadgets_ScriptId[c]+'\" '
                      + Gadgets_InstalledScriptIds[c]+' ></input>&nbsp;'
                      + '<b>' + Gadgets_MakeLink(Gadgets_ScriptPage[c], false, Gadgets_ScriptId[c]) +'</b>'
                      + ' : '+Gadgets_ScriptText[c]+'</p>';
      }else{
         FormContent += '<h'+Gadgets_ScriptType[c]+' id="Gadgets_headline_'+HeadLineCount+'">'
                      + '<span class="mw-headline">'
                      + Gadgets_ScriptText[c]
                      + '</span>'
                      +'</h'+Gadgets_ScriptType[c]+'>';
                      HeadLineCount++
      }
   }
   FormContent += OKInput + '</form><div id="Gadgets_Running"></div></div></fieldset>'; 
   Form.innerHTML = FormContent;
}


////////////////////////// MISE A JOUR PAGE JS
  
function Gadgets_CreateNewScript(){
     var Form = document.getElementById('Gadgets_Form');
     var ControlElement = document.getElementById('Gadgets_Running');
     if((!Form)||(!ControlElement)) return;
     var Inputs = Form.getElementsByTagName("input");
     for(var a=0;a<Inputs.length;a++){
         Inputs[a].disabled = "disabled";
     }
     ControlElement.innerHTML = '<b>* '+Gadgets_Text_Import+'</b><br/>';
     for(var d=(Gadgets_ScriptId.length-1);d>-1;d--){
          if(Gadgets_ScriptId[d]=='') continue;
          var Input = document.getElementById(Gadgets_ScriptId[d]);
          if(!Input) continue;
          if(Input.checked){
               ControlElement.innerHTML +=  '<br/>' + Gadgets_ScriptPage[d];
               Gadgets_NewScriptConfig += ' setup-'+Gadgets_ScriptId[d]+'.js ';
               Gadgets_NewScript += '// Importation de [['+Gadgets_ScriptPage[d]+']]\n';
               Gadgets_NewScript += 'importScript(\''+ Gadgets_ScriptPage[d] + '\');\n\n';
          }
     }
     Gadgets_NewScriptConfig += '\n\n';
     Gadgets_NewScript += Gadgets_CommEnd;
 
     ControlElement.innerHTML += '<br/><b>* '+Gadgets_Text_Edit + '</b><br/>';
     var AdresseEdition = Gadgets_URLBis + wgPageName.replace(/&/g, "%26") + '&action=edit';
     var RequeteEdition = sajax_init_object(); 
     RequeteEdition.open("GET", AdresseEdition, true);
     RequeteEdition.onreadystatechange = function() {
          if( RequeteEdition.readyState != 4 )  return;
          var Temp = document.createElement('div');
          Temp.style.display = 'none';
          document.body.insertBefore(Temp, document.body.firstChild);
          Temp.innerHTML = RequeteEdition.responseText;   
          var ContenuTextarea = Temp.getElementsByTagName('textarea')[0].value;
          if((ContenuTextarea.indexOf(Gadgets_CommStart)!=-1)&&(ContenuTextarea.indexOf(Gadgets_CommEnd)!=-1)){
               var Before = ContenuTextarea.split(Gadgets_CommStart)[0];
               var After = ContenuTextarea.split(Gadgets_CommEnd)[1];
               var TexteFinal = Before+Gadgets_NewScriptConfig+Gadgets_NewScript+After;
          }else{
               var TexteFinal = Gadgets_NewScriptConfig+Gadgets_NewScript+ '\n' + ContenuTextarea;
          }
          ControlElement.innerHTML += '<b>* '+ Gadgets_Text_Save + '</b><br/>';
          var AdressePublication = document.getElementById("editform").action; 
          var boundary = '--------123xyz';
          var data = '';
          data += '--' + boundary 
                + '\nContent-Disposition: form-data; name="wpTextbox1"\n\n' 
                + TexteFinal + '\n'
          data += '--' + boundary 
                + '\nContent-Disposition: form-data; name="wpSection"\n\n' 
                + document.editform.wpSection.value + '\n'
          data += '--' + boundary 
                + '\nContent-Disposition: form-data; name="wpSummary"\n\n' 
                + Gadgets_Resume + '\n'
          data += '--' + boundary 
                + '\nContent-Disposition: form-data; name="wpStarttime"\n\n' 
                + document.editform.wpStarttime.value + '\n'
          data += '--' + boundary 
                + '\nContent-Disposition: form-data; name="wpEdittime"\n\n' 
                + document.editform.wpEdittime.value + '\n'
          data += '--' + boundary 
                + '\nContent-Disposition: form-data; name="wpEditToken"\n\n' 
                + document.editform.wpEditToken.value + '\n'
          var RequetePublication = sajax_init_object();
          RequetePublication.open('POST', AdressePublication, true);
          RequetePublication.setRequestHeader('Content-Type', 'multipart/form-data; boundary='+boundary);
          RequetePublication.onreadystatechange = function(){
               if (RequetePublication.readyState == 4){
                    Temp.innerHTML = RequetePublication.responseText;                     
                    if(!Temp.getElementsByTagName('textarea')[0]){
                         ControlElement.innerHTML += '<b><big>'+Gadgets_Text_OK+'</big></b>';
                         window.location.reload();
                    }else{
                         Gadgets_CreateNewScript();
                    }
               }
          }
          RequetePublication.send(data + '--' + boundary);
     }
     RequeteEdition.send(null);
 
}

// ********************************************************************************
//</nowiki></pre>
Wikiboo Outils personnels