User:Guycn2/EditCounter.js

From Meta, a Wikimedia project coordination wiki

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.
/*

Adds toolbox link to show the user's number of edits and his/her edit counter
Written by: [[User:Guycn2]]

*/

$(function() {
	
	"use strict";
	
	var username = mw.config.get("wgRelevantUserName");
	
	if (!username || $(".mw-userpage-userdoesnotexist").length) return;
	
	function i18n(key) {
		switch (mw.config.get("wgUserLanguage")) {
			case "he":
				switch (key) {
					case "toolboxLinkText":
						return "מספר עריכות";
					case "toolboxLinkTooltip1":
						return "הצגת מספר העריכות שבוצעו על ידי " + username;
					case "orMore":
						return "או יותר";
					case "edits":
						return "עריכות";
					case "toolboxLinkTooltip2":
						return "ניתן ללחוץ כאן כדי לפתוח את מונה העריכות של " + username;
				}
				break;
			default:
				switch (key) {
					case "toolboxLinkText":
						return "Number of edits";
					case "toolboxLinkTooltip1":
						return "Show number of edits made by " + username;
					case "orMore":
						return "or more";
					case "edits":
						return "edits";
					case "toolboxLinkTooltip2":
						return "Click here to open edit counter for " + username;
				}
		}
	}
	
	mw.loader.using("mediawiki.util", function() {
		
		mw.util.addPortletLink(
			"p-tb", "#", i18n("toolboxLinkText"), "t-editcount", i18n("toolboxLinkTooltip1")
		);
		
		var $link = $("#t-editcount a");
		
		$link.one("click", function(e) {
			e.preventDefault();
			showEditCount();
		});
		
		function showEditCount() {
			
			mw.loader.using("mediawiki.api", function() {
				
				var isAnon = mw.util.isIPAddress(username);
				var userGroups = mw.config.get("wgUserGroups");
				var apiLimit = (userGroups.indexOf("sysop") < 0 && userGroups.indexOf("bot") < 0) ? 500 : 5000;
				var numberOfEdits;
				
				new mw.Api().get({
					list: isAnon ? "usercontribs" : "users",
					uclimit: isAnon ? "max" : undefined,
					ucuser: isAnon ? username : undefined,
					usprop: isAnon ? undefined : "editcount",
					ususers: isAnon ? undefined : username
				}).done(function(data) {
					
					if (isAnon) {
						numberOfEdits = data.query.usercontribs.length;
						if (numberOfEdits >= apiLimit) {
							numberOfEdits = apiLimit.toLocaleString() + " " + i18n("orMore");
						}
					} else {
						numberOfEdits = data.query.users[0].editcount;
					}
					
					$link
						.text(numberOfEdits.toLocaleString() + " " + i18n("edits"))
						.attr({
							title: i18n("toolboxLinkTooltip2"),
							href: "//xtools.wmflabs.org/ec/" + window.location.hostname + "/" + encodeURIComponent(username),
							target: "_blank"
						});
						
						/* In Vector-2022, prevent the dropdown menu from disappearing after
						clicking the "Number of edits" button. This is a somewhat nasty workaround,
						mostly because it causes the dropdown menu to flash before appearing again.
						A more intuitive solution is needed, but it's better than nothing for now. */
						if (mw.config.get("skin") === "vector-2022") {
							$("#vector-page-tools-dropdown-checkbox").prop("checked", true);
						}
					
				});
				
			});
			
		}
		
	});
	
});