Utilisateur:Zebulon84/Js3.js
Apparence
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) ;
Firefox (sur GNU/Linux) / Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5./**
* Nom : DeluxeHistory
* Implémentation originale de Dake, basée sur du code Ajax de GôTô
* Réécriture complète par Dr Brains et Od1n, avec améliorations de Ltrlg
*
* {{Catégorisation JS|DeluxeHistory}}
*/
/*global mw, $ */
// La dépendance 'user' assure le chargement du common.js utilisateur avant ce script, pour la configuration.
mw.loader.using(['user', 'user.options', 'mediawiki.api', 'mediawiki.storage'], function () {
$(function ($) {
'use strict';
var $content = $('#mw-content-text');
var botMembers, sysopMembers;
/////////////////////////////////////// LOCALSTORAGE ///////////////////////////////////////
function storageGet(key) {
return mw.storage.get('HistoryDeluxe_' + key);
}
function storageSet(key, value) {
mw.storage.set('HistoryDeluxe_' + key, value, 86400); // 86400 secondes = 24 heures
}
/////////////////////////////////////// RÉCUPÉRATION DE LA LISTE DES BOTS ET SYSOPS ///////////////////////////////////////
function getUserList(group) {
var storedValue = storageGet(group);
return storedValue ? storedValue.split('|') : null;
}
function updateUserList(group, userList, userContinue) {
if (!userList) { userList = []; }
var userGroups = mw.config.get('wgUserGroups');
var APILimit = userGroups.includes('sysop') || userGroups.includes('bot') ? 5000 : 500;
var params = {
'action' : 'query',
'list' : 'allusers',
'aulimit' : APILimit,
'augroup' : group,
};
if (userContinue) {
Object.assign(params, userContinue);
}
new mw.Api()
.get(params)
.done(function (data) {
$.each(data.query.allusers, function () {
userList.push(this.name);
});
if (data['continue']) {
updateUserList(group, userList, data['continue']);
} else {
storageSet(group, userList.join('|'));
if (group === 'bot') {
botMembers = userList;
} else if (group === 'sysop') {
sysopMembers = userList;
}
}
});
}
/////////////////////////////////////// FONCTION DE TRAITEMENT DES LIENS ///////////////////////////////////////
function userGroupClassName($lis) {
var nsSpecial = mw.config.get('wgFormattedNamespaces')[-1] + ':';
var watcherName = mw.config.get('wgUserName');
function isUserIP(userlink) {
// Les liens des IP sont de la forme « Spécial:Contributions/<IP> »
return userlink.title.indexOf(nsSpecial) === 0;
}
function getUserClass(userlink) {
var UserName = userlink.textContent;
if (UserName === watcherName) { return 'UserIs-Self'; }
if (botMembers.includes(UserName)) { return 'UserIs-Bot'; }
if (sysopMembers.includes(UserName)) { return 'UserIs-Sysop'; }
if (isUserIP(userlink)) { return 'UserIs-IP'; }
return 'UserIs-User';
}
// Renvoie 'UserIs-…' si un seul type, 'UserIs-Mixed' sinon (RC "améliorée").
// Colore les liens vers les utilisateurs pour disposer de la différentiation même si historique mixte.
function getMultipleClassName(userlinks) {
var className = '';
$.each(userlinks, function () {
var localClassName = getUserClass(this);
this.classList.add(localClassName);
if (className === '') {
className = localClassName;
} else if (className !== localClassName) {
className = 'UserIs-Mixed';
}
});
return className;
}
$lis.each(function () {
var userlinks = this.getElementsByClassName('mw-userlink');
if (userlinks.length === 1) {
this.classList.add(getUserClass(userlinks[0]));
} else if (userlinks.length > 1) { // groupe des RC "améliorées"
this.classList.add(getMultipleClassName(userlinks));
}
});
}
/////////////////////////////////////// FONCTIONS DE PARCOURS DES ÉLÉMENTS ///////////////////////////////////////
function scan_first_ul() {
userGroupClassName($content.find('ul').eq(0).find('li'));
}
function scan_ul_special_li() {
userGroupClassName($content.find('ul.special li'));
}
function scan_td() {
userGroupClassName($content.find('td'));
}
/////////////////////////////////////// FONCTIONS DE SÉLECTION DES FILTRES ///////////////////////////////////////
function process_History() {
userGroupClassName($content.find('#pagehistory, .flow-board-history').find('li'));
}
function process_Watchlist() {
if (mw.user.options.get('usenewrc')) {
scan_td(); // Liste de suivi "améliorée"
} else {
scan_ul_special_li(); // Liste de suivi normale
}
}
function process_Recentchanges() {
if (mw.user.options.get('usenewrc')) {
scan_td(); // RC "améliorées"
} else {
scan_ul_special_li(); // RC normales
}
}
function process_Recentchangeslinked() {
if (mw.user.options.get('usenewrc')) {
scan_td(); // RC liées "améliorées"
} else {
scan_ul_special_li(); // RC liées normales
}
}
function process_Newpages() {
scan_first_ul();
mw.loader.addStyleTag('.not-patrolled { text-decoration: underline; }');
}
function process_Log() {
scan_first_ul();
}
function process_AbuseLog() {
scan_first_ul();
}
function process_OtherPages() {
scan_ul_special_li();
}
/////////////////////////////////////// LANCEMENTS ///////////////////////////////////////
function processIfEnabled(pageType, callback) {
var enabled = Object.assign({
'history': true,
'watchlist': true,
'recentchanges': true,
'recentchangeslinked': true,
'newpages': true,
'log': true,
'abuseLog': true,
'other': true
}, window.DeluxeHistory_Enabled);
if (enabled[pageType]) {
if (!mw.user.options.get('gadget-DeluxeHistory')) {
//mw.loader.load('/w/index.php?title=MediaWiki:Gadget-DeluxeHistory.css&action=raw&ctype=text/css', 'text/css');
}
botMembers = getUserList('bot');
if (!botMembers) {
updateUserList('bot');
}
sysopMembers = getUserList('sysop');
if (!sysopMembers) {
updateUserList('sysop');
}
if (botMembers && sysopMembers) {
mw.hook( 'wikipage.content' ).add(callback);
}
}
}
/////////////////////////////////////// INITIALISATION ///////////////////////////////////////
var paramAction = mw.config.get('wgAction');
var paramCanonicalSpecialPageName = mw.config.get('wgCanonicalSpecialPageName');
if (paramAction === 'history') {
processIfEnabled('history', process_History);
} else if (paramCanonicalSpecialPageName === 'Watchlist') {
processIfEnabled('watchlist', process_Watchlist);
} else if (paramCanonicalSpecialPageName === 'Recentchanges') {
processIfEnabled('recentchanges', process_Recentchanges);
} else if (paramCanonicalSpecialPageName === 'Recentchangeslinked') {
processIfEnabled('recentchangeslinked', process_Recentchangeslinked);
} else if (paramCanonicalSpecialPageName === 'Newpages') {
processIfEnabled('newpages', process_Newpages);
} else if (paramCanonicalSpecialPageName === 'Log') {
processIfEnabled('log', process_Log);
} else if (paramCanonicalSpecialPageName === 'AbuseLog') {
processIfEnabled('abuseLog', process_AbuseLog);
} else if ($content.find('.special').length) {
processIfEnabled('other', process_OtherPages);
}
});
});