Aller au contenu

Utilisateur:Dr Brains/dfnGadget.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) ;

Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
//<source lang=javascript>//<pre><nowiki>

var dfnGadget_Template = "Terme défini";
var dfnGadget_Resume = "Ajout modèle [[Modèle:"+dfnGadget_Template+"|{{"+dfnGadget_Template+"}}]]";

var dfnGadget_ajax = {
  http: function(bundle) {
    // mandatory: bundle.url
    // optional:  bundle.async
    // optional:  bundle.method
    // optional:  bundle.headers
    // optional:  bundle.data
    // optional:  bundle.onSuccess (xmlhttprequest, bundle)
    // optional:  bundle.onFailure (xmlhttprequest, bundle)
    // optional:  bundle.otherStuff OK too, passed to onSuccess and onFailure
    var xmlhttp;
    try {
      xmlhttp = new XMLHttpRequest();
    } catch(e) {
      try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
      } catch (e) {
        try {
          xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
          xmlhttp = false
        }
      }
    }
 
    if (xmlhttp) {
      xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4)
          dfnGadget_ajax.httpComplete(xmlhttp,bundle);
      };
      xmlhttp.open(bundle.method ? bundle.method : "GET",bundle.url,bundle.async === false ? false : true);
      if (bundle.headers) {
        for (var field in bundle.headers)
          try {
            xmlhttp.setRequestHeader(field,bundle.headers[field]);
          } catch(err) {
          }
      }
      xmlhttp.send(bundle.data ? bundle.data : null);
    }
    return xmlhttp;
  },
 
  httpComplete: function(xmlhttp,bundle) {
    if (xmlhttp.status == 200 || xmlhttp.status == 302) {
      if (bundle.onSuccess)
        bundle.onSuccess(xmlhttp,bundle);
    } else if (bundle.onFailure) {
      bundle.onFailure(xmlhttp,bundle);
 
    } else {
      // A activer en debug mode ?
         //  alert(xmlhttp.status+xmlhttp.responseText);
    }
  }
};
 
function dfnGadget_GetPage(URL, NextFunc){
    dfnGadget_ajax.http({ url: URL,
                               onSuccess:NextFunc
                             });
}
 
function dfnGadget_SavePage(NextFunc){
    var Form = document.getElementById('editform');
    var action = Form.action;
    var headers = new Array();
    headers['Content-Type'] = 'application/x-www-form-urlencoded';
    dfnGadget_ajax.http({ url: action,
                               method: "POST",
                               headers: headers,
                               data: dfnGadget_createURLFromParams(dfnGadget_getFormParams(Form)),
                               onSuccess:(NextFunc ? NextFunc : function(){ window.location.reload(); } )
                             });
}

function dfnGadget_getFormParams(Form){
     var Params = new Array();
     var Tags = new Array("textarea", "select", "input");
     for(var a=0,l=Tags.length;a<l;a++){
          var Elements = Form.getElementsByTagName(Tags[a]);
          for(var b=0,m=Elements.length;b<m;b++){
               var Element = Elements[b];
               var ElName = Element.name;
               var ElValue = Element.value;
               var ElType = Element.type;
               if(Tags[a].toLowerCase()=='input' && (ElType == "checkbox" || ElType == "radio") && Element.checked){
                    Params[ElName] = ElValue;
               }else if(Tags[a].toLowerCase()=='input' && (ElType == "text" || ElType == "hidden") ){
                    Params[ElName] = ElValue;
               }else if(Tags[a].toLowerCase()!='input'){
                    Params[ElName] = ElValue;
               }
          }
     }
     return Params;
}
 
 
function dfnGadget_createURLFromParams(Params){
    var ParamsInURL = new Array();
    for(var P in Params){
        if(typeof(Params[P])=="string") ParamsInURL.push(P+"="+encodeURIComponent(Params[P]));
    }
    return ParamsInURL.join('&');
}

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

if(mw.config.get('wgNamespaceNumber')==0 || mw.config.get('wgNamespaceNumber')==2) addOnloadHook(dfnGadget_AddLink);

function dfnGadget_AddLink(){
     var OldDFN = document.getElementsByTagName('dfn')[0];
     if(OldDFN) return;
     var OngletsCactions = document.getElementById('p-cactions');
     if(OngletsCactions){
          var CactionsUl = OngletsCactions.getElementsByTagName('ul')[0];
          CactionsUl.innerHTML += '<li><a style="text-decoration:blink;" href="javascript:dfnGadget_Run();">dfn</a></li>';
          $(OngletsCactions).removeClass("emptyPortlet");
     }
}

function dfnGadget_Run(Page){
    if(!Page) Page = mw.config.get('wgPageName');
    dfnGadget_GetPage(mw.config.get('wgServer') + mw.config.get('wgScript') + "?title=" + encodeURIComponent(Page) + "&action=edit&section=0", dfnGadget_Putdfn);
}

function dfnGadget_Putdfn(Req){
    while(document.body.firstChild){document.body.removeChild(document.body.firstChild);}  
    document.body.innerHTML = Req.responseText;
    var ContenuPage = document.getElementById("wpTextbox1").value;
    var AncienResumeModif = document.editform.wpSummary.value;
// -------------------------------------------------------- Extraction des modèles
    var AncienTexte = ContenuPage;
    var TexteDecoupe = new Array();
    while(AncienTexte!=""){
        var TemplateStartIndex = AncienTexte.indexOf('{{');
        var TemplateEndIndex = AncienTexte.indexOf('}}');
        if(TemplateStartIndex==-1 && TemplateEndIndex==-1){
            TexteDecoupe.push(AncienTexte);
            AncienTexte = "";
        }else{
            var Index;
            if(TemplateStartIndex==-1){
                Index = TemplateEndIndex;
            }else if(TemplateStartIndex > TemplateEndIndex){
                Index = TemplateEndIndex;
            }else if(TemplateEndIndex==-1){
                Index = TemplateStartIndex;
            }else if(TemplateStartIndex < TemplateEndIndex){
                Index = TemplateStartIndex;
            }
            TexteDecoupe.push(AncienTexte.substring(0, Index));
            TexteDecoupe.push(AncienTexte.substring(Index, (Index+2)));
            AncienTexte = AncienTexte.substring((Index+2), AncienTexte.length);
        }
    }
    var NiveauImbricationModele = new Array();
    var Niveau = 0;
    for(var a=0,l=TexteDecoupe.length;a<l;a++){
        var CeBout = TexteDecoupe[a];
        if(CeBout === "{{"){
            Niveau++
            NiveauImbricationModele[a] = Niveau;
        }else if(CeBout === "}}"){
            NiveauImbricationModele[a] = Niveau;
            Niveau--
        }else{
            NiveauImbricationModele[a] = Niveau;
        }
    }
// -------------------------------------------------------- Extraction du premier texte en gras et remplacement
    var Replaced = false;
    for(var a=0,l=TexteDecoupe.length;a<l;a++){
        if(NiveauImbricationModele[a]>0 || Replaced==true) continue;
        var ThisTexte = TexteDecoupe[a];
        var BeforeText = "";
        var InsideText = "";
        var AfterText = "";
        while(ThisTexte!=""){
            var BoldStartIndex = ThisTexte.indexOf("'''");
            if(BoldStartIndex != -1){
                BeforeText = ThisTexte.substring(0, (BoldStartIndex));
                ThisTexte = ThisTexte.substring( (BoldStartIndex+3), ThisTexte.length);
                var BoldEndIndex = ThisTexte.indexOf("'''");
                if(BoldEndIndex != -1){
                    InsideText = ThisTexte.substring(0, BoldEndIndex);
                    AfterText = ThisTexte.substring( (BoldEndIndex+3), ThisTexte.length);
                    ThisTexte = "";
                    if(InsideText!=""){
                        InsideText = "{{"+dfnGadget_Template+"|" + InsideText + "}}";
                        InsideText = InsideText.replace(new RegExp("\\{\\{"+dfnGadget_Template+"\\|'","g"), "'{{"+dfnGadget_Template+"|");
                        TexteDecoupe[a] = BeforeText + InsideText  + AfterText;
                        Replaced = true;
                    }
                }else{
                    break;
                }
            }else{ 
                break 
            }
        }
    }
// -------------------------------------------------------- Création résultat
    var TexteFinal = TexteDecoupe.join("");   
    document.getElementById ("wpTextbox1").value = TexteFinal ;
    document.editform.wpSummary.value = AncienResumeModif + dfnGadget_Resume ;
    if(TexteFinal.indexOf("{{"+dfnGadget_Template+"|")==-1){
        alert("Pas remplacé !")
        return;
    }
// -------------------------------------------------------- Sauvegarde
    document.editform.wpMinoredit.checked = "checked";
    document.editform.wpWatchthis.checked = "checked";
    if(!confirm(TexteFinal + "\n\nOK ?")) return;
    dfnGadget_SavePage();
}

//</nowiki></pre></source>