MediaWiki:Gadget-DeluxeHistory.js
Apparence
Note : après avoir enregistré vos modifications, il se peut que vous deviez 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 ;
- Opera : Allez dans Menu → Settings (Opera → Préférences sur un Mac) et ensuite à Confidentialité & sécurité → Effacer les données d'exploration → Images et fichiers en cache.
/* [[Catégorie:MediaWiki:Fonction Monobook en JavaScript|DeluxeHistory.js]] */
/*********************************************************************************************
******* Code repris de https://fr.wikipedia.org/wiki/Utilisateur:Od1n/HistoryDeluxe_(alpha).js
*********************************************************************************************/
// pour inspiration : https://github.com/pamelafox/lscache
/*global document, localStorage, mw, jQuery, importStylesheet */
/*jslint vars: true, plusplus: true */
(function (mw, $) {
'use strict';
var botMembers, sysopMembers, patrollerMembers;
var oldBotMembers = ['Tavernierbot'];
/////////////////////////////////////// DETECTION SUPPORT LOCALSTORAGE ///////////////////////////////////////
var supportLocalStorage, dateNow, dateNowUTC;
try {
localStorage.setItem('modernizr', 'modernizr');
localStorage.removeItem('modernizr');
supportLocalStorage = true;
} catch (e) {
supportLocalStorage = false;
}
if (supportLocalStorage) {
dateNow = new Date();
dateNowUTC = dateNow.getTime() + dateNow.getTimezoneOffset() * 60000;
}
/////////////////////////////////////// FONCTIONS DE TRAITEMENT DES LIENS ///////////////////////////////////////
var nsUtilisateur = mw.config.get('wgFormattedNamespaces')[2] + ':';
function getUserName(domUserlink) {
return domUserlink.innerHTML;
}
function isUserIP(domUserlink) {
return domUserlink.title.indexOf(nsUtilisateur) !== 0;
}
function getUserClass(jUserlink) {
var domUserlink = jUserlink[0];
var UserName = getUserName(domUserlink);
if ($.inArray(UserName, botMembers) > -1) { return 'UserIs-Bot'; }
if ($.inArray(UserName, sysopMembers) > -1) {
if (UserName === mw.config.get('wgUserName')) { return 'UserIs-Myself'; }
else { return 'UserIs-Sysop'; }
}
if ($.inArray(UserName, patrollerMembers) > -1) {
if (UserName === mw.config.get('wgUserName')) { return 'UserIs-Myself'; }
else { return 'UserIs-Patroller'; }
}
if (isUserIP(domUserlink)) { return 'UserIs-IP'; }
if ($.inArray(UserName, oldBotMembers) > -1) { return 'UserIs-OldBot'; }
if (UserName === mw.config.get('wgUserName')) {
return 'UserIs-Myself';
} else {
return 'UserIs-User';
}
}
function userGroupClassName(Li) {
var jLi = $(Li);
var jUserlink = jLi.find('a.mw-userlink');
if (jUserlink.length > 0) {
jLi.addClass(getUserClass(jUserlink));
}
}
/////////////////////////////////////// FONCTIONS DE PARCOURS DES ELEMENTS ///////////////////////////////////////
function get_bodyContent() {
var Content = document.getElementById('bodyContent');
if (!Content) { Content = document.getElementById('mw_contentholder'); }
if (!Content) { Content = document.getElementById('article'); }
return Content;
}
function scan_first_ul() {
var Content = get_bodyContent();
$(Content).find('ul').eq(0).find('li').each(function () {
userGroupClassName(this);
});
}
function scan_ul_special_li() {
$('ul.special li').each(function () {
userGroupClassName(this);
});
}
function scan_td() {
$('td').each(function () {
userGroupClassName(this);
});
}
/////////////////////////////////////// FONCTIONS DE SELECTION DES FILTRES ///////////////////////////////////////
function process_History() {
$('#pagehistory').find('li').each(function () {
userGroupClassName(this);
});
}
function process_Watchlist() {
scan_ul_special_li(); // Liste de suivi normale
scan_td(); // Liste de suivi "améliorée"
}
function process_Recentchanges() {
scan_ul_special_li(); // RC normale
scan_td(); // RC "améliorées"
}
function process_Recentchangeslinked() {
scan_ul_special_li(); // RC liées normales
scan_td(); // RC liées "améliorées"
}
function process_Newpages() {
scan_first_ul();
}
function process_Log() {
scan_first_ul();
}
function process_AbuseLog() {
scan_first_ul();
}
function process_OtherPages() {
scan_ul_special_li();
}
/////////////////////////////////////// LANCEMENTS ///////////////////////////////////////
var HistoryDeluxe_ClassesApplied = false;
function applyClasses() {
if (botMembers && sysopMembers && patrollerMembers && !HistoryDeluxe_ClassesApplied) {
HistoryDeluxe_ClassesApplied = true;
importStylesheet('Mediawiki:Gadget-DeluxeHistory.css');
var wgAction = mw.config.get('wgAction');
var wgCanonicalSpecialPageName = mw.config.get('wgCanonicalSpecialPageName');
if (wgAction === 'history') {
$(document).ready(process_History);
// en attendant de faire meilleur système pour que les liens déjà visités soient plus visibles
// (bleu clair sur fond bleu vs bleu foncé sur fond bleu, difficile de les distinguer)
} else if (wgCanonicalSpecialPageName === 'Watchlist' && (document.URL.indexOf('edit') === -1 || document.URL.indexOf('raw') === -1)) {
$(process_Watchlist);
} else if (wgCanonicalSpecialPageName === 'Recentchanges') {
$(document).ready(process_Recentchanges);
} else if (wgCanonicalSpecialPageName === 'Recentchangeslinked') {
$(document).ready(process_Recentchangeslinked);
} else if (wgCanonicalSpecialPageName === 'Newpages') {
$(document).ready(process_Newpages);
} else if (wgCanonicalSpecialPageName === 'Log') {
$(document).ready(process_Log);
} else if (wgCanonicalSpecialPageName === 'AbuseLog') {
$(document).ready(process_AbuseLog);
} else {
$(document).ready(process_OtherPages);
}
}
}
/////////////////////////////// RECUPERATION DE LA LISTE DES BOTS, SYSOPS ET PATROLLERS ///////////////////////////////
function updateUserList(Group, UserList, UserContinue) {
if (!UserList) { UserList = []; }
var wgUserGroups = mw.config.get('wgUserGroups');
var APILimit = $.inArray('sysop', wgUserGroups) > -1 || $.inArray('bot', wgUserGroups) > -1 || $.inArray('patroller', wgUserGroups) > -1
? 5000 : 500;
var params = {
format: 'xml',
action: 'query',
list: 'allusers',
aulimit: APILimit,
augroup: Group
};
if (UserContinue) {
params.aufrom = UserContinue;
}
$.get(mw.util.wikiScript('api'), params, function (data) {
$(data).find('u').each(function () {
var userName = this.getAttribute('name');
if (userName) {
UserList.push(userName);
}
});
var UserContinue = $(data).find('query-continue > allusers');
if (UserContinue.length > 0) {
updateUserList(Group, UserList, UserContinue.attr('aufrom'));
} else {
if (supportLocalStorage) {
var storedValue = UserList.join('|');
localStorage.setItem('HistoryDeluxe_' + Group, storedValue);
localStorage.setItem('HistoryDeluxe_lastUpdate', dateNowUTC);
}
if (Group === 'bot') {
botMembers = UserList;
} else if (Group === 'sysop') {
sysopMembers = UserList;
} else if (Group === 'patroller') {
patrollerMembers = UserList;
}
applyClasses();
}
});
}
function getUserList(Group) {
var storedValue, lastUpdate;
if (supportLocalStorage) {
lastUpdate = localStorage.getItem('HistoryDeluxe_lastUpdate');
if (lastUpdate && dateNowUTC - lastUpdate < 1000 * 3600 * 24 && dateNowUTC - lastUpdate > 0) {
storedValue = localStorage.getItem('HistoryDeluxe_' + Group);
}
}
return storedValue ? storedValue.split('|') : null;
}
/////////////////////////////////////// INITIALISATION ///////////////////////////////////////
botMembers = getUserList('bot');
if (!botMembers) {
updateUserList('bot');
} else {
applyClasses();
}
sysopMembers = getUserList('sysop');
if (!sysopMembers) {
updateUserList('sysop');
} else {
applyClasses();
}
patrollerMembers = getUserList('patroller');
if (!patrollerMembers) {
updateUserList('patroller');
} else {
applyClasses();
}
if (!oldBotMembers) {
applyClasses();
}
})(mw, jQuery);