MediaWiki:Gadget-colored-nicknames.js
Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.
- Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
- Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
- Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
- Opera: Naciśnij klawisze Ctrl+F5.
// UWAGA! Z tego gadżetu korzystają także inne projekty
// Author: [[pl:User:Beau]]
if ( typeof( cn$replacement ) == "undefined" ) {
window.cn$replacement = {};
}
if ( typeof( cn$class ) == "undefined" ) {
window.cn$class = {};
}
window.coloredNicknamesGadget = {
cache: {},//TODO
list: {},
version: 11,
userLink: /(?:Wiki(?:pedystk?a|skryba|reporter|s.+ownikar)|U.+ytkownik|U.+ytkowniczka|User)/,
contribLink: /Specjalna:Wk/,
api: new mw.Api(),
init: function() {
if ( mw.config.get( 'wgNamespaceNumber' ) > -1 && mw.config.get( 'wgAction' ) != 'history' ) {
return;
}
var that = this;
var request = {
action: 'query',
list: 'allusers|globalallusers',
augroup: 'sysop|bot',
agugroup: 'steward',
aulimit: 'max',
agulimit: 'max',
auprop: 'groups',
aguprop: 'groups',
maxage: 43200,
smaxage: 600,
format: 'json'
};
this.api.get( request ).done( function( result ) {
that.addToList( result.query.allusers, 'nick_admin', 'sysop' );
that.addToList( result.query.allusers, 'nick_bot', 'bot' );
that.addToList( result.query.globalallusers, 'nick_steward', 'steward' );
mw.hook( 'wikipage.content' ).add( function () {that.doColor();});
} );
},
addToList: function( data, type, group_name ) {
if ( data.length ) {
for ( var id in data ) {
var nick = data[id].name;
if(!data[id].groups.includes(group_name)) continue;
if ( this.list[nick] ) {
this.list[nick].push( type );
} else {
this.list[nick] = new Array( type );
}
}
}
},
isIPv4: function( nick ) {
return nick.match( /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/ );
},
isIPv6: function( nick ) {
// Source: http://home.deds.nl/~aeron/regex/
return nick.match( /^((?=.*::)(?!.*::.+::)(::)?([\dA-F]{1,4}:(:|\b)|){5}|([\dA-F]{1,4}:){6})((([\dA-F]{1,4}((?!\3)::|:\b|$))|(?!\2\3)){2}|(((2[0-4]|1\d|[1-9])?\d|25[0-5])\.?\b){4})$/i );
},
getUserClass: function( nick ) {
if ( nick === null ) {
return [];
}
var userClass = this.cache[nick];
if ( userClass ) {
return userClass;
}
userClass = [];
var nc = cn$class[nick];
if ( nc ) {
userClass.push( nc );
}
if ( this.list[nick] ) {
userClass = userClass.concat( this.list[nick] );
}
if ( this.isIPv4( nick ) ) {
userClass.push( 'nick_ip' );
if ( this.isDynamic( nick ) ) {
userClass.push( 'nick_dynamic_ip' );
}
} else if ( this.isIPv6( nick ) ) {
userClass.push( 'nick_ip' );
}
this.cache[nick] = userClass;
return userClass;
},
isDynamic: function( ip ) {
return false;
},
doColor: function() {
if ( ( typeof dynamicIpsGadget ) == 'object' ) {
this.isDynamic = function( ip ) {
return dynamicIpsGadget.isDynamic( ip );
};
}
var links = document.querySelectorAll( '.mw-body a' );
for ( var i = 0; i < links.length; i++ ) {
var link = links[i];
if ( !link.href.match( this.userLink ) && !link.href.match( this.contribLink ) ) {
continue;
}
var nick = jQuery( link ).text();
var replacement = cn$replacement[nick];
if ( replacement ) {
link.innerHTML = replacement;
}
var userClass = this.getUserClass( nick );
if ( userClass.length ) {
link.className += ' ' + userClass.join( ' ' );
}
}
this.cache = {};
}
};
coloredNicknamesGadget.init();