پودمان:COVID-19 data
ظاهر
این ماژول و الگوها، دادههای دنیاگیری کووید-۱۹ را نمایش میدهند.
اجزاء اصلی
[ویرایش]- پودمان:COVID-19 data (پودمان)
{{#invoke:COVID-19 data|main|columns=ستونها|sort=مرتبسازی بر اساس ستون}}
(جدول)
- الگو:دادههای کووید-۱۹ (جدول اصلی)
{{دادههای کووید-۱۹}}
- الگو:دادههای کووید-۱۹/متن (اعداد و ارقام بهصورت متن ساده)
{{دادههای کووید-۱۹/متن|کد کشور یا منطقه|نوع}}
- الگو:دادههای کووید-۱۹/تاریخ (آخرین تاریخ بهروزرسانی دادهها)
{{دادههای کووید-۱۹/تاریخ|format=فرمت تاریخ}}
- الگو:دادههای کووید-۱۹/یادکرد (یادکرد منبع دادهها)
{{دادههای کووید-۱۹/یادکرد}}
- الگو:دادههای کووید-۱۹/دادهها (پروندهٔ جیسان دادهها)
جدولها
[ویرایش]بدنهٔ هر جدول را میتوان با استفاده از تابع main()
ایجاد کرد:
{{#invoke:COVID-19 data|main|columns=ستونها|sort=مرتبسازی بر اساس ستون}}
این تابع تنها محتوای جدول (بدنهٔ آن) را تولید میکند. سرآیندها و عنوانها را میتوان بهطور مستقل از پودمان شخصیسازی کرد تا امکان سبکبندی وجود داشتهباشد.
برای جلوگیری از ایجاد ارجاعهای تکراری و همچنین بهروزرسانی خودکار نویسندگان و تاریخ بازبینی منبع، از ارجاع زیر (ترجیحاً در عنوان جدول) استفاده کنید:
<ref name="Template:COVID-19 data">{{دادههای کووید-۱۹/یادکرد}}</ref>
صفحه | م.ا.؟ | م؟ | ک.و.؟ | د.و.؟ | و.ک.؟ | سایر؟ | ت؟ | توضیحات |
---|---|---|---|---|---|---|---|---|
الگو:دادههای کووید-۱۹ | جدول اصلی | |||||||
Template:COVID-19 vaccination data | * | * | * | *vac() Fallback: VT/VD/VF
| ||||
الگو:دادههای دنیاگیری ۲۰۱۹–۲۰۲۰ کروناویروس | Other "hub" template | |||||||
Template:COVID-19 vaccination data in North America | ||||||||
Template:COVID-19 pandemic death rates | مرگها/میلیون | |||||||
Template:COVID-19 pandemic death rates by country | بزرگتر، همراه با شمارهگذاری ردیفها |
منابع
[ویرایش]
local p = {}
local num_conv = require('Module:Numeral converter').convert
local data_title = mw.title.new(
'الگو:دادههای کووید-۱۹/دادهها'
)
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 = mw.ustring.gsub(int, ",", "٬")
int = minus .. int
return num_conv('fa', int)
end
function p.main()
local out = ''
local data_s = {}
-- Build new table
local locations = {}
if mw.getCurrentFrame().args['locations'] then
for location in mw.ustring.gmatch(
mw.getCurrentFrame().args['locations'],
'([^,]+)'
) do
locations[location] = true
end
else
locations = nil
end
for key, value in pairs(data) do
local index
if mw.getCurrentFrame().args['sort'] then
if value[mw.getCurrentFrame().args['sort']] then
index = value[mw.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 locations[key] then
data_s[#data_s+1] = value
data_s[#data_s]['_index'] = index
data_s[#data_s]['_code'] = key
end
end
-- Sort the new table
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
)
-- Get columns
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 mw.ustring.gmatch(
mw.getCurrentFrame().args['columns'],
'([^,]+)'
) do
columns[column] = 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
-- Generate wikitext content
for _, row in ipairs(data_s) do
-- Test for empty rows
local has_data = false
for _, column in pairs(columns_index) do
if columns[column] and row[column] then
has_data = true
end
end
if has_data then -- Only add row if it has data
out = out .. '\n|-'
if row._code == 'XW' then
out = out .. 'class="sorttop static-row-header"'
end
out = out .. '\n'
-- Add the flag
if not mw.getCurrentFrame().args['noflag'] then
if row._code == 'XW' then
out = out ..
'| [[پرونده:OOjs UI icon globe.svg|16px|alt=|link=]]'
else
flag_params = {row.name}
-- So that it's not too large
if row.name == 'کالدونیای جدید' then
flag_params[2] = 'merged'
end
out = out .. '|' ..
mw.getCurrentFrame():expandTemplate{
title = 'پرچمک',
args = flag_params
}
end
end
-- Add country name
if row._code == 'XW' then
out = out .. '|| [[دنیاگیری کووید-۱۹|' .. row.name .. ']]'
elseif row._code == 'BT' then
out = out ..
'|| [[دنیاگیری کووید-۱۹ در بوتان (کشور)' ..
'|' .. row.name .. ']]'
elseif row._code == 'GG' then
out = out ..
'|| [[دنیاگیری کووید-۱۹ در گرنزی (جزیره)' ..
'|' .. row.name .. ']]'
else
out = out ..
'|| [[دنیاگیری کووید-۱۹ در ' .. row.name ..
'|' .. row.name .. ']]'
end
-- Add notes
if row.note then
out = out ..
mw.getCurrentFrame():expandTemplate{
title = 'Efn',
args = {row.note}
}
end
-- Fill out columns
for _, column in ipairs(columns_index) do
if columns[column] then
if row[column] then
out = out .. '|| data-sort-value=' ..
tostring(row[column]) ..
'|' .. format_num(row[column])
else
out = out ..
'|| style="background: #cccccc;"' ..
' data-sort-value=0 | —'
end
end
end
end
end
out = out .. '\n|- class="sortbottom static-row-header" ' ..
'style="text-align: right;"\n' ..
'| colspan=8 style="width: 0;" |' ..
mw.getCurrentFrame():expandTemplate{
title = 'یادداشتها'
}
return out
end
function p.vac()
local out = ''
local data_s = {}
local has_country_num_doses = false
local has_country_num_fully = false
-- Build new table
for key, value in pairs(data) do
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
-- Sort the new table
table.sort(
data_s,
function(x, y)
return (x.index > y.index)
end
)
-- Generate wikitext content
for _, row in pairs(data_s) do
-- Add the flag
if row.name == 'جهان' then
out = out ..
'|-\n| [[پرونده:OOjs UI icon globe.svg|16px|alt=|link=]]' ..
'|| style="text-align:right;" | [[گسترش واکسن کووید-۱۹|جهان]]'
else
flag_params = {row.name}
-- So that it's not too large
if row.name == 'کالدونیای جدید' then
flag_params[2] = 'merged'
end
out = out ..
'|-\n|' ..
mw.getCurrentFrame():expandTemplate{
title = 'پرچمک',
args = flag_params
} ..
'|| style="text-align:right;" | [[واکسیناسیون کووید-۱۹ در ' .. row.name ..
'|' .. row.name .. ']]'
end
-- Add note
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 = 'Font color',
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 = 'Font color',
args = {'darkorange', format_num(row.fully_vaccinated)}
} ..
mw.getCurrentFrame():expandTemplate{
title = 'Efn',
args = {name = 'country_num_fully'}
}
end
-- Add the percentage
if row.percent_vaccinated then
out = out .. '||' .. mw.ustring.format("%.1f", num_conv('fa', row.percent_vaccinated)) .. '٪'
else
out = out .. '|| style="background: #cccccc;" |'
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',
'دادههای این کشور برابر با ' ..
mw.getCurrentFrame():expandTemplate{
title = 'Font color',
args = {
'darkred',
'تعداد دوزهای واکسن تزریقشده'
}
} ..
'است، نه فقط دوز نخست.'
}
}
end
if has_country_num_fully then
notelist_refs = notelist_refs ..
mw.getCurrentFrame():expandTemplate{
title = 'Efn',
args = {
name = 'country_num_fully',
'دادههای این کشور برابر با ' ..
mw.getCurrentFrame():expandTemplate{
title = 'Font color',
args = {
'darkorange',
'تعداد افراد کاملاً واکسینهشده'
}
} ..
'است، نه فقط تعداد افرادی که ' ..
'دست کم یک دوز واکسن را دریافت کردهاند.'
}
}
end
out = out .. '|- class="sortbottom"\n| colspan=4 |' ..
mw.getCurrentFrame():expandTemplate{
title = 'یادداشتها',
args = {refs = notelist_refs}
}
end
return out
end
function p.text()
local location = mw.getCurrentFrame().args['location']
local column = mw.getCurrentFrame().args['column']
return data[location][column]
end
return p