Mô đun:Dữ liệu đại dịch COVID-19

local vWikiData = mw.loadData('Mô đun:Dữ liệu đại dịch COVID-19/Định nghĩa');
local cName = vWikiData.countryName;
local p = {}
local data_title = mw.title.new(
	'Bản mẫu:Dữ liệu đại dịch COVID-19/dữ liệu'
)
local data_content = data_title:getContent()
local data = mw.text.jsonDecode(data_content)
function format_num(number)
	if not number then
		return 
	end
	local _, _, minus, int, _ = tostring(number):find('(-?)(%d+)(.?%d*)')
	int = int:reverse():gsub("(%d%d%d)", "%1.")
	int = int:reverse():gsub("^%.", "")
	int = minus .. int
	return int
end
function p.main()
	local out = 
	local data_s = {}
	-- Khởi tạo bảng mới
	local locations = {}
	if mw.getCurrentFrame().args'locations' then
		for location in string.gmatch(
			mw.getCurrentFrame().args'locations',
			'(^,+)'
		) do
			locationslocation = true
		end
	else
		locations = nil
	end
	for key, value in pairs(data) do
		local index
		value.en_name = value.name
		if (value.name and cNamekey ~= nil) then
			value.name = cNamekey
		end
		if mw.getCurrentFrame().args'sort' then
			if valuemw.getCurrentFrame().args'sort' then
				index = valuemw.getCurrentFrame().args'sort'
			else
				index = 0
			end
		else
			if value.cases then
				index = value.cases
			elseif value.deaths then
				index = value.deaths
			elseif value.vaccine_doses then
				index = value.vaccine_doses
			elseif value.total_vaccinated then
				index = value.total_vaccinated
			elseif value.fully_vaccinated then
				index = value.fully_vaccinated
			else index = 0
			end
		end
		if (not locations) or locationskey then
			data_s#data_s+1 = value
			data_s#data_s'_index' = index
			data_s#data_s'_code' = key
		end
	end
	-- Sắp xếp bảng
	table.sort(
		data_s,
		function(x, y)
			if x._code == 'XW' then
				return true
			elseif y._code == 'XW' then
				return false
			else
				return (x._index > y._index)
			end
		end
	)
	-- Khởi tạo cột
	local columns = {
		cases = false,
		deaths = false,
		recoveries = false,
		total_vaccinated = false,
		vaccine_doses = false,
		fully_vaccinated = false,
		percent_vaccinated = false,
		deaths_per_million = false
	}
	local columns_index = {}
	if mw.getCurrentFrame().args'columns' then
		for column in string.gmatch(
			mw.getCurrentFrame().args'columns',
			'(^,+)'
		) do
			columnscolumn = true
			columns_index#columns_index+1 = column
		end
	else
		columns = {
			cases = true,
			deaths = true,
			recoveries = false,
			total_vaccinated = true,
			vaccine_doses = true,
			fully_vaccinated = true,
			percent_vaccinated = false,
			deaths_per_million = false
		}
		columns_index = {
			'cases',
			'deaths',
			'recoveries',
			'total_vaccinated',
			'vaccine_doses',
			'fully_vaccinated',
			'percent_vaccinated',
			'deaths_per_million'
		}
	end
	-- Tạo nội dung wikitext
	for _, row in ipairs(data_s) do
		-- Kiểm tra các hàng rỗng
		local has_data = false
		for _, column in pairs(columns_index) do
			if columnscolumn and rowcolumn then
				has_data = true
			end
		end
		if has_data then -- Chỉ thêm hàng nếu có dữ liệu
			out = out .. '\n
			if row._code == 'XW' then
				out = out .. 'class="sorttop static-row-header"'
			end
			out = out .. '\n'
			-- Thêm cờ
			if not mw.getCurrentFrame().args'noflag' then
				if row._code == 'XW' then
					out = out ..
						'| link='
				else
					flag_params = {row.en_name}
					-- Làm cho nó không quá lớn
					if row.name == 'New Caledonia' then
						flag_params2 = 'merged'
					end
					out = out .. '|' ..
						mw.getCurrentFrame():expandTemplate{
							title = 'Flagicon',
							args = flag_params
						}
				end
			end
			-- Thêm tên
			if row._code == 'XW' then
				out = out .. '
' .. row.name .. 
			elseif row._code == 'CN' then
				out = out ..
					'
' .. row.name .. 
			else
				out = out ..
					'
' .. row.name .. 
			end
			-- Add notes
			if row.note then
				out = out ..
					mw.getCurrentFrame():expandTemplate{
						title = 'Efn',
						args = {row.note}
					}
			end
			-- Nạp các cột
			for _, column in ipairs(columns_index) do
				if columnscolumn then
					if rowcolumn then
						out = out .. '
data-sort-value=' ..
							tostring(rowcolumn) ..
							'|' .. format_num(rowcolumn)
					else
						out = out ..
							'
							' data-sort-value=0 | —'
					end
				end
			end
		end
	end
	out = out .. '\n
			'| colspan=8 style="width: 0;" |' ..
			mw.getCurrentFrame():expandTemplate{
				title = 'Danh sách ghi chú'
			}
	return out
end
function p.vac()
	local out = 
	local data_s = {}
	local has_country_num_doses = false
	local has_country_num_fully = false
	-- Khởi tạo bảng mới
	for key, value in pairs(data) do
		value.en_name = value.name
		if (value.name and cNamekey ~= nil) then
			value.name = cNamekey
		end
		if value.total_vaccinated then
			data_s#data_s+1 = value
			data_s#data_s'index' = value.total_vaccinated
		elseif value.vaccine_doses then
			data_s#data_s+1 = value
			data_s#data_s'index' = value.vaccine_doses
		elseif value.fully_vaccinated then
			data_s#data_s+1 = value
			data_s#data_s'index' = value.fully_vaccinated
		end
	end
	-- Sắp xếp bảng mới
	table.sort(
		data_s,
		function(x, y)
			return (x.index > y.index)
		end
	)
	-- Tạo nội dung wikitext
	for _, row in pairs(data_s) do
		-- Add the flag
		if row.en_name == 'World' then
			out = out ..
				'
				'
Thế giới'
		else
			flag_params = {row.en_name}
			-- Làm nó không quá lớn
			if row.name == 'New Caledonia' then
				flag_params2 = 'merged'
			end
			out = out ..
				'
				mw.getCurrentFrame():expandTemplate{
					title = 'Flagicon',
					args = flag_params
				} ..
				'
' ..  .. row.name .. 
		end
		-- Thêm ghi chú
		if row.note_vaccination then
			out = out ..
				mw.getCurrentFrame():expandTemplate{
					title = 'Efn',
					args = {row.note_vaccination}
				}
		end
		-- Add the number
		if row.total_vaccinated then
			out = out ..
				'
' .. format_num(row.total_vaccinated)
		elseif row.vaccine_doses then
			has_country_num_doses = true
			out = out ..
				'
' ..
				mw.getCurrentFrame():expandTemplate{
					title = 'Màu chữ',
					args = {'darkred', format_num(row.vaccine_doses)}
				} ..
				mw.getCurrentFrame():expandTemplate{
					title = 'Efn',
					args = {name = 'country_num_doses'}
				}
		elseif row.fully_vaccinated then
			has_country_num_fully = true
			out = out ..
				'
' ..
				mw.getCurrentFrame():expandTemplate{
					title = 'Màu chữ',
					args = {'darkorange', format_num(row.fully_vaccinated)}
				} ..
				mw.getCurrentFrame():expandTemplate{
					title = 'Efn',
					args = {name = 'country_num_fully'}
				}
		end
		-- Thêm phần trăm
		if row.percent_vaccinated then
			out = out .. '
' .. string.format("%.1f", row.percent_vaccinated):gsub("%.", ",") .. '%'
		else
			out = out .. '
'
		end
		out = out .. '\n'
	end
	if has_country_num_doses or has_country_num_fully then
		notelist_refs = 
		if has_country_num_doses then
			notelist_refs = notelist_refs ..
				mw.getCurrentFrame():expandTemplate{
					title = 'Efn',
					args = {
						name = 'country_num_doses',
						'Dữ liệu của quốc gia này là ' ..
							mw.getCurrentFrame():expandTemplate{
								title = 'Màu chữ',
								args = {
									'darkred',
									'tổng số liều vắc xin đã tiêm'
								}
							} ..
							', không chỉ là liều đầu tiên.'
					}
				}
		end
		if has_country_num_fully then
			notelist_refs = notelist_refs ..
				mw.getCurrentFrame():expandTemplate{
					title = 'Efn',
					args = {
						name = 'country_num_fully',
						'Dữ liệu của quốc gia này là ' ..
							mw.getCurrentFrame():expandTemplate{
								title = 'Màu chữ',
								args = {
									'darkorange',
									'số người được tiêm chủng đầy đủ'
								}
							} ..
							', không phải là số người chỉ mới tiêm 1 lần.'
					}
				}
		end
		out = out .. '
			mw.getCurrentFrame():expandTemplate{
				title = 'Danh sách ghi chú',
				args = {refs = notelist_refs}
			}
	end
	return out
end
function p.text()
	local location = mw.getCurrentFrame().args'location'
	local column = mw.getCurrentFrame().args'column'
	return datalocationcolumn or 'Không xác định'
end
return p