ميدياويكي:Gadget-RenommageCategorie.js

من أرابيكا، الموسوعة الحرة
اذهب إلى التنقل اذهب إلى البحث

ملاحظة: بعد الحفظ، قد يلزمك إفراغ الكاش لرؤية التغييرات.

// From frWP
////////////////////////////////////////////// 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 = "\u202Bعدد الصفحات التي ستعدل: $1.\u00A0" + "\u202Bوكد ذلك.\u00A0"; // Confirmation édition (<50 pages)
var RenommageCategorie_Text_GrosseModif = "\u202Bعدد الصفحات التي ستعدل: $1.\u00A0" + "\u202Bهذا تعديل كثير يستحسن أن يستعمل عليه بوت.\u00A0" + "\u202Bوكد ذلك.\u00A0"; // Confirmation grosse édition (>50 pages)
var RenommageCategorie_Text_Delay = "\u202B(المدة بين التعديلين بالثواني: $1)\u202B";
var RenommageCategorie_Text_ConfirmEdit = "$1 ⇒ $2\n\u202Bملخص التعديل: $3"; // Confirmation édition
var RenommageCategorie_Text_ConfirmMove = "\u202Bانقل مواد \u202B$1 إلى \u202B$2"; // Copie
var RenommageCategorie_Text_ConfirmMoveBis = '\u202Bاحفظ التعديل'; // Confirmation Copie
var RenommageCategorie_Text_ConfirmDelete = "\u202Bاحذف التصنيف \u202B$1"; // Suppression

// Pop-up lors d'un problème
var RenommageCategorie_Text_AlertSameCat = "\u202Bالتصنيفات المراد حذفها هي نفسها المراد إضافتها";
var RenommageCategorie_Text_AlertEditPb1 = "\u202Bتصنيف \u202B$1 غير وارد.\u00A0قد يكون مضمنا في قالب.";
var RenommageCategorie_Text_AlertEditPb2 = "\u202Bتصنيف \u202B$1 موجود.";
var RenommageCategorie_Text_AlertEditPb3 = "\u202Bتصنيف \u202B$1 متكرر.";
var RenommageCategorie_Text_AlertEditTryAgain = '\u202Bتعذر التنفيذ.\u00A0\u202Bكرر الطلب';
var RenommageCategorie_Text_AlertEditNextPage = '\u202Bعدل الصفحة التالية';

// Résumés de modification
var RenommageCategorie_Text_ResumeEditModif = "تعديل [[$1]] إلى [[$2]]";
var RenommageCategorie_Text_ResumeEditDelete = "حذف تصنيف [[$1]]";
var RenommageCategorie_Text_ResumeMove = "\u202Bنقل مواد [[$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 = '[[ميدياويكي:Gadget-RenommageCategorie|نقل تصنيفات]]: ';

// Modèle pour crédit des auteurs en page de discussion
var RenommageCategorie_Text_HistTemplate = "{{تصنيف منقول|$1|م=$2}}\n";

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

// Modèle Suppression Immédiate
var RenommageCategorie_Text_DeleteTemplate = "{{"+"شطب|$1|م=$2}}";

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

// --------------------------------------------------------------------------------------------
// 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 = 1; // 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('//ar.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><span><a href="javascript:RenommageCategorie_OpenMenu();">' + RenommageCategorie_Text_Move + '</a></span></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 = 'whitesmoke';
	Menu.style.border = '1px solid silver';
	Menu.style.width = '30.5em';
	Menu.style.height = '7em';
	document.body.appendChild(Menu);
	PositionDroite = parseInt((LargeurEcran - Menu.clientWidth) / 2);
	PositionHaut = parseInt((HauteurEcran - Menu.clientHeight) / 3);
	Menu.style.right = PositionDroite + 'px';
	Menu.style.top = PositionHaut + 'px';
	var MenuContent = '' + '<input type="text" id="RemoveCat" value="' + mw.config.get('wgTitle') + '" disabled="disabled" size="50"/>' + '&nbsp;' + '<label for="RemoveCat">' + RenommageCategorie_Text_PopRemoveCat + '</label>' + '<br />' + '<input type="text" id="AddCat" value="' + mw.config.get('wgTitle') + '" size="50" />' + '&nbsp;' + '<label for="AddCat">' + RenommageCategorie_Text_PopAddCat + '</label>' + '<br />' + '<input type="checkbox" id="Autoconfirm" style="cursor:pointer;" checked/>' + '<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 />' + '<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') + mw.config.get('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 + '\u00A0' + 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 + "\u00A0" + 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 + '\u00A0' + 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') + mw.config.get('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 + '\u00A0' + 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);
}