Utilisateur:Od1n/Codes modèles abréviations ordinales.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.
mw.loader.using(['mediawiki.api', 'mediawiki.util'], function () {

    var userGroups = mw.config.get('wgUserGroups');
    var apiLimit = userGroups.includes('sysop') || userGroups.includes('bot') ? 5000 : 500;

    var nsModeles = [];
    var contents = {};

    getTitles();

    function getTitles(continueParams) {
        var params = {
            action: 'query',
            list: 'categorymembers',
            cmtitle: "Catégorie:Modèle d'abréviation ordinale en chiffres arabes",
            cmlimit: apiLimit,
            formatversion: 2,
        };
        if (continueParams) {
            Object.assign(params, continueParams);
        }
        new mw.Api()
            .get(params)
            .done(function (data) {
                var titles = data.query.categorymembers.map(function (page) {
                    return page.title;
                });
                nsModeles = nsModeles.concat(titles);

                if (data.continue) {
                    getTitles(data.continue);
                } else {
                    handleModeles();
                }
            });
    }

    function handleModeles() {

        var chunks = chunk(nsModeles, 50);
        var remaining = chunks.length;

        chunks.forEach(function (chunk) {
            new mw.Api()
                .get({
                    action: 'query',
                    titles: chunk,
                    prop: 'revisions',
                    rvprop: 'content',
                    formatversion: 2,
                })
                .done(function (data) {
                    data.query.pages.forEach(function (page) {
                        contents[page.title] = page.revisions[0].content;
                    });

                    --remaining;
                    if (!remaining) {
                        $(render);
                    }
                });
        });
    }

    function render($) {

        var $output = $('<div>');

        nsModeles.forEach(function (title) {

            var $link = $('<a>')
                .attr('href', mw.util.getUrl(title))
                .text(title.replace(/^Modèle:/, ''));

            var $h4 = $('<h4>').append($link);
            var $pre = $('<pre>').text(contents[title]);

            $output.append($h4, $pre);
        });

        var placeholder = $('#codes-modeles-abreviations-ordinales');

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

    function chunk(arr, size) {
        var chunks = [];
        for (var i = 0, len = arr.length; i < len; i += size) {
            chunks.push(arr.slice(i, i + size));
        }
        return chunks;
    }

});