User:Bugghost/Scripts/UserRoleIndicator.js: Difference between revisions

Content deleted Content added
hand writing icon wasn't displaying correctly in my version of firefox - ๐Ÿ“š seems to appear better. also swapping NPP to ๐Ÿงบ (rather than ๐Ÿงฝ)
adding ๐Ÿ•ต๏ธ for check users
ย 
(10 intermediate revisions by the same user not shown)
Line 13:
this.mw = mw;
this.window = window;
this.linksChecked = new Set([]);
}
}
 
async execute() {
// //console.time("get usernamesuri");
const defaultRoleInfoLookup = {
// console.time("get usernames")
wmf: ['๐ŸŒ', 'Wikimedia Foundation (WMF)'],
bot: ['๐Ÿค–', 'Bot'],
this.checkForPermission( this. stewards,: ['๐Ÿฉบ', 'Steward or Ombud' );],
this.checkForPermission( this. arbcom,: ['โš–๏ธ', 'Arbitration Committee member' );],
this.checkForPermission( this. bureaucrats,: ['๐Ÿ’ผโ€๐Ÿ’ผ', 'Bureaucrat' );],
checkUsers: ['๐Ÿ•ต๏ธ๏ธ๏ธ๏ธ', 'Check User'],
this.checkForPermission( this. admins,: ['๐Ÿงน', 'Admin' );],
formerAdmins: ['๐Ÿšฌ', 'Former Admin'],
this.checkForPermission( this. newPageReviewers,: ['๐Ÿงบ', 'New page reviewer' );],
this.checkForPermission( this. tenThousandEdits,: ['๐Ÿฅ‡๐Ÿ“š', 'More than 10,000 edits' );],
this.checkForPermission( this. extendedConfirmed,: ['๐Ÿ“š๐Ÿ“˜', 'Extended confirmed' );],
lessThan500: ['๐Ÿฃ', 'Less than 500 edits'],
};
 
if(this.window.UserRoleIndicatorCustomLabels){
this.roleInfoLookup = { ...defaultRoleInfoLookup, ...window.UserRoleIndicatorCustomLabels };
}else{
this.roleInfoLookup = defaultRoleInfoLookup;
}
 
this.labelPosition = "after";
if(this.window.UserRoleIndicatorCustomPlacement){
this.labelPosition = this.window.UserRoleIndicatorCustomPlacement;
}
 
//console.time("get usernames")
await this.getUsernames();
// //console.timeEnd("get usernames")
this.addCSS('user-role-indicator', 'font-size: smaller; display: inline; background: #b7b9ff55; padding: 0.1em; border-radius: 5px; margin-left: 3px;')
this.addCSS('label-after', 'margin-left:3px;');
this.addCSS('label-before', 'margin-right:1px;margin-left:2px;');
 
const $links = this.$( '#article a, #bodyContent a, #mw_contentholder a' );
 
// console.time("linkloop")
$links.each( ( index, element ) => {
this.$link = this.$( element );
if(this.linksChecked.has(element)){
return;
}
 
this.linksChecked.add(element);
 
if ( !this.linksToAUser() ) {
return;
Line 37 โŸถ 72:
}
this.hasAdvancedPermissions = false;
this.addClassesAndHoverTextToLinkIfNeededaddRoleInfoIfNeeded();
} );
// console.timeEnd("linkloop")
 
//console.timeEnd("uri");
//console.log("-------");
}
 
Line 79 โŸถ 117:
 
async getUsernames() {
if(this.wmf){
return;
}
 
const dataString = await this.getWikitextFromCache( 'User:NovemBot/userlist.js' );
const dataJSON = JSON.parse( dataString );
Line 93 โŸถ 136:
// ...dataJSON['global-sysop'],
};
..this.bot = dataJSON.bot,;
this.stewards = dataJSON.steward;
this.arbcom = dataJSON.arbcom;
this.bureaucrats = dataJSON.bureaucrat;
this.admins = dataJSON.sysop;
this.formeradminscheckUsers = dataJSON.formeradmincheckuser;
this.formerAdmins = dataJSON.formeradmin;
this.newPageReviewers = dataJSON.patroller;
this.tenThousandEdits = dataJSON[ '10k' ];
this.extendedConfirmed = {
...dataJSON.extendedconfirmed,
...dataJSON.bot,
...dataJSON.productiveIPs
};
Line 229 โŸถ 273:
}
 
checkForPermissionaddRoleInfoIfAppropriate( listOfUsernames, classNamelabel, descriptionForHover ) {
if ( listOfUsernames[ this.user ] === 1 ) {
this.addRoleIcon( classNamelabel, descriptionForHover );
}
}
Line 240 โŸถ 284:
if ( !title || title.startsWith( 'User:' ) ) {
this.$link.attr( 'title', descriptionForHover );
 
this.$link.append($("<div class='user-role-indicator'>"+icon+"</div>"))
switch(this.labelPosition){
case "before":
this.$link.prepend($("<div class='user-role-indicator label-before'>"+icon+"</div>"))
break;
 
default:
// Defaults to "after"
this.$link.append($("<div class='user-role-indicator label-after'>"+icon+"</div>"))
break;
}
}
 
Line 246 โŸถ 300:
}
 
addRoleInfoIfNeeded() {
addClassesAndHoverTextToLinkIfNeeded() {
// highlight anybody with "WMF" in their name, case insensitive. this should not generate false positives because "WMF" is on the username blacklist. see https://meta.wikimedia.org/wiki/Title_blacklist
if ( this.user.match( /^[^/]*WMF/i ) ) {
this.addRoleIcon( '๐ŸŒ'this.roleInfoLookup.wmf[0], 'Wikimedia Foundation (WMF)'this.roleInfoLookup.wmf[1] );
}
 
// TODO: grab the order from an array, so I can keep checkForPermission and addCSS in the same order easily, lowering the risk of the HTML title="" being one thing, and the color being another
this.checkForPermissionaddRoleInfoIfAppropriate( this.wmf, '๐ŸŒ'this.roleInfoLookup.wmf[0], 'Wikimedia Foundation (WMF)' this.roleInfoLookup.wmf[1]);
this.addRoleInfoIfAppropriate( this.bot, this.roleInfoLookup.bot[0], this.roleInfoLookup.bot[1]);
this.checkForPermission( this.stewards, '๐Ÿฉบ', 'Steward or Ombud' );
this.addRoleInfoIfAppropriate( this.stewards, this.roleInfoLookup.stewards[0], this.roleInfoLookup.stewards[1]);
this.checkForPermission( this.arbcom, 'โš–๏ธ', 'Arbitration Committee member' );
this.addRoleInfoIfAppropriate( this.arbcom, this.roleInfoLookup.arbcom[0], this.roleInfoLookup.arbcom[1]);
this.checkForPermission( this.bureaucrats, '๐Ÿ’ผโ€', 'Bureaucrat' );
this.addRoleInfoIfAppropriate( this.bureaucrats, this.roleInfoLookup.bureaucrats[0], this.roleInfoLookup.bureaucrats[1]);
this.checkForPermission( this.admins, '๐Ÿงน', 'Admin' );
this.addRoleInfoIfAppropriate( this.checkUsers, this.roleInfoLookup.checkUsers[0], this.roleInfoLookup.checkUsers[1]);
this.checkForPermission( this.formeradmins, '๐Ÿšฌ', 'Former Admin' );
this.addRoleInfoIfAppropriate( this.admins, this.roleInfoLookup.admins[0], this.roleInfoLookup.admins[1]);
this.checkForPermission( this.newPageReviewers, '๐Ÿงบ', 'New page reviewer' );
this.addRoleInfoIfAppropriate( this.formerAdmins, this.roleInfoLookup.formerAdmins[0], this.roleInfoLookup.formerAdmins[1]);
this.checkForPermission( this.tenThousandEdits, '๐Ÿฅ‡', 'More than 10,000 edits' );
this.addRoleInfoIfAppropriate( this.newPageReviewers, this.roleInfoLookup.newPageReviewers[0], this.roleInfoLookup.newPageReviewers[1]);
this.checkForPermission( this.extendedConfirmed, '๐Ÿ“š', 'Extended confirmed' );
this.addRoleInfoIfAppropriate( this.tenThousandEdits, this.roleInfoLookup.tenThousandEdits[0], this.roleInfoLookup.tenThousandEdits[1]);
this.addRoleInfoIfAppropriate( this.extendedConfirmed, this.roleInfoLookup.extendedConfirmed[0], this.roleInfoLookup.extendedConfirmed[1]);
 
// If they have no perms, then they are non-EC, so <500 edits
if ( !this.hasAdvancedPermissions ) {
this.addRoleIcon("๐Ÿฃ"this.roleInfoLookup.lessThan500[0], "Less than 500 edits"this.roleInfoLookup.lessThan500[1]);
}
}
}
 
var userRoleIndicator = new UserRoleIndicator( $, mw, window )
 
// Fire after wiki content is added to the DOM, such as when first loading a page, or when a gadget such as the XTools gadget loads.
mw.hook( 'wikipage.content' ).add( async () => {
await mw.loader.using( [ 'mediawiki.util', 'mediawiki.Uri', 'mediawiki.Title' ], async () => {
await ( new UserRoleIndicator( $, mw, window ) )userRoleIndicator.execute();
} );
} );
Line 280 โŸถ 339:
mw.hook( 'postEdit' ).add( async () => {
await mw.loader.using( [ 'mediawiki.util', 'mediawiki.Uri', 'mediawiki.Title' ], async () => {
await ( new UserRoleIndicator( $, mw, window ) )userRoleIndicator.execute();
} );
} );