Modul:Weather box
Vzhled
V tomto článku byl použit překlad textu z článku Module:Weather box na anglické Wikipedii.
-- Připraví [[Šablona:Podnebí]].
local function stripToNil(text)
-- If text is a non-empty string, return its trimmed content.
-- Otherwise, return nothing (text is an empty string or is not a string).
if type(text) == 'string' then
return text:match('(%S.-)%s*$')
end
end
local function isAny(args, prefix)
local months = { 'leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec' }
for _, month in ipairs(months) do
if stripToNil(args[prefix .. ' ' .. month]) then
return true
end
end
end
local function makeLabel(args, is_first, base, what)
local first
if isAny(args, ' ' .. what .. ' cm') then
first = 'cm'
else
if isAny(args, ' ' .. what .. ' mm') then
first = 'mm'
else
first = (what == 'sníh' or false)
and 'cm'
or 'mm'
end
end
local second = 'palce'
if stripToNil(args['nejprve imperiální']) then
first, second = second, first
end
if is_first then
if stripToNil(args['jeden řádek']) then
first = first .. ' (' .. second .. ')'
end
else
first = second
end
return base .. ' [' .. first .. ']'
end
local function makeSources(frame, args)
local source1 = stripToNil(args['zdroj']) or stripToNil(args['zdroj 1']) or stripToNil(args['zdroj1'])
local source2 = stripToNil(args['zdroj 2']) or stripToNil(args['zdroj2'])
local result = '|-\n|colspan="14" style="text-align:center;font-size:88%;"|'
local text
if source1 or source2 then
if source1 and source2 then
text = 'Zdroj 1: ' .. source1 .. '<br>' .. 'Zdroj 2: ' .. source2
else
text = 'Zdroj: ' .. (source1 and source1 or source2)
end
else
text = frame:expandTemplate({ title = 'doplňte zdroj', args = {date = stripToNil(args['datum přístupu'])} })
end
return result .. text .. '\n|}'
end
local function getDefinitions(frame, args)
-- Return a list of tables or strings that define each row.
local navbar = require('Module:Navbar')._navbar
local function _if(parm, a, b)
return stripToNil(args[parm]) and a or b or ''
end
local function _ifset(parm, a)
return stripToNil(args[parm]) and args[parm] or a
end
local function _ifany(prefix)
return isAny(args, prefix)
end
return {
----------- HEADER ----------
'{| class="wikitable ' .. _if('open', '', 'collapsible' .. _if('collapsed', ' collapsed')) ..
'" style="width:' .. _ifset('width', '100%') ..
'; text-align:center; line-height: 1.6em; margin:' ..
_ifset('margin', 'auto') .. ';"' ..
_if('open',
-- Following intentionally shows "{{{location}}}" if parameter is blank to alert editor.
'\n|+' .. _if('místo', args['místo'], '{{{místo}}}') .. ' – podnebí',
'\n|-' ..
'\n!colspan="14" | ' ..
_if('name',
navbar({_if('místo', args['místo'], '{{{místo}}}') .. ' – podnebí', args['název'], collapsible=1}),
_if('místo', args['místo'], '{{{místo}}}') .. ' – podnebí'
)
) ..
[=[
|-
!scope="row" |Měsíc
!scope="col" |leden
!scope="col" |únor
!scope="col" |březen
!scope="col" |duben
!scope="col" |květen
!scope="col" |červen
!scope="col" |červenec
!scope="col" |srpen
!scope="col" |září
!scope="col" |říjen
!scope="col" |listopad
!scope="col" |prosinec
!scope="col" style="border-left-width:medium" |Rok
]=],
{---------- nejvyšší pocitová teplota ----------
WANTROW = _ifany('nejvyšší pocitová teplota') and (not _ifset('nejprve imperiální') or _ifset('jeden řádek')),
mode = 'výchozí',
group_name = 'nejvyšší pocitová teplota',
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Nejvyšší [[pocitová teplota]]',
annual_mode = 'max',
},
{---------- FIRST LINE nejvyšší teplota ----------
WANTROW = _ifany('nejvyšší teplota C') or _ifany('nejvyšší teplota F'),
mode = 'teplota',
group_name = 'nejvyšší teplota',
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Nejvyšší teplota [°' .. _if('nejprve imperiální', 'F', 'C') .. _if('jeden řádek', ' (°' .. _if('nejprve imperiální', 'C', 'F') .. ')') .. ']',
annual_mode = 'max',
},
{---------- FIRST-SECOND LINE průměr nejvyšších teplot ----------
WANTROW = _ifany('průměr nejvyšších teplot C') or _ifany('průměr nejvyšších teplot F'),
mode = 'teplota',
group_name = 'průměr nejvyšších teplot',
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Průměr nejvyšších teplot [°' .. _if('nejprve imperiální', 'F', 'C') .. _if('jeden řádek', ' (°' .. _if('nejprve imperiální', 'C', 'F') .. ')') .. ']',
annual_mode = 'max',
},
{---------- FIRST LINE nejvyšší průměrná denní teplota ----------
WANTROW = _ifany('nejvyšší průměrná denní teplota C') or _ifany('nejvyšší průměrná denní teplota F'),
mode = 'teplota',
group_name = 'nejvyšší průměrná denní teplota',
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Nejvyšší průměrná denní teplota [°' .. _if('nejprve imperiální', 'F', 'C') .. _if('jeden řádek', ' (°' .. _if('nejprve imperiální', 'C', 'F') .. ')') .. ']',
annual_mode = 'avg',
},
{---------- FIRST LINE průměrná teplota ----------
WANTROW = _ifany('průměrná teplota C') or _ifany('průměrná teplota F'),
mode = 'teplota',
group_name = 'průměrná teplota',
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Průměrná teplota [°' .. _if('nejprve imperiální', 'F', 'C') .. _if('jeden řádek', ' (°' .. _if('nejprve imperiální', 'C', 'F') .. ')') .. ']',
annual_mode = 'avg',
},
{---------- FIRST LINE nejnižší průměrná denní teplota ----------
WANTROW = _ifany('nejnižší průměrná denní teplota C') or _ifany('nejnižší průměrná denní teplota F'),
mode = 'teplota',
group_name = 'nejnižší průměrná denní teplota',
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Nejnižší průměrná denní teplota [°' .. _if('nejprve imperiální', 'F', 'C') .. _if('jeden řádek', ' (°' .. _if('nejprve imperiální', 'C', 'F') .. ')') .. ']',
annual_mode = 'avg',
},
{---------- FIRST-SECOND LINE průměr nejnižších teplot ----------
WANTROW = _ifany('průměr nejnižších teplot C') or _ifany('průměr nejnižších teplot F'),
mode = 'teplota',
group_name = 'průměr nejnižších teplot',
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Průměr nejnižších teplot [°' .. _if('nejprve imperiální', 'F', 'C') .. _if('jeden řádek', ' (°' .. _if('nejprve imperiální', 'C', 'F') .. ')') .. ']',
annual_mode = 'min',
},
{---------- FIRST LINE nejnižší teplota ----------
WANTROW = _ifany('nejnižší teplota C') or _ifany('nejnižší teplota F'),
mode = 'teplota',
group_name = 'nejnižší teplota',
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Nejnižší teplota [°' .. _if('nejprve imperiální', 'F', 'C') .. _if('jeden řádek', ' (°' .. _if('nejprve imperiální', 'C', 'F') .. ')') .. ']',
annual_mode = 'min',
},
{---------- nejnižší pocitová teplota ----------
WANTROW = _ifany('nejnižší pocitová teplota') and (not _ifset('nejprve imperiální') or _ifset('jeden řádek')),
mode = 'výchozí',
group_name = 'nejnižší pocitová teplota',
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Nejnižší pocitová teplota',
annual_mode = 'min',
},
{---------- FIRST LINE srážky ----------
WANTROW = _ifany('srážky cm') or _ifany('srážky mm') or _ifany('srážky palce'),
mode = 'srážky',
group_name = 'srážky',
color_scheme = _ifset('barva srážek', 'p'),
date_mode = true,
scale_factor = '1',
prefer_cm = false,
label = makeLabel(args, true, '[[Srážky]]', 'srážky'),
annual_mode = 'sum',
},
{---------- FIRST LINE maximální srážky ----------
WANTROW = _ifany('maximální srážky cm') or _ifany('maximální srážky mm') or _ifany('maximální srážky palce'),
mode = 'srážky',
group_name = 'maximální srážky',
color_scheme = _ifset('barva deště', 'p'),
date_mode = true,
scale_factor = '1',
prefer_cm = false,
label = makeLabel(args, true, 'Maximální srážky', 'maximální srážky'),
annual_mode = 'sum',
},
{---------- FIRST LINE sníh ----------
WANTROW = _ifany('sníh cm') or _ifany('sníh mm') or _ifany('sníh palce'),
mode = 'srážky',
group_name = 'sníh',
prefer_cm = true,
color_scheme = _ifset('barva sněhu', 'p'),
date_mode = true,
scale_factor = '1',
label = makeLabel(args, true, '[[Sníh]]', 'sníh'),
annual_mode = 'sum',
},
{---------- SECOND LINE nejvyšší teplota ----------
WANTROW = not _ifset('jeden řádek') and (_ifany('nejvyšší teplota C') or _ifany('nejvyšší teplota F')),
mode = 'teplota',
group_name = 'nejvyšší teplota',
second_line = true,
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Nejvyšší teplota [°' .. _if('nejprve imperiální', 'C', 'F') .. ']',
annual_mode = 'max',
},
{---------- SECOND LINE nejvyšší průměrná denní teplota ----------
WANTROW = not _ifset('jeden řádek') and (_ifany('nejvyšší průměrná denní teplota C') or _ifany('nejvyšší průměrná denní teplota F')),
mode = 'teplota',
group_name = 'nejvyšší průměrná denní teplota',
second_line = true,
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Nejvyšší průměrná denní teplota [°' .. _if('nejprve imperiální', 'C', 'F') .. ']',
annual_mode = 'avg',
},
{---------- SECOND LINE průměrná teplota ----------
WANTROW = not _ifset('jeden řádek') and (_ifany('průměrná teplota C') or _ifany('průměrná teplota F')),
mode = 'teplota',
group_name = 'průměrná teplota',
second_line = true,
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Průměrná teplota [°' .. _if('nejprve imperiální', 'C', 'F') .. ']',
show = _if('nejprve imperiální', '1', '2'),
annual_mode = 'avg',
},
{---------- SECOND LINE nejnižší průměrná denní teplota ----------
WANTROW = not _ifset('jeden řádek') and (_ifany('nejnižší průměrná denní teplota C') or _ifany('nejnižší průměrná denní teplota F')),
mode = 'teplota',
group_name = 'nejnižší průměrná denní teplota',
second_line = true,
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Nejnižší průměrná denní teplota [°' .. _if('nejprve imperiální', 'C', 'F') .. ']',
show = _if('nejprve imperiální', '1', '2'),
annual_mode = 'avg',
},
{---------- SECOND LINE nejnižší teplota ----------
WANTROW = not _ifset('jeden řádek') and (_ifany('nejnižší teplota C') or _ifany('nejnižší teplota F')),
mode = 'teplota',
group_name = 'nejnižší teplota',
second_line = true,
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Nejnižší teplota [°' .. _if('nejprve imperiální', 'C', 'F') .. ']',
show = _if('nejprve imperiální', '1', '2'),
annual_mode = 'min',
},
{---------- SECOND LINE srážky ----------
WANTROW = not _ifset('jeden řádek') and (_ifany('srážky cm') or _ifany('srážky mm') or _ifany('srážky palce')),
mode = 'srážky',
group_name = 'srážky',
second_line = true,
color_scheme = _ifset('barva srážek', 'p'),
date_mode = true,
scale_factor = '1',
prefer_cm = false,
label = makeLabel(args, false, 'Srážky', 'srážky'),
annual_mode = 'sum',
},
{---------- SECOND LINE maximální srážky ----------
WANTROW = not _ifset('jeden řádek') and (_ifany('maximální srážky cm') or _ifany('maximální srážky mm') or _ifany('maximální srážky palce')),
mode = 'srážky',
group_name = 'maximální srážky',
second_line = true,
color_scheme = _ifset('barva deště', 'p'),
date_mode = true,
scale_factor = '1',
prefer_cm = false,
label = makeLabel(args, false, 'Maximální srážky', 'maximální srážky'),
annual_mode = 'sum',
},
{---------- SECOND LINE sníh ----------
WANTROW = not _ifset('jeden řádek') and (_ifany('sníh cm') or _ifany('sníh mm') or _ifany('sníh palce')),
mode = 'srážky',
group_name = 'sníh',
second_line = true,
prefer_cm = true,
color_scheme = _ifset('barva sněhu', 'p'),
date_mode = true,
scale_factor = '1',
label = makeLabel(args, false, 'Sníh', 'sníh'),
annual_mode = 'sum',
},
{---------- dní se srážkami ----------
WANTROW = _ifany('dní se srážkami'),
mode = 'výchozí',
group_name = 'dní se srážkami',
color_scheme = _ifset('barva dnů se srážkami', 'd'),
date_mode = true,
scale_factor = '1',
label = 'Dní se srážkami' .. _if('jednotka dní se srážkami', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('jednotka dní se srážkami', '') .. ')</span>'),
annual_mode = 'sum',
},
{---------- dní s deštěm ----------
WANTROW = _ifany('dní s deštěm'),
mode = 'výchozí',
group_name = 'dní s deštěm',
color_scheme = _ifset('barva dnů se srážkami', 'd'),
date_mode = true,
scale_factor = '1',
label = 'Dní s deštěm' .. _if('jednotka dní s deštěm', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('jednotka dní s deštěm', '') .. ')</span>'),
annual_mode = 'sum',
},
{---------- dní se sněhem ----------
WANTROW = _ifany('dní se sněhem'),
mode = 'výchozí',
group_name = 'dní se sněhem',
color_scheme = _ifset('barva dnů se srážkami', 'd'),
date_mode = true,
scale_factor = '1',
label = 'Dní se sněhem' .. _if('jednotka dní se sněhem', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('jednotka dní se sněhem', '') .. ')</span>'),
annual_mode = 'sum',
},
{---------- letních dní ----------
WANTROW = _ifany('letních dní'),
mode = 'výchozí',
group_name = 'letních dní',
color_scheme = _ifset('barva českých dní', 'pastel'),
date_mode = true,
scale_factor = '1',
label = 'Letních dní' .. _if('jednotka letních dní', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('jednotka letních dní', '') .. ')</span>'),
annual_mode = 'sum',
},
{---------- tropických dní ----------
WANTROW = _ifany('tropických dní'),
mode = 'výchozí',
group_name = 'tropických dní',
color_scheme = _ifset('barva českých dní', 'pastel'),
date_mode = true,
scale_factor = '1',
label = 'Tropických dní' .. _if('jednotka tropických dní', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('jednotka tropických dní', '') .. ')</span>'),
annual_mode = 'sum',
},
{---------- mrazových dní ----------
WANTROW = _ifany('mrazových dní'),
mode = 'výchozí',
group_name = 'mrazových dní',
color_scheme = _ifset('barva českých dní', 'pastel'),
date_mode = true,
scale_factor = '1',
label = 'Mrazových dní' .. _if('jednotka mrazových dní', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('jednotka mrazových dní', '') .. ')</span>'),
annual_mode = 'sum',
},
{---------- ledových dní ----------
WANTROW = _ifany('ledových dní'),
mode = 'výchozí',
group_name = 'ledových dní',
color_scheme = _ifset('barva českých dní', 'pastel'),
date_mode = true,
scale_factor = '1',
label = 'Ledových dní' .. _if('jednotka ledových dní', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('jednotka ledových dní', '') .. ')</span>'),
annual_mode = 'sum',
},
{---------- arktických dní ----------
WANTROW = _ifany('arktických dní'),
mode = 'výchozí',
group_name = 'arktických dní',
color_scheme = _ifset('barva českých dní', 'pastel'),
date_mode = true,
scale_factor = '1',
label = 'Arktických dní' .. _if('jednotka arktických dní', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('jednotka arktických dní', '') .. ')</span>'),
annual_mode = 'sum',
},
{---------- tropických nocí ----------
WANTROW = _ifany('tropických nocí'),
mode = 'výchozí',
group_name = 'tropických nocí',
color_scheme = _ifset('barva českých dní', 'pastel'),
date_mode = true,
scale_factor = '1',
label = 'Tropických nocí' .. _if('jednotka tropických nocí', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('jednotka tropických nocí', '') .. ')</span>'),
annual_mode = 'sum',
},
{---------- relativní vlhkost ----------
WANTROW = _ifany('vlhkost'),
mode = 'výchozí',
group_name = 'vlhkost',
color_scheme = _ifset('barva vlhkosti', 'h'),
scale_factor = '1',
label = '[[Vlhkost vzduchu#Relativní (poměrná) vlhkost vzduchu|Relativní vlhkost]] [%]' ..
_if('time day', ' <span style="font-size:90%;" class="nowrap">(at ' .. _ifset('time day', '') .. ')</span>') ..
_if('daily', ' <span style="font-size:90%;" class="nowrap">(denní průměr)</span>'),
annual_mode = 'avg',
},
{---------- odpolední relativní vlhkost ----------
WANTROW = _ifany('afthumidity'),
mode = 'výchozí',
group_name = 'odpolední vlhkost',
color_scheme = _ifset('barva vlhkosti', 'h'),
scale_factor = '1',
label = 'Odpolední relativní vlhkost [%]' ..
_if('time day', ' <span style="font-size:90%;" class="nowrap">(at ' .. _ifset('time day', '') .. ')</span>') ..
_if('daily', ' <span style="font-size:90%;" class="nowrap">(denní průměr)</span>'),
annual_mode = 'avg',
},
{---------- FIRST LINE rosný bod ----------
WANTROW = _ifany('rosný bod C') or _ifany('rosný bod F'),
mode = 'teplota',
group_name = 'rosný bod',
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = '[[Rosný bod]] [°' .. _if('nejprve imperiální', 'F', 'C') .. _if('jeden řádek', ' (°' .. _if('nejprve imperiální', 'C', 'F') .. ')') .. ']',
annual_mode = 'avg',
},
{---------- SECOND LINE rosný bod----------
WANTROW = not _ifset('jeden řádek') and (_ifany('rosný bod C') or _ifany('rosný bod F')),
mode = 'teplota',
group_name = 'rosný bod',
second_line = true,
color_scheme = _ifset('barva teploty', 't'),
scale_factor = '1',
label = 'Rosný bod [°' .. _if('nejprve imperiální', 'C', 'F') .. ']',
show = _if('nejprve imperiální', '1', '2'),
annual_mode = 'avg',
},
{---------- slunečných hodin ----------
WANTROW = _ifany('slunečných hodin'),
mode = 'výchozí',
group_name = 'slunečných hodin',
color_scheme = _ifset('barva slunce', 's'),
date_mode = true,
scale_factor = '1',
label = 'Slunečných hodin',
annual_mode = 'sum',
},
{---------- slunečných hodin na den ----------
WANTROW = _ifany('slunečných hodin na den'),
mode = 'výchozí',
group_name = 'slunečných hodin na den',
color_scheme = _ifset('barva slunce', 's'),
scale_factor = '30.44',
label = 'Slunečných hodin na den',
annual_mode = 'avg',
},
{---------- denní světlo ----------
WANTROW = _ifany('denní světlo'),
mode = 'výchozí',
group_name = 'denní světlo',
color_scheme = _ifset('barva slunce', 's'),
scale_factor = '30.44',
label = '[[Sluneční světlo|Denní světlo]]',
annual_mode = 'avg',
},
{---------- sluneční svit ----------
WANTROW = _ifany('sluneční svit'),
mode = 'výchozí',
group_name = 'sluneční svit',
color_scheme = _ifset('barva slunce', 's'),
scale_factor = '7.2',
label = 'Sluneční svit [%]',
annual_mode = 'avg',
},
{---------- UV index ----------
WANTROW = _ifany('uv'),
mode = 'výchozí',
group_name = 'uv',
color_scheme = _ifset('barva uv', 'u'),
scale_factor = '1',
label = '[[UV index]]',
annual_mode = 'avg',
},
----------- SOURCES ----------
makeSources(frame, args),
}
end
local function makeFrame(self_args, parent_args)
-- Kludge to pass arguments for a single row to buildRow.
-- Later: Refactor buildRow so this is not needed.
return {
args = self_args,
getParent = function (self) return makeFrame(parent_args, nil) end,
}
end
local function main(frame)
local buildRow = require('Module:Weather box/row').buildRow
local args = frame:getParent().args
local results = {}
for i, def in ipairs(getDefinitions(frame, args)) do
local row
if type(def) == 'string' then
row = def
elseif def.WANTROW then
row = buildRow(makeFrame(def, args))
else
row = ''
end
results[i] = row
end
return '<div>\n'..table.concat(results)..'\n</div>' -- prevent Scribunto from inserting a blank line before the table
end
return {
main = main,
}