User:Ricordisamoa/UserInfo.js
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.
/* <nowiki>
* UserInfo.js
* inspired from [[:en:User:PleaseStand/User info]] by PleaseStand (taken very few pieces of code, Thanks!)
* @author [[User:Ricordisamoa]]
*/
/* global $, mw */
/* jshint devel: true */
$( document ).ready( function () {
'use strict';
if (
[ 2, 3 ].indexOf( mw.config.get( 'wgNamespaceNumber' ) ) === -1 ||
/\//.test( mw.config.get( 'wgTitle' ) )
) {
return;
}
mw.loader.using( [ 'mediawiki.api', 'mediawiki.language' ], function () {
var user = mw.config.get( 'wgTitle' ).split( '/' )[ 0 ],
siteData = mw.config.get( 'wgServer' ).replace( /^\/\/(.+)$/, '$1' ).split( '.' ).slice( -3, 2 ),
api = new mw.Api();
api.post( {
action: 'query',
meta: 'allmessages',
amlang: mw.config.get( 'wgUserLanguage' ),
ammessages: [
'ago',
'and',
'comma-separator',
'word-separator',
'just-now',
'usereditcount',
'seconds',
'minutes',
'hours',
'days',
'weeks',
'months',
'years'
].concat(
$.map( [
'API_High_Limit_Requestor',
'Ex_Administrator',
'Ex_Bureaucrat',
'Global_bot',
'Global_rollback',
'Global_sysops',
'Image-reviewer',
'Indic_Bots',
'New_wikis_importer',
'OTRS',
'OTRS-member',
'Ombudsmen',
'Staff',
'abusefilter',
'accountcreator',
'arbcom',
'autoconfirmed',
'autopatrolled',
'autoreview',
'autoreviewer',
'bigexport',
'bot',
'botadmin',
'bureaucrat',
'centralnoticeadmin',
'checkuser',
'coder',
'confirmed',
'editinterface',
'editor',
'editprotected',
'eliminator',
'epcampus',
'epcoordinator',
'epinstructor',
'eponline',
'filemover',
'flood',
'founder',
'global-ipblock-exempt',
'import',
'inactive',
'interface_editor',
'ipblock-exempt',
'oversight',
'patroller',
'recursive-export',
'researcher',
'reviewer',
'rollbacker',
'steward',
'suppress',
'svnadmins',
'sysadmin',
'sysop',
'test-sysop',
'translate-proofr',
'translationadmin',
'transwiki',
'trusted',
'upwizcampeditors',
'user'
],
function ( e ) {
return 'group-' + e + '-member';
} )
).join( '|' )
} )
.done( function ( result ) {
var dateDiff;
$.each( result.query.allmessages, function () {
if ( this[ '*' ] ) {
mw.messages.set( this.name, this[ '*' ] );
}
} );
dateDiff = function ( date, precision, ago ) {// state-of-the-art function for date differences!
var labels = [
'years',
'months',
'weeks',
'days',
'hours',
'minutes',
'seconds'
],
mult = [ 12, 4.34, 7, 24, 60, 60, 1000 ],
diff = new Date() - date,
message = [];
$.each( mult, function ( i ) {
if ( i <= precision || message.length === 0 ) {
var f = parseInt( mult.slice( i ).reduce( function ( a, b ) {
return a * b;
} ) ),
fl = Math.floor( diff / f );
if ( fl > 0 ) {
message.push( mw.message( labels[ i ], fl ).text() );
diff -= fl * f;
}
}
} );
if ( message.length > 0 ) {
message = mw.language.listToText( message );
if ( ago === true ) {
message = mw.message( 'ago', message ).text();
}
} else {
message = mw.message( 'just-now' ).text();
}
return message;
};
api.get( {
action: 'query',
list: 'users|usercontribs',
maxage: 300,
usprop: 'blockinfo|editcount|gender|registration|groups',
ususers: user,
ucuser: user,
ucprop: 'timestamp',
uclimit: 1
} )
.done( function ( data ) {
var query = data.query,
user = query.users[ 0 ],
userDesc;
if ( user.missing !== undefined || user.invalid !== undefined ) {
// invalid/anonymous user
if ( mw.util.isIPv4Address( user.name ) ) {
userDesc = 'anonymous IPv4 user';
} else if ( mw.util.isIPv6Address( user.name ) ) {
userDesc = 'anonymous IPv6 user';
} else {
userDesc = 'unspecified user';
}
userDesc = 'A' + ( /^[aeio]/i.test( userDesc ) ? 'n' : '' ) + ' ' + userDesc;
} else {
var gender = user.gender !== undefined ? user.gender : '',
groups = $.map(
$( user.groups ).not( [ '*', 'user', 'autoconfirmed' ] ),
function ( e ) {
var msgKey = 'group-' + e + '-member';
return mw.messages.exists( msgKey ) ? mw.message( msgKey, gender ).text() : e;
}
);
userDesc = groups.length > 0 ? mw.language.listToText( groups ) : ( user.blockedby !== undefined ? 'user' : 'registered user' );
if ( user.blockedby !== undefined ) {
userDesc = $( '<span>' ).append( 'A ' )
.append(
$( '<a>' )
.text( 'blocked' )
.attr( 'href', mw.util.getUrl( 'Special:Log', { type: 'block', page: user.name } ) )
).append( ' ' + userDesc );
} else {
userDesc = 'A' + ( /^[aeio]/i.test( userDesc ) ? 'n' : '' ) + ' ' + userDesc;
}
var regDate = new Date( user.registration );
if ( user.registration === null ) {
console.warn( 'UserInfo.js: cannot determine user\'s registration timestamp' );
}
var lastContribDate = query.usercontribs.length > 0 ? new Date( query.usercontribs[ 0 ].timestamp ) : null;
if ( gender && gender !== '' ) {
$( '<span>' )
.text( gender === 'male' ? '\u2642' : ( gender === 'female' ? '\u2640' : '' ) )
.css( {
paddingLeft: '0.25em',
fontFamily: '"Lucida Grande","Lucida Sans Unicode",sans-serif',
fontSize: '1em'
} )
.appendTo( '#firstHeading' );
}
var userActiveKeys = {
inactive: [ 'c73535', 'c33003' ],
uncertain: [ '949494', '7e7e7e' ],
active: [ '6bc431', '1fbf00' ]
},
userActiveKey = 'inactive';
if ( lastContribDate !== null && user.blockedby === undefined ) {
if ( new Date() - lastContribDate < 120000 ) {
userActiveKey = 'active';
} else if ( new Date() - lastContribDate < 3600000 ) {
userActiveKey = 'uncertain';
}
}
var userActiveColors = userActiveKeys[ userActiveKey ],
userActiveGradient = 'radial-gradient(center,ellipse cover,#' + userActiveColors.join( ',#' ) + ')',
isBot = user.groups.indexOf( 'bot' ) !== -1,
userActiveMessage = 'this ' + ( isBot ? 'bot' : 'user' ) + ' is ';
if ( user.blockedby !== undefined ) {
userActiveMessage += 'blocked';
} else if ( userActiveKey === 'uncertain' ) {
userActiveMessage += 'probably inactive';
} else if ( isBot && userActiveKey === 'active' ) {
userActiveMessage += 'running';
} else {
userActiveMessage += userActiveKey;
}
userActiveMessage += ' at the moment';
$( '<span>' )
.attr( 'title', userActiveMessage )
.css( {
borderRadius: '100%',
height: '.8em',
width: '.8em',
marginRight: '.3em',
display: 'inline-block',
lineHeight: 0,
background: '#' + userActiveColors[ 0 ]
} )
.css( 'background', '-webkit-' + userActiveGradient )
.css( 'background', '-moz-' + userActiveGradient )
.css( 'background', '-ms-' + userActiveGradient )
.css( 'background', '-o-' + userActiveGradient )
.css( 'background', userActiveGradient )
.prependTo( '#firstHeading' );
userDesc = $( '<span>' ).append( userDesc )
.append( ', ' + ( user.registration !== null ? dateDiff( regDate, 2 ) + ' old, ' : '' ) + 'with ' )
.append(
$( '<a>' )
.text(
mw.message( 'usereditcount', user.editcount ).text()
)
.attr( 'href', '//tools.wmflabs.org/xtools/pcount/?' +
$.param( {
name: user.name,
lang: siteData[ 0 ],
wiki: siteData[ 1 ]
} )
)
)
.append(
lastContribDate !== null ? [
'. Last edited ',
$( '<a>' )
.text( dateDiff( lastContribDate, 2, true ) )
.attr( 'href', mw.util.getUrl( 'Special:Contributions/' + user.name ) )
] : ''
);
}
$( '#siteSub' ).show().prepend( '. ' ).prepend( userDesc );
} );
} );
} );
} );