Usage
This module is used by the Climate data template.
Climate data | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Month | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Year |
Average high °C (°F) | −6.0 (21.2) | −2.7 (27.1) | 2.2 (36.0) | 11.2 (52.2) | 17.5 (63.5) | 21.0 (69.8) | 23.1 (73.6) | 22.6 (72.7) | 17.1 (62.8) | 10.4 (50.7) | 0.0 (32.0) | −4.5 (23.9) | 9.3 (48.7) |
Daily mean °C (°F) | −10.4 (13.3) | −7.6 (18.3) | −2.5 (27.5) | 5.4 (41.7) | 11.5 (52.7) | 15.5 (59.9) | 17.7 (63.9) | 16.9 (62.4) | 11.4 (52.5) | 5.1 (41.2) | −4.1 (24.6) | −8.8 (16.2) | 4.2 (39.6) |
Average low °C (°F) | −14.8 (5.4) | −12.5 (9.5) | −7.2 (19.0) | −0.5 (31.1) | 5.4 (41.7) | 9.9 (49.8) | 12.3 (54.1) | 11.3 (52.3) | 5.8 (42.4) | −0.2 (31.6) | −8.2 (17.2) | −13.1 (8.4) | −1.0 (30.2) |
Average precipitation mm (inches) | 21.7 (0.85) | 12.0 (0.47) | 15.8 (0.62) | 28.8 (1.13) | 46.1 (1.81) | 77.5 (3.05) | 93.8 (3.69) | 61.9 (2.44) | 43.5 (1.71) | 21.7 (0.85) | 18.0 (0.71) | 15.0 (0.59) | 455.7 (17.94) |
Average rainfall mm (inches) | 1.3 (0.05) | 0.76 (0.03) | 1.7 (0.07) | 14.5 (0.57) | 40.7 (1.60) | 77.5 (3.05) | 93.8 (3.69) | 61.8 (2.43) | 42.4 (1.67) | 10.9 (0.43) | 1.6 (0.06) | 0.73 (0.03) | 347.8 (13.69) |
Average snowfall cm (inches) | 24.5 (9.6) | 13.4 (5.3) | 17.4 (6.9) | 15.3 (6.0) | 4.9 (1.9) | 0.0 (0.0) | 0.0 (0.0) | 0.0 (0.0) | 1.0 (0.4) | 11.6 (4.6) | 19.1 (7.5) | 16.4 (6.5) | 123.5 (48.6) |
Average precipitation days (≥ 0.2 mm) | 11.0 | 7.9 | 8.3 | 8.8 | 11.0 | 14.2 | 14.6 | 11.1 | 9.8 | 8.0 | 8.8 | 9.4 | 122.9 |
Average rainy days (≥ 0.2 mm) | 1.1 | 0.83 | 1.4 | 5.9 | 10.5 | 14.2 | 14.6 | 11.1 | 9.6 | 5.6 | 1.5 | 0.75 | 77.3 |
Average snowy days (≥ 0.2 cm) | 10.7 | 7.7 | 7.7 | 4.2 | 1.2 | 0.0 | 0.0 | 0.0 | 0.50 | 3.2 | 7.9 | 9.3 | 52.4 |
Average relative humidity (%) | 65.2 | 61.2 | 56.5 | 42.9 | 40.4 | 48.2 | 52.6 | 51.4 | 50.1 | 50.5 | 64.7 | 65.4 | 54.1 |
Mean monthly sunshine hours | 100.8 | 121.7 | 176.3 | 244.2 | 279.9 | 285.9 | 307.5 | 282.3 | 192.7 | 170.8 | 98.4 | 84.5 | 2,344.8 |
Percent possible sunshine | 40.2 | 44.1 | 48.1 | 58.2 | 56.8 | 56.2 | 60.2 | 61.5 | 50.4 | 52.0 | 37.8 | 36.0 | 50.1 |
Average ultraviolet index | 0 | 1 | 3 | 5 | 7 | 9 | 11 | 9 | 7 | 5 | 3 | 1 | 5 |
Source #1: Environment Canada | |||||||||||||
Source #2: Weather Atlas - Monthly weather forecast and Climate: Edmonton, Canada |
-- Implement [[Template:Climate data]]. local precision = require('Module:Math')._precision 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, suffix) local months = { 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' } for _, month in ipairs(months) do if stripToNil(args[month .. suffix]) 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 == 'snow' or precision(args['Jan ' .. what .. ' inch'] or '0') < 1) and 'cm' or 'mm' end end local second = 'inches' if not stripToNil(args['metric first']) then first, second = second, first end if is_first then if stripToNil(args['single line']) then first = first .. ' (' .. second .. ')' end else first = second end return base .. ' ' .. first end local function makeSources(frame, args) local source1 = stripToNil(args.source) or stripToNil(args['source 1']) local source2 = stripToNil(args['source 2']) or stripToNil(args['source2']) local result = '|-\n|colspan="14" style="text-align:center;font-size:95%;"|' local text if source1 or source2 then if source1 and source2 then text = 'Source #1: ' .. source1 .. '\n' .. result .. 'Source #2: ' .. source2 else text = 'Source: ' .. (source1 and source1 or source2) end else text = frame:expandTemplate({ title = 'citation needed', args = {date = stripToNil(args.date)} }) 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(suffix) return isAny(args, suffix) end return { ----------- HEADER ---------- '{| class="wikitable ' .. _if('open', '', 'mw-collapsible' .. _if('collapsed', ' mw-collapsed')) .. '" style="text-align: center; line-height: 1.2em; width: auto; margin:' .. _ifset('margin', 'auto') .. ';"' .. _if('open', '\n|+Climate data', '\n|-' .. '\n!colspan="14" style="height: 1.6em; width: 70%;" | ' .. _if('name', navbar({'Climate data', args.name, collapsible=1}), 'Climate data' ) ) .. [=[ |- !style="width: 16%; height: 1.4em;" |Month !scope="col" style="width: 4%;" |Jan !scope="col" style="width: 4%;" |Feb !scope="col" style="width: 4%;" |Mar !scope="col" style="width: 4%;" |Apr !scope="col" style="width: 4%;" |May !scope="col" style="width: 4%;" |Jun !scope="col" style="width: 4%;" |Jul !scope="col" style="width: 4%;" |Aug !scope="col" style="width: 4%;" |Sep !scope="col" style="width: 4%;" |Oct !scope="col" style="width: 4%;" |Nov !scope="col" style="width: 4%;" |Dec !scope="col" style="width: 6%; border-left-width:medium" |Year ]=], {---------- FIRST LINE MAXIMUM HUMIDEX ---------- WANTROW = _ifany(' maximum humidex') and (_ifset('metric first') or _ifset('single line')), mode = 'basic', group_name = 'maximum humidex', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record high humidex', annual_mode = 'max', }, {---------- FIRST LINE RECORD HIGH TEMPERATURES ---------- WANTROW = _ifany(' record high C') or _ifany(' record high F'), mode = 'temperature', group_name = 'record high', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record high °' .. _if('metric first', 'C', 'F') .. _if('single line', ' (°' .. _if('metric first', 'F', 'C') .. ')'), annual_mode = 'max', }, {---------- FIRST-SECOND LINE AVG MONTHLY MAXIMUM TEMPERATURES ---------- WANTROW = _ifany(' avg record high C') or _ifany(' avg record high F'), mode = 'temperature', group_name = 'avg record high', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Mean maximum °' .. _if('metric first', 'C', 'F') .. _if('single line', ' (°' .. _if('metric first', 'F', 'C') .. ')'), annual_mode = 'max', }, {---------- FIRST LINE AVERAGE HIGH TEMPERATURES ---------- WANTROW = _ifany(' high C') or _ifany(' high F'), mode = 'temperature', group_name = 'high', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average high °' .. _if('metric first', 'C', 'F') .. _if('single line', ' (°' .. _if('metric first', 'F', 'C') .. ')'), annual_mode = 'avg', }, {---------- FIRST LINE DAILY MEAN TEMPERATURES ---------- WANTROW = _ifany(' mean C') or _ifany(' mean F'), mode = 'temperature', group_name = 'mean', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Daily mean °' .. _if('metric first', 'C', 'F') .. _if('single line', ' (°' .. _if('metric first', 'F', 'C') .. ')'), annual_mode = 'avg', }, {---------- FIRST LINE AVERAGE LOW TEMPERATURES ---------- WANTROW = _ifany(' low C') or _ifany(' low F'), mode = 'temperature', group_name = 'low', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average low °' .. _if('metric first', 'C', 'F') .. _if('single line', ' (°' .. _if('metric first', 'F', 'C') .. ')'), annual_mode = 'avg', }, {---------- FIRST-SECOND LINE AVG MONTHLY MINIMUM TEMPERATURES ---------- WANTROW = _ifany(' avg record low C') or _ifany(' avg record low F'), mode = 'temperature', group_name = 'avg record low', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Mean minimum °' .. _if('metric first', 'C', 'F') .. _if('single line', ' (°' .. _if('metric first', 'F', 'C') .. ')'), annual_mode = 'min', }, {---------- FIRST LINE RECORD LOW TEMPERATURES ---------- WANTROW = _ifany(' record low C') or _ifany(' record low F'), mode = 'temperature', group_name = 'record low', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record low °' .. _if('metric first', 'C', 'F') .. _if('single line', ' (°' .. _if('metric first', 'F', 'C') .. ')'), annual_mode = 'min', }, {---------- FIRST LINE MINIMUM WIND CHILL ---------- WANTROW = _ifany(' chill') and (_ifset('metric first') or _ifset('single line')), mode = 'basic', group_name = 'chill', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record low wind chill', annual_mode = 'min', }, {---------- FIRST LINE TOTAL PRECIPITATION ---------- WANTROW = _ifany(' precipitation cm') or _ifany(' precipitation mm') or _ifany(' precipitation inch'), mode = 'precipitation', group_name = 'precipitation', color_scheme = _ifset('precipitation colour', 'p'), date_mode = true, scale_factor = '1', prefer_cm = precision(_ifset('Jan precipitation inch', '0')) < 1, label = makeLabel(args, true, 'Average precipitation', 'precipitation'), annual_mode = 'sum', }, {---------- FIRST LINE RAINFALL ---------- WANTROW = _ifany(' rain cm') or _ifany(' rain mm') or _ifany(' rain inch'), mode = 'precipitation', group_name = 'rain', color_scheme = _ifset('rain colour', 'p'), date_mode = true, scale_factor = '1', prefer_cm = precision(_ifset('Jan rain inch', '0')) < 1, label = makeLabel(args, true, 'Average rainfall', 'rain'), annual_mode = 'sum', }, {---------- FIRST LINE SNOWFALL ---------- WANTROW = _ifany(' snow cm') or _ifany(' snow mm') or _ifany(' snow inch'), mode = 'precipitation', group_name = 'snow', prefer_cm = true, color_scheme = _ifset('snow colour', 'p'), date_mode = true, scale_factor = '1', label = makeLabel(args, true, 'Average snowfall', 'snow'), annual_mode = 'sum', }, {---------- SECOND LINE MAXIMUM HUMIDEX ---------- WANTROW = not _ifset('single line') and _ifany(' maximum humidex'), mode = 'basic', group_name = 'maximum humidex', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Humidex', annual_mode = 'max', second_line = true, }, {---------- SECOND LINE RECORD HIGH TEMPERATURES ---------- WANTROW = not _ifset('single line') and (_ifany(' record high C') or _ifany(' record high F')), mode = 'temperature', group_name = 'record high', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record high °' .. _if('metric first', 'F', 'C'), annual_mode = 'max', }, {---------- SECOND LINE AVERAGE HIGH TEMPERATURES ---------- WANTROW = not _ifset('single line') and (_ifany(' high C') or _ifany(' high F')), mode = 'temperature', group_name = 'high', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average high °' .. _if('metric first', 'F', 'C'), annual_mode = 'avg', }, {---------- SECOND LINE DAILY MEAN TEMPERATURES ---------- WANTROW = not _ifset('single line') and (_ifany(' mean C') or _ifany(' mean F')), mode = 'temperature', group_name = 'mean', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Daily mean °' .. _if('metric first', 'F', 'C'), show = _if('metric first', '2', '1'), annual_mode = 'avg', }, {---------- SECOND LINE AVERAGE LOW TEMPERATURES ---------- WANTROW = not _ifset('single line') and (_ifany(' low C') or _ifany(' low F')), mode = 'temperature', group_name = 'low', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average low °' .. _if('metric first', 'F', 'C'), show = _if('metric first', '2', '1'), annual_mode = 'avg', }, {---------- SECOND LINE RECORD LOW TEMPERATURES ---------- WANTROW = not _ifset('single line') and (_ifany(' record low C') or _ifany(' record low F')), mode = 'temperature', group_name = 'record low', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Record low °' .. _if('metric first', 'F', 'C'), show = _if('metric first', '2', '1'), annual_mode = 'min', }, {---------- SECOND LINE MINIMUM WIND CHILL ---------- WANTROW = not _ifset('single line') and (_ifany(' chill') and _if('metric first')), mode = 'basic', group_name = 'chill', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Wind chill', annual_mode = 'min', }, {---------- SECOND LINE TOTAL PRECIPITATION ---------- WANTROW = not _ifset('single line') and (_ifany(' precipitation cm') or _ifany(' precipitation mm') or _ifany(' precipitation inch')), mode = 'precipitation', group_name = 'precipitation', second_line = true, color_scheme = _ifset('precipitation colour', 'p'), date_mode = true, scale_factor = '1', prefer_cm = precision(_ifset('Jan precipitation inch', '0')) < 1, label = makeLabel(args, false, 'Average precipitation', 'precipitation'), annual_mode = 'sum', }, {---------- SECOND LINE RAINFALL ---------- WANTROW = not _ifset('single line') and (_ifany(' rain cm') or _ifany(' rain mm') or _ifany(' rain inch')), mode = 'precipitation', group_name = 'rain', second_line = true, color_scheme = _ifset('rain colour', 'p'), date_mode = true, scale_factor = '1', prefer_cm = precision(_ifset('Jan rain inch', '0')) < 1, label = makeLabel(args, false, 'Average rainfall', 'rain'), annual_mode = 'sum', }, {---------- SECOND LINE SNOWFALL ---------- WANTROW = not _ifset('single line') and (_ifany(' snow cm') or _ifany(' snow mm') or _ifany(' snow inch')), mode = 'precipitation', group_name = 'snow', second_line = true, prefer_cm = true, color_scheme = _ifset('snow colour', 'p'), date_mode = true, scale_factor = '1', label = makeLabel(args, false, 'Average snowfall', 'snow'), annual_mode = 'sum', }, {---------- PRECIPITATION DAYS ---------- WANTROW = _ifany(' precipitation days'), mode = 'basic', group_name = 'precipitation days', color_scheme = _ifset('precip days colour', 'd'), date_mode = true, scale_factor = '1', label = 'Average precipitation days' .. _if('unit precipitation days', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('unit precipitation days', '') .. ')</span>'), annual_mode = 'sum', }, {---------- RAINY DAYS ---------- WANTROW = _ifany(' rain days'), mode = 'basic', group_name = 'rain days', color_scheme = _ifset('precip days colour', 'd'), date_mode = true, scale_factor = '1', label = 'Average rainy days' .. _if('unit rain days', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('unit rain days', '') .. ')</span>'), annual_mode = 'sum', }, {---------- SNOWY DAYS ---------- WANTROW = _ifany(' snow days'), mode = 'basic', group_name = 'snow days', color_scheme = _ifset('precip days colour', 'd'), date_mode = true, scale_factor = '1', label = 'Average snowy days' .. _if('unit snow days', ' <span style="font-size:90%;" class="nowrap">(≥ ' .. _ifset('unit snow days', '') .. ')</span>'), annual_mode = 'sum', }, {---------- PERCENT RELATIVE HUMIDITY ---------- WANTROW = _ifany(' humidity'), mode = 'basic', group_name = 'humidity', color_scheme = _ifset('humidity colour', 'h'), scale_factor = '1', label = 'Average relative humidity (%)' .. _if('time day', ' <span style="font-size:90%;" class="nowrap">(at {{{time day}}})</span>') .. _if('daily', ' <span style="font-size:90%;" class="nowrap">(daily average)</span>'), annual_mode = 'avg', }, {---------- AFTERNOON PERCENT RELATIVE HUMIDITY ---------- WANTROW = _ifany(' afthumidity'), mode = 'basic', group_name = 'afthumidity', color_scheme = _ifset('humidity colour', 'h'), scale_factor = '1', label = 'Average afternoon relative humidity (%)' .. _if('time day', ' <span style="font-size:90%;" class="nowrap">(at {{{time day}}})</span>') .. _if('daily', ' <span style="font-size:90%;" class="nowrap">(daily average)</span>'), annual_mode = 'avg', }, {---------- FIRST LINE AVERAGE DEW POINT ---------- WANTROW = _ifany(' dew point C') or _ifany(' dew point F'), mode = 'temperature', group_name = 'dew point', color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average dew point °' .. _if('metric first', 'C', 'F') .. _if('single line', ' (°' .. _if('metric first', 'F', 'C') .. ')'), annual_mode = 'avg', }, {---------- SECOND LINE AVERAGE DEW POINT---------- WANTROW = not _ifset('single line') and (_ifany(' dew point C') or _ifany(' dew point F')), mode = 'temperature', group_name = 'dew point', second_line = true, color_scheme = _ifset('temperature colour', 't'), scale_factor = '1', label = 'Average dew point °' .. _if('metric first', 'F', 'C'), show = _if('metric first', '2', '1'), annual_mode = 'avg', }, {---------- MONTHLY SUNSHINE HOURS ---------- WANTROW = _ifany(' sun'), mode = 'basic', group_name = 'sun', color_scheme = _ifset('sun colour', 's'), date_mode = true, scale_factor = '1', label = 'Mean monthly sunshine hours', annual_mode = 'sum', }, {---------- DAILY SUNSHINE HOURS ---------- WANTROW = _ifany('d sun'), mode = 'basic', group_name = 'd sun', color_scheme = _ifset('sun colour', 's'), include_space = false, scale_factor = '30.44', label = 'Mean daily sunshine hours', annual_mode = 'avg', }, {---------- DAILY DAYLIGHT HOURS ---------- WANTROW = _ifany(' light'), mode = 'basic', group_name = ' light', color_scheme = _ifset('sun colour', 's'), include_space = false, scale_factor = '30.44', label = 'Mean daily daylight hours', annual_mode = 'avg', }, {---------- PERCENT SUNSHINE ---------- WANTROW = _ifany(' percentsun'), mode = 'basic', group_name = 'percentsun', color_scheme = _ifset('sun colour', 's'), scale_factor = '7.2', label = 'Percent possible sunshine', annual_mode = 'avg', }, {---------- ULTRAVIOLET INDEX ---------- WANTROW = _ifany(' uv'), mode = 'basic', group_name = 'uv', color_scheme = _ifset('uv colour', 'u'), scale_factor = '1', label = 'Average ultraviolet 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:Climate data/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, }