Fandom Developers Wiki
Advertisement

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)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/**
 *
 * @module                  MastheadRightsBadge
 * @description             Adds WDS avatar badges to user profiles.
 * @author                  Americhino
 * @version                 1.0.0
 * @license                 CC-BY-SA 3.0
 *
 */
var mw = window.mw;
var $ = window.jQuery;
// User config variables
var config = window.MastheadRightsBadgeSettings || {};
var iconSize = config.iconSize || '50px';
// Variables
var $user = mw.config.get('wgTitle').split('/');
// Fetch MediaWiki API for user group badge messages, API fetch by Luqgreg
var api = new mw.Api();
function getMessages(msg) {
    return new Promise(function(resolve, reject) {
        api.get({
            action: 'query',
            meta: 'allmessages',
            ammessages: msg.join("|"),
        }).done(function (d) {
            if(d.fail) reject(d);
            var r = {};
            d.query.allmessages.forEach(function(e) {
                r[e.name] = e["*"];
            });
            resolve(r);
        }).fail(reject);
    });
}
 
getMessages([
    "user-identity-box-group-sysop",
    "user-identity-box-group-content-moderator",
    "user-identity-box-group-threadmoderator",
    "user-identity-box-group-chatmoderator",
    "user-identity-box-group-staff",
    "user-identity-box-group-helper",
    "user-identity-box-group-soap",
    "user-identity-box-group-global-discussions-moderator",
]).then(function(m) {
    //
    var title = {
        'sysop': m["user-identity-box-group-sysop"],
        'content-moderator': m["user-identity-box-group-content-moderator"],
        'threadmoderator': m["user-identity-box-group-threadmoderator"],
        'chatmoderator': m["user-identity-box-group-chatmoderator"],
        'staff': m["user-identity-box-group-staff"],
        'helper': m["user-identity-box-group-helper"],
        'soap': m["user-identity-box-group-soap"],
        'global-discussions-moderator': m["user-identity-box-group-global-discussions-moderator"]
    };
    // Z-Index variable: user group hierachy
    var groupPriority = {
        'sysop': '10070',
        'content-moderator': '10060',
        'threadmoderator': '10050',
        'chatmoderator': '10040',
        'staff': '10030',
        'helper': '10020',
        'soap': '10010',
        'global-discussions-moderator': '10000',
    };
    // Fetch MediaWiki API for user group badges
    api.get({
        action: 'query',
        list: 'users',
        usprop: 'groups',
        ususers: $user = $user[1] ? $user[1] : $user[0]
    }).then(function (data) {
    // Variables
    var groups = (data.query.users[0] || {}).groups || [];
    // User groups
    var g = {
        'sysop': 'admin',
        'content-moderator': 'content-moderator',
        'threadmoderator': 'discussion-moderator',
        'chatmoderator': 'discussion-moderator',
        'staff': 'staff',
        'helper': 'helper',
        'soap': 'vstf',
        'global-discussions-moderator': 'global-discussions-moderator',
    };
    // Create badge
    groups.forEach(function (group) {
        mw.hook('dev.wds').add(function(wds) {
            if (!g[group]) return;
            if ($('.user-identity-box').length) {
            $('.user-identity-box .user-identity-avatar').prepend(
                $('<div>', {
                    'class': 'mastrightsbadge ' + 'mastrightsbadge-' + group,
                    'title': title[group],
                    css: {
                        height: iconSize,
                        position: 'absolute',
                        left: '0',
                        top: '0',
                        width: iconSize,
                        zIndex: groupPriority[group],
                    }
                }).append(
                    $(window.dev.wds.badge(g[group]))
                )
                );
            } else {
            $('.UserProfileMasthead .masthead-avatar').prepend(
                $('<div>', {
                    'class': 'mastrightsbadge ' + 'mastrightsbadge-' + group,
                    'title': title[group],
                    css: {
                        height: iconSize,
                        position: 'absolute',
                        left: '0',
                        top: '0',
                        width: iconSize,
                        zIndex: groupPriority[group],
                    }
                }).append(
                    $(window.dev.wds.badge(g[group]))
                )
                );
            }
            });
        });
    });
});
// Import dependencies
window.importArticles(
    {
        type: 'script',
        articles: ['u:dev:MediaWiki:WDSIcons/code.js']
    },
    {
        type: 'style',
        articles: ['u:dev:MediaWiki:MastheadRightsBadge.css']
    }
);
Advertisement