MediaWiki:UpdateLanguageNameAndCode.js

Chú ý: Sau khi lưu trang này, phải xóa bộ nhớ đệm (cache) của trình duyệt để những thay đổi hiện ra

  • Firefox / Safari: Nhấn giữ phím Shift trong khi nhấn Tải lại (Reload), hoặc nhấn tổ hợp Ctrl-F5 hay Ctrl-R (⌘R trên Mac)
  • Google Chrome: Nhấn tổ hợp Ctrl-Shift-R (⇧⌘R trên Mac)
  • Internet Explorer / Edge: Nhấn giữ phím Ctrl trong khi nhấn Làm tươi (Refresh), hoặc nhấn tổ hợp Ctrl-F5
  • Opera: Nhấn tổ hợp Ctrl-F5.
//From [[en:MediaWiki:UpdateLanguageNameAndCode.js]]
/* jshint undef: true */
/* globals $, apiWrapper, mw */
// <nowiki>

{
"use strict";

const action = mw.config.get("wgAction");
const api = new mw.Api({
	timeout: 30 * 1000, // Dirty hack to hopefully get rid of timeout errors.
});

const updatePageWithTemplateExpansion = function (title, template, summary, changeTemplateExpansion) {
	return mw.loader.using("mediawiki.api", function () {
		return api.get({
			action: "expandtemplates",
			title: title,
			text: template,
			prop: "wikitext",
		}).done(function (data) {
			var expanded = data.expandtemplates.wikitext;
			return api.edit(title, function () {
				return {
					text: changeTemplateExpansion
						? changeTemplateExpansion(expanded)
						: expanded,
					summary: summary,
				};
			}).done(function (data) {
				if (data.nochange) {
					mw.notify(title + " was up-to-date already.");
				} else {
					mw.notify("Updated " + title + ".");
				}
			}).fail(function(...args) {
				mw.notify("Failed to post!");
				console.log(...args);
			});
		});
	});
};

const summary = "[[MediaWiki:UpdateLanguageNameAndCode.js|cập nhật]]";

const updateLanguageData = function (title, moduleFunction) {
	return updatePageWithTemplateExpansion(title, "{{#invoke:languages/print|" + moduleFunction + "|plain}}", summary).then(function() {
		return updatePageWithTemplateExpansion(title + ".json", "{{#invoke:languages/print|" + moduleFunction + "|json}}", summary);
	});
};

const button = $("<button>");

button
	.html("Update <code>Module:languages/code to canonical name</code> and <code>Module:languages/canonical names</code> and other data modules")
	.attr("id", "update-module");

button.on("click", function () {
	updateLanguageData("Module:languages/code to canonical name", "code_to_name").then(function() {
		return updateLanguageData("Module:languages/canonical names", "name_to_code");
	}).then(function() {
		updatePageWithTemplateExpansion(
			"Module:Hani-sortkey/data/serialized",
			"{{#invoke:Hani-sortkey/data/serializer|main}}",
			summary,
			function(expanded) {
				return 'return "' + expanded + '"';
			}
		);
	});
});

// Color the button to help editors to notice it.
// Add the following to [[Special:MyPage/common.js]] to switch back to the default styles:
// window.plainModuleUpdateButton = true;
if (!window.plainModuleUpdateButton)
	mw.util.addCSS("#update-module, #update-module code { background-color: orange; }");

const p = $(".mw-parser-output p:first-of-type");
p.before(button);

} // empty block scope

// </nowiki>