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: Difference between revisions

MediaWiki interface page
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..."
 
No edit summary
 
Line 2: Line 2:
/* --- Auto-Generate MangaDex Role Badges --- */
/* --- Auto-Generate MangaDex Role Badges --- */
mw.loader.using(['mediawiki.api']).then(function () {
mw.loader.using(['mediawiki.api']).then(function () {
    // 1. Get the username of the profile being viewed
     var targetUser = mw.config.get('wgRelevantUserName');
     var targetUser = mw.config.get('wgRelevantUserName');
      
      
    // 2. Stop if we aren't looking at a User page
     if (!targetUser) return;
     if (!targetUser) return;


    // 3. Ask the database for their true, unfakeable groups
     var api = new mw.Api();
     var api = new mw.Api();
     api.get({
     api.get({
Line 20: Line 17:


         var groups = users[0].groups;
         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 = {
         var roleMap = {
             'sysop': { text: 'Wiki Admin', class: 'md-role-admin' },
             'sysop': { text: 'Wiki Admin', class: 'md-role-admin' },
Line 44: Line 38:
         var hasBadges = false;
         var hasBadges = false;


        // 5. Build the badges based on the user's groups
         groups.forEach(function(group) {
         groups.forEach(function(group) {
             if (roleMap[group]) {
             if (roleMap[group]) {
Line 55: Line 48:
         });
         });


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

Latest revision as of 15:19, 21 April 2026

/* 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 () {
    var targetUser = mw.config.get('wgRelevantUserName');
    
    if (!targetUser) return;

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

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

        if (hasBadges) {
            $('#bodyContent').prepend($badgeContainer);
        }
    });
});