MediaWiki:Gadget-NewMessage.js
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./* {{Catégorisation JS|NewMessage}} */
// <source lang=javascript><pre><nowiki>
// /////////////////////////////////////////////////////////////////// VARIABLES : Pages à surveiller
if(typeof(NewMessage_PagesASurveiller)=="undefined"){
var NewMessage_PagesASurveiller = new Array();
NewMessage_PagesASurveiller.push("Discussion Projet:JavaScript");
NewMessage_PagesASurveiller.push("Discussion Projet:JavaScript/Demande de fonction");
NewMessage_PagesASurveiller.push("Discussion Projet:JavaScript/Rapport de bug");
NewMessage_PagesASurveiller.push("Wikipédia:Demande d'intervention sur un message système");
}
var NewMessage_OldidList = new Object();
// /////////////////////////////////////////////////////// MISE A JOUR DU COOKIE
function NewMessage_setCookie (cookieName, cookieValue) {
var now = new Date();
var nextYear = new Date(now.getTime() + 1000 * 60 * 60 * 24 * 365 );
return $.cookie(cookieName, cookieValue, {expires:nextYear, path:"/"});
}
// /////////////////////////////////////////////////////// INTERROGATION DU COOKIE
function NewMessage_getCookie(cookieName) {
return $.cookie(cookieName);
}
// /////////////////////////////////////////////////////////////////// Ajax
var NewMessage_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){ NewMessage_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
function NewMessage_Init(){
NewMessage_getOldidCookie();
NewMessage_getNewOldid(0);
}
$(NewMessage_Init);
// /////////////////////////////////////////////////////////////////// RECHERCHE OLDID ACTUEL
function NewMessage_getOldidCookie(){
var OldidList = new Object();
var OldidCookie = NewMessage_getCookie("NewMessageOldidList");
if(OldidCookie!=null){
OldidCookie = OldidCookie.split("SLASH").join("/");
OldidCookie = OldidCookie.split("SPLIT");
for(var a=0,l=OldidCookie.length;a<l;a++){
var Value = OldidCookie[a];
var PageName = Value.split("OLDID")[0];
var Oldid = Value.split("OLDID")[1];
OldidList[PageName] = Oldid;
}
}
for(var a=0,l=NewMessage_PagesASurveiller.length;a<l;a++){
var ThisPage = NewMessage_PagesASurveiller[a];
if(typeof(OldidList[ThisPage])!="undefined") NewMessage_OldidList[ThisPage] = OldidList[ThisPage];
else NewMessage_OldidList[ThisPage] = "0";
}
}
function NewMessage_resetOldidCookie(){
var CookieValue = new Array();
for(var a=0,l=NewMessage_PagesASurveiller.length;a<l;a++){
var Page = NewMessage_PagesASurveiller[a];
var Oldid = NewMessage_OldidList[Page];
CookieValue.push(Page.split("/").join("SLASH") + "OLDID" + Oldid);
}
NewMessage_setCookie("NewMessageOldidList", CookieValue.join("SPLIT"));
}
function NewMessage_getNewOldid(position){
if(!position) position = 0;
var Page = NewMessage_PagesASurveiller[position];
if(!Page) return;
var LastOldid = NewMessage_OldidList[Page];
var URL = mw.config.get('wgServer') + mw.config.get('wgScriptPath')
+ '/api.php?format=xml&action=query&prop=revisions'
+ '&rvlimit=1&rvprop=ids|user|timestamp|parsedcomment'
+ '&titles=' + encodeURIComponent(Page);
NewMessage_ajax.http({
url: URL,
pos: position,
page:Page,
oldid:LastOldid,
onSuccess:NewMessage_manageNewOldid
});
}
function NewMessage_manageNewOldid(Req, data){
var position = data.pos;
var ObjetXML = Req.responseXML;
if(ObjetXML==null){
NewMessage_getNewOldid((position+1));
return;
}
var PageInfos = ObjetXML.getElementsByTagName('rev')[0];
if(!PageInfos){
NewMessage_getNewOldid((position+1));
return;
}
var Page = data.page;
var LastOldid = data.oldid;
var NewOldid = PageInfos.getAttribute('revid');
if(NewOldid!=LastOldid){
if(mw.config.get('wgPageName').replace(/_/g," ") == Page){
NewMessage_OldidList[Page] = NewOldid;
NewMessage_resetOldidCookie();
}else{
var User = PageInfos.getAttribute('user');
var Date = NewMessage_ManageTimestamp(PageInfos.getAttribute('timestamp'));
var Comment = (PageInfos.getAttribute('parsedcomment') ? PageInfos.getAttribute('parsedcomment') : "-" );
NewMessage_AjoutBandeau(position, LastOldid, NewOldid, User, Date, Comment);
}
}
NewMessage_getNewOldid((position+1));
}
var NewMessage_ArticlePath = mw.config.get('wgArticlePath').split('$1').join('');
var NewMessage_MessageTemplate = ''
+ '<table width="100%" style="background:none"><tr>'
+ '<td width="30px" valign="middle">'
+ '<img height="25" width="25" src="//upload.wikimedia.org/wikipedia/commons/thumb/3/36/Nuvola_apps_email.png/25px-Nuvola_apps_email.png" alt="Nuvola apps email.png">'
+ '</td><td>'
+ 'Vous avez de nouveaux messages sur la page '
+ '<a href="'+mw.config.get('wgServer') + NewMessage_ArticlePath + '$1" title="$1" >$1</a> '
+ '<sup>(<a href="' + mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=$1&action=history" title="Historique de $1" >hist</a>|<a href="' + mw.config.get('wgServer') + mw.config.get('wgScript') + '?title=$1&diff=$3&oldid=$2" title="Dernières modifications de $1" >diff</a>)</sup><br/> <small>Dernière modification par <a href="'+mw.config.get('wgServer')+NewMessage_ArticlePath+mw.config.get('wgFormattedNamespaces')[2]+':$4" title="'+mw.config.get('wgFormattedNamespaces')[2]+':$4">$4</a> (<a href="'+mw.config.get('wgServer')+NewMessage_ArticlePath+mw.config.get('wgFormattedNamespaces')[3]+':$4" title="'+mw.config.get('wgFormattedNamespaces')[3]+':$4">d</a>) le $5 (<i>$6</i>)</small></td>'
+ '<td valign="top"><small><sub><a href="javascript:NewMessage_MiseAJourCookie($0, $3);" title="Mettre à jour cette notification">RAZ</a>'
+ '</sub></small></td>'
+ '</tr><table>';
// /////////////////////////////////////////////////////////////////// INSERTION BANDEAU
function NewMessage_AjoutBandeau(position, LastOldid, NewOldid, User, Date, Comment){
var Content = document.getElementById('bodyContent'); // monobook, myskin, chick, simple, vector
if(!Content) Content = document.getElementById('article'); // cologneblue, nostalgia, standard
if(!Content) Content = document.getElementById('mw_contentholder'); // modern
if(!Content) return;
var MessageContent = NewMessage_MessageTemplate;
MessageContent = MessageContent.split('$0').join(position);
MessageContent = MessageContent.split('$1').join(NewMessage_PagesASurveiller[position]);
MessageContent = MessageContent.split('$2').join(LastOldid);
MessageContent = MessageContent.split('$3').join(NewOldid);
MessageContent = MessageContent.split('$4').join(User);
MessageContent = MessageContent.split('$5').join(Date);
MessageContent = MessageContent.split('$6').join(Comment);
var Div = document.createElement('div');
Div.className = "usermessage";
Div.id = "usermessage_" + position;
Div.innerHTML = MessageContent;
Content.parentNode.insertBefore(Div, Content);
}
window.NewMessage_MiseAJourCookie = function(position, NewOldid){
var Page = NewMessage_PagesASurveiller[position];
if(Page){
NewMessage_OldidList[Page] = NewOldid;
NewMessage_resetOldidCookie();
}
var DivMessage = document.getElementById("usermessage_" + position);
if(DivMessage){
DivMessage.style.display = "none";
}
};
////////////////////////// DÉCODAGE TIMESTAMP
function NewMessage_ManageTimestamp(TimeStamp){
if(!TimeStamp) return false;
var DateUgly = TimeStamp.replace(/Z/g, "").split("T")[0];
var Time = TimeStamp.split("T")[1].replace(/Z/g, "");
var Date = DateUgly.split("-");
var Year = Date[0];
var Month = Date[1];
var Day = Date[2];
var Text = Day + "/" + Month + "/" + Year + " à " + Time;
return Text;
}
//</nowiki></pre></source>