Fandom Developers Wiki
Advertisement

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/*
 * PiniginsUserInfo.js (c) 2017-2019, Maksim Pinigin
 * Creates the "Special:UserInfo" page, which allows you to view a little information about the user
 */

(function($, mw) {
	'use strict';
	var config = mw.config.get([
		'wgTitle',
		'wgSiteName',
		'wgNamespaceNumber',
		'wgRelevantUserName'
	]);

	if (!(
		(config.wgNamespaceNumber === -1 && config.wgTitle === 'UserInfo') ||
		(config.wgNamespaceNumber === 2 && config.wgRelevantUserName))) return;
	var input, info, msg;

	function addEntry(data, label, value, join) {
		var text = '';
		var v = data.query.users[0][value];
		if (v) {
			text += join ? v.join(', ') : v;
		}
		document.getElementById('PUI-' + value).textContent = text;
	}
	function getUserInfo() {
		mw.loader.using('mediawiki.api').then(function() {
		var username = input.value;
		info.innerHTML = '';
		new mw.Api().get({
			action: 'query',
			list: 'users',
			ususers: username,
			usprop: 'registration|gender|editcount|blockinfo|groups',
			formatversion: 2
		}).done(function(data) {
			if (data.query.users[0].missing || data.query.users[0].invalid || username === '') {
				info.innerHTML = '<br><b>' + msg('enterUsername').escape() + '</b>';
			} else {
				info.innerHTML =
					'<br><b>' + msg('id').escape() + '</b> <span id="PUI-userid"></span>' +
					'<br><b>' + msg('username').escape() + '</b> <span id="PUI-name"></span>' +
					'<br><b>' + msg('editcount').escape() + '</b> <span id="PUI-editcount"></span>' +
					'<br><b>' + msg('dateRegistered').escape() + '</b> <span id="PUI-registration"></span>' +
					'<br><b>' + msg('gender').escape() + '</b> <span id="PUI-gender"></span>' +
					'<br><b>' + msg('groups').escape() + '</b> <span id="PUI-groups"></span>';
				addEntry(data, msg('id').escape(), 'userid');
				addEntry(data, msg('username').escape(), 'name');
				addEntry(data, msg('editcount').escape(), 'editcount');
				addEntry(data, msg('dateRegistered').escape(), 'registration');
				addEntry(data, msg('gender').escape(), 'gender');
				addEntry(data, msg('groups').escape(), 'groups', true);
			}
		});
		});
	}
	function init() {
		var header = document.getElementById('firstHeading');
		document.title = document.title.replace(header.innerText, msg('userInfo').plain());
		header.textContent = msg('userInfo').plain();
		document.getElementById('mw-content-text').innerHTML = '';

		input = document.createElement('input');
		input.type = 'text';
		input.placeholder = 'Username';

		var button = document.createElement('button');
		button.innerText = msg('getInfo').plain();
		button.addEventListener('click', getUserInfo);

		info = document.createElement('div');

		document.getElementById('mw-content-text').append(input, button, info);
		
		if (location.hash.replace('#', '') !== '') {
			input.value = location.hash.replace('#', '');
			getUserInfo();
		}
	}
	function addTool() {
		mw.loader.using('mediawiki.util').then(function() {
			var urlWithHash = './Special:UserInfo#' + mw.util.wikiUrlencode(config.wgRelevantUserName);
			$('<li>', { id: 'userinfo' })
			.html('<a href="' + urlWithHash + '">' + msg('userInfo').escape() + '</a>')
			.prependTo('.toolbar .tools');
		});
	}

	mw.hook('dev.i18n').add(function(i18n) {
		i18n.loadMessages('PiniginsUserInfo').done(function(i18no) {
			msg = i18no.msg;
			if (config.wgNamespaceNumber === -1) init();
			if (config.wgNamespaceNumber === 2) addTool();
		});
	});

	window.importArticle({
		type: 'script',
		article: 'u:dev:MediaWiki:I18n-js/code.js'
	});
})(window.jQuery, window.mediaWiki);
Advertisement