Utilisateur:Dr Brains/BotFramework.js/Ajax.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.
////////////////////////////////////////////////////////////// Variables

var BotFramework_APILimit = ( (mw.config.get('wgUserGroups').indexOf('bot')!=-1||mw.config.get('wgUserGroups').indexOf('sysop')!=-1) ? 4999 : 499 );


////////////////////////////////////////////////////////////// Requêtes GET

var BotFramework_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)
          dfnBot_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 BotFramework_GetPage(Params){
    dfnBot_ajax.http({ url : Params.url,
                       onSuccess : Params.NextFunc,
                       Params : Params
                     });
}
 
function BotFramework_SavePage(Params){
    //if(!confirm("OK ?")) return;
    var Form = document.getElementById('editform');
    var action = Form.action;
    var headers = new Array();
    headers['Content-Type'] = 'application/x-www-form-urlencoded';
    dfnBot_ajax.http({ url: action,
                               method: "POST",
                               headers: headers,
                               data: dfnBot_createURLFromParams(dfnBot_getFormParams(Form)),
                               onSuccess:(Params.NextFunc ? Params.NextFunc : function(){ window.location.reload(); } ),
                               params:Params
                             });
}

var BotFramework_ListPages = {
    Revisions : function(FuncParams){
        if(!FuncParams.Arr) FuncParams.Arr = new Array();
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=revisions&titles=' + encodeURIComponent(FuncParams.Page);
        if(FuncParams.Params){
            for(var Param in FuncParams.Params){
                URL += "&"+Param+"="+encodeURIComponent(FuncParams.Params[Param]);
            }
        }
        BotFramework_GetPage({ url : URL, 
                               onSuccess : BotFramework_ListPages.RevisionsDone, 
                               Next : FuncParams.NextFunc, 
                               Arr : FuncParams.Arr, 
                               Params : FuncParams
                             });
    },
    RevisionsDone : function(Req, data){
        var ObjectXML = Req.responseXML;
        var BL = ObjectXML.getElementsByTagName('rev');
        for(var a=0,l=BL.length;a<l;a++){
            var Title = BL[a].getAttributes('user');
            data.Arr[Title] = new Array();
            var AttrL = BL[a].attributes.length;            
            for (j=0; j<AttrL; j++) {
                var AttrName = BL[a].attributes[j].name;
                var AttrValue = BL[a].getAttribute(AttrName);
                data.Arr[Title][AttrName] = AttrValue;
            }
        }
        var QContinue = ObjectXML.getElementsByTagName('query-continue')[0];
        if(QContinue){
              var ContinueData = QContinue.firstChild.getAttribute('rvstartid');
              if(!data.Params) data.Params = new Array();
              data.Params.rvstartid = encodeURIComponent(ContinueData);
              BotFramework_ListPages.Revisions(data);
        }else{
              data.Next(Arr, data.Params);
        }
    },
    Links : function(FuncParams){
        if(!FuncParams.Arr) FuncParams.Arr = new Array();
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=links&titles=' + encodeURIComponent(FuncParams.Page);
        if(FuncParams.Params){
            for(var Param in FuncParams.Params){
                URL += "&"+Param+"="+encodeURIComponent(FuncParams.Params[Param]);
            }
        }
        BotFramework_GetPage({ url : URL, 
                               onSuccess : BotFramework_ListPages.LinksDone, 
                               Next : FuncParams.NextFunc, 
                               Arr : FuncParams.Arr, 
                               Params : FuncParams
                             });
    },
    LinksDone : function(Req, data){
        var ObjectXML = Req.responseXML;
        var BL = ObjectXML.getElementsByTagName('pl');
        for(var a=0,l=BL.length;a<l;a++){
            var Title = BL[a].getAttributes('title');
            data.Arr[Title] = new Array();
            var AttrL = BL[a].attributes.length;            
            for (j=0; j<AttrL; j++) {
                var AttrName = BL[a].attributes[j].name;
                var AttrValue = BL[a].getAttribute(AttrName);
                data.Arr[Title][AttrName] = AttrValue;
            }
        }
        var QContinue = ObjectXML.getElementsByTagName('query-continue')[0];
        if(QContinue){
              var ContinueData = QContinue.firstChild.getAttribute('plcontinue');
              if(!data.Params) data.Params = new Array();
              data.Params.plcontinue = encodeURIComponent(ContinueData);
              BotFramework_ListPages.Links(data);
        }else{
              data.Next(Arr, data.Params);
        }
    },
    Langlinks : function(FuncParams){
        if(!FuncParams.Arr) FuncParams.Arr = new Array();
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=iwlinks&titles=' + encodeURIComponent(FuncParams.Page);
        if(FuncParams.Params){
            for(var Param in FuncParams.Params){
                URL += "&"+Param+"="+encodeURIComponent(FuncParams.Params[Param]);
            }
        }
        BotFramework_GetPage({ url : URL, 
                               onSuccess : BotFramework_ListPages.LanglinksDone, 
                               Next : FuncParams.NextFunc, 
                               Arr : FuncParams.Arr, 
                               Params : FuncParams
                             });
    },
    LanglinksDone : function(Req, data){
        var ObjectXML = Req.responseXML;
        var BL = ObjectXML.getElementsByTagName('ll');
        for(var a=0,l=BL.length;a<l;a++){
            var Title = BL[a].getAttributes('title');
            data.Arr[Title] = new Array();
            var AttrL = BL[a].attributes.length;            
            for (j=0; j<AttrL; j++) {
                var AttrName = BL[a].attributes[j].name;
                var AttrValue = BL[a].getAttribute(AttrName);
                data.Arr[Title][AttrName] = AttrValue;
            }
        }
        var QContinue = ObjectXML.getElementsByTagName('query-continue')[0];
        if(QContinue){
              var ContinueData = QContinue.firstChild.getAttribute('llcontinue');
              if(!data.Params) data.Params = new Array();
              data.Params.llcontinue = encodeURIComponent(ContinueData);
              BotFramework_ListPages.Langlinks(data);
        }else{
              data.Next(Arr, data.Params);
        }
    },
    Images : function(FuncParams){
        if(!FuncParams.Arr) FuncParams.Arr = new Array();
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=images&titles=' + encodeURIComponent(FuncParams.Page);
        if(FuncParams.Params){
            for(var Param in FuncParams.Params){
                URL += "&"+Param+"="+encodeURIComponent(FuncParams.Params[Param]);
            }
        }
        BotFramework_GetPage({ url : URL, 
                               onSuccess : BotFramework_ListPages.ImagesDone, 
                               Next : FuncParams.NextFunc, 
                               Arr : FuncParams.Arr, 
                               Params : FuncParams
                             });
    },
    ImagesDone : function(Req, data){
        var ObjectXML = Req.responseXML;
        var BL = ObjectXML.getElementsByTagName('im');
        for(var a=0,l=BL.length;a<l;a++){
            var Title = BL[a].getAttributes('title');
            data.Arr[Title] = new Array();
            var AttrL = BL[a].attributes.length;            
            for (j=0; j<AttrL; j++) {
                var AttrName = BL[a].attributes[j].name;
                var AttrValue = BL[a].getAttribute(AttrName);
                data.Arr[Title][AttrName] = AttrValue;
            }
        }
        var QContinue = ObjectXML.getElementsByTagName('query-continue')[0];
        if(QContinue){
              var ContinueData = QContinue.firstChild.getAttribute('imcontinue');
              if(!data.Params) data.Params = new Array();
              data.Params.imcontinue = encodeURIComponent(ContinueData);
              BotFramework_ListPages.Images(data);
        }else{
              data.Next(Arr, data.Params);
        }
    },
    Templates : function(FuncParams){
        if(!FuncParams.Arr) FuncParams.Arr = new Array();
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=templates&titles=' + encodeURIComponent(FuncParams.Page);
        if(FuncParams.Params){
            for(var Param in FuncParams.Params){
                URL += "&"+Param+"="+encodeURIComponent(FuncParams.Params[Param]);
            }
        }
        BotFramework_GetPage({ url : URL, 
                               onSuccess : BotFramework_ListPages.TemplatesDone, 
                               Next : FuncParams.NextFunc, 
                               Arr : FuncParams.Arr, 
                               Params : FuncParams
                             });
    },
    TemplatesDone : function(Req, data){
        var ObjectXML = Req.responseXML;
        var BL = ObjectXML.getElementsByTagName('tl');
        for(var a=0,l=BL.length;a<l;a++){
            var Title = BL[a].getAttributes('title');
            data.Arr[Title] = new Array();
            var AttrL = BL[a].attributes.length;            
            for (j=0; j<AttrL; j++) {
                var AttrName = BL[a].attributes[j].name;
                var AttrValue = BL[a].getAttribute(AttrName);
                data.Arr[Title][AttrName] = AttrValue;
            }
        }
        var QContinue = ObjectXML.getElementsByTagName('query-continue')[0];
        if(QContinue){
              var ContinueData = QContinue.firstChild.getAttribute('tlcontinue');
              if(!data.Params) data.Params = new Array();
              data.Params.tlcontinue = encodeURIComponent(ContinueData);
              BotFramework_ListPages.Templates(data);
        }else{
              data.Next(Arr, data.Params);
        }
    },
    Categories : function(FuncParams){
        if(!FuncParams.Arr) FuncParams.Arr = new Array();
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=categories&titles=' + encodeURIComponent(FuncParams.Page);
        if(FuncParams.Params){
            for(var Param in FuncParams.Params){
                URL += "&"+Param+"="+encodeURIComponent(FuncParams.Params[Param]);
            }
        }
        BotFramework_GetPage({ url : URL, 
                               onSuccess : BotFramework_ListPages.CategoriesDone, 
                               Next : FuncParams.NextFunc, 
                               Arr : FuncParams.Arr, 
                               Params : FuncParams
                             });
    },
    CategoriesDone : function(Req, data){
        var ObjectXML = Req.responseXML;
        var BL = ObjectXML.getElementsByTagName('cl');
        for(var a=0,l=BL.length;a<l;a++){
            var Title = BL[a].getAttributes('title');
            data.Arr[Title] = new Array();
            var AttrL = BL[a].attributes.length;            
            for (j=0; j<AttrL; j++) {
                var AttrName = BL[a].attributes[j].name;
                var AttrValue = BL[a].getAttribute(AttrName);
                data.Arr[Title][AttrName] = AttrValue;
            }
        }
        var QContinue = ObjectXML.getElementsByTagName('query-continue')[0];
        if(QContinue){
              var ContinueData = QContinue.firstChild.getAttribute('clcontinue');
              if(!data.Params) data.Params = new Array();
              data.Params.clcontinue = encodeURIComponent(ContinueData);
              BotFramework_ListPages.Categories(data);
        }else{
              data.Next(Arr, data.Params);
        }
    },
    Allpages : function(FuncParams){
        if(!FuncParams.Arr) FuncParams.Arr = new Array();
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=allpages';
        if(FuncParams.Params){
            for(var Param in FuncParams.Params){
                URL += "&"+Param+"="+encodeURIComponent(FuncParams.Params[Param]);
            }
        }
        BotFramework_GetPage({ url : URL, 
                               onSuccess : BotFramework_ListPages.AllpagesDone, 
                               Next : FuncParams.NextFunc, 
                               Arr : FuncParams.Arr, 
                               Params : FuncParams
                             });
    },
    AllpagesDone : function(Req, data){
        var ObjectXML = Req.responseXML;
        var BL = ObjectXML.getElementsByTagName('p');
        for(var a=0,l=BL.length;a<l;a++){
            var Title = BL[a].getAttributes('title');
            data.Arr[Title] = new Array();
            var AttrL = BL[a].attributes.length;            
            for (j=0; j<AttrL; j++) {
                var AttrName = BL[a].attributes[j].name;
                var AttrValue = BL[a].getAttribute(AttrName);
                data.Arr[Title][AttrName] = AttrValue;
            }
        }
        var QContinue = ObjectXML.getElementsByTagName('query-continue')[0];
        if(QContinue){
              var ContinueData = QContinue.firstChild.getAttribute('apfrom');
              if(!data.Params) data.Params = new Array();
              data.Params.apfrom = encodeURIComponent(ContinueData);
              BotFramework_ListPages.Allpages(data);
        }else{
              data.Next(Arr, data.Params);
        }
    },
    Whatlinkshere : function(FuncParams){
        if(!FuncParams.Arr) FuncParams.Arr = new Array();
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=backlinks&bltitle=' + encodeURIComponent(FuncParams.Page);
        if(FuncParams.Params){
            for(var Param in FuncParams.Params){
                URL += "&"+Param+"="+encodeURIComponent(FuncParams.Params[Param]);
            }
        }
        BotFramework_GetPage({ url : URL, 
                               onSuccess : BotFramework_ListPages.WhatlinkshereDone, 
                               Next : FuncParams.NextFunc, 
                               Arr : FuncParams.Arr, 
                               Params : FuncParams
                             });
    },
    WhatlinkshereDone : function(Req, data){
        var ObjectXML = Req.responseXML;
        var BL = ObjectXML.getElementsByTagName('bl');
        for(var a=0,l=BL.length;a<l;a++){
            var Title = BL[a].getAttributes('title');
            data.Arr[Title] = new Array();
            var AttrL = BL[a].attributes.length;            
            for (j=0; j<AttrL; j++) {
                var AttrName = BL[a].attributes[j].name;
                var AttrValue = BL[a].getAttribute(AttrName);
                data.Arr[Title][AttrName] = AttrValue;
            }
        }
        var QContinue = ObjectXML.getElementsByTagName('query-continue')[0];
        if(QContinue){
              var ContinueData = QContinue.firstChild.getAttribute('blcontinue');
              if(!data.Params) data.Params = new Array();
              data.Params.blcontinue = encodeURIComponent(ContinueData);
              BotFramework_ListPages.Whatlinkshere(data);
        }else{
              data.Next(Arr, data.Params);
        }
    },
    Blocks : function(FuncParams){
        if(!FuncParams.Arr) FuncParams.Arr = new Array();
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=blocks';
        if(FuncParams.Params){
            for(var Param in FuncParams.Params){
                URL += "&"+Param+"="+encodeURIComponent(FuncParams.Params[Param]);
            }
        }
        BotFramework_GetPage({ url : URL, 
                               onSuccess : BotFramework_ListPages.BlocksDone, 
                               Next : FuncParams.NextFunc, 
                               Arr : FuncParams.Arr, 
                               Params : FuncParams
                             });
    },
    BlocksDone : function(Req, data){
        var ObjectXML = Req.responseXML;
        var BL = ObjectXML.getElementsByTagName('block');
        for(var a=0,l=BL.length;a<l;a++){
            var Title = BL[a].getAttributes('user');
            data.Arr[Title] = new Array();
            var AttrL = BL[a].attributes.length;            
            for (j=0; j<AttrL; j++) {
                var AttrName = BL[a].attributes[j].name;
                var AttrValue = BL[a].getAttribute(AttrName);
                data.Arr[Title][AttrName] = AttrValue;
            }
        }
        var QContinue = ObjectXML.getElementsByTagName('query-continue')[0];
        if(QContinue){
              var ContinueData = QContinue.firstChild.getAttribute('bkstart');
              if(!data.Params) data.Params = new Array();
              data.Params.bkstart = encodeURIComponent(ContinueData);
              BotFramework_ListPages.Blocks(data);
        }else{
              data.Next(Arr, data.Params);
        }
    },
    Categorymembers : function(FuncParams){
        if(!FuncParams.Arr) FuncParams.Arr = new Array();
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=categorymembers&cmtitle=' + encodeURIComponent(FuncParams.Page);
        if(FuncParams.Params){
            for(var Param in FuncParams.Params){
                URL += "&"+Param+"="+encodeURIComponent(FuncParams.Params[Param]);
            }
        }
        alert(URL);
        BotFramework_GetPage({ url : URL, 
                               onSuccess : BotFramework_ListPages.CategorymembersDone, 
                               Next : FuncParams.NextFunc, 
                               Arr : FuncParams.Arr, 
                               Params : FuncParams
                             });
    },
    CategorymembersDone : function(Req, data){
        alert("OK");
        var ObjectXML = Req.responseXML;
        var BL = ObjectXML.getElementsByTagName('cm');
        for(var a=0,l=BL.length;a<l;a++){
            var Title = BL[a].getAttributes('title');
            data.Arr[Title] = new Array();
            var AttrL = BL[a].attributes.length;            
            for (j=0; j<AttrL; j++) {
                var AttrName = BL[a].attributes[j].name;
                var AttrValue = BL[a].getAttribute(AttrName);
                data.Arr[Title][AttrName] = AttrValue;
            }
        }
        var QContinue = ObjectXML.getElementsByTagName('query-continue')[0];
        if(QContinue){
              var ContinueData = QContinue.firstChild.getAttribute('cmcontinue');
              if(!data.Params) data.Params = new Array();
              data.Params.cmcontinue = encodeURIComponent(ContinueData);
              BotFramework_ListPages.Categorymembers(data);
        }else{
              data.Next(Arr, data.Params);
        }
    },
    Embeddedin : function(FuncParams){
        if(!FuncParams.Arr) FuncParams.Arr = new Array();
        var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=embeddedin&eititle=' + encodeURIComponent(FuncParams.Page);
        if(FuncParams.Params){
            for(var Param in FuncParams.Params){
                URL += "&"+Param+"="+encodeURIComponent(FuncParams.Params[Param]);
            }
        }
        BotFramework_GetPage({ url : URL, 
                               onSuccess : BotFramework_ListPages.EmbeddedinDone, 
                               Next : FuncParams.NextFunc, 
                               Arr : FuncParams.Arr, 
                               Params : FuncParams
                             });
    },
    EmbeddedinDone : function(Req, data){
        var ObjectXML = Req.responseXML;
        var BL = ObjectXML.getElementsByTagName('ei');
        for(var a=0,l=BL.length;a<l;a++){
            var Title = BL[a].getAttributes('title');
            data.Arr[Title] = new Array();
            var AttrL = BL[a].attributes.length;            
            for (j=0; j<AttrL; j++) {
                var AttrName = BL[a].attributes[j].name;
                var AttrValue = BL[a].getAttribute(AttrName);
                data.Arr[Title][AttrName] = AttrValue;
            }
        }
        var QContinue = ObjectXML.getElementsByTagName('query-continue')[0];
        if(QContinue){
              var ContinueData = QContinue.firstChild.getAttribute('eicontinue');
              if(!data.Params) data.Params = new Array();
              data.Params.eicontinue = encodeURIComponent(ContinueData);
              BotFramework_ListPages.Embeddedin(data);
        }else{
              data.Next(Arr, data.Params);
        }
    }
};