Aller au contenu

Utilisateur:Dr Brains/ListRedirects.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.
if(mw.config.get('wgNamespaceNumber')!=14 && mw.config.get('wgNamespaceNumber')>-1){ 
     addOnloadHook(ListRedirects_AddLink);
}
 
var ListRedirects_ajax = {
  http: function(bundle) {
    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)
          ListRedirects_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{  }
  }
};

function ListRedirects_AddLink(){
     try{
          var OngletsCactions = document.getElementById('p-cactions').getElementsByTagName('ul')[0];
          OngletsCactions.innerHTML += '<li><a href="javascript:ListRedirects_GetRedirections();">Redirections</a></li>';
     }catch(e){ }
}

function ListRedirects_GetRedirections(RedirectList, BLContinue){
     var Sub = document.getElementById("contentSub");
     if(!Sub) return;
     var Div = document.getElementById("ListRedirect");
     if(Div){
          Div.parentNode.removeChild(Div);
          return;
     }
     if(!RedirectList) RedirectList = new Array();
     if(!BLContinue) BLContinue = "";
     var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&list=backlinks'
             + '&blfilterredir=redirects'
             + '&bllimit=' + ( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1||mw.config.get('wgUserGroups').indexOf('bot')!=-1) ? 4999 : 499 )
             + '&bltitle='+encodeURIComponent(mw.config.get('wgPageName'))
             + BLContinue;
     ListRedirects_ajax.http({url       : URL,
                              onSuccess : ListRedirects_ListRedirections,
                              thelist   : RedirectList
                            });
}

function ListRedirects_ListRedirections(Req, data){
     var ObjetXML = Req.responseXML;
     if(!ObjetXML) return;
     var RedirectList = data.thelist;
     var Pages = ObjetXML.getElementsByTagName('bl');
     for(var a=0,l=Pages.length;a<l;a++){
          RedirectList.push(Pages[a].getAttribute('title'));
     }
     var MustContinue = ObjetXML.getElementsByTagName('query-continue');
     if(MustContinue && MustContinue[0]){
          var ContinueValue = "&blcontinue=" + encodeURIComponent(MustContinue[0].firstChild.getAttribute('blcontinue'));
          ListRedirects_GetRedirections(RedirectList, ContinueValue);
     }else{
          ListRedirects_ShowRedirections(RedirectList);
     }
}

function ListRedirects_ShowRedirections(List){
     var Sub = document.getElementById("contentSub");
     if(!Sub) return;
     var Div = document.createElement('div');
     Div.id = "ListRedirect";
     Sub.insertBefore(Div, Sub.firstChild);
     Div.appendChild(ListRedirects_CreateNewRedirectForm());
     Div.appendChild(document.createElement('hr'));
     if(List.length>0){
          for(var a=0,l=List.length;a<l;a++){
               ListRedirects_AddRedirect(List[a]);
          }
     }else{
          var Span = document.createElement('span');
          Span.id = "NoRedirectSpan";
          Span.appendChild(document.createTextNode("Pas de redirections • "));
          Div.insertBefore(Span, Div.firstChild);
     }
}

function ListRedirects_CreateNewRedirectForm(){
     var Span = document.createElement('span');
     Span.id = "NewRedirectSpan";
     var Input = document.createElement('input');
     Input.id = "NewRedirectInput";
     Input.type = "text";
     Input.setAttribute('style', 'padding:0');
     var OK = document.createElement('input');
     OK.type = "button";
     OK.value = "OK";
     OK.setAttribute('style', 'padding:0');
     OK.onclick = function(){ ListRedirects_CreateNewRedirect(); };
     OK.onselect = function(){ ListRedirects_CreateNewRedirect(); };
     Span.appendChild(Input);
     Span.appendChild(OK);
     return Span;
}

function ListRedirects_CreateNewRedirect(){
     var Input = document.getElementById("NewRedirectInput");
     if(!Input) return;
     var NewRedirectName = Input.value;
     if(!NewRedirectName) return;
     var ThisPageName = mw.config.get('wgPageName').replace(/_/g, " ");
     var OKConfirm = confirm("Voulez-vous créer la page « "+NewRedirectName+" » redirigeant vers la page « "+ThisPageName+" » ?");
     if(!OKConfirm) return;
     var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=xml&action=query&prop=info&intoken=edit'
             + '&titles='+encodeURIComponent(NewRedirectName);
     ListRedirects_ajax.http({url       : URL,
                              onSuccess : ListRedirects_CreateRedirect,
                              Redirect  : NewRedirectName,
                              Page      : ThisPageName
                            });
}

function ListRedirects_CreateRedirect(Req, data){
     var ObjetXML = Req.responseXML;
     if(!ObjetXML) return;
     try{
          var Token = ObjetXML.getElementsByTagName('page')[0].getAttribute('edittoken');
          var Missing = ObjetXML.getElementsByTagName('page')[0].getAttribute('missing');
     }catch(e){ return; }
     if(!Token) return;
     if(Missing==null){
          alert("Une page existe déjà sous le titre « "+data.Redirect+" »");
          return;
     }
     var EditParam = new Array();
     EditParam["token"] = encodeURIComponent(Token);
     EditParam["title"] = encodeURIComponent(data.Redirect);
     EditParam["watchlist"] = "nochange";
     EditParam["minor"] = "1";
     EditParam["text"] = encodeURIComponent("#REDIRECTION[["+data.Page+"]]"); 
     var Params = new Array();
     for(var Param in EditParam){
          if(EditParam[Param] || EditParam[Param]=="") Params.push(Param+"="+EditParam[Param]);
     }
     Params = Params.join("&");
     var headers = new Array();
     headers['Content-Type'] = 'application/x-www-form-urlencoded';
     ListRedirects_ajax.http({ url         : mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?action=edit',
                               method      : "POST", headers: headers, data: Params,
                               onSuccess   : ListRedirects_AddRedirectDone,
                               newRedirect : data.Redirect
                             });
}

function ListRedirects_AddRedirectDone(Req, data){
     ListRedirects_AddRedirect(data.newRedirect);
}


function ListRedirects_AddRedirect(Title){
     var Span = document.getElementById("NewRedirectSpan");
     var Input = document.getElementById("NewRedirectInput");
     if(!Span || !Input || !Title) return;
     var NewLink = document.createElement('a');
     NewLink.href = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title="+encodeURIComponent(Title)+"&redirect=no";
     NewLink.innerHTML = Title;
     Span.parentNode.insertBefore(NewLink, Span);
     Span.parentNode.insertBefore(document.createTextNode(" • "), Span);
     Input.value = "";
     var NoRedirectSpan = document.getElementById("NoRedirectSpan");
     if(NoRedirectSpan) NoRedirectSpan.parentNode.removeChild(NoRedirectSpan);
}