Etdiyiniz dəyişikliklərin yayımlanandan sonra effekt verməsi üçün brauzerinizin keşini təmizləməyə ehtiyacınız ola bilər. Bunun üçün Chrome , Firefox , Edge , yaxud Safari istifadəçisisinizsə, klaviaturanızın Shift düyməsini sıxaraq brauzerin ⟳ səhifə yeniləmək düyməsini klik edə bilərsiniz.
// Modernləşdirilmiş istifadəçi məlumatı qadceti (ES6 uyğun)
( function () {
var numFmt = new Intl . NumberFormat ( 'az' , { maximumFractionDigits : 0 });
var relFmt = new Intl . RelativeTimeFormat ( 'az' , { numeric : 'auto' });
function fmtCount ( n , unit ) {
return numFmt . format ( n ) + '\u00A0' + unit ;
}
function fmtAgo ( date ) {
var delta = ( Date . now () - date . getTime ()) / 1000 ;
var units = [
{ name : 'year' , secs : 31536000 },
{ name : 'month' , secs : 2592000 },
{ name : 'week' , secs : 604800 },
{ name : 'day' , secs : 86400 },
{ name : 'hour' , secs : 3600 },
{ name : 'minute' , secs : 60 },
{ name : 'second' , secs : 1 }
];
for ( var i = 0 ; i < units . length ; i ++ ) {
var u = units [ i ];
if ( Math . abs ( delta ) >= u . secs || u . name === 'second' ) {
var value = Math . floor ( - delta / u . secs );
return relFmt . format ( value , u . name );
}
}
}
var ns = mw . config . get ( 'wgNamespaceNumber' );
var title = mw . config . get ( 'wgTitle' );
if ([ 2 , 3 ]. indexOf ( ns ) === - 1 || title . indexOf ( '/' ) !== - 1 ) return ;
mw . loader . using ( 'mediawiki.util' ). then ( function () {
var et = encodeURIComponent ( title );
var url = mw . config . get ( 'wgScriptPath' ) + '/api.php?' + new URLSearchParams ({
format : 'json' ,
action : 'query' ,
list : 'users|usercontribs' ,
usprop : 'blockinfo|editcount|gender|registration|groups' ,
uclimit : '1' ,
ucprop : 'timestamp' ,
ususers : et ,
ucuser : et ,
meta : 'allmessages' ,
amprefix : 'group' ,
amincludelocal : '1' ,
amlang : 'az'
}). toString ();
fetch ( url ). then ( function ( res ) {
return res . json ();
}). then ( function ( data ) {
var query = data . query ;
if ( ! query ) return ;
var user = query . users [ 0 ];
var contrib = query . usercontribs [ 0 ] || {};
var invalid = user . invalid ;
var missing = user . missing ;
var groups = user . groups || [];
var editcount = user . editcount || 0 ;
var registration = user . registration ;
var blockedby = user . blockedby ;
var blockexpiry = user . blockexpiry ;
var gender = user . gender ;
var lastTs = contrib . timestamp ;
var regDate = registration ? new Date ( registration ) : null ;
var lastDate = lastTs ? new Date ( lastTs ) : null ;
var parts = [];
if ( blockedby ) {
var forever = blockexpiry === 'infinite' ;
parts . push ( '<a href="' + mw . util . getUrl ( 'Special:Log' , {
page : 'User:' + user . name ,
type : 'block'
}) + '">' + ( forever ? 'müddətsiz' : 'müvəqqəti' ) + ' bloklanmış</a>' );
}
if ( missing ) {
parts . push ( 'istifadəçi adı qeydiyyatda yoxdur' );
} else if ( invalid ) {
parts . push (
mw . util . isIPv4Address ( user . name ) ? 'anonim IPv4 istifadəçisi' :
mw . util . isIPv6Address ( user . name ) ? 'anonim IPv6 istifadəçisi' :
'səhv istifadəçi adı'
);
} else {
var allMsg = query . allmessages || [];
var groupPages = {};
for ( var i = 0 ; i < allMsg . length ; i ++ ) {
var msg = allMsg [ i ];
var key = msg . name . replace ( 'grouppage-' , '' );
groupPages [ key ] = msg [ '*' ]. replace ( '{{ns:project}}:' , 'Vikipediya:' );
}
var IGNORED = [ '*' , 'user' , 'autoconfirmed' ];
function stripGender ( msg ) {
return msg . replace ( /\{\{GENDER:[^|}]+\|([^|}]+)(?:\|[^}]+)*\}\}/g , '$1' );
}
var shownGroups = groups . filter ( function ( g ) {
return IGNORED . indexOf ( g ) === - 1 ;
});
var names = shownGroups . map ( function ( g ) {
var msgObj = allMsg . find ( function ( m ) {
return m . name === 'group-' + g + '-member' ;
});
var raw = msgObj ? msgObj [ '*' ] : g ;
var label = stripGender ( raw );
if ( groupPages [ g ]) {
var href = mw . util . getUrl ( groupPages [ g ]);
return '<a href="' + href + '">' + label + '</a>' ;
}
return label ;
});
parts . push ( names . length ? names . join ( ' və ' ) : 'istifadəçi' );
}
if ( regDate ) {
parts . push ( '<a href="' + mw . util . getUrl ( 'Special:Log/newusers' , {
user : user . name ,
dir : 'prev' ,
limit : 1
}) + '">' + fmtAgo ( regDate ) + '</a> qeydiyyatdan keçib və' );
}
parts . push (
'<a href="//xtools.wmcloud.org/ec/' + mw . config . get ( "wgServerName" ) + '/' + et + '">' +
fmtCount ( editcount , 'yə sahibdir.' ) + '</a>'
);
if ( lastDate ) {
parts . push (
'Son sini <a href="' +
mw . util . getUrl ( 'Special:Contributions/' + user . name ) + '">' +
fmtAgo ( lastDate ) + '</a> edib'
);
}
var statusText = 'Bu ' + parts . join ( ' ' ) + '.' ;
var fh = document . querySelector ( '#firstHeading, #section-0' );
if ( ! fh ) return ;
if ( blockedby ) fh . classList . add ( 'ps-blocked' );
if ( invalid ) fh . classList . add ( 'ps-invalid' );
if ( ! invalid && ! missing ) fh . classList . add ( 'ps-registered' );
groups . forEach ( function ( g ) {
fh . classList . add ( 'ps-group-' + g );
});
var genderSym = gender === 'male' ? '♂' : gender === 'female' ? '♀' : '' ;
fh . insertAdjacentHTML ( 'beforeend' ,
'<span id="ps-gender-' + ( gender || 'unknown' ) + '" style="padding-left:.25em;font-size:.75em">' +
genderSym + '</span>'
);
var ss = document . getElementById ( 'siteSub' );
if ( ! ss ) {
var d = document . createElement ( 'div' );
d . id = 'siteSub' ;
d . textContent = 'Vikipediya, azad ensiklopediya' ;
document . getElementById ( 'bodyContent' ). insertBefore ( d , document . getElementById ( 'bodyContent' ). firstChild );
ss = d ;
}
ss . style . display = 'block' ;
ss . innerHTML = '<span id="ps-userinfo">' + statusText + '</span> ' + ss . innerHTML + '.' ;
});
});
})();