<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="vi">
	<id>https://bktt.vn/index.php?action=history&amp;feed=atom&amp;title=M%C3%B4_%C4%91un%3AParameters</id>
	<title>Mô đun:Parameters - Lịch sử thay đổi</title>
	<link rel="self" type="application/atom+xml" href="https://bktt.vn/index.php?action=history&amp;feed=atom&amp;title=M%C3%B4_%C4%91un%3AParameters"/>
	<link rel="alternate" type="text/html" href="https://bktt.vn/index.php?title=M%C3%B4_%C4%91un:Parameters&amp;action=history"/>
	<updated>2026-06-02T21:03:22Z</updated>
	<subtitle>Lịch sử thay đổi của trang này ở wiki</subtitle>
	<generator>MediaWiki 1.35.0</generator>
	<entry>
		<id>https://bktt.vn/index.php?title=M%C3%B4_%C4%91un:Parameters&amp;diff=6150&amp;oldid=prev</id>
		<title>Taitamtinh: Tạo trang mới với nội dung “-- Mô đun này thực hiện Bản mẫu:Parameters. -- [SublimeLinter luacheck-globals:mw]  local DEFINITIONS = { 	[&quot;alt&quot;] = { 		[&quot;code&quot;] = '&lt;!-- v…”</title>
		<link rel="alternate" type="text/html" href="https://bktt.vn/index.php?title=M%C3%B4_%C4%91un:Parameters&amp;diff=6150&amp;oldid=prev"/>
		<updated>2020-10-30T17:20:49Z</updated>

		<summary type="html">&lt;p&gt;Tạo trang mới với nội dung “-- Mô đun này thực hiện &lt;a href=&quot;/B%E1%BA%A3n_m%E1%BA%ABu:Parameters&quot; title=&quot;Bản mẫu:Parameters&quot;&gt;Bản mẫu:Parameters&lt;/a&gt;. -- [SublimeLinter luacheck-globals:mw]  local DEFINITIONS = { 	[&amp;quot;alt&amp;quot;] = { 		[&amp;quot;code&amp;quot;] = &amp;#039;&amp;lt;!-- v…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Trang mới&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Mô đun này thực hiện [[Bản mẫu:Parameters]].&lt;br /&gt;
-- [SublimeLinter luacheck-globals:mw]&lt;br /&gt;
&lt;br /&gt;
local DEFINITIONS =&lt;br /&gt;
{&lt;br /&gt;
	[&amp;quot;alt&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- văn bản thay thế cho hình ảnh; xem WP:ALT --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'văn bản thay thế cho hình ảnh; xem [[WP:ALT]]'},&lt;br /&gt;
	[&amp;quot;coordinates&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- sử dụng {{Tọa độ}} --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'sử dụng {{tl|Tọa độ}}'},&lt;br /&gt;
	[&amp;quot;coords&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- sử dụng {{Tọa độ}} --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'sử dụng {{tl|Tọa độ}}'},&lt;br /&gt;
	[&amp;quot;tọa độ&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- sử dụng {{Tọa độ}} --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'sử dụng {{tl|Tọa độ}}'},&lt;br /&gt;
	[&amp;quot;native_name&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- tên trong ngôn ngữ địa phương; Nếu nhiều hơn một, riêng biệt ' ..&lt;br /&gt;
			'sử dụng {{Plainlist}} sử dụng {{lang}}, và bỏ qua native_name_lang --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'tên trong ngôn ngữ địa phương; Nếu nhiều hơn một, riêng biệt ' ..&lt;br /&gt;
			'sử dụng {{tl|Plainlist}}, sử dụng {{tl|lang}}, và bỏ qua {{thông số|native_name_lang}}'},&lt;br /&gt;
	[&amp;quot;native_name_lang&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- mã ngôn ngữ hai hoặc ba ký tự ISO --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'mã ngôn ngữ hai hoặc ba ký tự ISO'},&lt;br /&gt;
	[&amp;quot;start_date&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- sử dụng {{Start date|nnnn|tt|nn|df=y}} hoặc {{Ngày bắt đầu và tuổi|nnnn|tt|nn|df=yes}}--&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'sử dụng {{Tlx|Start date|nnnn|tt|nn|df=y}} hoặc {{Tlx|Ngày bắt đầu và tuổi|nnnn|tt|nn|df=yes}}'},&lt;br /&gt;
	[&amp;quot;end_date&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- sử dụng {{End date|nnnn|tt|nn|df=y}} --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'sử dụng {{tlx|Start date|nnnn|tt|nn|df=y}}'},&lt;br /&gt;
	[&amp;quot;url&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- sử dụng {{URL|ví dụ.com}} --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'sử dụng {{tl|URL}}'},&lt;br /&gt;
	[&amp;quot;website&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- sử dụng {{URL|ví dụ.com}} --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'sử dụng {{tls|URL|ví dụ.com}}'},&lt;br /&gt;
	[&amp;quot;trang chủ&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- sử dụng {{URL|ví dụ.com}} --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'sử dụng {{tls|URL|ví dụ.com}}'},&lt;br /&gt;
	[&amp;quot;country&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- không nên sử dụng {{VNM}}, {{flagcountry|Việt Nam}} và các bản mẫu tương tự khác. Xem thêm tại H:IB --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'không nên sử dụng {{tl|VNM}}, {{tlx|flagcountry|Việt Nam}} và các bản mẫu tương tự khác. Xem thêm tại [[H:IB]]'},&lt;br /&gt;
	[&amp;quot;quốc gia&amp;quot;] = {&lt;br /&gt;
		[&amp;quot;code&amp;quot;] = '&amp;lt;!-- không nên sử dụng {{VNM}}, {{flagcountry|Việt Nam}} và các bản mẫu tương tự khác. Xem thêm tại H:IB --&amp;gt;',&lt;br /&gt;
		[&amp;quot;dlist&amp;quot;] = 'không nên sử dụng {{tl|VNM}}, {{tlx|flagcountry|Việt Nam}} và các bản mẫu tương tự khác. Xem thêm tại [[H:IB]]'},&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
local removeDuplicates = require('Module:TableTools').removeDuplicates&lt;br /&gt;
local yesno = require('Module:Yesno')&lt;br /&gt;
&lt;br /&gt;
local function makeInvokeFunction(funcName)&lt;br /&gt;
	return function(frame)&lt;br /&gt;
		local getArgs = require('Module:Arguments').getArgs&lt;br /&gt;
		return p[funcName](getArgs(frame, {removeBlanks = false}))&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function extractParams(page)&lt;br /&gt;
	local source = mw.title.new(page, 'Template'):getContent()&lt;br /&gt;
&lt;br /&gt;
	local parameters = {}&lt;br /&gt;
	for parameter in string.gmatch(source, '{{{(.-)%f[}|&amp;lt;&amp;gt;]') do&lt;br /&gt;
		table.insert(parameters, parameter)&lt;br /&gt;
	end&lt;br /&gt;
	return removeDuplicates(parameters)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function map(tbl, transform)&lt;br /&gt;
	local returnTable = {}&lt;br /&gt;
	for k, v in pairs(tbl) do&lt;br /&gt;
		returnTable[k] = transform(v)&lt;br /&gt;
	end&lt;br /&gt;
	return returnTable&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function strMap(tbl, transform)&lt;br /&gt;
	local returnTable = map(tbl, transform)&lt;br /&gt;
	return table.concat(returnTable)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._check(args)&lt;br /&gt;
	local title = args._base or mw.title.getCurrentTitle().fullText&lt;br /&gt;
	return string.format(&lt;br /&gt;
		'{{#invoke:Check for unknown parameters|check|unknown=' ..&lt;br /&gt;
		'[[Thể loại:Trang sử dụng %s với tham số không rõ]]|%s}}', title,&lt;br /&gt;
		table.concat(extractParams(args.base), '|'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._code(args)&lt;br /&gt;
	local definitions = yesno(args.definitions)&lt;br /&gt;
	local pad = yesno(args.pad)&lt;br /&gt;
&lt;br /&gt;
	local parameters = extractParams(args.base)&lt;br /&gt;
	-- Space-pad the parameters to align the equal signs vertically&lt;br /&gt;
	if pad then&lt;br /&gt;
		local lengthPerPara = map(parameters, function (parameter)&lt;br /&gt;
			return string.len(parameter) end)&lt;br /&gt;
		-- Lua doesn't support printf's &amp;lt;*&amp;gt; to specify the width, apparently&lt;br /&gt;
		local fs = string.format('%%-%ss', math.max(unpack(lengthPerPara)))&lt;br /&gt;
		for i, parameter in pairs(parameters) do&lt;br /&gt;
			parameters[i] = string.format(fs, parameter)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local title = args._base or mw.title.getCurrentTitle().baseText&lt;br /&gt;
	return string.format([[{{%s&lt;br /&gt;
%s}}]], title, strMap(parameters,&lt;br /&gt;
		function(s)&lt;br /&gt;
			if definitions then&lt;br /&gt;
				return string.format('| %s = %s\n', s,&lt;br /&gt;
					DEFINITIONS[s] and DEFINITIONS[s].code or '')&lt;br /&gt;
			else&lt;br /&gt;
				return string.format('| %s = \n', s)&lt;br /&gt;
			end&lt;br /&gt;
		end))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._compare(args)&lt;br /&gt;
	local Set = require('Module:Set')&lt;br /&gt;
&lt;br /&gt;
	local function normaliseParams(parameters)&lt;br /&gt;
		local paramsNorm = {}&lt;br /&gt;
		-- Prepare a key lookup metatable, which will hold the original&lt;br /&gt;
		-- parameter names for each normalised parameter, e.g.&lt;br /&gt;
		-- [test] = {TEST, Test}. paramIndex functions like a Python&lt;br /&gt;
		-- defaultdict, where the default is a table.&lt;br /&gt;
		local paramIndex = setmetatable({}, {__index = function(t, k)&lt;br /&gt;
			if not rawget(t, k) then&lt;br /&gt;
				rawset(t, k, {})&lt;br /&gt;
			end&lt;br /&gt;
			return rawget(t, k)&lt;br /&gt;
		end})&lt;br /&gt;
		for _, parameter in pairs(parameters) do&lt;br /&gt;
			table.insert(paramsNorm,&lt;br /&gt;
				string.lower(string.gsub(parameter, '%A', '')))&lt;br /&gt;
			table.insert(paramIndex[&lt;br /&gt;
				string.lower(string.gsub(parameter, '%A', ''))], parameter)&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		paramsNorm = removeDuplicates(paramsNorm)&lt;br /&gt;
		-- Overload key lookup in paramsNorm. While [[Module:Set]] will&lt;br /&gt;
		-- operate on the table (which is to say, the normalised parameters&lt;br /&gt;
		-- array), key access will be by way of the paramIndex metatable.&lt;br /&gt;
		setmetatable(paramsNorm, {__index = paramIndex})&lt;br /&gt;
		return paramsNorm&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local baseParams = extractParams(args.base)&lt;br /&gt;
	local otherParams = extractParams(args.other)&lt;br /&gt;
	local baseNormParams = normaliseParams(Set.valueComplement(&lt;br /&gt;
			otherParams, baseParams))&lt;br /&gt;
	local otherNormParams = normaliseParams(otherParams)&lt;br /&gt;
&lt;br /&gt;
	return string.format([[Giống nhau:&lt;br /&gt;
%s&lt;br /&gt;
Tương tự nhau:&lt;br /&gt;
%s&lt;br /&gt;
Khác nhau:&lt;br /&gt;
%s]],&lt;br /&gt;
	strMap(Set.valueIntersection(baseParams, otherParams),&lt;br /&gt;
		function(v) return string.format('* %s\n', v) end),&lt;br /&gt;
	strMap(Set.valueIntersection(baseNormParams, otherNormParams),&lt;br /&gt;
		function(v) return string.format('* %s &amp;lt; %s [%s]\n',&lt;br /&gt;
			table.concat(baseNormParams[v], '; '),&lt;br /&gt;
			table.concat(otherNormParams[v], '; '),&lt;br /&gt;
			v)&lt;br /&gt;
		end),&lt;br /&gt;
	strMap(Set.valueComplement(otherNormParams, baseNormParams),&lt;br /&gt;
		function(v) return strMap(baseNormParams[v],&lt;br /&gt;
			function(s) return string.format('* %s\n', s) end)&lt;br /&gt;
		end))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._demo(args)&lt;br /&gt;
	local title = args._base and ('|_template=' .. args._base) or ''&lt;br /&gt;
	return string.format('{{Parameter names example%s|%s}}', title,&lt;br /&gt;
		table.concat(extractParams(args.base), '|'))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._vlist(args)&lt;br /&gt;
&lt;br /&gt;
	return string.format(&lt;br /&gt;
		'\n{{TemplateDataHeader}}\n' ..&lt;br /&gt;
		'\n&amp;lt;templatedata&amp;gt;\n' ..&lt;br /&gt;
		'{\n' ..&lt;br /&gt;
		'	&amp;quot;params&amp;quot;: {\n' ..&lt;br /&gt;
		'		&amp;quot;%s'..&lt;br /&gt;
		'&amp;quot;: {}\n'..&lt;br /&gt;
		'},\n&amp;quot;format&amp;quot;: &amp;quot;block&amp;quot;\n'..&lt;br /&gt;
		'}'..&lt;br /&gt;
		'&amp;lt;/templatedata&amp;gt;\n', &lt;br /&gt;
		table.concat(extractParams(args.base), '&amp;quot;: {},\n		&amp;quot;'))&lt;br /&gt;
end&lt;br /&gt;
function p._dlist(args)&lt;br /&gt;
	local definitions = yesno(args.definitions, true)&lt;br /&gt;
	return strMap(extractParams(args.base),&lt;br /&gt;
		function(s)&lt;br /&gt;
			if definitions then&lt;br /&gt;
				return string.format('; %s: %s\n', s,&lt;br /&gt;
					DEFINITIONS[s] and DEFINITIONS[s].dlist or '')&lt;br /&gt;
			else&lt;br /&gt;
				return string.format('; %s: \n', s)&lt;br /&gt;
			end&lt;br /&gt;
		end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p._list(args)&lt;br /&gt;
	return strMap(extractParams(args.base),&lt;br /&gt;
		function(s) return string.format('* %s\n', s) end)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
p.check = makeInvokeFunction('_check')&lt;br /&gt;
p.code = makeInvokeFunction('_code')&lt;br /&gt;
p.compare = makeInvokeFunction('_compare')&lt;br /&gt;
p.demo = makeInvokeFunction('_demo')&lt;br /&gt;
p.dlist = makeInvokeFunction('_dlist')&lt;br /&gt;
p.list = makeInvokeFunction('_list')&lt;br /&gt;
p.vlist = makeInvokeFunction('_vlist')&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Taitamtinh</name></author>
	</entry>
</feed>