MediaWiki:Gadget-adminHighlight.js

Матеріал з Terraria Wiki
Перейти до навігації Перейти до пошуку

Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
  • Opera: натисніть Ctrl-F5
$(document).ready( function() {

	mw.loader.using( [ 'mediawiki.api' ] ).done( function () {
		var api = new mw.Api();
		// get local namespace
		api.parse( "{{ns:User}}" ).done( function (result) {
			var userNamespace = result.match( /<p>(.*)[\n]<\/p>/ )[1];
			var linkTarget = (
				mw.config.get( 'wgArticlePath' ).replace('$1','') + 
				'(' + userNamespace.replaceAll(' ','_') + '|User):'
				);
			// user name from link
			var linkTemplate = new RegExp( linkTarget + '[ _]*([^?/]+)', 'i' );
			// if link isn't subpage
			var linkNegativeTarget = new RegExp( linkTarget + '[^?]*\/[^?]*', 'i' );
			// if link is user link
			var linkTarget = new RegExp( linkTarget, 'i' );
			// get users names
			var users = {};
			// get user links
			var links = [];
			$('#mw-content-text a[href]').each( function() {
				var href = decodeURI( $(this).attr('href') ).replaceAll(' ','_');
				// if link has "/wiki/User:" (for en wiki as example)
				if ( href.match( linkTarget ) && !href.match( linkNegativeTarget ) ) {
					var user = href.match( linkTemplate )[2];
					users[ user[0].toUpperCase() + user.slice(1) ] = undefined;
					links.push( $(this) );
				}
			});

			// if no user links
			if ( !links.length ) { return; }

			// get admins user names
			var admins = [];
			api.get( {
				action: 'query',
				list: 'users',
				ususers: Object.keys(users).join('|'),
				usprop: [ 'groups' ]
			}).done( function(data) {
				var users = data.query.users;
				for ( var user in users ) {
					var user = users[user];
					if ( 'groups' in user ) {
						// if user is admin or interface admin
						if ( user.groups.includes( 'sysop' ) || user.groups.includes( 'interface-admin' ) ) {
							admins.push( user.name.replaceAll(' ','_') );
						}
					}
				}

				// if no admins
				if ( !admins.length ) { return; }

				// adding class
				for ( var link in links ) {
					var link = links[link];
					var user = decodeURI(link.attr('href')).replaceAll(' ','_').match( linkTemplate )[2];
					if ( admins.includes( user[0].toUpperCase() + user.slice(1) ) ) {
						link.addClass( 'admin-highlight' );
					}
				}
			});
		});
	});
});