Модуль:USCensusPop
Перейти к навигации
Перейти к поиску
Функции
[править код]show
[править код]Эта функция вызывается в шаблоне {{USCensusPop}} и показывает в виде таблицы годы переписи населения в США, число зарегистрированных на переписи жителей и процентное изменение населения по сравнению с предыдущей переписью.
- Использование
{{#invoke:USCensusPop|show}}
- Параметры
Принимает следующие параметры вызывающего шаблона:
|1870 =
: численность населения в году|1870n =
: примечание к году (обычно это звёздочка)|estyear =
: год ожидаемой численности|estimate =
: ожидаемая численности|estref =
: ссылка на АИ ожидаемой численности|footnote =
: примечание под таблицей|align =
выравнивание:- right плавающий по правому краю страницы
- left плавающий по левому краю страницы
- center по центру
- none слева, запрет обтекания шаблона
|collapsed =
- yes отображение в свернутом виде
p = {}
local function round(value, precision)
local rescale = math.pow( 10, precision );
return math.floor( value * rescale + 0.5 ) / rescale;
end
function p.show(frame)
local parent = frame:getParent(frame)
local args = parent.args;
local list = {}
for arg in pairs( args) do
local year = tonumber(arg)
local value = tonumber(args[arg])
if year ~= nil and value ~= nil then
table.insert(list, {['year'] = year, ['value'] = value })
end
end
if table.getn(list) == o then
-- нет данных
return ''
end
local estyear = args['estyear'];
if estyear ~= nil then
estyear = tonumber(estyear)
end
local estimate = args['estimate'];
if estimate ~= nil then
estimate = tonumber(estimate)
end
if estyear ~= nil and estimate ~= nil then
table.insert(list, {['year'] = estyear, ['value'] = estimate })
end
table.sort(list, function(a, b) return a.year < b.year end)
local lang = mw.language.new('ru');
local result = mw.html.create('table')
local collapsed = args['collapsed'];
local class = 'standard'
if collapsed ~= nil then
class = class .. ' collapsible collapsed'
end
local aligns = {
['left'] = 'float: left; clear: left; margin: 0 1em 1em 0;',
['center'] = 'float: none; margin-left: auto; margin-right: auto;',
['none'] = 'float: none; margin: 0 1em 1em 0;',
['right'] = 'float: right; clear: right; margin: 0 0 1em 1em;'
}
local align = args['align'] or 'right'
if aligns[align] == nil then
align = 'right'
end
result
:addClass(class)
:cssText(aligns[align] .. ' text-align:right')
:attr('cellspacing', '0')
:attr('cellpadding', '1')
local title = args['title'] or 'Перепись населения'
result
:newline()
:tag('caption')
:css('background-color', 'var(--background-color-progressive-subtle, #eaf3ff)')
:css('border', '1px solid var(--border-color-base,#a2a9b1)')
:css('color', 'inherit')
:css('font-size', '110%')
:css('margin-bottom', '-1px')
:css('padding', '0.2em 0.4em')
:wikitext(title)
:done()
:done()
:newline()
result
:tag('tr')
:cssText('font-size:95%')
:tag('th')
:attr('scope', 'col')
:wikitext('Год переписи')
:done()
:tag('th')
:attr('scope', 'col')
:wikitext(frame:expandTemplate{title = 'abbr', args = {'Нас.', 'Население', '0'}})
:done()
:tag('th')
:attr('scope', 'col')
:done()
:tag('th')
:attr('scope', 'col')
:wikitext(frame:expandTemplate{title = 'abbr', args = {'%±', 'Изменение в процентах', '0'}})
:done()
:done()
:newline()
for i, row in ipairs(list) do
local change = 0
if i > 1 then
change = 100 * list[i].value/list[i-1].value - 100
end
list[i].change = change
-- mw.logObject(list[i], 'row')
local line = result
:tag('tr')
if row.year == estyear then
line:tag('th')
:attr('scope', 'row')
:css('background', 'transparent')
:css('color', 'inherit')
:css('text-align', 'center')
:wikitext(frame:expandTemplate{title = 'comment', args = {row.year, 'Текущее значение'}})
:done()
else
line:tag('th')
:attr('scope', 'row')
:css('background', 'transparent')
:css('color', 'inherit')
:css('text-align', 'center')
:wikitext('[[Перепись населения США (' .. row.year .. ')|' .. row.year .. ']]')
:done()
end
line:tag('td')
:cssText('padding-left:8px')
:wikitext(row.value)
:done()
if row.year == estyear then
line:tag('td')
:cssText('padding-left:0; text-align:left;')
:wikitext(args['estref'] or '')
:done()
else
line:tag('td')
:cssText('padding-left:0; text-align:left;')
:wikitext(args[row.year .. 'n'] or '')
:done()
end
if change == 0 then
line
:tag('td')
:cssText('padding-left:0; text-align:center;')
:wikitext('—')
:done()
else
line
:tag('td')
:cssText('padding-left:8px;')
:wikitext( lang:formatNum(round(change, 1)) .. '%')
:done()
end
result
:done()
:newline()
end
local footnote = args['footnote'];
if footnote ~= nil and footnote ~= '' then
local years = ''
if list[1] ~= nil then
years = list[1].year
end
if list[#list] ~= nil then
years = years .. '–' .. list[#list].year
end
if years ~= '' then
years = years.. ' '
end
result
:tag('tr')
:tag('td')
:attr('colspan', '4')
:cssText('border-top:1px solid black; font-size:85%; text-align:left')
:wikitext(years .. footnote)
:done()
:done()
end
result:allDone()
-- mw.logObject(list)
return tostring(result)
end
return p