Module:Weather box: Difference between revisions
Appearance
Content deleted Content added
reverting. Solving at the <td> level in Module:Weather_box/row |
update from sandbox: tweak; add 'x color' as alias for 'x colour'; change two temperature labels: "Average high" → "Mean daily maximum" and "Average low" → "Mean daily minimum" |
||
Line 34: | Line 34: | ||
if isAny(args, ' ' .. what .. ' cm') then |
if isAny(args, ' ' .. what .. ' cm') then |
||
first = 'cm' |
first = 'cm' |
||
⚫ | |||
⚫ | |||
else |
else |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
else |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||
local second = 'inches' |
local second = 'inches' |
||
Line 104: | Line 102: | ||
local function _ifSingle(a, b) |
local function _ifSingle(a, b) |
||
return options.wantSingleLine and a or b or '' |
return options.wantSingleLine and a or b or '' |
||
end |
|||
local function _colorscheme(what, default) |
|||
return stripToNil(args[what .. ' colour']) or stripToNil(args[what .. ' color']) or default |
|||
end |
|||
local function _margin() |
|||
if stripToNil(args.margin) then |
|||
return 'margin:' .. args.margin .. ';' |
|||
⚫ | |||
return '' |
|||
end |
end |
||
local location = _if('location', args.location, '{{{location}}}') -- show "{{{location}}}" to alert editor if parameter is blank |
local location = _if('location', args.location, '{{{location}}}') -- show "{{{location}}}" to alert editor if parameter is blank |
||
Line 118: | Line 125: | ||
'{| class="wikitable ' .. _if('open', '', 'mw-collapsible' .. _if('collapsed', ' mw-collapsed')) .. |
'{| class="wikitable ' .. _if('open', '', 'mw-collapsible' .. _if('collapsed', ' mw-collapsed')) .. |
||
'" style="width:' .. _ifset('width', 'auto') .. |
'" style="width:' .. _ifset('width', 'auto') .. |
||
'; text-align:center; line-height: |
'; text-align:center; line-height:1.2em;' .. |
||
_margin() .. '"' .. |
|||
_if('open', |
_if('open', |
||
'\n|+Climate data for ' .. location, |
'\n|+Climate data for ' .. location, |
||
Line 148: | Line 155: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'maximum humidex', |
group_name = 'maximum humidex', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Record high [[humidex]]', |
label = 'Record high [[humidex]]', |
||
Line 157: | Line 164: | ||
mode = 'temperature', |
mode = 'temperature', |
||
group_name = 'record high', |
group_name = 'record high', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Record high °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
label = 'Record high °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
||
Line 166: | Line 173: | ||
mode = 'temperature', |
mode = 'temperature', |
||
group_name = 'avg record high', |
group_name = 'avg record high', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Mean maximum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
label = 'Mean maximum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
||
annual_mode = 'max', |
annual_mode = 'max', |
||
}, |
}, |
||
{---------- FIRST LINE |
{---------- FIRST LINE MEAN DAILY MAXIMUM TEMPERATURES ---------- |
||
WANTROW = _ifany(' high C') or _ifany(' high F'), |
WANTROW = _ifany(' high C') or _ifany(' high F'), |
||
mode = 'temperature', |
mode = 'temperature', |
||
group_name = 'high', |
group_name = 'high', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = ' |
label = 'Mean daily maximum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
||
annual_mode = 'avg', |
annual_mode = 'avg', |
||
}, |
}, |
||
Line 184: | Line 191: | ||
mode = 'temperature', |
mode = 'temperature', |
||
group_name = 'mean', |
group_name = 'mean', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Daily mean °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
label = 'Daily mean °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
||
annual_mode = 'avg', |
annual_mode = 'avg', |
||
}, |
}, |
||
{---------- FIRST LINE |
{---------- FIRST LINE MEAN DAILY MINIMUM TEMPERATURES ---------- |
||
WANTROW = _ifany(' low C') or _ifany(' low F'), |
WANTROW = _ifany(' low C') or _ifany(' low F'), |
||
mode = 'temperature', |
mode = 'temperature', |
||
group_name = 'low', |
group_name = 'low', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = ' |
label = 'Mean daily minimum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
||
annual_mode = 'avg', |
annual_mode = 'avg', |
||
}, |
}, |
||
Line 202: | Line 209: | ||
mode = 'temperature', |
mode = 'temperature', |
||
group_name = 'avg record low', |
group_name = 'avg record low', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Mean minimum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
label = 'Mean minimum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
||
Line 211: | Line 218: | ||
mode = 'temperature', |
mode = 'temperature', |
||
group_name = 'record low', |
group_name = 'record low', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Record low °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
label = 'Record low °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
||
Line 220: | Line 227: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'chill', |
group_name = 'chill', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Record low [[wind chill]]', |
label = 'Record low [[wind chill]]', |
||
Line 229: | Line 236: | ||
mode = 'precipitation', |
mode = 'precipitation', |
||
group_name = 'precipitation', |
group_name = 'precipitation', |
||
color_scheme = |
color_scheme = _colorscheme('precipitation', 'p'), |
||
date_mode = true, |
date_mode = true, |
||
scale_factor = '1', |
scale_factor = '1', |
||
Line 240: | Line 247: | ||
mode = 'precipitation', |
mode = 'precipitation', |
||
group_name = 'rain', |
group_name = 'rain', |
||
color_scheme = |
color_scheme = _colorscheme('rain', 'p'), |
||
date_mode = true, |
date_mode = true, |
||
scale_factor = '1', |
scale_factor = '1', |
||
Line 252: | Line 259: | ||
group_name = 'snow', |
group_name = 'snow', |
||
prefer_cm = true, |
prefer_cm = true, |
||
color_scheme = |
color_scheme = _colorscheme('snow', 'p'), |
||
date_mode = true, |
date_mode = true, |
||
scale_factor = '1', |
scale_factor = '1', |
||
Line 263: | Line 270: | ||
group_name = 'snow depth', |
group_name = 'snow depth', |
||
prefer_cm = true, |
prefer_cm = true, |
||
color_scheme = |
color_scheme = _colorscheme('snow', 'p'), |
||
scale_factor = '0.2', |
scale_factor = '0.2', |
||
label = makeLabel(args, options, true, 'Average extreme snow depth', 'snow depth'), |
label = makeLabel(args, options, true, 'Average extreme snow depth', 'snow depth'), |
||
Line 272: | Line 279: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'maximum humidex', |
group_name = 'maximum humidex', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = '[[Humidex]]', |
label = '[[Humidex]]', |
||
Line 283: | Line 290: | ||
group_name = 'record high', |
group_name = 'record high', |
||
second_line = true, |
second_line = true, |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Record high °' .. _if('metric first', 'F', 'C'), |
label = 'Record high °' .. _if('metric first', 'F', 'C'), |
||
annual_mode = 'max', |
annual_mode = 'max', |
||
}, |
}, |
||
{---------- SECOND LINE |
{---------- SECOND LINE MEAN DAILY MAXIMUM TEMPERATURES ---------- |
||
WANTROW = not options.wantSingleLine and (_ifany(' high C') or _ifany(' high F')), |
WANTROW = not options.wantSingleLine and (_ifany(' high C') or _ifany(' high F')), |
||
mode = 'temperature', |
mode = 'temperature', |
||
group_name = 'high', |
group_name = 'high', |
||
second_line = true, |
second_line = true, |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = ' |
label = 'Mean daily maximum °' .. _if('metric first', 'F', 'C'), |
||
annual_mode = 'avg', |
annual_mode = 'avg', |
||
}, |
}, |
||
Line 303: | Line 310: | ||
group_name = 'mean', |
group_name = 'mean', |
||
second_line = true, |
second_line = true, |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Daily mean °' .. _if('metric first', 'F', 'C'), |
label = 'Daily mean °' .. _if('metric first', 'F', 'C'), |
||
Line 309: | Line 316: | ||
annual_mode = 'avg', |
annual_mode = 'avg', |
||
}, |
}, |
||
{---------- SECOND LINE |
{---------- SECOND LINE MEAN DAILY MINIMUM TEMPERATURES ---------- |
||
WANTROW = not options.wantSingleLine and (_ifany(' low C') or _ifany(' low F')), |
WANTROW = not options.wantSingleLine and (_ifany(' low C') or _ifany(' low F')), |
||
mode = 'temperature', |
mode = 'temperature', |
||
group_name = 'low', |
group_name = 'low', |
||
second_line = true, |
second_line = true, |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = ' |
label = 'Mean daily minimum °' .. _if('metric first', 'F', 'C'), |
||
show = _if('metric first', '2', '1'), |
show = _if('metric first', '2', '1'), |
||
annual_mode = 'avg', |
annual_mode = 'avg', |
||
Line 325: | Line 332: | ||
group_name = 'record low', |
group_name = 'record low', |
||
second_line = true, |
second_line = true, |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Record low °' .. _if('metric first', 'F', 'C'), |
label = 'Record low °' .. _if('metric first', 'F', 'C'), |
||
Line 335: | Line 342: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'chill', |
group_name = 'chill', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = '[[Wind chill]]', |
label = '[[Wind chill]]', |
||
Line 345: | Line 352: | ||
group_name = 'precipitation', |
group_name = 'precipitation', |
||
second_line = true, |
second_line = true, |
||
color_scheme = |
color_scheme = _colorscheme('precipitation', 'p'), |
||
date_mode = true, |
date_mode = true, |
||
scale_factor = '1', |
scale_factor = '1', |
||
Line 357: | Line 364: | ||
group_name = 'rain', |
group_name = 'rain', |
||
second_line = true, |
second_line = true, |
||
color_scheme = |
color_scheme = _colorscheme('rain', 'p'), |
||
date_mode = true, |
date_mode = true, |
||
scale_factor = '1', |
scale_factor = '1', |
||
Line 370: | Line 377: | ||
second_line = true, |
second_line = true, |
||
prefer_cm = true, |
prefer_cm = true, |
||
color_scheme = |
color_scheme = _colorscheme('snow', 'p'), |
||
date_mode = true, |
date_mode = true, |
||
scale_factor = '1', |
scale_factor = '1', |
||
Line 382: | Line 389: | ||
second_line = true, |
second_line = true, |
||
prefer_cm = true, |
prefer_cm = true, |
||
color_scheme = |
color_scheme = _colorscheme('snow', 'p'), |
||
scale_factor = '0.2', |
scale_factor = '0.2', |
||
label = makeLabel(args, options, false, 'Average extreme snow depth', 'snow depth'), |
label = makeLabel(args, options, false, 'Average extreme snow depth', 'snow depth'), |
||
Line 391: | Line 398: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'precipitation days', |
group_name = 'precipitation days', |
||
color_scheme = |
color_scheme = _colorscheme('precip days', 'd'), |
||
date_mode = true, |
date_mode = true, |
||
scale_factor = '1', |
scale_factor = '1', |
||
Line 401: | Line 408: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'rain days', |
group_name = 'rain days', |
||
color_scheme = |
color_scheme = _colorscheme('precip days', 'd'), |
||
date_mode = true, |
date_mode = true, |
||
scale_factor = '1', |
scale_factor = '1', |
||
Line 411: | Line 418: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'snow days', |
group_name = 'snow days', |
||
color_scheme = |
color_scheme = _colorscheme('precip days', 'd'), |
||
date_mode = true, |
date_mode = true, |
||
scale_factor = '1', |
scale_factor = '1', |
||
Line 421: | Line 428: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'humidity', |
group_name = 'humidity', |
||
color_scheme = |
color_scheme = _colorscheme('humidity', 'h'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Average [[relative humidity]] (%)' .. |
label = 'Average [[relative humidity]] (%)' .. |
||
Line 432: | Line 439: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'afthumidity', |
group_name = 'afthumidity', |
||
color_scheme = |
color_scheme = _colorscheme('humidity', 'h'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Average afternoon [[relative humidity]] (%)' .. |
label = 'Average afternoon [[relative humidity]] (%)' .. |
||
Line 443: | Line 450: | ||
mode = 'temperature', |
mode = 'temperature', |
||
group_name = 'dew point', |
group_name = 'dew point', |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Average [[dew point]] °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
label = 'Average [[dew point]] °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'), |
||
Line 453: | Line 460: | ||
group_name = 'dew point', |
group_name = 'dew point', |
||
second_line = true, |
second_line = true, |
||
color_scheme = |
color_scheme = _colorscheme('temperature', 't'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Average [[dew point]] °' .. _if('metric first', 'F', 'C'), |
label = 'Average [[dew point]] °' .. _if('metric first', 'F', 'C'), |
||
Line 463: | Line 470: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'sun', |
group_name = 'sun', |
||
color_scheme = |
color_scheme = _colorscheme('sun', 's'), |
||
date_mode = true, |
date_mode = true, |
||
scale_factor = '1', |
scale_factor = '1', |
||
Line 473: | Line 480: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'd sun', |
group_name = 'd sun', |
||
color_scheme = |
color_scheme = _colorscheme('sun', 's'), |
||
include_space = false, |
include_space = false, |
||
scale_factor = '30.44', |
scale_factor = '30.44', |
||
Line 483: | Line 490: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = ' light', |
group_name = ' light', |
||
color_scheme = |
color_scheme = _colorscheme('sun', 's'), |
||
include_space = false, |
include_space = false, |
||
scale_factor = '30.44', |
scale_factor = '30.44', |
||
Line 493: | Line 500: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'percentsun', |
group_name = 'percentsun', |
||
color_scheme = |
color_scheme = _colorscheme('sun', 's'), |
||
scale_factor = '7.2', |
scale_factor = '7.2', |
||
label = 'Percent [[Sunshine duration|possible sunshine]]', |
label = 'Percent [[Sunshine duration|possible sunshine]]', |
||
Line 502: | Line 509: | ||
mode = 'basic', |
mode = 'basic', |
||
group_name = 'uv', |
group_name = 'uv', |
||
color_scheme = |
color_scheme = _colorscheme('uv', 'u'), |
||
scale_factor = '1', |
scale_factor = '1', |
||
label = 'Average [[ultraviolet index]]', |
label = 'Average [[ultraviolet index]]', |
Revision as of 05:26, 10 December 2023
![]() | This Lua module is used on approximately 31,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
![]() | This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
![]() | This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Usage
This module is used by {{Weather box}}.
{{#invoke:Weather box|function_name}}
Climate data for Edmonton City Centre (Blatchford Field) Airport (1981−2010) | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Month | Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Year |
Record high °C (°F) | 11.7 (53.1) |
14.0 (57.2) |
23.9 (75.0) |
31.1 (88.0) |
32.3 (90.1) |
34.9 (94.8) |
34.6 (94.3) |
34.5 (94.1) |
33.9 (93.0) |
28.6 (83.5) |
21.7 (71.1) |
16.7 (62.1) |
34.9 (94.8) |
Mean daily maximum °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) |
Mean daily minimum °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) |
Record low °C (°F) | −44.4 (−47.9) |
−46.1 (−51.0) |
−36.1 (−33.0) |
−25.6 (−14.1) |
−12.2 (10.0) |
−1.1 (30.0) |
0.6 (33.1) |
−1.2 (29.8) |
−11.7 (10.9) |
−25.0 (−13.0) |
−34.1 (−29.4) |
−48.3 (−54.9) |
−48.3 (−54.9) |
Record low wind chill | −52.8 | −50.7 | −44.6 | −37.5 | −14.5 | 0.0 | 0.0 | −3.7 | −13.3 | −34.3 | −50.2 | −55.5 | −55.5 |
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: Environment Canada,[1] Weather Atlas[2] |
References
- ^ "Edmonton City Centre Airport". Canadian Climate Normals 1981−2010. Environment Canada. August 19, 2013. Retrieved September 10, 2013.
- ^ "Monthly weather forecast and Climate: Edmonton, Canada". Weather Atlas. Retrieved March 12, 2019.
-- Implement [[Template:Weather box]].
local _precision = require('Module:Math')._precision
local function precision(text)
-- Input like 'Jan precipitation inch = trace' calls this with text = 'trace'
-- which would cause _precision to throw an error since it is not numeric.
-- Workaround: Return 0 as the precision if an error occurs.
local success, result = pcall(_precision, text)
if success then
return result
end
return 0
end
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, options, is_first, base, what)
local first
if isAny(args, ' ' .. what .. ' cm') then
first = 'cm'
elseif isAny(args, ' ' .. what .. ' mm') then
first = 'mm'
else
first = (what:sub(1, 4) == 'snow' or
precision(args['Jan ' .. what .. ' inch'] or '0') < 1)
and 'cm'
or 'mm'
end
local second = 'inches'
if not stripToNil(args['metric first']) then
first, second = second, first
end
if is_first then
if options.wantSingleLine 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 wantSingle(parm)
--------------------------------------------------------------------------------
-- Result before July 2022 for single_line setting:
-- blank/omitted : separate table rows for metric and imperial (two rows)
-- N : bug: only one row with either metric or imperial (not both)
-- but heading like "cm (inches)"
-- Y/junk : single row with both metric/imperial in same cell
--------------------------------------------------------------------------------
-- Intend changing in July 2022 so single_line=Y is the default and
-- need single_line=N for separate lines.
-- However, this release (1 July 2022) keeps blank/omitted as meaning "no"
-- so the other large changes can be tested before switching the default.
parm = (parm or ''):lower()
return not (parm == 'no' or parm == 'n' or parm == '')
end
local function getDefinitions(frame, args, options)
-- Return a list of tables or strings that define each row.
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
local function _ifSingle(a, b)
return options.wantSingleLine and a or b or ''
end
local function _colorscheme(what, default)
return stripToNil(args[what .. ' colour']) or stripToNil(args[what .. ' color']) or default
end
local function _margin()
if stripToNil(args.margin) then
return 'margin:' .. args.margin .. ';'
end
return ''
end
local location = _if('location', args.location, '{{{location}}}') -- show "{{{location}}}" to alert editor if parameter is blank
local navbarText
if not stripToNil(args.open) then
if stripToNil(args.name) then
local navbar = require('Module:Navbar')._navbar
navbarText = navbar({'Climate data for ' .. location, args.name, collapsible=1})
end
end
return {
----------- HEADER ----------
'{| class="wikitable ' .. _if('open', '', 'mw-collapsible' .. _if('collapsed', ' mw-collapsed')) ..
'" style="width:' .. _ifset('width', 'auto') ..
'; text-align:center; line-height:1.2em;' ..
_margin() .. '"' ..
_if('open',
'\n|+Climate data for ' .. location,
'\n|-' ..
'\n!colspan="14" | ' .. _if('name', navbarText, 'Climate data for ' .. location)
) ..
[=[
|-
!scope="row" |Month
!scope="col" |Jan
!scope="col" |Feb
!scope="col" |Mar
!scope="col" |Apr
!scope="col" |May
!scope="col" |Jun
!scope="col" |Jul
!scope="col" |Aug
!scope="col" |Sep
!scope="col" |Oct
!scope="col" |Nov
!scope="col" |Dec
!scope="col" style="border-left-width:medium" |Year
]=],
{---------- FIRST LINE MAXIMUM HUMIDEX ----------
WANTROW = _ifany(' maximum humidex') and (_ifset('metric first') or options.wantSingleLine),
mode = 'basic',
group_name = 'maximum humidex',
color_scheme = _colorscheme('temperature', '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 = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Record high °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _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 = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Mean maximum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),
annual_mode = 'max',
},
{---------- FIRST LINE MEAN DAILY MAXIMUM TEMPERATURES ----------
WANTROW = _ifany(' high C') or _ifany(' high F'),
mode = 'temperature',
group_name = 'high',
color_scheme = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Mean daily maximum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _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 = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Daily mean °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),
annual_mode = 'avg',
},
{---------- FIRST LINE MEAN DAILY MINIMUM TEMPERATURES ----------
WANTROW = _ifany(' low C') or _ifany(' low F'),
mode = 'temperature',
group_name = 'low',
color_scheme = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Mean daily minimum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _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 = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Mean minimum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _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 = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Record low °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),
annual_mode = 'min',
},
{---------- FIRST LINE MINIMUM WIND CHILL ----------
WANTROW = _ifany(' chill') and (_ifset('metric first') or options.wantSingleLine),
mode = 'basic',
group_name = 'chill',
color_scheme = _colorscheme('temperature', '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 = _colorscheme('precipitation', 'p'),
date_mode = true,
scale_factor = '1',
prefer_cm = precision(_ifset('Jan precipitation inch', '0')) < 1,
label = makeLabel(args, options, 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 = _colorscheme('rain', 'p'),
date_mode = true,
scale_factor = '1',
prefer_cm = precision(_ifset('Jan rain inch', '0')) < 1,
label = makeLabel(args, options, 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 = _colorscheme('snow', 'p'),
date_mode = true,
scale_factor = '1',
label = makeLabel(args, options, true, 'Average snowfall', 'snow'),
annual_mode = 'sum',
},
{---------- FIRST LINE AVERAGE EXTREME SNOW DEPTH ----------
WANTROW = _ifany(' snow depth cm') or _ifany(' snow depth mm') or _ifany(' snow depth inch'),
mode = 'precipitation',
group_name = 'snow depth',
prefer_cm = true,
color_scheme = _colorscheme('snow', 'p'),
scale_factor = '0.2',
label = makeLabel(args, options, true, 'Average extreme snow depth', 'snow depth'),
annual_mode = 'max',
},
{---------- SECOND LINE MAXIMUM HUMIDEX ----------
WANTROW = not options.wantSingleLine and _ifany(' maximum humidex'),
mode = 'basic',
group_name = 'maximum humidex',
color_scheme = _colorscheme('temperature', 't'),
scale_factor = '1',
label = '[[Humidex]]',
annual_mode = 'max',
second_line = true,
},
{---------- SECOND LINE RECORD HIGH TEMPERATURES ----------
WANTROW = not options.wantSingleLine and (_ifany(' record high C') or _ifany(' record high F')),
mode = 'temperature',
group_name = 'record high',
second_line = true,
color_scheme = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Record high °' .. _if('metric first', 'F', 'C'),
annual_mode = 'max',
},
{---------- SECOND LINE MEAN DAILY MAXIMUM TEMPERATURES ----------
WANTROW = not options.wantSingleLine and (_ifany(' high C') or _ifany(' high F')),
mode = 'temperature',
group_name = 'high',
second_line = true,
color_scheme = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Mean daily maximum °' .. _if('metric first', 'F', 'C'),
annual_mode = 'avg',
},
{---------- SECOND LINE DAILY MEAN TEMPERATURES ----------
WANTROW = not options.wantSingleLine and (_ifany(' mean C') or _ifany(' mean F')),
mode = 'temperature',
group_name = 'mean',
second_line = true,
color_scheme = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Daily mean °' .. _if('metric first', 'F', 'C'),
show = _if('metric first', '2', '1'),
annual_mode = 'avg',
},
{---------- SECOND LINE MEAN DAILY MINIMUM TEMPERATURES ----------
WANTROW = not options.wantSingleLine and (_ifany(' low C') or _ifany(' low F')),
mode = 'temperature',
group_name = 'low',
second_line = true,
color_scheme = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Mean daily minimum °' .. _if('metric first', 'F', 'C'),
show = _if('metric first', '2', '1'),
annual_mode = 'avg',
},
{---------- SECOND LINE RECORD LOW TEMPERATURES ----------
WANTROW = not options.wantSingleLine and (_ifany(' record low C') or _ifany(' record low F')),
mode = 'temperature',
group_name = 'record low',
second_line = true,
color_scheme = _colorscheme('temperature', '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 options.wantSingleLine and (_ifany(' chill') and _if('metric first')),
mode = 'basic',
group_name = 'chill',
color_scheme = _colorscheme('temperature', 't'),
scale_factor = '1',
label = '[[Wind chill]]',
annual_mode = 'min',
},
{---------- SECOND LINE TOTAL PRECIPITATION ----------
WANTROW = not options.wantSingleLine and (_ifany(' precipitation cm') or _ifany(' precipitation mm') or _ifany(' precipitation inch')),
mode = 'precipitation',
group_name = 'precipitation',
second_line = true,
color_scheme = _colorscheme('precipitation', 'p'),
date_mode = true,
scale_factor = '1',
prefer_cm = precision(_ifset('Jan precipitation inch', '0')) < 1,
label = makeLabel(args, options, false, 'Average [[precipitation]]', 'precipitation'),
annual_mode = 'sum',
},
{---------- SECOND LINE RAINFALL ----------
WANTROW = not options.wantSingleLine and (_ifany(' rain cm') or _ifany(' rain mm') or _ifany(' rain inch')),
mode = 'precipitation',
group_name = 'rain',
second_line = true,
color_scheme = _colorscheme('rain', 'p'),
date_mode = true,
scale_factor = '1',
prefer_cm = precision(_ifset('Jan rain inch', '0')) < 1,
label = makeLabel(args, options, false, 'Average rainfall', 'rain'),
annual_mode = 'sum',
},
{---------- SECOND LINE SNOWFALL ----------
WANTROW = not options.wantSingleLine 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 = _colorscheme('snow', 'p'),
date_mode = true,
scale_factor = '1',
label = makeLabel(args, options, false, 'Average snowfall', 'snow'),
annual_mode = 'sum',
},
{---------- SECOND LINE AVERAGE EXTREME SNOW DEPTH ----------
WANTROW = not options.wantSingleLine and (_ifany(' snow depth cm') or _ifany(' snow depth mm') or _ifany(' snow depth inch')),
mode = 'precipitation',
group_name = 'snow depth',
second_line = true,
prefer_cm = true,
color_scheme = _colorscheme('snow', 'p'),
scale_factor = '0.2',
label = makeLabel(args, options, false, 'Average extreme snow depth', 'snow depth'),
annual_mode = 'max',
},
{---------- PRECIPITATION DAYS ----------
WANTROW = _ifany(' precipitation days'),
mode = 'basic',
group_name = 'precipitation days',
color_scheme = _colorscheme('precip days', '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 = _colorscheme('precip days', '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 = _colorscheme('precip days', '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 = _colorscheme('humidity', 'h'),
scale_factor = '1',
label = 'Average [[relative humidity]] (%)' ..
_if('time day', ' <span style="font-size:90%;" class="nowrap">(at ' .. _ifset('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 = _colorscheme('humidity', 'h'),
scale_factor = '1',
label = 'Average afternoon [[relative humidity]] (%)' ..
_if('time day', ' <span style="font-size:90%;" class="nowrap">(at ' .. _ifset('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 = _colorscheme('temperature', 't'),
scale_factor = '1',
label = 'Average [[dew point]] °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),
annual_mode = 'avg',
},
{---------- SECOND LINE AVERAGE DEW POINT----------
WANTROW = not options.wantSingleLine and (_ifany(' dew point C') or _ifany(' dew point F')),
mode = 'temperature',
group_name = 'dew point',
second_line = true,
color_scheme = _colorscheme('temperature', '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 = _colorscheme('sun', 's'),
date_mode = true,
scale_factor = '1',
label = 'Mean monthly [[Sunshine duration|sunshine hours]]',
annual_mode = 'sum',
},
{---------- DAILY SUNSHINE HOURS ----------
WANTROW = _ifany('d sun'),
mode = 'basic',
group_name = 'd sun',
color_scheme = _colorscheme('sun', 's'),
include_space = false,
scale_factor = '30.44',
label = 'Mean daily [[Sunshine duration|sunshine hours]]',
annual_mode = 'avg',
},
{---------- DAILY DAYLIGHT HOURS ----------
WANTROW = _ifany(' light'),
mode = 'basic',
group_name = ' light',
color_scheme = _colorscheme('sun', 's'),
include_space = false,
scale_factor = '30.44',
label = 'Mean daily [[Daytime|daylight hours]]',
annual_mode = 'avg',
},
{---------- PERCENT SUNSHINE ----------
WANTROW = _ifany(' percentsun'),
mode = 'basic',
group_name = 'percentsun',
color_scheme = _colorscheme('sun', 's'),
scale_factor = '7.2',
label = 'Percent [[Sunshine duration|possible sunshine]]',
annual_mode = 'avg',
},
{---------- ULTRAVIOLET INDEX ----------
WANTROW = _ifany(' uv'),
mode = 'basic',
group_name = 'uv',
color_scheme = _colorscheme('uv', 'u'),
scale_factor = '1',
label = 'Average [[ultraviolet index]]',
annual_mode = 'avg',
},
----------- SOURCES ----------
makeSources(frame, args),
}
end
local function main(frame)
local sandbox = frame:getTitle():find('sandbox', 1, true) and '/sandbox' or ''
local buildRow = require('Module:Weather box/row' .. sandbox)._buildRow
local args = frame:getParent().args
local options = {
wantSingleLine = wantSingle(args['single line']),
sandbox = sandbox,
}
local results = {}
for i, definition in ipairs(getDefinitions(frame, args, options)) do
local row
if type(definition) == 'string' then
row = definition
elseif definition.WANTROW then
row = buildRow(definition, args, options)
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,
}