MediaWiki:Gadget-DeluxeHistory.js

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);