Utilisateur:Od1n/TagFilterDeluxe.js

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

Chrome / Internet Explorer / Opera : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl-F5.
/* <!--{{Catégorisation JS|TagFilterDeluxe}}--> */

// fork obsolète - utiliser [[MediaWiki:Gadget-TagFilterDeluxe.js]] : obtenir('TagFilterDeluxe');

if (['Recentchanges', 'Newpages', 'Contributions'].indexOf(mw.config.get('wgCanonicalSpecialPageName')) !== -1) {
    mw.loader.using(['mediawiki.util', 'mediawiki.storage'], function () {

        var cachedData, filterList;

        cachedData = mw.storage.get('TagFilterDeluxe_filterList');

        if (cachedData) {
            filterList = cachedData.split('|');
            $(document).ready(modifyInput);
        } else {
            $.get(
                mw.util.wikiScript('api'),
                {action: "query", list: "tags", tgprop: "active", tglimit: 499, format: "json", formatversion: 2},
                function (data) {
                    var tags = data.query.tags;
                    filterList = [];
                    for (var a = 0; a < tags.length; a++) {
                        var thistag = tags[a];
                        if (!thistag.active) continue;
                        filterList.push(thistag.name);
                    }
                    mw.storage.set('TagFilterDeluxe_filterList', filterList.join('|'), 86400); // 86400 secondes = 24 heures
                    $(document).ready(modifyInput);
                }
            );
        }

        function modifyInput() {
            var input, select, activeFilter, a, l, filter;
            input = $('input.mw-tagfilter-input');
            if (input.length !== 1) {
                return;
            }
            select = '<select name="tagfilter">'
                + '<option value="">* Aucune *</option>';
            activeFilter = getActiveFilter();
            for (a = 0, l = filterList.length; a < l; a++) {
                filter = filterList[a];
                select += '<option value="' + filter + '"';
                if (filter === activeFilter) {
                    select += ' selected="selected"';
                }
                select += '>' + filter + '</option>';
            }
            select += '</select>';
            input.replaceWith(select);
        }

        function getActiveFilter() {
            var m = /^[^#]*[&?]tagfilter=([^&#]*)/.exec(document.URL);
            if (m) {
                return decodeURIComponent(m[1]).replace(/\+/g, " ");
            }
            return false;
        }

    });
}