MediaWiki:Gadget-recentchangesbox.js
Attention : Depuis MediaWiki 1.18 les pages se terminant avec l'extension .js ou .css sont interprétées comme des pages wiki ! En particulier les modèles (subst ou non) et les liens. Vous devez donc migrer le code source et effectuer vos changements en évitant ces éléments de syntaxe wiki (peu importe leurs emplacements dans le code source : commentaire, chaine) :
- Double accolades ouvrantes (en particulier avec subst:) : séparer les deux accolades
"{"+"{"
du reste de la chaine - Double crochets ouvrants : même technique de séparation.
- Signature (tildes ~ multiples) : même technique de séparation.
Note : après avoir enregistré vos préférences, vous devrez attendre que le serveur mette à jour la feuille de style globale avant de forcer le rechargement complet du cache de votre navigateur pour voir les changements.
- Firefox / Safari : Maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ou Ctrl-R (⌘-R sur un Mac) ;
- Google Chrome : Appuyez sur Ctrl-Maj-R (⌘-Shift-R sur un Mac) ;
- Internet Explorer : Maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5 ;
- Konqueror : Cliquez sur Actualiser ou pressez F5 ;
- Opera : Videz le cache dans Outils → Préférences.
/* New changes box */
var rcp_http;
var rcp_enabled;
var rcp_num_pages;
var rcp_refresh;
$( rcp_init );
/* initalise */
function rcp_init() {
// allow user settings through
if(rcp_enabled == null) {
rcp_enabled = false;
}
if(rcp_num_pages == null) {
rcp_num_pages = 10;
}
if(rcp_refresh == null) {
rcp_refresh = 5;
}
// A few limits to be nice to the servers
if (rcp_num_pages > 50) {
rcp_num_pages = 50;
}
if (rcp_num_pages < 1) {
rcp_num_pages = 1;
}
if (rcp_refresh < 2) {
rcp_refresh = 2;
}
// get our cookie
if (document.cookie.length > 0) {
var c_start = document.cookie.indexOf("rcp_show_box=");
if (c_start != -1) {
c_start = c_start + 13;
var c_end = document.cookie.indexOf(";", c_start);
if (c_end == -1) {
c_end = document.cookie.length;
}
if (document.cookie.substring(c_start, c_end) == "yes") {
rcp_enabled = true;
} else {
rcp_enabled = false;
}
}
}
// Either make a request or show nothing
if (rcp_enabled == true) {
rcp_ajax_request();
} else {
rcp_draw_disabled_box();
}
}
/* init ajax */
function rcp_create_request() {
try {
rcp_http = new XMLHttpRequest();
} catch (e) {
try {
rcp_http = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
rcp_http = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
alert("Your browser does not support AJAX");
return false;
}
}
}
rcp_http.onreadystatechange = function() {
if(rcp_http.readyState == 4) rcp_ajax_response();
}
return true;
}
/* make a request */
function rcp_ajax_request() {
// check we are enabled
if (rcp_enabled == false) return;
// firstly, inform the user
var cur_box = document.getElementById('p-recentchanges');
if (cur_box != null) {
cur_box.firstChild.firstChild.data = 'Recent Changes (updating)';
}
if (rcp_create_request () == false) {
if (cur_box != null) {
cur_box.firstChild.firstChild.data = 'Recent Changes (update failed)';
} else {
alert ("There seems to be a problem using the RecentChangePatrol script. It can't make AJAX objects.");
}
}
// Then make the request
rcp_http.open("GET", mw.config.get('wgServer') + wgScriptPath + "/api.php?action=query&list=recentchanges" +
"&format=xml&rcnamespace=0&rcshow=!bot&rclimit=" + rcp_num_pages, true);
rcp_http.send(null);
}
/* we have received a response */
function rcp_ajax_response() {
var items = rcp_http.responseXML.getElementsByTagName('rc');
// create the div that holds all the recentchanges links
var link_div = document.createElement('div');
link_div.className = 'pBody';
var list = document.createElement('ul');
link_div.appendChild(list);
// populate the list with 10 links.
for (var i = 0; i < items.length; i++) {
var item_name = items[i].getAttribute('title');
var item_url = mw.config.get('wgServer') + mw.config.get('wgScript') + '?diff=cur&oldid=prev&title=' + escape(item_name);
a = document.createElement('a');
a.setAttribute('href', item_url);
a.appendChild(document.createTextNode(item_name));
var li = document.createElement('li');
li.appendChild(a);
list.appendChild(li);
}
// Container div
var div = document.createElement('div');
div.setAttribute('id', 'p-recentchanges');
div.className = 'portlet';
var heading = document.createElement('h5');
heading.appendChild(document.createTextNode('Modifications récentes'));
div.appendChild(heading);
div.appendChild(link_div);
// disable link
var p = document.createElement('p');
p.style.fontSize = 'x-small';
p.style.margin = '0px';
p.style.textAlign = 'right';
a = document.createElement('a');
a.appendChild(document.createTextNode('désactiver cette boite'));
a.onclick = rcp_disable_box;
p.appendChild(a);
link_div.appendChild(p);
// now replace the div
var old_div = document.getElementById('p-recentchanges');
var side_col = document.getElementById('column-one');
if (old_div != null) {
side_col.replaceChild(div, old_div);
} else {
var node = document.getElementById('p-search');
side_col.insertBefore(div, node);
}
// and do it again in 5 secs
setTimeout("rcp_ajax_request()", rcp_refresh * 1000);
}
function rcp_disable_box() {
rcp_enabled = false;
rcp_draw_disabled_box();
document.cookie = "rcp_show_box=no; path=/";
}
function rcp_enable_box() {
rcp_enabled = true;
document.cookie = "rcp_show_box=yes; path=/";
rcp_ajax_request();
}
function rcp_draw_disabled_box() {
// Container div
var link_div = document.createElement('div');
link_div.className = 'pBody';
var div = document.createElement('div');
div.setAttribute('id', 'p-recentchanges');
div.className = 'portlet';
var heading = document.createElement('h5');
heading.appendChild(document.createTextNode('Modifications récentes'));
div.appendChild(heading);
div.appendChild(link_div);
// enable link
var p = document.createElement('p');
p.style.fontSize = 'x-small';
p.style.margin = '0px';
var a = document.createElement('a');
a.appendChild(document.createTextNode('Activer cette boite'));
a.onclick = rcp_enable_box;
p.appendChild(a);
link_div.appendChild(p);
// now replace the div
var old_div = document.getElementById('p-recentchanges');
var side_col = document.getElementById('column-one');
if (old_div != null) {
side_col.replaceChild(div, old_div);
} else {
var node = document.getElementById('p-search');
side_col.insertBefore(div, node);
}
}
npp_refresh = 10;