پرش به محتوا

کاربر:YRhyre/ArticleInfo.js: تفاوت میان نسخه‌ها

از ویکی‌پدیا، دانشنامهٔ آزاد
محتوای حذف‌شده محتوای افزوده‌شده
YRhyre (بحث | مشارکت‌ها)
جز تغییر div به span
YRhyre (بحث | مشارکت‌ها)
جابجایی تگ
خط ۲۰۰: خط ۲۰۰:
//Page creation
//Page creation
let firstRev = data.revisions[0];
let firstRev = data.revisions[0];
let created = '<span dir="ltr">' + 'ساخته‌شده در ' + new Date(firstRev.timestamp).toUTCString().slice(5, 16) + '</span>' + '، توسط '
let created = 'ساخته‌شده در ' + <span dir="ltr"> + new Date(firstRev.timestamp).toUTCString().slice(5, 16) + '</span>' + '، توسط '
let firstUser = firstRev.user;
let firstUser = firstRev.user;
api.get({
api.get({

نسخهٔ ‏۱۸ ژوئیهٔ ۲۰۲۳، ساعت ۰۹:۰۲

/*<nowiki>
	Article Info
	Created by: Terasail
*/
// jshint esnext: false, esversion: 8
var aiSkin = mw.config.get("skin");
var infoArticleID = mw.config.get("wgArticleId");
var infoAction = mw.config.get("wgAction");
var api = new mw.Api();
var relevantUserName = mw.config.get("wgRelevantUserName");

if (aiSkin === "vector" || aiSkin === "vector-2022") {
	if (relevantUserName != null) {
		let userInfoHtml = '<div id="p-userinfo" class="vector-menu mw-portlet"><div class="vector-menu-heading">اطلاعات کاربر</div><div class="vector-menu-content"><ul id="usrinfo-ul" class="vector-menu-content-list"></ul></div>';
		$(userInfoHtml).insertBefore($("#p-tb"));
		if ($("#vector-page-tools").length === 0) {
			$("#p-userinfo").addClass("vector-main-menu-group vector-menu-portal");
		}
		$("#usrinfo-ul").append($("#t-contributions"), [$("#t-log")]);
		if (document.getElementById("t-userrights") != null) {
			$("#usrinfo-ul").append($("#t-userrights"));
			$.when( mw.loader.using( 'mediawiki.util' ), $.ready ).then( function () {
				let globalAccount = mw.util.addPortletLink(
					'p-userinfo',
					"/wiki/Special:CentralAuth/" + relevantUserName,
					'حساب سراسری',
					't-global-account',
					'View global account information', '', ''
				);
				let xToolsAccount = mw.util.addPortletLink(
					'p-userinfo',
					"https://xtools.wmflabs.org/ec/" + mw.config.get("wgServerName") + "/" + relevantUserName,
					'بازکردن xTools',
					't-xtools-account',
					'بازکردن اطلاعات کاربر در  xTools', '', ''
				);
				if (infoAction === "view" || infoAction === "edit") {
					api.get({
						action: "query",
						list: "users",
						ususers: relevantUserName,
						usprop: "editcount|groups|implicitgroups",
						format: "json"
					}).done(function (data) {
						let rightsAbbreviation = {
							"abusefilter": "ویرایشگر پالایه ویرایش",
							"acountcreator": "سازنده حساب",
							"autoconfirmed": "تاییدشده خودکار",
							"autopatrolled": "گشت خودکار",
							"bot": "ربات",
							"botadmin": "مدیر رباتیک",
							"bureaucrat": "دیوان‌سالار",
							"checkuser": "بازرس کاربر",
							"confirmed": "تاییدشده",
							"eliminator": "ویکی‌بان",
							"extendedconfirmed": "تاییدشده پایدار",
							"extendedmover": "انتقال‌دهننده پیشرفته",
							"flow-bot": "ربات بحث ساختارمند",
							"image-reviewer": "بازبین تصویر",
							"import": "درون‌ریز",
							"interface-admin": "مدیر رابط کاربری",
							"ipblock-exempt": "معاف",
							"patroller": "گشت‌زن",
							"push-subscription-manager": "ماف",
							"reviewer": "بازبین",
							"rollbacker": "واگردان",
							"steward": "ویکی‌بد",
							"suppress": "پنهانگر",
							"sysop": "مدیر",
							"templateeditor": "ویرایشگر الگو",
							"transwiki": "واردکننده تراویکی",
							"user": "کاربر",
							
						};
						let userData = data.query.users[0];
						let groups = userData.groups;
						groups = groups.slice(0, 0 - userData.implicitgroups.length);
						for (let i = 0; i < groups.length; i++) {
							groups[i] = rightsAbbreviation[groups[i]];
						}
						let styledSpan = '<span> </span><span dir="rtl" style="white-space: nowrap;border-left:1px solid #a2a9b1;color:#54595d;padding-left:5px;font-size:0.875rem;font-family:sans-serif;">';
						$("#firstHeading").append($(styledSpan + "ویرایش‌ها: " + addCommas(userData.editcount) + '</span>'));
						if (groups.length != 0) {
							$("#firstHeading").append($(styledSpan + "گروه‌ها: " + groups.toString().replaceAll(",", ", ") + '</span>'));
						}
					});
				}
			});
		}
	}

	if (infoArticleID !== 0 && (infoAction === "view" || infoAction === "edit")) {
		api.get({
			action: "query",
			prop: "pageviews|info|revisions|pageassessments",
			pageids: infoArticleID,
			pvipdays: "30",
			inprop: "protection|watchers",
			rvprop: "timestamp|user",
			rvlimit: "1",
			rvdir: "newer",
			palimit: "1",
			format: "json"
		}).done(function (data) {
			data = data.query.pages[infoArticleID];
			let serverName = mw.config.get("wgServerName");
			let pageName = mw.config.get("wgPageName");
			//IDs: infoBar - infoImgs, infoRevs, infoEditors, infoViews, infoWatch, infoCreated, infoXTools.
			let spanBorder = 'border-right:1px solid #a2a9b1;';
			let spanStyle = 'white-space:nowrap;margin-right:5px;padding-right:5px;margin-top:10px;margin-bottom:5px;';
			let infoBarHtml = '<div dir="rtl" id="infoBar" class="vector-page-toolbar-container" style="flex-wrap:wrap;"><span id="infoImgs"></span><span id="infoRevs"></span><span id="infoEditors"></span><span id="infoViews"></span><span id="infoWatch"></span><span id="infoCreated"></span><span id="infoXTools"></span></div>';
			if (aiSkin === "vector") {
				$("#bodyContent").prepend($(infoBarHtml));
				$('#infoBar')[0].style = 'border-bottom:1px solid #a2a9b1;padding-bottom:0.25em;';
			} else {
				$(".vector-page-toolbar").prepend($(infoBarHtml));
			}
			let barSpans = $("#infoBar").children();

			//Assessment & Protection icons
			let 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"],
				"": ["e/e0/Symbol_question"]
			};
			let 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"]
			};
			let assessment = data.pageassessments;
			let protection = data.protection;
			let icons = "";
			if (assessment != null) {
				icons += createImg(assessments[Object.entries(assessment)[0][1].class], false);
			}
			for (let i = 0; i < protection.length; i++) {
				let protType = protection[i].type;
				let protLevel = protection[i].level;
				if (icons.includes("Cascade") == false) {
					if (protType == "move" || protType == "upload") {
						icons += createImg(editLocks[protType], true);
					} else if (protType == "edit") {
						if (icons.includes("protection") == false) {
							icons += createImg(editLocks[protLevel], true);
						} else {
							icons += createImg(editLocks.cascade, true);
						}
					}
				}
			}
			if (icons != "") {
				$("#infoImgs").append(icons);
				$("#infoImgs")[0].style = spanStyle + spanBorder;
			}

			//Async revision and editor count requests
			getEdits(spanStyle + spanBorder);
			getEditors(spanStyle + spanBorder);

			//Pageviews
			let rawViews = Object.entries(data.pageviews);
			let totalViews = 0;
			for (let i = 0; i < rawViews.length; i++) {
				if (typeof rawViews[i][1] == "number") {
					totalViews += rawViews[i][1];
				}
			}
			$("#infoViews").append(addCommas(totalViews) + ' <abbr title="بازدید‌ها از این صفحه در ۳۰ روز گذشته">بازدید</abbr>');
			$("#infoViews")[0].style = spanStyle + spanBorder;

			//Page watchers
			let watchers = data.watchers;
			if (watchers != null) {
				$("#infoWatch").append(addCommas(watchers) + ' <abbr title="کاربرانی که این صفحه را در فهرست پیگیری خود دارند">پیگیر</abbr>');
				$("#infoWatch")[0].style = spanStyle + spanBorder;
			}

			//Page creation
			let firstRev = data.revisions[0];
			let created = 'ساخته‌شده در ' + <span dir="ltr"> +  new Date(firstRev.timestamp).toUTCString().slice(5, 16) + '</span>' + '، توسط '
			let firstUser = firstRev.user;
			api.get({
				action: "query",
				list: "users",
				ususers: firstUser,
				usprop: "editcount|groups|implicitgroups",
				format: "json"
			}).done(function(data) {
				let userQuery = data.query.users[0];
				created += '<a href="/wiki/کاربر:' + firstUser + '">' + firstUser + '</a>';
				if (typeof (userQuery.editcount) !== "undefined" && typeof (userQuery.groups) !== "undefined") {
					created += ' (' + addCommas(userQuery.editcount) + " ویرایش";
					let numRights = userQuery.groups.length - userQuery.implicitgroups.length;
					if (numRights > 0) {
						created += " | " + numRights + " گروه";
					}
					created += ")";
				}
				$("#infoCreated").append(created);
				$("#infoCreated")[0].style = spanStyle + spanBorder;
			});
		});
	}
}

async function getEdits(style) {
	try {
		let numEdits = await fetch("https://" + mw.config.get("wgServerName") + "/w/rest.php/v1/page/" + mw.config.get("wgPageName").replaceAll("/", "%2F") + "/history/counts/edits?");
		numEdits = await numEdits.json();
		numEdits = addCommas(numEdits.count).replace("30,000", "30k+") + " نسخه";
		$("#infoRevs").append(numEdits);
		$("#infoRevs")[0].style = style;
	} catch( err ) {
		console.error(err.message);
	}
}

async function getEditors(style) {
	try {
		let numUsrs = await fetch("https://" + mw.config.get("wgServerName") + "/w/rest.php/v1/page/" + mw.config.get("wgPageName").replaceAll("/", "%2F") + "/history/counts/editors?");
		numUsrs = await numUsrs.json();
		numUsrs = addCommas(numUsrs.count).replace("30,000", "30k+") + " ویرایشگر";
		$("#infoEditors").append(numUsrs);
		$("#infoEditors")[0].style = style;
	} catch( err ) {
		console.error(err.message);
	}
}

function createImg(data, protection) {
	if (data != null) {
		if (data.length === 1) {
			data[1] = "en";
		} else if (data[1] === "c") {
			data[1] = "commons";
		}
		let imageStr = '<a href="/wiki/File:' + data[0].slice(5) + '.svg">';
		if (protection) {
			imageStr = '<a target="_blank" href="/w/index.php?title=Special:Log&type=protect&page=' + mw.config.get("wgPageName") + '">';
		}
		imageStr += '<img src="//upload.wikimedia.org/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 addCommas(number) {
	if (typeof(number) == "number") {
		return number.toLocaleString('en-US');
	}
	return number;
}
//</nowiki>[[رده:اسکریپت‌های ویکی‌پدیا]]
ی