Categories/javascript

From Freephile Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

JavaScript code like the following uses the internal MediaWiki Api to retrieve the categories and output a table with member page counts.

You can see the same info at Special:Categories - but this example gives you another way to slice and dice the information if desired.

mw.loader.using('mediawiki.api', function() {
    var api = new mw.Api();
    var $output = $('<div id="category-list"></div>');
    $output.append('<h2>Categories in this wiki</h2>');
    $output.append('<p>Loading categories...</p>');
    
    // Add to page
    $('#content').prepend($output);
    
    // Get all categories with their member counts
    api.get({
        action: 'query',
        list: 'allcategories',
        acprop: 'size', // Include the number of members in each category
        aclimit: 5000,  // Get up to 5000 categories (adjust as needed)
        format: 'json'
    }).done(function(data) {
        // Clear loading message
        $output.find('p').remove();
        
        if (!data.query || !data.query.allcategories || data.query.allcategories.length === 0) {
            $output.append('<p>No categories found.</p>');
            return;
        }
        
        // Categories are already sorted alphabetically in the API response
        var categories = data.query.allcategories;
        
        var $table = $('<table class="wikitable sortable"></table>');
        $table.append('<tr><th>Category</th><th>Pages</th></tr>');
        
        $.each(categories, function(i, cat) {
            var categoryName = cat['*'];
            var pageCount = cat.size;
            
            $table.append(
                '<tr>' +
                '<td><a href="/wiki/Category:' + encodeURIComponent(categoryName) + '">' + 
                categoryName + '</a></td>' +
                '<td>' + pageCount + '</td>' +
                '</tr>'
            );
        });
        
        $output.append($table);
        $output.append('<p>Total: ' + categories.length + ' categories</p>');
        
        // If your wiki has mw.loader.load('jquery.tablesorter') available
        if ($.tablesorter) {
            $table.tablesorter();
        }
    }).fail(function(error) {
        $output.find('p').text('Error fetching categories: ' + error);
    });
});