Utilisateur:Od1n/Rapport gadgets.js

Une page de Wikipédia, l'encyclopédie libre.
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.
// pour chargement manuel sur un autre wiki :
// mw.loader.load('//fr.wikipedia.org/w/index.php?title=Utilisateur:Od1n/Rapport_gadgets.js&action=raw&ctype=text/javascript');

mw.loader.using('mediawiki.util', function () {

    $.get(mw.util.getUrl('MediaWiki:Gadgets-definition', {action: 'render'}), function (data) {

        var store = [];

        var $content = $(data); // avec le "action=render", on obtient directement l'élément "#mw-content-text > .mw-parser-output"
        $content.find('#toc').remove();

        $content.find('h2, h3, ul li').each(function () {

            var $this = $(this);
            var text = $this.text();

            if ($this.is('h2, h3')) {
                store.push({
                    title: text.replace(/\s*\[modifier\]$/, ''),
                    gadgets: []
                });
            } else if (store.length > 0) {
                var gadget = {};
                gadget.name = text.match(/[^|[]+/)[0].trim();
                gadget.isDefault = /[[|] *default *[\]|]/.test(text);
                gadget.isEnabled = !!mw.user.options.get('gadget-'+gadget.name);

                store[store.length-1].gadgets.push(gadget);
            }
        });

        $(function ($) {

            var $table = $('<table class="wikitable"><tr>'
                + '<th>Section</th>'
                + '<th>Gadget</th>'
                + '<th>Default</th>'
                + '<th>Enabled</th>'
                + '</tr></table>');

            $.each(store, function (i, section) {

                var nbRows = 0;

                $.each(section.gadgets, function () {
                    if (this.isDefault || this.isEnabled) {
                        ++nbRows;
                    }
                });

                if (nbRows === 0) {
                    return;
                }

                var firstRow = true;

                $.each(section.gadgets, function (j, gadget) {

                    if (!gadget.isDefault && !gadget.isEnabled) {
                        return;
                    }

                    var $tr = $('<tr></tr>');

                    if (firstRow) {
                        $tr.append('<th rowspan="'+nbRows+'">' + section.title + '</th>');
                        firstRow = false;
                    }

                    $tr.append('<td>' + gadget.name + '</td>'
                        + '<td>' + (gadget.isDefault ? 'default' : '') + '</td>'
                        + '<td>' + (gadget.isEnabled ? 'enabled' : '') + '</td>');

                    if (!gadget.isDefault && gadget.isEnabled) {
                        $tr.css('background', '#9BD398');
                    } else if (gadget.isDefault && !gadget.isEnabled) {
                        $tr.css('background', '#FDB6B8');
                    }

                    $table.append($tr);
                });
            });

            var $placeholder = $('#rapport-gadgets');

            if ($placeholder.length) {
                $placeholder.append($table);
            } else {
                $('#mw-content-text').prepend($table);
            }

        });
    });
});