Discussion MediaWiki:Gadget-DeluxeHistory.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 === wgUserName) { return 'UserIs-Myself'; } else { return 'UserIs-Sysop'; } } if ($.inArray(UserName, patrollerMembers) > -1) { if (UserName === wgUserName) { return 'UserIs-Myself'; } else { return 'UserIs-Patroller'; } } if (isUserIP(domUserlink)) { return 'UserIs-IP'; } if ($.inArray(UserName, oldBotMembers) > -1) { return 'UserIs-OldBot'; } if (UserName === 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);