Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.
m Undid revisions from 3555 to 2367 // AdvancedRollback
Tags: Undo Reverted
m Restored revision 3553 by Bosco) (Restorer
Tag: Undo
 
Line 6: Line 6:


var userSetTips = {
var userSetTips = {
'A' : 'administrator',
    'A'   : 'administrator',
'B' : 'bureaucrat',
    'B'   : 'bureaucrat',
'CSS': 'Community Support and Safety',
    'CSS' : 'Community Support and Safety',
'CU': 'checkuser',
    'CU' : 'checkuser',
'IA': 'interface administrator',
    'EA'  : 'electionadmin',
'OS': 'oversight',
    'GS'  : 'global-sysop',
'Rb': 'rollback',
    'IA' : 'interface administrator',
'S' : 'staff',
    'OS' : 'oversight',
'SW' : 'steward',
    'P'  : 'patroller',
'SA': 'system administrator',
    'Rb' : 'rollback',
    'S'   : 'staff',
    'SW' : 'steward',
    'SA' : 'system administrator',
    'TAV' : 'temporary-account-viewer'
};
};


function addCSS(css) {
function addCSS(css) {
var styleElem = document.createElement('style');
    var styleElem = document.createElement('style');
styleElem.appendChild(document.createTextNode(css));
    styleElem.appendChild(document.createTextNode(css));
document.getElementsByTagName('head')[0].appendChild(styleElem);
    document.getElementsByTagName('head')[0].appendChild(styleElem);
}
}


function markadmins($content) {
function markadmins($content) {
if (!$content.length) return;
    if (!$content.length) return;
runNum++;
    runNum++;
if (runNum === 1) {
    if (runNum === 1) {
addCSS(
        addCSS(
'tt.userflags { color:#0645ad; }' +
            'tt.userflags { color:#0645ad; }' +
'.userflags-wrapper { -moz-user-select:none; }' +
            '.userflags-wrapper { -moz-user-select:none; }' +
'.userflags-none { display: none; }'
            '.userflags-none { display: none; }'
);
        );
}
    }
   
var $links = $content.find('a[title^="User"], a[title^="Talk"]');
    var $links = $content.find('a[title^="User"], a[title^="Talk"]');
   
if (runNum === 2) {
    if (runNum === 2) {
if ($links.length === prevLinksCount) {
        if ($links.length === prevLinksCount) {
return;
            return;
} else {
        } else {
if ($links.length > prevLinksCount) {
            if ($links.length > prevLinksCount) {
$links = $links.slice(prevLinksCount);
                $links = $links.slice(prevLinksCount);
} else {
            } else {
var msg = 'MediaWiki:Gadget-markadmins.js: Нестандартная ситуация: количество ссылок на втором проходе (' + $links.length + ') меньше, чем на первом (' + prevLinksCount + '). Снова обходим все ссылки.';
                var msg = 'MediaWiki:Gadget-markadmins.js: Нестандартная ситуация: количество ссылок на втором проходе (' + $links.length + ') меньше, чем на первом (' + prevLinksCount + '). Снова обходим все ссылки.';
if (console.info) {
                if (console.info) {
console.info(msg);
                    console.info(msg);
} else {
                } else {
console.log(msg);
                    console.log(msg);
}
                }
}
            }
}
        }
}
    }


new mw.Api().get({
    new mw.Api().get({
action: 'query',
        action: 'query',
list: 'allusers',
        list: 'allusers',
augroup: 'sysop|bureaucrat|safety|checkuser|interface-admin|suppress|rollback|staff|steward|sysadmin',
        augroup: 'sysop|bureaucrat|safety|checkuser|electionadmin|global-sysop|interface-admin|suppress|patroller|rollback|staff|steward|sysadmin|temporary-account-viewer',
auprop: 'groups',
        auprop: 'groups',
aulimit: 500,
        aulimit: 500,
format: 'json',
        format: 'json',
formatversion: 2
        formatversion: 2
}).done(function(ans) {
    }).done(function(ans) {
var list = ans.query.allusers,
        var list = ans.query.allusers,
groups = ['sysop', 'bureaucrat', 'safety', 'checkuser', 'interface-admin', 'suppress', 'rollback', 'staff', 'steward', 'sysadmin'],
            groups = [
key = ['A', 'B', 'CSS', 'CU', 'IA', 'OS', 'Rb', 'S', 'SW', 'SA'],
                'sysop','bureaucrat','safety','checkuser','electionadmin','global-sysop','interface-admin','suppress','patroller','rollback','staff','steward','sysadmin','temporary-account-viewer'
userSet = {};
            ],
            key = ['A','B','CSS','CU','EA','GS','IA','OS','P','Rb','S','SW','SA','TAV'],
for (var i = 0; i < key.length; i++) {
            userSet = {};
userSet[key[i]] = [];
           
}
        for (var i = 0; i < key.length; i++) {
            userSet[key[i]] = [];
for (var i = 0; i < list.length; i++) {
        }
for (var j = 0; j < groups.length; j++) {
       
if (list[i].groups.includes(groups[j])) {
        for (var i = 0; i < list.length; i++) {
userSet[key[j]].push(list[i].name);
            for (var j = 0; j < groups.length; j++) {
}
                if (list[i].groups.includes(groups[j])) {
}
                    userSet[key[j]].push(list[i].name);
}
                }
            }
$links.each(function (i, link) {
        }
if (!link.parentNode ||
       
(/[?#]/.test(link.href) && link.href.indexOf('redlink=1') === -1) ||
        $links.each(function (i, link) {
(link.parentElement && link.parentElement.className === 'cancelLink')
            if (!link.parentNode ||
) {
                (/[?#]/.test(link.href) && link.href.indexOf('redlink=1') === -1) ||
return;
                (link.parentElement && link.parentElement.className === 'cancelLink')
}
            ) {
                return;
var matches, user, flags = [], tips = [], flag;
            }
matches = /^User:(.+)|Talk:(.+)/.exec(link.title);
   
if (!matches) return;
            var matches, user, flags = [], tips = [], flag;
if (matches[2]) {
            matches = /^User:(.+)|Talk:(.+)/.exec(link.title);
if ($(link).parent().hasClass('mw-usertoollinks') || link.textContent.match(/обс/i)) return;
            if (!matches) return;
matches[1] = matches[2];
            if (matches[2]) {
} else if (!matches[1]) {
                if ($(link).parent().hasClass('mw-usertoollinks') || link.textContent.match(/обс/i)) return;
return;
                matches[1] = matches[2];
}
            } else if (!matches[1]) {
                return;
user = decodeURIComponent(matches[1]);
            }
if (link.href.indexOf('redlink=1') !== -1) {
           
user = user.replace(/ \([^\)]+\)$/, '');
            user = decodeURIComponent(matches[1]);
}
            if (link.href.indexOf('redlink=1') !== -1) {
                user = user.replace(/ \([^\)]+\)$/, '');
for (flag in userSet) {
            }
if (userSet[flag].indexOf(user) !== -1 && userSetTips[flag]) {
           
flags.push(flag);
            for (flag in userSet) {
tips.push(userSetTips[flag]);
                if (userSet[flag].indexOf(user) !== -1 && userSetTips[flag]) {
}
                    flags.push(flag);
}
                    tips.push(userSetTips[flag]);
if (!flags.length) return;
                }
            }
tips = ' (' + tips.join(', ') + ')';
            if (!flags.length) return;
           
var spanElem = document.createElement('span');
            tips = ' (' + tips.join(', ') + ')';
spanElem.className = 'userflags-wrapper';
           
var nbspElem = document.createTextNode('\u00A0');
            var spanElem = document.createElement('span');
var ttElem = document.createElement('tt');
            spanElem.className = 'userflags-wrapper';
ttElem.className = 'userflags';
            var nbspElem = document.createTextNode('\u00A0');
ttElem.title = tips;
            var ttElem = document.createElement('tt');
var flagsElem = document.createTextNode('(' + flags.join(',') + ')');
            ttElem.className = 'userflags';
            ttElem.title = tips;
ttElem.appendChild(flagsElem);
            var flagsElem = document.createTextNode('(' + flags.join(',') + ')');
spanElem.appendChild(nbspElem);
   
spanElem.appendChild(ttElem);
            ttElem.appendChild(flagsElem);
            spanElem.appendChild(nbspElem);
link.parentNode.insertBefore(spanElem, link.nextSibling);
            spanElem.appendChild(ttElem);
link.title = link.title + tips;
   
});
            link.parentNode.insertBefore(spanElem, link.nextSibling);
});
            link.title = link.title + tips;
        });
    });


prevLinksCount = $links.length;
    prevLinksCount = $links.length;
}
}



Latest revision as of 12:46, 17 April 2026

// rewritten by [[m:User:Hoo man]]; 2012-08-26, adapted by [[User:Obersachse]], optimized by [[User:Jack who built the house]], adapted by [[User:Zippybonzo]]
// For attribution: [[MediaWiki:Gadget-markadmins.js]]
(function () {

var userSet;

var userSetTips = {
    'A'   : 'administrator',
    'B'   : 'bureaucrat',
    'CSS' : 'Community Support and Safety',
    'CU'  : 'checkuser',
    'EA'  : 'electionadmin',
    'GS'  : 'global-sysop',
    'IA'  : 'interface administrator',
    'OS'  : 'oversight',
    'P'   : 'patroller',
    'Rb'  : 'rollback',
    'S'   : 'staff',
    'SW'  : 'steward',
    'SA'  : 'system administrator',
    'TAV' : 'temporary-account-viewer'
};

function addCSS(css) {
    var styleElem = document.createElement('style');
    styleElem.appendChild(document.createTextNode(css));
    document.getElementsByTagName('head')[0].appendChild(styleElem);
}

function markadmins($content) {
    if (!$content.length) return;
    runNum++;
    if (runNum === 1) {
        addCSS(
            'tt.userflags { color:#0645ad; }' +
            '.userflags-wrapper { -moz-user-select:none; }' +
            '.userflags-none { display: none; }'
        );
    }
    
    var $links = $content.find('a[title^="User"], a[title^="Talk"]');
    
    if (runNum === 2) {
        if ($links.length === prevLinksCount) {
            return;
        } else {
            if ($links.length > prevLinksCount) {
                $links = $links.slice(prevLinksCount);
            } else {
                var msg = 'MediaWiki:Gadget-markadmins.js: Нестандартная ситуация: количество ссылок на втором проходе (' + $links.length + ') меньше, чем на первом (' + prevLinksCount + '). Снова обходим все ссылки.';
                if (console.info) {
                    console.info(msg);
                } else {
                    console.log(msg);
                }
            }
        }
    }

    new mw.Api().get({
        action: 'query',
        list: 'allusers',
        augroup: 'sysop|bureaucrat|safety|checkuser|electionadmin|global-sysop|interface-admin|suppress|patroller|rollback|staff|steward|sysadmin|temporary-account-viewer',
        auprop: 'groups',
        aulimit: 500,
        format: 'json',
        formatversion: 2
    }).done(function(ans) {
        var list = ans.query.allusers,
            groups = [
                'sysop','bureaucrat','safety','checkuser','electionadmin','global-sysop','interface-admin','suppress','patroller','rollback','staff','steward','sysadmin','temporary-account-viewer'
            ],
            key = ['A','B','CSS','CU','EA','GS','IA','OS','P','Rb','S','SW','SA','TAV'],
            userSet = {};
            
        for (var i = 0; i < key.length; i++) {
            userSet[key[i]] = [];
        }
        
        for (var i = 0; i < list.length; i++) {
            for (var j = 0; j < groups.length; j++) {
                if (list[i].groups.includes(groups[j])) {
                    userSet[key[j]].push(list[i].name);
                }
            }
        }
        
        $links.each(function (i, link) {
            if (!link.parentNode ||
                (/[?#]/.test(link.href) && link.href.indexOf('redlink=1') === -1) ||
                (link.parentElement && link.parentElement.className === 'cancelLink')
            ) {
                return;
            }
    
            var matches, user, flags = [], tips = [], flag;
            matches = /^User:(.+)|Talk:(.+)/.exec(link.title);
            if (!matches) return;
            if (matches[2]) {
                if ($(link).parent().hasClass('mw-usertoollinks') || link.textContent.match(/обс/i)) return;
                matches[1] = matches[2];
            } else if (!matches[1]) {
                return;
            }
            
            user = decodeURIComponent(matches[1]);
            if (link.href.indexOf('redlink=1') !== -1) {
                user = user.replace(/ \([^\)]+\)$/, '');
            }
            
            for (flag in userSet) {
                if (userSet[flag].indexOf(user) !== -1 && userSetTips[flag]) {
                    flags.push(flag);
                    tips.push(userSetTips[flag]);
                }
            }
            if (!flags.length) return;
            
            tips = ' (' + tips.join(', ') + ')';
            
            var spanElem = document.createElement('span');
            spanElem.className = 'userflags-wrapper';
            var nbspElem = document.createTextNode('\u00A0');
            var ttElem = document.createElement('tt');
            ttElem.className = 'userflags';
            ttElem.title = tips;
            var flagsElem = document.createTextNode('(' + flags.join(',') + ')');
    
            ttElem.appendChild(flagsElem);
            spanElem.appendChild(nbspElem);
            spanElem.appendChild(ttElem);
    
            link.parentNode.insertBefore(spanElem, link.nextSibling);
            link.title = link.title + tips;
        });
    });

    prevLinksCount = $links.length;
}

var runNum = 0;
var prevLinksCount;
markadmins($('#mw-content-text'));  
mw.hook('wikipage.content').add(markadmins);

}());
Cookies help us deliver our services. By using our services, you agree to our use of cookies.