User:Anomie/useridentifier.js

/* If you want to use this script, simply add the following line to your monobook.js:

importScript('User:Anomie/useridentifier.js'); // Linkback: User:Anomie/useridentifier.js


 * (Please keep the comment so I can see how many people use this).

var UserIdentifier={ images:{ '**':'//upload.wikimedia.org/wikipedia/commons/thumb/7/77/Wikipedia_svg_logo.svg/20px-Wikipedia_svg_logo.svg.png', 'bot':'//upload.wikimedia.org/wikipedia/commons/thumb/5/5d/Crystal_Clear_action_run.png/20px-Crystal_Clear_action_run.png', 'sysop':'//upload.wikimedia.org/wikipedia/commons/thumb/e/e0/Mop.svg/20px-Mop.svg.png', 'bureaucrat':'//upload.wikimedia.org/wikipedia/commons/thumb/a/ac/Human-preferences-desktop.svg/20px-Human-preferences-desktop.svg.png', 'checkuser':'//upload.wikimedia.org/wikipedia/commons/thumb/1/1e/Gnome-searchtool.svg/20px-Gnome-searchtool.svg.png', 'reviewer':'//upload.wikimedia.org/wikipedia/commons/thumb/a/a0/Wikipedia_Reviewer.svg/20px-Wikipedia_Reviewer.svg.png', 'accountcreator':'//upload.wikimedia.org/wikipedia/commons/thumb/5/5a/Wikipedia_Accountcreators_v2.svg/20px-Wikipedia_Accountcreators_v2.svg.png', 'suppress':'//upload.wikimedia.org/wikipedia/commons/thumb/0/06/Oversight_logo.png/20px-Oversight_logo.png', 'rollbacker':'//upload.wikimedia.org/wikipedia/commons/thumb/d/df/Wikipedia_Rollback.svg/20px-Wikipedia_Rollback.svg.png', 'filemover':'//upload.wikimedia.org/wikipedia/commons/thumb/8/8d/Wikipedia_File_mover.svg/20px-Wikipedia_File_mover.svg.png', 'autoreviewer':'//upload.wikimedia.org/wikipedia/commons/thumb/a/a2/Wikipedia_Autopatrolled.svg/20px-Wikipedia_Autopatrolled.svg.png', 'abusefilter':'//upload.wikimedia.org/wikipedia/commons/thumb/6/64/Wikipedia-Crystal_clear-advancedsetting.png/20px-Wikipedia-Crystal_clear-advancedsetting.png', 'templateeditor':'//upload.wikimedia.org/wikipedia/commons/thumb/4/41/Wikipedia_Template_editor_icon_%281%29.svg/20px-Wikipedia_Template_editor_icon_%281%29.svg.png', 'massmessage-sender':'//upload.wikimedia.org/wikipedia/commons/thumb/d/d5/Wikipedia_mass_messenger.svg/20px-Wikipedia_mass_messenger.svg.png', 'extendedmover':'//upload.wikimedia.org/wikipedia/commons/thumb/4/4b/Wikipedia_page_mover.svg/20px-Wikipedia_page_mover.svg.png', 'patroller':'//upload.wikimedia.org/wikipedia/commons/thumb/5/57/Wikipedia_New_page_reviewer.svg/20px-Wikipedia_New_page_reviewer.svg.png', 'eventcoordinator': '//upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Wikipedia_Event_coordinator.svg/20px-Wikipedia_Event_coordinator.svg.png', 'interface-admin': '//upload.wikimedia.org/wikipedia/commons/thumb/e/eb/Wikipedia_Interface_administrator.svg/20px-Wikipedia_Interface_administrator.svg.png' },   gimages:{ 'steward':'//upload.wikimedia.org/wikipedia/commons/thumb/7/75/Wikimedia_Community_Logo.svg/20px-Wikimedia_Community_Logo.svg.png', 'Global_rollback': '//upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Meta-Wiki_Global_rollback-2000px.png/20px-Meta-Wiki_Global_rollback-2000px.png', 'global-rollbacker': '//upload.wikimedia.org/wikipedia/commons/thumb/a/a1/Meta-Wiki_Global_rollback-2000px.png/20px-Meta-Wiki_Global_rollback-2000px.png', 'global-sysop' : '//upload.wikimedia.org/wikipedia/commons/thumb/5/57/Meta-Wiki_Global_sysop-2000px.png/20px-Meta-Wiki_Global_sysop-2000px.png', 'Global_sysops' : '//upload.wikimedia.org/wikipedia/commons/thumb/5/57/Meta-Wiki_Global_sysop-2000px.png/20px-Meta-Wiki_Global_sysop-2000px.png' },

make_callback:function(name){ var users=null; var globaluserinfo=null; var lastedit=null; return function(r){ if(!r.query) { mw.log.error('Bad response'); return; }           if(r.query.users){ if(r.query.users.length!=1) { mw.log.error('Bad response'); return; }               users=r.query.users[0]; }           if(r.query.usercontribs){ lastedit=r.query.usercontribs.length?r.query.usercontribs[0].timestamp:'never'; }           if(r.query.globaluserinfo){ globaluserinfo=r.query.globaluserinfo; }           if(!users || !globaluserinfo || !lastedit) return; r=users; if(r.name!=name) return; r.emailable=(typeof(r.emailable)!='undefined'); var d=document.createElement('DIV'); var d2=document.createElement('DIV'); d2.style.display='inline-block'; d2.style.styleFloat='left'; d2.style.overflow='visible'; d2.style.cursor='pointer'; d2.className='metadata'; d2.title='Registered: '+r.registration+'\nLast edit: '+lastedit+'\nEdits: '+r.editcount+'\nEmailable: '+(r.emailable?'yes':'no')+'\nGender: '+r.gender; d2.onclick=function{ d.style.display=d.style.display?'':'none'; }; d.style.display='none'; d.style.position='absolute'; d.style.background='#eef'; d.style.border='1px solid black'; d.style.padding='3px'; d.style.zIndex=1000; d.appendChild(document.createTextNode('Registered: '+r.registration)); d.appendChild(document.createElement('BR')); d.appendChild(document.createTextNode('Last edit: '+lastedit)); d.appendChild(document.createElement('BR')); d.appendChild(document.createTextNode('Edits: '+r.editcount)); d.appendChild(document.createElement('BR')); d.appendChild(document.createTextNode('Emailable: '+(r.emailable?'yes':'no'))); d.appendChild(document.createElement('BR')); d.appendChild(document.createTextNode('Gender: '+r.gender)); if(r.groups && r.groups.length>0){ d.appendChild(document.createElement('BR')); d.appendChild(document.createTextNode('Groups: '+r.groups.join(', '))); for(var j=r.groups.length-1; j>=0; j--){ if(UserIdentifier.images[r.groups[j]]){ var i=document.createElement('IMG'); i.src=UserIdentifier.images[r.groups[j]]; i.width=20; i.height=20; i.style.cursor='pointer'; i.title=r.groups[j]; d2.appendChild(i); }               }                d2.title+='\nGroups: '+r.groups.join(', '); }           if(globaluserinfo.groups && globaluserinfo.groups.length>0){ d.appendChild(document.createElement('BR')); d.appendChild(document.createTextNode('Global groups: '+globaluserinfo.groups.join(', '))); for(var j=globaluserinfo.groups.length-1; j>=0; j--){ if(UserIdentifier.gimages[globaluserinfo.groups[j]]){ var i=document.createElement('IMG'); i.src=UserIdentifier.gimages[globaluserinfo.groups[j]]; i.width=20; i.height=20; i.style.cursor='pointer'; i.title=globaluserinfo.groups[j]; d2.appendChild(i); }               }                d2.title+='\nGlobal groups: '+globaluserinfo.groups.join(', '); }           if(!d2.firstChild){ var i=document.createElement('IMG'); i.src=UserIdentifier.images['**']; i.width=20; i.height=20; i.style.cursor='pointer'; d2.appendChild(i); }           var i=document.createElement('SPAN'); i.style.fontSize='16px'; if(r.gender=='male'){ i.appendChild(document.createTextNode('♂')); i.style.color='#89CFF0'; } else if(r.gender=='female'){ i.appendChild(document.createTextNode('♀')); i.style.color='#F4C2C2'; }           if(i.firstChild) d2.insertBefore(i, d2.firstChild); d.onclick=function{ d.style.display='none'; }; var h=document.getElementById('firstHeading'); h.insertBefore(d2,h.firstChild); // Sigh, vector 2022 is complicated. This is the best place I could find to insert it without having to override all the fonts and everything. var hi=document.querySelector('.vector-page-toolbar'); if(hi){ hi.insertBefore(d,hi.firstChild); } else { h.parentNode.insertBefore(d,h.nextSibling); }           if(window.CascadeTopicons) CascadeTopicons; };   },

IDUser:function(name){ mw.loader.using('mediawiki.util', function{           name = decodeURIComponent(name).replace(/_/g, ' ');            var cb=UserIdentifier.make_callback(name);            $.ajax({ url:mw.util.wikiScript('api'), dataType:'json', type:'POST', data:{ format:'json', action:'query', list:'users', ususers:name, usprop:'editcount|groups|registration|emailable|gender', meta:'globaluserinfo', guiuser:name, guiprop:'groups' },               success:cb, error:function(xhr,textStatus,errorThrown){ throw new Error('AJAX error: '+textStatus+' '+errorThrown); }           });            $.ajax({ url:mw.util.wikiScript('api'), dataType:'json', type:'POST', data:{ format:'json', action:'query', list:'usercontribs', ucuser:name, ucprop:'timestamp', uclimit:1 },               success:cb, error:function(xhr,textStatus,errorThrown){ throw new Error('AJAX error: '+textStatus+' '+errorThrown); }           });            mw.util.addPortletLink('p-cactions',mw.util.wikiScript+'?title=Special%3AContributions&target='+encodeURIComponent(name),'Contribs');            mw.util.addPortletLink('p-cactions',mw.util.wikiScript+'?title=Special%3ACentralAuth/'+encodeURIComponent(name),'SUL');        }); },   onLoad:function{ if(mw.config.get('wgNamespaceNumber')==2 || mw.config.get('wgNamespaceNumber')==3){ var u=mw.config.get('wgTitle'); var i=u.indexOf('/'); if(i>0) u=u.substr(0,i); UserIdentifier.IDUser(u); } else if(mw.config.get('wgCanonicalNamespace')=='Special' && mw.config.get('wgCanonicalSpecialPageName')=='Contributions'){ var a=document.querySelector( '#contentSub a' ); if(!a) return; var u=a.href.match(/\/wiki\/User:([^\/]+)/); if(u) UserIdentifier.IDUser(u[1]); u=a.href.match(/[?&]title=User:([^&]+)/); if(u) UserIdentifier.IDUser(u[1]); } else if(mw.config.get('wgCanonicalNamespace')=='Special' && mw.config.get('wgCanonicalSpecialPageName')=='Log'){ var u=['', $('#mw-input-user input')[0].defaultValue]; if(!u[1]) u=$('#mw-input-page input')[0].defaultValue.match(/^User:([^\/]+)/); if(u) UserIdentifier.IDUser(u[1]); }   } };

$(document).ready(UserIdentifier.onLoad);