MediaWiki:Gadget-RenommageCategorie.js

維基文庫,自由的圖書館

注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的变更的影响。

  • Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5Ctrl-R(Mac为⌘-R
  • Google Chrome:Ctrl-Shift-R(Mac为⌘-Shift-R
  • Internet Explorer或Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5
  • Opera:Ctrl-F5
/* ***************************************************************************************************************

Fonction : Renommage/vidage de catégorie

* Ajoute un onglet "renommer" en haut d'une page de catégorie.

* Détail du fonctionnement :
   1. modification/retrait¹ automatique de lien catégorie dans les pages et les sous-catégories d'une catégorie;
   2. si nécessaire² : copie du contenu de l'ancienne catégorie dans la nouvelle + crédit des auteurs en page de discussion;
   3. si nécessaire² : suppression de l'ancienne catégorie³;

 ¹ basé sur la partie "édition" du gadget [[MediaWiki:Gadget-HotCats.js]], plusieurs pop-up permettent de définir les paramètres.
 ² après une pop-up de confirmation
 ³ si utilisateur sysop uniquement

* Documentation complète : [[Projet:JavaScript/Notices/RenommageCategorie]]

* Licence : Domaine public

{{Catégorisation JS|RenommageCategorie}}
******************************************************************************************************************* */
//<source lang=javascript><pre><nowiki>

////////////////////////////////////////////// TEXTES GLOBAUX ///////////////////////////

// Libellé de l'onglet
var RenommageCategorie_Text_Move = '重命名';

// Pop-up paramètres
var RenommageCategorie_Text_PopRemoveCat = '原名称';
var RenommageCategorie_Text_PopAddCat = '新名称';
var RenommageCategorie_Text_PopConfirm = '需要人工确认吗?';
var RenommageCategorie_Text_PopWatch = '监视修改的页面?';
var RenommageCategorie_Text_PopButtonOKText = '确认';
var RenommageCategorie_Text_PopButtonOKTitle = '确认';
var RenommageCategorie_Text_PopButtonCancelText = '取消';
var RenommageCategorie_Text_PopButtonCancelTitle = '取消';

// Pop-up de confirmation
var RenommageCategorie_Text_Modif = "你将修改$1个页面。\n\n"
                                  + "继续吗?\n";                                  // Confirmation édition (<50 pages)
var RenommageCategorie_Text_GrosseModif = "你将修改$1个页面。\n"
                                        + "这样大量的工作最好由机器人完成。\n\n"
                                        + "依然继续吗?\n";                  // Confirmation grosse édition (>50 pages)
var RenommageCategorie_Text_Delay = "(每次修改之间延迟$1 秒)";
var RenommageCategorie_Text_ConfirmEdit = "$1 -> $2\n\n确认修改 : $3";  // Confirmation édition
var RenommageCategorie_Text_ConfirmMove = "把$1的页面复制到$2吗?";      // Copie
var RenommageCategorie_Text_ConfirmMoveBis = '提交本次复制编辑吗?'              // Confirmation Copie
var RenommageCategorie_Text_ConfirmDelete = "删除$1吗?";            // Suppression

// Pop-up lors d'un problème
var RenommageCategorie_Text_AlertSameCat = "移除和添加的分类不能相同。";
var RenommageCategorie_Text_AlertEditPb1 = "找不到分类« $1 »。";
var RenommageCategorie_Text_AlertEditPb2 = "分类 « $1 » 已经存在。";
var RenommageCategorie_Text_AlertEditPb3 = "发现多个 « $1 » 分类。";
var RenommageCategorie_Text_AlertEditTryAgain = '出错!\n\n重试?';
var RenommageCategorie_Text_AlertEditNextPage = '下一步?'

// Résumés de modification
var RenommageCategorie_Text_ResumeEditModif = "更改分类 [[$1]] → [[$2]]";
var RenommageCategorie_Text_ResumeEditDelete = "移除分类 [[$1]]";
var RenommageCategorie_Text_ResumeMove = "移动自分类 [[$1]]";
var RenommageCategorie_Text_ResumeMoveHist = "移动分类编辑历史 [[$1]]";
var RenommageCategorie_Text_ResumeDelete = "移动到分类 [[$2]]";
var RenommageCategorie_Text_ResumeDeleteBis = "空的废弃分类";

////////////////////////////////////////////// TEXTES LOCAUX ///////////////////////////

// Résumés de modification : lien vers la documentation
var RenommageCategorie_Text_Script = '[[w:Wikipedia:维基百科工具/RenommageCategorie|分类重命名工具]] : ';

// Modèle pour crédit des auteurs en page de discussion
var RenommageCategorie_Text_HistTemplate = "{{分类重命名|$1|users=$2}}\n";

// Modèle User
var RenommageCategorie_Text_UserTemplate = "{{User|$1}}";

// Modèle Suppression Immédiate
var RenommageCategorie_Text_DeleteTemplate = "{{delete|O4}}";

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

// --------------------------------------------------------------------------------------------
// Variables par défaut

var RenommageCategorie_RemoveCat = mw.config.get('wgTitle');    // Catégorie à enlever
var RenommageCategorie_AddCat = mw.config.get('wgTitle');       // Catégorie à ajouter
var RenommageCategorie_Autoconfirm = false;    // Publication automatique
var RenommageCategorie_AutoWatch = false;      // Suivi automatique
var RenommageCategorie_TimeOut = 10;           // Délai par défaut après publication

if( (mw.config.get('wgUserGroups').indexOf("sysop")!=-1)||(mw.config.get('wgUserGroups').indexOf("bot")!=-1)){
   var RenommageCategorie_APILimit = 4999;
}else{
   var RenommageCategorie_APILimit = 499;
}
if(mw.config.get('wgUserGroups').indexOf("bot")!=-1){
   var RenommageCategorie_IsBot = true;
}else{
   var RenommageCategorie_IsBot = false;
}

// --------------------------------------------------------------------------------------------
// Fonction de requête

var RenommageCategorie_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){ RenommageCategorie_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{ }}
};

// --------------------------------------------------------------------------------------------
// Lancement

if(mw.config.get('wgNamespaceNumber')==14){
     mw.loader.load('//fr.wikipedia.org/w/index.php?title=Mediawiki:Gadget-RenommageCategorieLang.js&action=raw&ctype=text/javascript');  
     $(RenommageCategorie_AddLink);
}

// --------------------------------------------------------------------------------------------
// Ajout du lien "Renommer"

function RenommageCategorie_AddLink(){
     if(typeof(RenommageCategorie_LangCustom)=="function") RenommageCategorie_LangCustom();
     if(typeof(RenommageCategorie_SiteCustom)=="function") RenommageCategorie_SiteCustom();
     if(typeof(RenommageCategorie_UserCustom)=="function") RenommageCategorie_UserCustom();
     var OngletsCactions = document.getElementById('p-cactions');
     if(OngletsCactions){
          var CactionsUl = OngletsCactions.getElementsByTagName('ul')[0];
          CactionsUl.innerHTML += '<li><a href="javascript:RenommageCategorie_OpenMenu();">'+RenommageCategorie_Text_Move+'</a></li>';
          if(OngletsCactions.className){
               OngletsCactions.className = OngletsCactions.className.replace(/[ ]*emptyPortlet[ ]*/, " ");
          }
     }
}

// --------------------------------------------------------------------------------------------
// Création du menu

function RenommageCategorie_OpenMenu(){
    if(document.getElementById('RenommageCategorie_Menu')) return;
 
    var agt=navigator.userAgent.toLowerCase();
    var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
    if(is_ie){
        var LargeurEcran = parseInt(screen.width);
        var HauteurEcran = parseInt(screen.height);
    }else{
        var LargeurEcran = parseInt(window.innerWidth);
        var HauteurEcran = parseInt(window.innerHeight);
    }
 
    var Menu = document.createElement('div');
    Menu.id='RenommageCategorie_Menu';
    Menu.className ='RenommageCategorie_Menu';
    Menu.style.position='fixed';
    Menu.style.zIndex= 500;
    Menu.style.padding='5px';
    Menu.style.backgroundColor='white';
    Menu.style.border='3px double black';
    Menu.style.width= '450px';
    Menu.style.height= '120px';
    document.body.appendChild(Menu);
    PositionGauche = parseInt((LargeurEcran-Menu.clientWidth)/2) ;
    PositionHaut = parseInt((HauteurEcran-Menu.clientHeight)/3) ;
    Menu.style.left=PositionGauche + 'px';
    Menu.style.top=PositionHaut + 'px'; 
    var MenuContent = ''
    + '<input type="text" id="RemoveCat" value="'+mw.config.get('wgTitle')+'" disabled="disabled" size="50"/>'
    + '<label for="RemoveCat">'+RenommageCategorie_Text_PopRemoveCat+'</label>'
    + '<br />'
    + '<input type="text" id="AddCat" value="'+mw.config.get('wgTitle')+'" size="50" />'
    + '<label for="AddCat">'+RenommageCategorie_Text_PopAddCat+'</label>'
    + '<br />'
    + '<input type="checkbox" id="Autoconfirm" style="cursor:pointer;" />'
    + '<label for="Autoconfirm">'+RenommageCategorie_Text_PopConfirm+'</label>'
    + '&nbsp;&nbsp;'
    + '<input type="checkbox" id="AutoWatch" style="cursor:pointer;" />'
    + '<label for="AutoWatch">'+RenommageCategorie_Text_PopWatch+'</label>'
    + '<br />'
    + '<br />'
    + '<center>'
    + '<input type="button" style="cursor:pointer;" '
    + ' value="'+RenommageCategorie_Text_PopButtonOKText+'" title="'+RenommageCategorie_Text_PopButtonOKTitle+'" '
    + ' onclick="RenommageCategorie_CheckMenu();" onselect="RenommageCategorie_CheckMenu();"/>'
    + '&nbsp;&nbsp;'
    + '<input type="button" style="cursor:pointer;" '
    + ' value="'+RenommageCategorie_Text_PopButtonCancelText+'" title="'+RenommageCategorie_Text_PopButtonCancelTitle+'" '
    + ' onclick="RenommageCategorie_CloseMenu();" onselect="RenommageCategorie_CloseMenu();"/>'
    + '</center>';
    Menu.innerHTML = MenuContent;
    document.getElementById("AddCat").focus();
}

// --------------------------------------------------------------------------------------------
// Annulation du menu

function RenommageCategorie_CloseMenu(){
    var Menu = document.getElementById('RenommageCategorie_Menu');
    if(Menu) RenommageCategorie_DeleteElement(Menu);
}

// --------------------------------------------------------------------------------------------
// Validation du menu

function RenommageCategorie_CheckMenu(){
     var AddCat = document.getElementById('AddCat');
     var Autoconfirm = document.getElementById('Autoconfirm');
     var AutoWatch = document.getElementById('AutoWatch');
     if( (!AddCat)||(!Autoconfirm)||(!AutoWatch) ) return;   
 
     RenommageCategorie_AddCat = AddCat.value;
     if(RenommageCategorie_AddCat == RenommageCategorie_RemoveCat){
          alert(RenommageCategorie_Text_AlertSameCat);
          return;
     }
     if(Autoconfirm.checked) RenommageCategorie_Autoconfirm = true;
     else RenommageCategorie_Autoconfirm = false;
     if(AutoWatch.checked) RenommageCategorie_AutoWatch = true;
     else RenommageCategorie_AutoWatch = false;
     RenommageCategorie_CloseMenu();
     RenommageCategorie_ListPages();
}

// --------------------------------------------------------------------------------------------
// Listage des pages de la catégorie cible

function RenommageCategorie_ListPages(CatArray, category, categorycontinue){
     if(!CatArray) CatArray = new Array();
     if(!category) category = mw.config.get('wgPageName');    
     if(!categorycontinue) categorycontinue = '';
     var URL = mw.config.get('wgServer') + wgScriptPath + '/api.php?format=xml&action=query&list=categorymembers'
             + '&cmlimit=' + RenommageCategorie_APILimit
             + '&cmtitle=' + encodeURIComponent(category) 
             + categorycontinue;

     RenommageCategorie_ajax.http({ 
          url: URL,
          cat: category,
          catlist: CatArray,
          onSuccess:RenommageCategorie_ListPagesDone
     });
}

function RenommageCategorie_ListPagesDone(Req, data){    
     var CatArray = data.catlist;
     var category = data.cat;
     var ElementTraitement = Req.responseXML; 
     var Pages = ElementTraitement.getElementsByTagName('cm');
     for(a=0;a<Pages.length;a++){
          var TitrePage = Pages[a].getAttribute('title');
          if(CatArray.indexOf(TitrePage)==-1) CatArray.push(TitrePage);
     }
     var CatContinue = ElementTraitement.getElementsByTagName('query-continue')[0];
     if(CatContinue){
          var AutreRequeteContinue = '&cmcontinue=' + encodeURIComponent(CatContinue.firstChild.getAttribute("cmcontinue"));
          RenommageCategorie_ListPages(CatArray, category, AutreRequeteContinue);
     }else{
          RenommageCategorie_SortList(CatArray);
      }
}

// --------------------------------------------------------------------------------------------
// Triage des pages de la catégorie cible

var RenommageCategorie_CatList = new Array();

function RenommageCategorie_SortList(CatArray){ 
      while(RenommageCategorie_CatList[0]) RenommageCategorie_CatList.pop();
      var PagesTemp = CatArray.sort();
      for(var a=0;a<PagesTemp.length;a++){
           if(PagesTemp[a]!=PagesTemp[(a+1)]){
                 RenommageCategorie_CatList.push(PagesTemp[a]);
           }
      }
      var Length = RenommageCategorie_CatList.length;
      if(!RenommageCategorie_IsBot){
            if(Length<10) RenommageCategorie_TimeOut = (RenommageCategorie_TimeOut/2);
            if(Length>50){
                  RenommageCategorie_TimeOut = (RenommageCategorie_TimeOut*2);
                  var Text = '' 
                           + RenommageCategorie_Text_GrosseModif.split('$1').join(Length) 
                           + RenommageCategorie_Text_Delay.split('$1').join(RenommageCategorie_TimeOut)
                  var GrosseModif = confirm(Text);
                  if(!GrosseModif) window.location.reload();
            }else if(Length>0){
                  var Text = '' 
                           + RenommageCategorie_Text_Modif.split('$1').join(Length) 
                           + RenommageCategorie_Text_Delay.split('$1').join(RenommageCategorie_TimeOut)
                  var Modif = confirm(Text);
                  if(!Modif) window.location.reload();
            }
      }
      RenommageCategorie_ModifCat(0);
}

// --------------------------------------------------------------------------------------------
// Changement de catégorie dans une page

function RenommageCategorie_ModifCat(position){
     var Page = RenommageCategorie_CatList[position];
     if(!Page){ 
          var CreateNewCat_SurEtCertain = false;
          if(RenommageCategorie_AddCat!='') CreateNewCat_SurEtCertain = confirm(RenommageCategorie_Text_ConfirmMove.split('$1').join(RenommageCategorie_RemoveCat).split('$2').join(RenommageCategorie_AddCat));
          if(!CreateNewCat_SurEtCertain){
               var urlOldCat = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' 
                             + mw.config.get('wgFormattedNamespaces')[14]+':'+encodeURIComponent(RenommageCategorie_RemoveCat);
               var DeleteOldCat_SurEtCertain = confirm(RenommageCategorie_Text_ConfirmDelete.split('$1').join(RenommageCategorie_RemoveCat));
               if(DeleteOldCat_SurEtCertain){
                    if(mw.config.get('wgUserGroups').indexOf('sysop')!=-1){
                         RenommageCategorie_ajax.http({ 
                              url: urlOldCat + '&action=delete',
                              onSuccess:RenommageCategorie_DeleteOldCat
                         });
                    }else{
                         RenommageCategorie_ajax.http({ 
                              url: urlOldCat + '&action=edit',
                              onSuccess:RenommageCategorie_DoDeletionRequest
                         });
                    }
               }else{
                    window.location.reload();
               }
          }else{
               RenommageCategorie_CreateNewCat(); 
          }
          return;
     }
     var URL = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' + encodeURIComponent(Page) + '&action=edit';
     RenommageCategorie_ajax.http({ 
          url: URL,
          pos: position,
          onSuccess:RenommageCategorie_ModifCatRunning
     });
}

function RenommageCategorie_ModifCatRunning(Req, data){
     var position = data.pos;
     while(document.body.firstChild){ RenommageCategorie_DeleteElement(document.body.firstChild);}
     document.body.innerHTML = Req.responseText; 
     var TextArea = document.getElementById('wpTextbox1');
     if(!TextArea){
          var Problem = confirm( url + '\n\n' + RenommageCategorie_Text_AlertEditTryAgain );
          if(Problem){ 
               RenommageCategorie_ModifCat(position);
          }else{
               var NextPage = confirm(RenommageCategorie_Text_AlertEditNextPage);
               if(NextPage) RenommageCategorie_ModifCat((position+1));
          }
          return; 
     }
     var OldText = TextArea.value;
     var Sommaire = '';
     if ( RenommageCategorie_RemoveCat != "" ) {   
          OldText = RenommageCategorie_CleanCats(OldText);
          var OldCatRegExp = RenommageCategorie_CreateRegExp(RenommageCategorie_RemoveCat);
          var OldCatmatches = OldText.match(OldCatRegExp);         
          var AddCatRegExp = RenommageCategorie_CreateRegExp(RenommageCategorie_AddCat);
          var NewCatmatches = OldText.match(AddCatRegExp);
          if (NewCatmatches == null && OldCatmatches != null && OldCatmatches.length == 1) { // Found one occurrence of the category - good!
               if(RenommageCategorie_AddCat != ""){
                    OldText = OldText.replace(OldCatRegExp, "$1[["+mw.config.get('wgFormattedNamespaces')[14]+":" + RenommageCategorie_AddCat + "$2]]");
                    Sommaire = RenommageCategorie_Text_ResumeEditModif.split('$1').join(mw.config.get('wgFormattedNamespaces')[14]+":"+RenommageCategorie_RemoveCat).split('$2').join(mw.config.get('wgFormattedNamespaces')[14]+":"+RenommageCategorie_AddCat);
               } else {
                    OldText = OldText.replace(OldCatRegExp, "");
                    Sommaire = RenommageCategorie_Text_ResumeEditDelete.split('$1').join(mw.config.get('wgFormattedNamespaces')[14]+":"+RenommageCategorie_RemoveCat);
               }
          } else {
               var Error;
               if(NewCatmatches!=null){
                    Error = RenommageCategorie_Text_AlertEditPb2.split('$1').join(RenommageCategorie_AddCat);
               }else if(OldCatmatches==null){
                    Error = RenommageCategorie_Text_AlertEditPb1.split('$1').join(RenommageCategorie_RemoveCat);
               }else if(OldCatmatches.length>1){
                    Error = RenommageCategorie_Text_AlertEditPb3.split('$1').join(RenommageCategorie_RemoveCat);
               }
               var Suivante = confirm(Error + "\n\n" + RenommageCategorie_Text_AlertEditNextPage);
               if(!Suivante){
                    window.location.reload();
               }else{
                    RenommageCategorie_AddBandeau(CatArray, (position+1));
               }
               return;
          }
     }
     var TexteFinal = OldText; 
     var SommaireFinal = Sommaire ;
     document.getElementById('wpTextbox1').value = TexteFinal;
     document.getElementById('wpSummary').value = RenommageCategorie_Text_Script+SommaireFinal;
     var Minor = document.getElementById('wpMinoredit');
     if(Minor) Minor.checked = "checked";
     if(RenommageCategorie_AutoWatch) document.getElementById('wpWatchthis').checked = "checked";
     else document.getElementById('wpWatchthis').checked = "";
     if(!RenommageCategorie_Autoconfirm){
          var SurEtCertain = confirm(RenommageCategorie_Text_ConfirmEdit.split('$1').join(RenommageCategorie_RemoveCat).split('$2').join(RenommageCategorie_AddCat).split('$3').join(Sommaire));
          if(!SurEtCertain){
               var SurEtCertainBis = confirm(RenommageCategorie_Text_AlertEditNextPage);
               if(!SurEtCertainBis){
                    window.location.reload();
               }else{
                    RenommageCategorie_ModifCat((position+1));
               }
               return;
          }
     }
     var action = document.getElementById("editform").action;
     var headers = new Array();
     headers['Content-Type'] = 'application/x-www-form-urlencoded';
     RenommageCategorie_ajax.http({ 
          url: action,
          method: "POST", 
          headers: headers,
          data: RenommageCategorie_GetPostValues(),
          onSuccess:RenommageCategorie_ModifCatDone,
          position:position
     });
}

function RenommageCategorie_ModifCatDone(Req, data){
     var position = data.position;
     while(document.body.firstChild){RenommageCategorie_DeleteElement(document.body.firstChild);}
     document.body.innerHTML = Req.responseText; 
     if(!document.getElementById("editform")){
          if(RenommageCategorie_IsBot){
              RenommageCategorie_ModifCat((position+1));
          }else{
               setTimeout("RenommageCategorie_ModifCat("+(position+1)+")",RenommageCategorie_TimeOut*1000);
          }
     }else{
          if(!RenommageCategorie_IsBot){
               var DeuxiemeEssai = confirm(RenommageCategorie_Text_AlertEditTryAgain);
               if(!DeuxiemeEssai) return;
          }
          RenommageCategorie_ModifCat(position);
     }
}

// --------------------------------------------------------------------------------------------
// Création nouvelle catégorie par copie

function RenommageCategorie_CreateNewCat(){
     var URLOldCat = mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgFormattedNamespaces')[14]+':'+encodeURIComponent(RenommageCategorie_RemoveCat)+'&action=raw';
     RenommageCategorie_ajax.http({ 
          url: URLOldCat,
          onSuccess:RenommageCategorie_CreateNewCat_GetOldText

     });
}

function RenommageCategorie_CreateNewCat_GetOldText(Req, data){
     var Text = Req.responseText;
     var URLNewCat = mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgFormattedNamespaces')[14]+':'+encodeURIComponent(RenommageCategorie_AddCat)+'&action=edit';
     RenommageCategorie_ajax.http({ 
          url: URLNewCat,
          onSuccess:RenommageCategorie_CreateNewCatProcess,
          text:Text
     });
}

function RenommageCategorie_CreateNewCatProcess(Req, data){
     var TexteFinal = data.text;
     while(document.body.firstChild){ RenommageCategorie_DeleteElement(document.body.firstChild);}
     document.body.innerHTML = Req.responseText; 
     var TextArea = document.getElementById('wpTextbox1');
     if(!TextArea){
          var Problem = confirm( urlNewCat + '\n\n' + RenommageCategorie_Text_AlertEditTryAgain );
          if(Problem){ 
               RenommageCategorie_CreateNewCat();
          }
          return;
     }  
     var SommaireFinal = RenommageCategorie_Text_Script + RenommageCategorie_Text_ResumeMove.split('$1').join(mw.config.get('wgFormattedNamespaces')[14]+":"+RenommageCategorie_RemoveCat);
     document.getElementById('wpTextbox1').value = TexteFinal;
     document.getElementById('wpSummary').value = SommaireFinal;
     var Minor = document.getElementById('wpMinoredit');
     if(Minor) Minor.checked = "checked";
     if(!RenommageCategorie_Autoconfirm){
          var SurEtCertainNewCat = confirm(RenommageCategorie_Text_ConfirmMoveBis);
          if(!SurEtCertainNewCat){
               return;
          }
     }     
     var action = document.getElementById("editform").action;
     var headers = new Array();
     headers['Content-Type'] = 'application/x-www-form-urlencoded';
     RenommageCategorie_ajax.http({ 
          url: action,
          method: "POST", 
          headers: headers,
          data: RenommageCategorie_GetPostValues(),
          onSuccess:RenommageCategorie_CreateNewCatDone
     });
}

function RenommageCategorie_CreateNewCatDone(Req, data){
     while(document.body.firstChild){RenommageCategorie_DeleteElement(document.body.firstChild);}
     document.body.innerHTML = Req.responseText; 
     if(!document.getElementById("editform")){
          RenommageCategorie_GetUsers();
     }else{
          var DeuxiemeEssai = confirm(RenommageCategorie_Text_AlertEditTryAgain);
          if(DeuxiemeEssai) RenommageCategorie_CreateNewCat();
     }
}

// --------------------------------------------------------------------------------------------
// Crédit des auteurs de l'ancienne catégorie : recherche des auteurs

function RenommageCategorie_GetUsers(Users, UserContinue){
      if(!Users) Users = new Array();
      if(!UserContinue) UserContinue = "";
      var URL = mw.config.get('wgServer')+wgScriptPath+'/api.php?format=xml&action=query&prop=revisions'
              + '&rvlimit='+RenommageCategorie_APILimit
              + '&rvprop=user'
              + '&titles='+mw.config.get('wgFormattedNamespaces')[14]+':'+encodeURIComponent(RenommageCategorie_RemoveCat)
              + UserContinue;
     RenommageCategorie_ajax.http({ 
          url: URL,
          onSuccess:RenommageCategorie_GetUsersDone,
          users:Users
     });
}

function RenommageCategorie_GetUsersDone(Req, data){
     var Users = data.users;
     var Reponse = Req.responseXML;
     var RevUsers = Reponse.getElementsByTagName("rev");
     for(var a=0;a<RevUsers.length;a++){
          var ThisUser = RevUsers[a].getAttribute("user");
          if(Users.indexOf(ThisUser)==-1) Users.push(ThisUser);
     }
     var RevContinue = Reponse.getElementsByTagName("query-continue")[0];
     if(RevContinue){
          var Cont = "&rvstartid=" + encodeURIComponent(RevContinue.firstChild.getAttribute("rvstartid"));
          RenommageCategorie_GetUsers(Users, Cont);
     }else{
          var urlTalkNewCat = mw.config.get('wgServer')+mw.config.get('wgScript')+'?title='+mw.config.get('wgFormattedNamespaces')[15]+':'+encodeURIComponent(RenommageCategorie_AddCat)+'&action=edit';
          RenommageCategorie_ajax.http({ 
               url: urlTalkNewCat,
               onSuccess:RenommageCategorie_UpDateCatTalkPage,
               users:Users
          });
          RenommageCategorie_UpDateCatTalkPage(Users);
     }
}

// --------------------------------------------------------------------------------------------
// Crédit des auteurs de l'ancienne catégorie : édition de la page de discussion

function RenommageCategorie_UpDateCatTalkPage(Req, data){      
     var Users = data.users;
     while(document.body.firstChild){ RenommageCategorie_DeleteElement(document.body.firstChild);}
     document.body.innerHTML = Req.responseText; 
     var TextArea = document.getElementById('wpTextbox1');
     if(!TextArea){
          var Problem = confirm( urlTalkNewCat + '\n\n' + RenommageCategorie_Text_AlertEditTryAgain );
          if(Problem){ 
               RenommageCategorie_UpDateCatTalkPage(Users);
          }
          return;
     } 
     var OldContent = TextArea.value;
     var NewTemplate = RenommageCategorie_Text_HistTemplate.split('$1').join(RenommageCategorie_RemoveCat);
     var UserList = "";
     for(var a=0;a<Users.length;a++){
          if(a!=0) UserList += ", ";
          UserList += RenommageCategorie_Text_UserTemplate.split('$1').join(Users[a]);
     }
     NewTemplate = NewTemplate.split('$2').join(UserList);

     var TexteFinal = NewTemplate + OldContent;
     var SommaireFinal = RenommageCategorie_Text_Script + RenommageCategorie_Text_ResumeMoveHist.split('$1').join(mw.config.get('wgFormattedNamespaces')[14]+":"+RenommageCategorie_RemoveCat);

     document.getElementById('wpTextbox1').value = TexteFinal;
     document.getElementById('wpSummary').value = SommaireFinal;
     var Minor = document.getElementById('wpMinoredit');
     if(Minor) Minor.checked = "checked";
     if(!RenommageCategorie_Autoconfirm){
          var SurEtCertainNewCat = confirm(RenommageCategorie_Text_ConfirmMoveBis);
          if(!SurEtCertainNewCat){
               return;
          }
     }  
     var action = document.getElementById("editform").action;
     var headers = new Array();
     headers['Content-Type'] = 'application/x-www-form-urlencoded';
     RenommageCategorie_ajax.http({ 
          url: action,
          method: "POST", 
          headers: headers,
          data: RenommageCategorie_GetPostValues(),
          onSuccess:RenommageCategorie_UpDateCatTalkPageDone,
          users:Users
     });
}

function RenommageCategorie_UpDateCatTalkPageDone(Req, data){
      var Users = data.users;
      while(document.body.firstChild){RenommageCategorie_DeleteElement(document.body.firstChild);}
      document.body.innerHTML = Req.responseText; 
      if(!document.getElementById("editform")){
            var urlOldCat = mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=' 
                          + mw.config.get('wgFormattedNamespaces')[14]+':'+encodeURIComponent(RenommageCategorie_RemoveCat)
            var DeleteOldCat_SurEtCertain = confirm(RenommageCategorie_Text_ConfirmDelete.split('$1').join(RenommageCategorie_RemoveCat));
            if(DeleteOldCat_SurEtCertain){ 
                  if(mw.config.get('wgUserGroups').indexOf('sysop')!=-1){
                        RenommageCategorie_ajax.http({ 
                              url: urlOldCat + '&action=delete',
                              onSuccess:RenommageCategorie_DeleteOldCat
                        });
                  }else{
                        RenommageCategorie_ajax.http({ 
                              url: urlOldCat + '&action=edit',
                              onSuccess:RenommageCategorie_DoDeletionRequest
                        });
                  }
            }else{
                  window.location.reload;
                  return;
            }
      }else{
            var DeuxiemeEssai = confirm(RenommageCategorie_Text_AlertEditTryAgain);
            if(DeuxiemeEssai) RenommageCategorie_UpDateCatTalkPage(Users);
      }
}

// --------------------------------------------------------------------------------------------
// Suppression de l'ancienne catégorie

function RenommageCategorie_DeleteOldCat(Req, data){
      while(document.body.firstChild){ RenommageCategorie_DeleteElement(document.body.firstChild);}
      var ElementTraitement = document.createElement('div');
      document.body.appendChild(ElementTraitement);
      ElementTraitement.innerHTML = Req.responseText; 
      var InputReason = document.getElementById('wpReason');
      if(RenommageCategorie_AddCat==''){
            InputReason.value = RenommageCategorie_Text_Script+RenommageCategorie_Text_ResumeDeleteBis;
      }else{
            InputReason.value = RenommageCategorie_Text_Script+RenommageCategorie_Text_ResumeDelete.split('$2').join(mw.config.get('wgFormattedNamespaces')[14]+":"+RenommageCategorie_AddCat);
      }
      var CheckWatch = document.getElementById('wpWatch');
      CheckWatch.checked = '';
      var DeleteForm = document.getElementById('deleteconfirm');
      if(RenommageCategorie_Autoconfirm){
            DeleteForm.submit();
      }else{
            var SurEtCertain = confirm(RenommageCategorie_Text_ConfirmDelete.split('$1').join(RenommageCategorie_RemoveCat));
            if(SurEtCertain) DeleteForm.submit();
      }
}

// --------------------------------------------------------------------------------------------
// Demande de suppression de l'ancienne catégorie

function RenommageCategorie_DoDeletionRequest(Req, data){
      while(document.body.firstChild){ RenommageCategorie_DeleteElement(document.body.firstChild);}
      var ElementTraitement = document.createElement('div');
      document.body.appendChild(ElementTraitement);
      ElementTraitement.innerHTML = Req.responseText; 
      var EditForm = document.getElementById('editform');
      EditForm.style.display = "none";
      var Reason = "";
      if(RenommageCategorie_AddCat==''){
            Reason = RenommageCategorie_Text_Script+RenommageCategorie_Text_ResumeDeleteBis;
      }else{
            Reason = RenommageCategorie_Text_Script+RenommageCategorie_Text_ResumeDelete.split('$2').join(":"+mw.config.get('wgFormattedNamespaces')[14]+":"+RenommageCategorie_AddCat);
      }
      var DeleteTemplate = RenommageCategorie_Text_DeleteTemplate;
      DeleteTemplate = DeleteTemplate.split("$1").join(Reason).split("$2").join("~"+"~~");
      document.getElementById('wpTextbox1').value = DeleteTemplate;
      document.getElementById('wpSummary').value = Reason;
      var Minor = document.getElementById('wpMinoredit');
      if(Minor) Minor.checked = "checked";
      EditForm.submit();
}

// --------------------------------------------------------------------------------------------
// FONCTION : Récupération des paramètres de publications


function RenommageCategorie_GetPostValues(){
      var data="";
      var Params = new Array("wpTextbox1", "wpSection", "wpSummary", "wpWatchthis", "wpMinoredit", "wpStarttime", "wpEdittime", "wpEditToken");
      for(var a=0,l=Params.length;a<l;a++){
            var Element = document.getElementById(Params[a]);
            if(!Element) Element = document.getElementsByName(Params[a])[0];
            if(Element){
                  if(!(Element.tagName && Element.tagName.toLowerCase()=='input' && Element.type == 'checkbox' && !Element.checked)){
                        data += '&'+Params[a]+'=' + encodeURIComponent(Element.value);
                  }
            }
      }
      return (data+'&wpsave=1');
}

// FONCTION : Suppression d'un élément

function RenommageCategorie_DeleteElement(OldElement){
    var agt=navigator.userAgent.toLowerCase();
    var is_ie = ((agt.indexOf("msie") != -1) && (agt.indexOf("opera") == -1));
    if(is_ie){
        OldElement.removeNode(true);
    }else{
        if(OldElement.parentNode){document=OldElement.parentNode.removeChild(OldElement);}
    }
}

function RenommageCategorie_CleanCats(OldText){
    var CatRegExp = new RegExp("\\[\\[(?:"+mw.config.get('wgFormattedNamespaces')[14]+"|Category):[^\\]]+\\]\\]", "ig");
    var CatNSRegExp = new RegExp("("+mw.config.get('wgFormattedNamespaces')[14]+"|Category) *: *", "ig");
    var Matches = OldText.match(CatRegExp);
    if(Matches==null) return OldText;
    for(var a=0,l=Matches.length;a<l;a++){
        var Newcat = Matches[a].replace(/_/g, " ");
        var catNSmatch = Newcat.match(CatNSRegExp);
        if(catNSmatch!=null){
            for(var b=0,m=catNSmatch.length;b<m;b++){
                Newcat = Newcat.replace(catNSmatch[b], mw.config.get('wgFormattedNamespaces')[14]+":");
            }
        }
        var Index = Newcat.indexOf(mw.config.get('wgFormattedNamespaces')[14]);
        if(Index!=-1){
            Index = (Index + mw.config.get('wgFormattedNamespaces')[14].length + 1);
            var StartCat = Newcat.substring(0, Index);
            var EndCat = Newcat.substring(Index, Newcat.length).ucFirst();
            Newcat = StartCat + EndCat;
        }
        OldText = OldText.replace(Matches[a], Newcat);
    }
    return OldText;
}

// FONCTION : création RegExp

function RenommageCategorie_CreateRegExp(Cat){       
    var CatRegExp = new RegExp("(\\s*)\\[\\[ *(?:"+mw.config.get('wgFormattedNamespaces')[14]+"|Category):" + Cat.ucFirst().replace(/([\\\^\$\*\+\?\.\|\{\}\[\]\(\)])/g, "\\$1")+" *(\\|[^\\]]*)?\\]\\]", "g");
    return CatRegExp;
}

// FONCTION : première lettre en majuscule
 
String.prototype.ucFirst = function () {
    return this.substr(0,1).toUpperCase() + this.substr(1,this.length);
}
 
// FONCTION : première lettre en minuscule
 
String.prototype.lcFirst = function () {
    return this.substr(0,1).toLowerCase() + this.substr(1,this.length);
}

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