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/>&nbsp;&nbsp;<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>