Jump to content

User:Terasail/ArticleInfo.js

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Terasail (talk | contribs) at 15:21, 2 August 2021 (Remove question symbol). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
//<nowiki>
// jshint esnext: false, esversion: 8
var mwConfigV = mw.config.values;
var pageid = mwConfigV.wgArticleId;
var curServer = mwConfigV.wgServerName;
var pageName = mwConfigV.wgPageName;

if (typeof(mw.config.values.wgRelevantUserName) != "undefined") {
	var pageUsr = mw.config.values.wgRelevantUserName;
	var api = new mw.Api();
	api.get({
		action: "query",
		list: "users",
		ususers: pageUsr,
		usprop: "editcount|groups|implicitgroups",
		format: "json"
	}).done(function(data) {
		var userData = data.query.users[0];
		var outStr = '<div id="usrInfoBar" style="font-size:90%; margin:5px 0px">User links: ';
		outStr += constructUser(userData, curServer);
		outStr += ' (<a style="font-size:90%" href="/wiki/Special:ListUsers?limit=1&username=' + pageUsr + '">Rights</a> / ';
		outStr += '<a style="font-size:90%" href="/wiki/Special:Log?type=rights&user=&page=User%3A' + pageUsr + '&wpdate=&tagfilter=&subtype=">Log</a>) ';
		outStr += ' (<a style="font-size:90%" href="/wiki/Special:Contributions/' + pageUsr + '">Contributions</a>) ';
		outStr += ' (<a style="font-size:90%" href="/wiki/Special:CentralAuth/' + pageUsr + '">Accounts</a>)</div>';
		outStr = outStr.replaceAll(/\B(?=(\d{3})+(?!\d)[ <])/g, ",");
		addHtml(outStr, "usrInfoBar", "siteSub");
	});
}

if (pageid != 0 && (mwConfigV.wgAction == "view" || mwConfigV.wgAction == "edit")) {
	var assessments = {NA:["6/6a/Symbol_na_class"], Draft:["0/09/Symbol_draft_class"], Template:["5/5c/Symbol_template_class"], Redirect:["a/a2/Symbol_redirect_class", "c"], Project:["7/72/Symbol_project_class"], Portal:["e/e2/Symbol_portal_class"], File:["9/9c/Symbol_file_class"], Disambig:["2/2a/Symbol_dab_class", "c"], Category:["9/96/Symbol_category_class"], List:["d/db/Symbol_list_class"], Stub:["f/f5/Symbol_stub_class"], Start:["a/a4/Symbol_start_class"], C:["e/e6/Symbol_c_class"], B:["5/5f/Symbol_b_class"], A:["2/25/Symbol_a_class", "c"], GA:["9/94/Symbol_support_vote"], FM:["b/bc/Featured_article_star", "c"], FL:["b/bc/Featured_article_star", "c"], FA:["b/bc/Featured_article_star", "c"]};
	var editLocks = {move:["4/44/Move-protection-shackle"], upload:["d/d7/Upload-protection-shackle"], cascade:["0/0f/Cascade-protection-shackle"], sysop:["1/12/Full-protection-shackle-block", "c"], templateeditor:["5/53/Template-protection-shackle"], extendedconfirmed:["8/8c/Extended-protection-shackle"], autoconfirmed:["1/1b/Semi-protection-shackle"]};
	var api = new mw.Api();
	api.get({
		action: "query",
		prop: "pageviews|info|revisions|pageassessments",
		pageids: pageid,
		pvipdays: "30",
		inprop: "protection|watchers",
		rvprop: "timestamp|user",
		rvlimit: "1",
		rvdir: "newer",
		palimit: "1",
		format: "json"
	}).done(function(data) {
		data = data.query.pages[pageid];
		x = data;
		var protection = data.protection;
		var pageviews = Object.entries(data.pageviews);
		var firstUser = data.revisions[0].user;
		var firstTime = new Date(data.revisions[0].timestamp).toUTCString().slice(5, 16);
		var watchers = data.watchers;
		var totalViews = 0;
		var assessment = data.pageassessments;
		for (var i = 0; i < pageviews.length; i++) {
			if (typeof pageviews[i][1] == "number") {
				totalViews += pageviews[i][1];
			}
		}
		api.get({
			action: "query",
			list: "users",
			ususers: firstUser,
			usprop: "editcount|groups|implicitgroups",
			format: "json"
		}).done(function(data) {
			var icons = '<div id="apageInfoBar" style="font-size:80%; margin:5px 0px">';
			if (assessment != null) {
				assessment = createImg(assessments[Object.entries(assessment)[0][1].class]);
				icons += assessment + " ";
			}
			for (var i = 0; i < protection.length; i++) {
				var protType = protection[i].type;
				var protLevel = protection[i].level;
				if (icons.includes("Cascade") == false) {
					if (protType == "move" || protType == "upload") {
						icons += createImg(editLocks[protType]);
					} else if (protType == "edit") {
						if (icons.includes("protection") == false) {
							icons += createImg(editLocks[protLevel]);
						} else {
							icons += createImg(editLocks.cascade);
						}
					}
				}
			}
			if (icons.includes("<img")) {
				icons += " ";
			}
			var mainStr = totalViews + ' <abbr title="Pageviews in the last 30 days">Pageviews</abbr> &#183; ';
			if (watchers != null) {
				mainStr += "Watchers: " + watchers + " &#183; ";
			}
			mainStr += "Created on " + firstTime + ", by " + constructUser(data.query.users[0], curServer);
			var pageStats = newTab("Xarticleinfo/" + curServer + pageName, "Page information");
			mainStr += " &#183; " + pageStats + "</div>";
			mainStr = mainStr.replaceAll("undefined", "0");
			concatageInfo(icons, mainStr);
		});
	});	
}

function constructUser(userData, curServer) {
	var userRightsList = {extendedconfirmed: "EC", reviewer: "PCR", rollbacker: "R", autopatrolled: "AP", autoreviewer: "AP", patroller: "NPR", filemover: "FM", extendedmover: "PM", accountcreator: "AC", eventcoordinator: "EvCo", templateeditor: "TE", "ipblock-exempt": "IE", abusefilter: "EFM", "abusefilter-helper": "EFH", "massmessage-sender": "MMS", sysop: "A", bureaucrat: "B", "interface-admin": "IA", translationadmin: "TA", oversight: "O", checkuser: "CU", "import": "IM", bot: "BOT"};
	var usrDtaName = userData.name;
	var groups = userData.groups;
	var editCount = newTab("Xec/" + curServer + usrDtaName, userData.editcount);
	var usrStr = newTab("U" + usrDtaName, usrDtaName) + " ";
	if (groups != null) {
		groups = groups.filter(function(usrRight) {
			if (userData.implicitgroups.includes(usrRight)) { return false; }
			return true;
		});
	}
	if (userData.invalid == null) {
		usrStr += "(" + editCount + ") ";
	}
	if (groups != null && groups.length > 0) {
		usrStr += '[<span style="font-size:90%">';
		for (var j = 0; j < groups.length; j++) {
			var rightsStr = userRightsList[groups[j]];
			if (rightsStr == null) {
				rightsStr = groups[j];
			}
			usrStr += rightsStr + ", ";
		}
		usrStr += "</span>]";
		usrStr = usrStr.replace(", </", "</");
	}
	return usrStr;
}

function createImg(data) {
	if (data != null) {
		if (data.length == 1) {
			data[1] = "en";
		} else if (data[1] == "c") {
			data[1] = "commons";
		}
		var imageStr = '<a href="/wiki/File:' + data[0].slice(5) + '.svg">';
		imageStr += '<img src="/media/wikipedia/' + data[1] + '/thumb/';
		imageStr += data[0] + ".svg/25px-" + data[0].slice(5);
		imageStr += '.svg.png" decoding="async" width="18" height="18"></a>';
		return imageStr;
	}
}

function newTab(page, msg) {
	var target = "<a ";
	if (page.slice(0,1) == "X") {
		target += 'target="_blank" href="https://xtools.wmflabs.org/';
	} else {
		target += 'href="/wiki/User:';
	}
	console.log(target + page.slice(1).replace(/.org(?=\w)/, ".org/") + '">' + msg + "</a>");
	return target + page.slice(1).replace(/.org(?=\w)/, ".org/") + '">' + msg + "</a>";
}

function addHtml(mainStr, id, target) {
	var bodyElm = document.getElementsByClassName("mw-body-header");
	if(bodyElm.length != 0) {
		$(bodyElm[0]).append(mainStr);
	} else {
		bodyElm = document.getElementById("bodyContent");
		var preElm = bodyContent.firstElementChild;
		if (document.getElementById(target) != null) {
			preElm = document.getElementById(target);
		}
		mainStr = mainStr.replace("90%", "110%");
		mainStr = mainStr.replace("80%", "100%");
		$(bodyElm).append(mainStr);
		bodyElm.insertBefore(document.getElementById(id), preElm.nextElementSibling);
	}
}

async function concatageInfo(icons, mainStr) {
  try {
    var numUsrs = await fetch("https://" + curServer + "/w/rest.php/v1/page/" + pageName.replaceAll("/", "%2F") + "/history/counts/editors?");
	var numRev = await fetch("https://" + curServer + "/w/rest.php/v1/page/" + pageName.replaceAll("/", "%2F") + "/history/counts/edits?");
	numUsrs = await numUsrs.json();
	numRev = await numRev.json();
	numUsrs = numUsrs.count + " Editor";
	numRev = numRev.count + " Revision";
	if (numUsrs != "1 Editor") { numUsrs += "s"; }
	if (numRev != "1 Revision") { numRev += "s"; }
	mainStr = icons + numRev + " &#183; " + numUsrs + " &#183; " + mainStr;
	mainStr = mainStr.replace(/(\w{1,4}, ){3,}\w+/, "4+ rights");
	mainStr = mainStr.replaceAll(/\B(?=(\d{3})+(?!\d)[ <])/g, ",");
	mainStr = mainStr.replaceAll(/30,000(?= (Revision|Editor))/g, "30,000+");
	mainStr = mainStr.replace(/ *undefined */, "");
	addHtml(mainStr, "apageInfoBar", "usrInfoBar");
  } catch( err ) {
    console.error(err.message);
  }
}
//</nowiki>[[Category:Wikipedia Scripts]]