Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Common.js

MediaWiki interface page
Revision as of 15:18, 21 April 2026 by Bartolumiu (talk | contribs) (Created page with "Any JavaScript here will be loaded for all users on every page load.: --- Auto-Generate MangaDex Role Badges ---: mw.loader.using(['mediawiki.api']).then(function () { // 1. Get the username of the profile being viewed var targetUser = mw.config.get('wgRelevantUserName'); // 2. Stop if we aren't looking at a User page if (!targetUser) return; // 3. Ask the database for their true, unfakeable groups var api = new mw.Api(); api.g...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* Any JavaScript here will be loaded for all users on every page load. */
/* --- Auto-Generate MangaDex Role Badges --- */
mw.loader.using(['mediawiki.api']).then(function () {
    // 1. Get the username of the profile being viewed
    var targetUser = mw.config.get('wgRelevantUserName');
    
    // 2. Stop if we aren't looking at a User page
    if (!targetUser) return;

    // 3. Ask the database for their true, unfakeable groups
    var api = new mw.Api();
    api.get({
        action: 'query',
        list: 'users',
        ususers: targetUser,
        usprop: 'groups'
    }).done(function (data) {
        var users = data.query.users;
        if (!users || !users[0] || !users[0].groups) return;

        var groups = users[0].groups;

        // 4. Map the database group names to your CSS classes and Display Text
        // 4. Map the database group names to your CSS classes and Display Text
        var roleMap = {
            'sysop': { text: 'Wiki Admin', class: 'md-role-admin' },
            'wiki_editor': { text: 'Wiki Editor', class: 'md-role-wiki-editor' },
            
            'admin': { text: 'Admin', class: 'md-role-admin' },
            'developer': { text: 'Developer', class: 'md-role-developer' },
            'global_moderator': { text: 'Global Moderator', class: 'md-role-global-moderator' },
            'forum_moderator': { text: 'Forum Moderator', class: 'md-role-forum-moderator' },
            'public_relations': { text: 'Public Relations', class: 'md-role-public-relations' },
            'designer': { text: 'Designer', class: 'md-role-designer' },
            'staff': { text: 'Staff', class: 'md-role-staff' },
            
            'knights_of_dex': { text: 'Knights of Dex', class: 'md-role-knights-of-dex' },
            'contributor':    { text: 'Contributor', class: 'md-role-contributor' },
            'power_uploader': { text: 'Power Uploader', class: 'md-role-power' },
            'group_leader':   { text: 'Group Leader', class: 'md-role-leader' }
        };

        var $badgeContainer = $('<div>').css({ 'margin-bottom': '1.5rem', 'margin-top': '-0.5rem' });
        var hasBadges = false;

        // 5. Build the badges based on the user's groups
        groups.forEach(function(group) {
            if (roleMap[group]) {
                var $badge = $('<span>')
                    .addClass('md-role-badge ' + roleMap[group].class)
                    .text(roleMap[group].text);
                $badgeContainer.append($badge);
                hasBadges = true;
            }
        });

        // 6. Inject the badges directly beneath the page title!
        if (hasBadges) {
            $('#bodyContent').prepend($badgeContainer);
        }
    });
});