Utilisateur:MickaëlG/DesArticlesAuHasard.js

Une page de Wikipédia, l'encyclopédie libre.
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.
mw.loader.using('mediawiki.util', function () {

// http://fr.wikipedia.org/wiki/Projet:JavaScript/Fonctions_globales_de_mediaWiki
// http://fr.wikipedia.org/wiki/Projet:JavaScript/Aide_Ajax
// https://developer.mozilla.org/fr/Guide_JavaScript_1.5
// https://developer.mozilla.org/fr/Référence_de_JavaScript_1.5_Core
// http://www.w3.org/TR/XMLHttpRequest/
// http://fr.wikipedia.org/w/api.php?titles=Test&action=query&prop=revisions&rvprop=&rvlimit=50&format=jsonfm
function AddRandLinks(nb,limit)
{
  for (var i=0; i<nb; i++) {
    var Page = RandPageWithHist(limit);

    if ( Page.Histlength > 50 ) { Page.Histlength = '>50' }
    MessageContent = '<a href="' + mw.config.get('wgArticlePath').split('$1').join(Page.Name) + '"> ' + Page.Name + '</a> (' + Page.Histlength + ')\n';
    var Content = document.getElementById('bodyContent');
    var Div = document.createElement('div');
    //Div.className = "usermessage";
    //Div.id = "usermessage";
    Div.innerHTML = MessageContent;
    Content.parentNode.insertBefore(Div, Content);
  }
}
function AddRandLinksWithImportance()
{
  var PageList = RandPageWithImportanceCat();
  for (var page in PageList) {
    MessageContent = '<a href="' + mw.config.get('wgArticlePath').split('$1').join(PageList[page].Name) + '"> ' + PageList[page].Name + '</a> (' + PageList[page].Score + ')\n';
    var Content = document.getElementById('bodyContent');
    var Div = document.createElement('div');
    Div.innerHTML = MessageContent;
    Content.parentNode.insertBefore(Div, Content);
  }
}
function RandPageWithHist (limit) {
  var req = new XMLHttpRequest();
  var addr = 'http://fr.wikipedia.org/w/api.php?generator=random&action=query&prop=revisions&rvprop=&rvlimit=51&format=json&grnnamespace=0'
  var debug = "";
  do 
  {
    resp = AjaxQuery(addr)

    var Result = new Object;
    for(var prop in resp.query.pages) {
      Result.Name = resp.query.pages[prop].title;
      Result.Histlength = resp.query.pages[prop].revisions.length;
    }
    debug += "NAME : " + Result.Name + " (" + Result.Histlength + ")</p>";
  } while ( Result.Histlength < limit );
  //debugMsg (debug);
  return Result;
}
function AjaxQuery (addr) {
  var req = new XMLHttpRequest();
  req.open("GET", addr, false);
  req.send(null);
  var respStr = req.responseText;
  if (typeof (JSON) != 'undefined')
    var resp = JSON.parse(respStr);
  else
    var resp = eval('(' + respStr + ')');
  return resp;
}
function RandPageWithImportanceCat() {
  var addr = 'http://fr.wikipedia.org/w/api.php?action=query&generator=random&grnnamespace=1&grnlimit=10&prop=categories&cllimit=500&format=json'
  var debug = ""
  resp = AjaxQuery(addr)
  var Result = new Array();
  var res_index = 0
  for(var prop in resp.query.pages) {
    Result[res_index] = new Object
    name = resp.query.pages[prop].title;
    Result[res_index].Name = name.replace(/^Discussion:/,"");
    debug += "NAME : " + Result[res_index].Name + "</p>";
    Result[res_index].Categories = new Array()
    var score = 0
    for (var catindex in resp.query.pages[prop].categories) {
      category = resp.query.pages[prop].categories[catindex].title
      Result[res_index].Categories.push(category);
      if ( category.search(/importance faible/) >= 0 ) {
         score = Math.max(score,10);
      }
      else if ( category.search(/importance moyenne/) >= 0 ) {
         score = Math.max(score,100);
      }
      else if ( category.search(/importance élevée/) >= 0 ) {
         score = Math.max(score,1000);
      }
      else if ( category.search(/importance maximum/) >= 0 ) {
         score = Math.max(score,10000);
      }
    }
    Result[res_index].Score = score;
    debug += "CAT : " + Result[res_index].Categories + "</p>";
    debug += "SCORE : " + Result[res_index].Score + "</p>";
    res_index++
  }
  //debugMsg(debug)
  Result.sort( function(a,b){return b.Score - a.Score} )
  return Result
}
function debugMsg (MessageContent)
{
  var Content = document.getElementById('bodyContent');
  var Div = document.createElement('div');
  Div.className = "usermessage";
  Div.id = "usermessage";
  Div.innerHTML = MessageContent;
  Content.parentNode.insertBefore(Div, Content);
}
function AddRandGenLink ()
{
  mw.util.addPortletLink('p-navigation', mw.config.get('wgArticlePath').split('$1').join('Utilisateur:MickaëlG/Random'), 'Des articles au hasard', 'n-rand');
}
addOnloadHook(AddRandGenLink);

if(mw.config.get('wgPageName') == 'Utilisateur:MickaëlG/Random'){
  //addOnloadHook(AddRandLinks(15,0));
  addOnloadHook(AddRandLinksWithImportance());
}

});