MediaWiki:Gadget-AllmessagesDeluxe.js

Nòta : Aprèp aver publicat la pagina, vos cal forçar son recargament complet tot ignorant lo contengut actual de l'amagatal de vòstre navigador per veire los cambiaments : Mozilla / Firefox / Konqueror / Safari : mantenètz la tòca Majuscula (Shift) en clicant lo boton Actualizar (Reload,) o quichatz Maj-Ctrl-R (Maj-Cmd-R sus Apple Mac) ; Internet Explorer / Opera : mantenètz la tòca Ctrl en clicant lo boton Actualizar o quichatz Ctrl-F5.

/* *********************************************************************

;Fonction :

permet de rechercher dans les messages système ([[Special:Allmessages]]) par mot-clefs (Expressions régulières)

;Installation :

obtenir('AllmessagesDeluxe');


{{Projet:JavaScript/Script|AllmessagesDeluxe}}
************************************************************************* */

//<source lang=javascript><pre><nowiki>

////////////////////////////////////////// REQUÊTE DES MESSAGES SYSTÈME ///////////////////////////////////////////

window.AllmessagesDeluxe = {
	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){ AllmessagesDeluxe.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{ }}
	},

	getMessages: function() {
		var AdresseRequete = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + "/api.php?format=xml&action=query&meta=allmessages";
		AllmessagesDeluxe.ajax.http({
			url : AdresseRequete,
			onSuccess: AllmessagesDeluxe.populateMessages,
		});
	},

	populateMessages: function( Req, data ) {
		var AllmessagesDeluxe_XML = Req.responseXML; 
		var AllMessages = AllmessagesDeluxe_XML.getElementsByTagName("message");
		for(var a=0;a<AllMessages.length;a++) {
			var MessageTitle = AllMessages[a].getAttribute("name");
			var TextNode = AllMessages[a].firstChild;
			if(TextNode) {
				var MessageContent = TextNode.nodeValue;
			} else {
            	var MessageContent = "";
            }
			AllmessagesDeluxe.messagesTitles.push(MessageTitle);
			AllmessagesDeluxe.messagesContents.push(MessageContent); 
		}
		AllmessagesDeluxe.GetMessagesOK = true;
		if(AllmessagesDeluxe.CreatePanelOK) AllmessagesDeluxe.enableForm();
	},

////////////////////////////////////////// ACTIVATION DU BOUTON "APPLIQUER" ///////////////////////////////////////////

	enableForm: function() {
		var Button = document.getElementById("AllmessagesDeluxe_Button");
		if(Button){
			Button.value = "Aplicar";
			Button.disabled = "";
		}
	},

////////////////////////////////////////// MODIFICATION DU FORMULAIRE DE RECHERCHE ///////////////////////////////////////////

	createPanel: function() {
		var Form = document.getElementById("mw-allmessages-form");
		if(!Form) return;

		var FieldsetForm = Form.getElementsByTagName('fieldset')[0];
		var LegendForm = Form.getElementsByTagName('legend')[0];
		var InputForm = Form.getElementsByTagName('input')[0];
		var TableForm = Form.getElementsByTagName('table')[0];
		LegendForm.parentNode.removeChild(LegendForm);
		InputForm.parentNode.removeChild(InputForm);
		TableForm.parentNode.removeChild(TableForm);
		FieldsetForm.parentNode.removeChild(FieldsetForm);
		Form.parentNode.insertBefore(FieldsetForm, Form);
		FieldsetForm.appendChild(LegendForm);
		var Table = document.createElement('table');
		Table.style.width = "100%";
		FieldsetForm.appendChild(Table);
		var TbodyTable = document.createElement('tbody');
		Table.appendChild(TbodyTable);
		var TrTable = document.createElement('tr');
		TbodyTable.appendChild(TrTable);
		var TdOne = document.createElement('td');
		TdOne.style.width = "50%";
		var TdTwo = document.createElement('td');
		TdTwo.style.width = "50%";
		TrTable.appendChild(TdOne);
		TrTable.appendChild(TdTwo);
		Form.parentNode.removeChild(Form);
		TdOne.appendChild(Form);
		Form.appendChild(InputForm);
		Form.appendChild(TableForm);
		var NewForm = document.createElement('form');
		NewForm.id="DeluxeSearchForm";
		NewForm.method = "post" ;
		NewForm.onsubmit = function () {
			AllmessagesDeluxe.checkPanel();
			return false; 
		} ;

		TdTwo.appendChild(NewForm);
		var NewFormContent = ''
			+ '<table style="with:100%;">'
			+ '<tbody>'
			+ '<tr>'
			+ '<td colspan="2" style="text-align:center;text-weight:bold;" >'
			+ '<label for="DeluxeSearchForm" >Recercar per mot clau</label>'
			+ '</td>'
			+ '</tr>'
			+ '<tr>'
			+ '<td style="text-align:right;">'
			+ '<label for="SearchInTitle" >Dins lo títol del messatge : </label>'
			+ '</td>'
			+ '<td>'
			+ '<input id="SearchInTitle" type="text" value=""  />'
			+ '</td>'
			+ '</tr>'
			+ '<tr>'
			+ '<td style="text-align:right;">'
			+ '<label for="SearchInMessage" >Dins lo contengut del messatge : </label>'
			+ '</td>'
			+ '<td>'
			+ '<textarea id="SearchInMessage" value=""  ></textarea>'
			+ '</td>'
			+ '</tr>'
			+ '<tr>'
			+ '<td>'
			+ '</td>'
			+ '<td>'
			+ '<input id="AllmessagesDeluxe_Button" type="button" value="Aplicar (pacientatz)" disabled="disabled" '
			+ 'onclick="AllmessagesDeluxe.checkPanel();" onselect="AllmessagesDeluxe.checkPanel();" />'
			+ '</td>'
			+ '</tr>'
			+ '</tbody>'
			+ '</table>';
		NewForm.innerHTML = NewFormContent;
		AllmessagesDeluxe.CreatePanelOK = true;
		if(AllmessagesDeluxe.GetMessagesOK) AllmessagesDeluxe.enableForm();
	},

////////////////////////////////////////// VÉRIFICATION DU FORMULAIRE DE RECHERCHE ///////////////////////////////////////////

	checkPanel: function() {
		var MessageInput = document.getElementById('SearchInMessage').value;
		var TitleInput = document.getElementById('SearchInTitle').value;
		if((!MessageInput)&&(!TitleInput)) return;
		AllmessagesDeluxe.checkMessages(MessageInput, TitleInput);
	},

////////////////////////////////////////// RECHERCHE DES MOT-CLEFS DANS LES MESSAGES ///////////////////////////////////////////

	checkMessages: function( MessageInput, TitleInput ) {
		var RegExpContent = false;
		var RegExpTitle = false;

		var TitleArray = [];
		var MatchedTitleArray = [];
		var ContentArray = [];

		if(MessageInput) RegExpContent = new RegExp(MessageInput, "g");
		if(TitleInput) RegExpTitle = new RegExp(TitleInput, "g");

		for(var a=0;a<AllmessagesDeluxe.messagesTitles.length;a++) {
			var MessageTitle = AllmessagesDeluxe.messagesTitles[a];
			var MessageContent = AllmessagesDeluxe.messagesContents[a];

			if(RegExpContent&&RegExpTitle) {
				if(MessageTitle.match(RegExpTitle)&&MessageContent.match(RegExpContent)) {
					TitleArray.push(MessageTitle);
					MatchedTitleArray.push(AllmessagesDeluxe.checkMatches(MessageTitle, RegExpTitle));
					ContentArray.push(AllmessagesDeluxe.checkMatches(MessageContent, RegExpContent));
				}
			} else if(RegExpContent) {
				if(MessageContent.match(RegExpContent)) {
					TitleArray.push(MessageTitle);
					MatchedTitleArray.push(MessageTitle);
					ContentArray.push(AllmessagesDeluxe.checkMatches(MessageContent, RegExpContent));
				}
			} else if(RegExpTitle) {
				if(MessageTitle.match(RegExpTitle)) {
					TitleArray.push(MessageTitle);
					MatchedTitleArray.push(AllmessagesDeluxe.checkMatches(MessageTitle, RegExpTitle));
					ContentArray.push(AllmessagesDeluxe.checkMatches(MessageContent));
				}
			}
		}
		AllmessagesDeluxe.upDateTable(TitleArray, MatchedTitleArray, ContentArray, false);
	},

////////////////////////////////////////// SURLIGNAGE ///////////////////////////////////////////

	checkMatches: function( Text, Reg ) {
		Text = Text.replace(/\</g,"&lt;").replace(/\>/g,"&gt;");
		var Before = "<span style=\"background-color:#FFAAAA;border:1px dotted red;\">";
		var After = "</span>";
		if(Reg){
			var Matches = Text.match(Reg);
			Text = Text.replace(Reg, "TRALALA");
			for(var a=0;a<Matches.length;a++){
				Text = Text.replace(/TRALALA/, Before+Matches[a]+After);
			}
		} 
		return Text;  
	},

////////////////////////////////////////// AFFICHAGE DES RÉSULTATS ///////////////////////////////////////////

	upDateTable: function( Titles, MatchedTitles,Contents ) {
		var Table = document.getElementById("mw-allmessagestable");
		if(!Table) return;
		var TableHead = Table.getElementsByTagName('thead')[0];
		var TableBody = Table.getElementsByTagName('tbody')[0];
		while(TableHead.firstChild){ TableHead.removeChild(TableHead.firstChild);}
		while(TableBody.firstChild){ TableBody.removeChild(TableBody.firstChild);}
		TableHead.innerHTML = '<tr><th>Nom du message </th><th>Messatge actual</th></tr>';
		for(var a=0;a<Titles.length;a++){
			var NewTR = document.createElement('tr');
			var TdTitle = document.createElement('td');
			TdTitle.innerHTML = '<a href="'+mw.config.get('wgServer')+mw.config.get('wgArticlePath').split('$1').join(mw.config.get('wgFormattedNamespaces')[8]+":"+Titles[a])+'" >'+MatchedTitles[a]+'</a>';
			var TdContent = document.createElement('td');
			TdContent.innerHTML = Contents[a];
			NewTR.appendChild(TdTitle);
			NewTR.appendChild(TdContent);
			TableBody.appendChild(NewTR);
		}
	}
	
}

////////////////////////////////////////// LANCEMENT ///////////////////////////////////////////

if(mw.config.get('wgCanonicalSpecialPageName')=="Allmessages"){
    AllmessagesDeluxe.GetMessagesOK = false;
    AllmessagesDeluxe.CreatePanelOK = false;
    AllmessagesDeluxe.messagesTitles = [];
    AllmessagesDeluxe.messagesContents = [];
    AllmessagesDeluxe.getMessages();
    $(AllmessagesDeluxe.createPanel);
}

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