MediaWiki:Gadget-UserProfile.js

From ARK Wiki
Jump to navigation Jump to search

In other languages: DeutschEspañolFrançaisItaliano日本語PolskiPortuguês do BrasilРусскийไทย


Note: After saving, 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: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Go to Menu → Settings (Opera → Preferences on a Mac) and then to Privacy & security → Clear browsing data → Cached images and files.
mw.loader.using( [ 'mediawiki.api' ] ).done( function () {
	var username = mw.config.get('wgRelevantUserName');
	var lang = mw.language.bcp47(mw.config.get('wgUserLanguage'));
	if ( username ) {
		const allUsergroupsOrdered = [];
		const dateOptions = {
			year: "numeric",
			month: "short",
			day: "numeric",
			hour: "2-digit",
			minute: "2-digit",
			timeZone: "UTC",
			timeZoneName: "short"
		};
		var api = new mw.Api();
		api.get( {
			action: 'query',
			list: 'users',
			ususers: username,
			usprop: [ 'groups', 'editcount', 'registration', 'blockinfo', 'emailable' ]
		} ).done( function(data) {
			var user = data.query.users[0];
			user.groups.splice(user.groups.indexOf('*'), 1);
			var groupList = user.groups.map( function(group) {
				var grouppage = '{{MediaWiki:grouppage-'+group+'}}';
				return [
					'{{#ifexist: '+grouppage+' | [['+grouppage+'|{{int:group-'+group+'}}]] | {{int:group-'+group+'}} }}',
					'{{#ifexist: '+grouppage+' | [['+grouppage+'|{{int:group-'+group+'-member|'+username+'}}]] | {{int:group-'+group+'-member|'+username+'}} }}'
				];
			} ).reduce( function(prev, cur) {
				prev[0].push(cur[0]);
				prev[1].push(cur[1]);
				return prev;
			}, [[], []] );
			var text = '<div class="horse-userprofile-info">';
			text += '\n\n<span>{{int:prefs-memberingroups|'+user.groups.length+'|'+username+'}}</span>\t<span>{{int:prefs-memberingroups-type|'+mw.language.listToText(groupList[0])+'|'+mw.language.listToText(groupList[1])+'}}</span>';
			text += '\n\n<span>{{int:prefs-edits}}</span>\t<span>[[Special:Contribs/'+username+'|'+mw.language.convertNumber(user.editcount)+']]</span>';
			text += '\n\n<span>{{int:prefs-registration}}</span>\t<span>'+mw.language.convertNumber(new Date(user.registration).toLocaleString(lang, dateOptions))+'</span>';
			text += '\n\n<span>Emailable:</span>\t<span>'+(user.emailable==='' ? 'yes' : 'no')+'</span>';
			text += '\n\n</div>';
			if ( user.blockid && mw.config.get('wgArticleId') !== 0 ) {
				var blockDate = new Date(user.blockedtimestamp);
				var blockexpiry = '{{int:infiniteblock}}';
				if ( !['infinite', 'indefinite', 'infinity', 'never'].includes(user.blockexpiry) ) {
					var expiry = new Date(user.blockexpiry.replace( /(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2,3})/, '$1-$2-$3T$4:$5:$6Z' ));
					var duration = expiry - blockDate;
					var blockDuration = [];
					var factor = 1000;
					if ( duration % factor === 0 ) blockDuration = ['duration-seconds', Math.floor(duration / factor)];
					factor *= 60;
					if ( duration % factor === 0 ) blockDuration = ['duration-minutes', Math.floor(duration / factor)];
					factor *= 60;
					if ( duration % factor === 0 ) blockDuration = ['duration-hours', Math.floor(duration / factor)];
					factor *= 24;
					if ( duration % factor === 0 ) blockDuration = ['duration-days', Math.floor(duration / factor)];
					if ( duration % (factor*7) === 0 ) blockDuration = ['duration-weeks', Math.floor(duration / (factor*7))];
					if ( duration % (factor*30) === 0 ) blockDuration = ['months', Math.floor(duration / (factor*30))];
					factor *= 365;
					if ( duration % factor === 0 ) blockDuration = ['duration-years', Math.floor(duration / factor)];
					if ( duration % (factor*10) === 0 ) blockDuration = ['duration-decades', Math.floor(duration / (factor*10))];
					if ( duration % (factor*100) === 0 ) blockDuration = ['duration-centuries', Math.floor(duration / (factor*100))];
					if ( duration % (factor*1000) === 0 ) blockDuration = ['duration-millennia', Math.floor(duration / (factor*1000))];
					if ( blockDuration.length < 2 || blockDuration[1] > 1000 ) blockexpiry = mw.language.convertNumber(expiry.toLocaleString(lang, dateOptions));
					else blockexpiry = '{{int:'+blockDuration.join('|')+'}}';
				}
				text += '<div class="horse-userprofile-block mw-warning-with-logexcerpt"><div>\n{{int:blocked-notice-logextract|'+username+'}}\n';
				text += '* '+mw.language.convertNumber(blockDate.toLocaleString(lang, dateOptions))+' {{int:logentry-block-block|[[User:'+user.blockedby+'|'+user.blockedby+']] <span class="mw-usertoollinks mw-changeslist-links"><span>[[User talk:'+user.blockedby+'|{{int:talkpagelinktext}}]]</span> <span>[[Special:Contribs/'+user.blockedby+'|{{int:contribslink}}]]</span></span>|'+user.blockedby+'|[[User:'+username+'|'+username+']] <span class="mw-usertoollinks mw-changeslist-links"><span>[[User talk:'+username+'|{{int:talkpagelinktext}}]]</span> <span>[[Special:Contribs/'+username+'|{{int:contribslink}}]]</span></span>|'+username+'|'+blockexpiry+'|}} <span class="comment">{{int:parentheses|'+user.blockreason+'}}</span></div></div>';
			}
			api.parse( text, {
				disablelimitreport: true,
				wrapoutputclass: 'horse-userprofile mw-message-box mw-content-'+$('#contentSub').attr('dir'),
				uselang: mw.config.get('wgUserLanguage')
			} ).done( function(parsedText) {
				$('#contentSub').append(parsedText.replace( /\u29FCgroup-([^\u29FC\u29FD]+?)(?:-member)?\u29FD/g, '$1' ));
			} );
		} );
	}
} );