Jump to content
Wikipedia The Free Encyclopedia

User:PleaseStand/userinfo.js

From Wikipedia, the free encyclopedia
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump.
This code will be executed when previewing this page.
This user script seems to have a documentation page at User:PleaseStand/userinfo.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
 // based on http://en.wikipedia.org/wiki/User:Fran Rogers/dimorphism.js
 // and on http://en.wikipedia.org/wiki/User:Splarka/sysopdectector.js

 functionUserinfoJsFormatQty(qty,singular,plural){
 returnString(qty).replace(/\d{1,3}(?=(\d{3})+(?!\d))/g,"$&,")+"\u00a0"+(qty==1?singular:plural);
 }

 functionUserinfoJsFormatDateRel(old){
 // The code below requires the computer's clock to be set correctly.
 varage=newDate().getTime()-old.getTime();
 varageNumber,ageRemainder,ageWords;
 if(age<60000){
 // less than one minute old
 ageNumber=Math.floor(age/1000);
 ageWords=UserinfoJsFormatQty(ageNumber,"second","seconds");
 }elseif(age<3600000){
 // less than one hour old
 ageNumber=Math.floor(age/60000);
 ageWords=UserinfoJsFormatQty(ageNumber,"minute","minutes");
 }elseif(age<86400000){
 // less than one day old
 ageNumber=Math.floor(age/3600000);
 ageWords=UserinfoJsFormatQty(ageNumber,"hour","hours");
 ageRemainder=Math.floor((age-ageNumber*3600000)/60000);
 }elseif(age<604800000){
 // less than one week old
 ageNumber=Math.floor(age/86400000);
 ageWords=UserinfoJsFormatQty(ageNumber,"day","days");
 }elseif(age<2592000000){
 // less than one month old
 ageNumber=Math.floor(age/604800000);
 ageWords=UserinfoJsFormatQty(ageNumber,"week","weeks");
 }elseif(age<31536000000){
 // less than one year old
 ageNumber=Math.floor(age/2592000000);
 ageWords=UserinfoJsFormatQty(ageNumber,"month","months");
 }else{
 // one year or older
 ageNumber=Math.floor(age/31536000000);
 ageWords=UserinfoJsFormatQty(ageNumber,"year","years");
 ageRemainder=
 Math.floor((age-ageNumber*31536000000)/2592000000);
 if(ageRemainder){
 ageWords+=" "+
 UserinfoJsFormatQty(ageRemainder,"month","months");
 }
 }
 returnageWords;
 }

 // If on a user or user talk page, and not a subpage...
 if((mw.config.get("wgNamespaceNumber")==2||mw.config.get("wgNamespaceNumber")==3)&&!(/\//.test(mw.config.get("wgTitle")))){
 // add a hook to...
 mw.loader.using(['mediawiki.util'],function(){$(function(){
 // Request the user's information from the API.
 // Note that this is allowed to be up to 5 minutes old.
 varet=encodeURIComponent(mw.config.get("wgTitle"));

 $.getJSON(mw.config.get("wgScriptPath")+"/api.php?format=json&action=query&list=users|usercontribs&usprop=blockinfo|editcount|gender|registration|groups&uclimit=1&ucprop=timestamp&ususers="+et+"&ucuser="+et+"&meta=allmessages&amprefix=grouppage-&amincludelocal=1")
 .done(function(query){
 // When response arrives extract the information we need.
 if(!query.query){return;}// Suggested by Gary King to avoid JS errors --PS 2010年08月25日
 query=query.query;
 varuser,invalid,missing,groups,groupPages={},editcount,registration,blocked,gender,lastEdited;
 try{
 user=query.users[0];
 invalid=typeofuser.invalid!="undefined";
 missing=typeofuser.missing!="undefined";
 groups=(typeofuser.groups=="object")?user.groups:[];
 editcount=(typeofuser.editcount=="number")?user.editcount:null;
 registration=(typeofuser.registration=="string")?
 newDate(user.registration):null;
 blocked=typeofuser.blockedby!="undefined";
 gender=(typeofuser.gender=="string")?user.gender:null;
 lastEdited=(typeofquery.usercontribs[0]=="object")&&
 (typeofquery.usercontribs[0].timestamp=="string")?
 newDate(query.usercontribs[0].timestamp):null;
 for(varam=0;am<query.allmessages.length;am++){
 groupPages[query.allmessages[am]["name"].replace("grouppage-","")]=query.allmessages[am]["*"].replace("{{ns:project}}:","Project:");
 }
 }catch(e){
 return;// Not much to do if the server is returning an error (e.g. if the username is malformed).
 }

 // Format the information for on-screen display

 varstatusText="";
 varipUser=false;
 varipv4User=false;
 varipv6User=false;

 // User status
 if(blocked){
 statusText+="<a href=\""+mw.config.get("wgScriptPath")+
 "/index.php?title=Special:Log&amp;page="+
 encodeURIComponent(mw.config.get("wgFormattedNamespaces")[2]+":"+user.name)+
 "&amp;type=block\">blocked</a> ";
 }
 if(missing){
 statusText+="username not registered";
 }elseif(invalid){
 ipv4User=mw.util.isIPv4Address(user.name);
 ipv6User=mw.util.isIPv6Address(user.name);
 ipUser=ipv4User||ipv6User;
 if(ipv4User){
 statusText+="anonymous IPv4 user";
 }elseif(ipv6User){
 statusText+="anonymous IPv6 user";
 }else{
 statusText+="invalid username";
 }
 }else{
 // User is registered and may be in a privileged group. Below we have a list of user groups.
 // Only need the ones different from the software's name (or ones to exclude), though.
 varfriendlyGroupNames={
 // Exclude implicit user group information provided by MW 1.17 --PS 2010年02月17日
 '*':false,
 'user':false,
 'autoconfirmed':false,
 sysop:"administrator",
 accountcreator:"account creator",
 'import':"importer",
 transwiki:"transwiki importer",
 'ipblock-exempt':"IP block exemption",
 confirmed:"confirmed user",
 abusefilter:"edit filter manager",
 'abusefilter-helper':"edit filter helper",
 autoreviewer:"autopatrolled user",
 filemover:"file mover",
 'massmessage-sender':"mass message sender",
 templateeditor:"template editor",
 extendedconfirmed:"extended confirmed user",
 extendedmover:"page mover",
 reviewer:"pending changes reviewer",
 suppress:"oversighter",
 patroller:"new page reviewer",
 copyviobot:"copyright violation bot",
 eventcoordinator:"event coordinator",
 'interface-admin':"interface administrator",
 temp:"temporary user"
 };

 varfriendlyGroups=[];
 for(vari=0;i<groups.length;++i){
 vars=groups[i];
 vart=friendlyGroupNames.hasOwnProperty(s)?friendlyGroupNames[s]:s;
 if(t){
 if(groupPages.hasOwnProperty(s)){
 friendlyGroups.push("<a href=\"/wiki/"+encodeURIComponent(groupPages[s])+"\">"+t+"</a>");
 }else{
 friendlyGroups.push(t);
 }
 }
 }
 switch(friendlyGroups.length){
 case0:
 // User not in a privileged group
 // Changed to "registered user" by request of [[User:Svanslyck]]
 // --PS 2010年05月16日

 // statusText += "user";
 if(blocked){
 statusText+="user";
 }else{
 statusText+="registered user";
 }
 break;
 case1:
 statusText+=friendlyGroups[0];
 break;
 case2:
 statusText+=friendlyGroups[0]+" and "+friendlyGroups[1];
 break;
 default:
 statusText+=friendlyGroups.slice(0,-1).join(", ")+
 ", and "+friendlyGroups[friendlyGroups.length-1];
 break;
 }
 }

 // Registration date
 if(registration){
 varfirstLoggedUser=newDate("22:16, 7 September 2005");// When the [[Special:Log/newusers]] was first activated
 if(registration>=firstLoggedUser){
 statusText+=", <a href='"+mw.config.get("wgScriptPath")+
 "/index.php?title=Special:Log&amp;type=newusers&amp;dir=prev&amp;limit=1&amp;user="+
 et+"'>"+UserinfoJsFormatDateRel(registration)+"</a> old";
 }else{
 statusText+=", <a href='"+mw.config.get("wgScriptPath")+
 "/index.php?title=Special:ListUsers&amp;limit=1&amp;username="+
 et+"'>"+UserinfoJsFormatDateRel(registration)+"</a> old";
 }
 }

 // Edit count
 if(editcount!==null){
 statusText+=", with "+
 "<a href=\"//tools.wmflabs.org/xtools-ec/?user="+
 encodeURIComponent(user.name)+
 "&amp;project=en.wikipedia.org&amp;uselang=en\">"+
 UserinfoJsFormatQty(editcount,"edit","edits")+"</a>";
 }

 // Prefix status text with correct article
 if("AEIOaeio".indexOf(statusText.charAt(statusText.indexOf('>')+1))>=0){
 statusText="An "+statusText;
 }else{
 statusText="A "+statusText;
 }

 // Add full stop to status text
 statusText+=".";

 // Last edited --PS 2010年06月27日
 // Added link to contributions page --PS 2010年07月03日
 if(lastEdited){
 statusText+=" Last edited <a href=\""+mw.config.get("wgArticlePath").replace("1ドル","Special:Contributions/"+encodeURIComponent(user.name))+"\">"+UserinfoJsFormatDateRel(lastEdited)+" ago</a>.";
 }

 // Show the correct gender symbol
 varfh=document.getElementById("firstHeading")||
 document.getElementById("section-0");
 if(!fh)return;// e.g. Minerva user talk pages
 // Add classes for blocked, registered, and anonymous users
 varnewClasses=[];
 if(blocked){
 newClasses.push("ps-blocked");
 }
 if(ipUser){
 newClasses.push("ps-anonymous");
 }elseif(invalid){
 newClasses.push("ps-invalid");
 }else{
 newClasses.push("ps-registered");
 }
 fh.className+=(fh.className.length?" ":"")+groups.map(function(s){
 return"ps-group-"+s;
 }).concat(newClasses).join(" ");
 vargenderSpan=document.createElement("span");
 genderSpan.id="ps-gender-"+(gender||"unknown");
 genderSpan.style.paddingLeft="0.25em";
 genderSpan.style.fontFamily='"Lucida Grande", "Lucida Sans Unicode", "sans-serif"';
 genderSpan.style.fontSize="75%";
 vargenderSymbol;
 switch(gender){
 case"male":genderSymbol="\u2642";break;
 case"female":genderSymbol="\u2640";break;
 default:genderSymbol="";break;
 }
 genderSpan.appendChild(document.createTextNode(genderSymbol));
 fh.appendChild(genderSpan);

 // Now show the other information. Non-standard? Yes, but it gets the job done.
 // Add a period after the tagline when doing so. --PS 2010年07月03日

 varss=document.getElementById("siteSub");
 if(!ss){
 ss=document.createElement("div");
 ss.id="siteSub";
 ss.innerHTML="From Wikipedia, the free encyclopedia";
 varbc=document.getElementById("bodyContent");
 bc.insertBefore(ss,bc.firstChild);
 }
 ss.innerHTML='<span id="ps-userinfo">'+statusText+'</span> '+ss.innerHTML+'.';
 ss.style.display="block";
 });
 });});
 }

AltStyle によって変換されたページ (->オリジナル) /