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,"<").replace(/\>/g,">");
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>