<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://salisford.net/index.php?action=history&amp;feed=atom&amp;title=Module%3AWeather_box</id>
	<title>Module:Weather box - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://salisford.net/index.php?action=history&amp;feed=atom&amp;title=Module%3AWeather_box"/>
	<link rel="alternate" type="text/html" href="https://salisford.net/index.php?title=Module:Weather_box&amp;action=history"/>
	<updated>2026-05-05T02:14:53Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.36.1</generator>
	<entry>
		<id>https://salisford.net/index.php?title=Module:Weather_box&amp;diff=646&amp;oldid=prev</id>
		<title>Cascadia: 1 revision imported</title>
		<link rel="alternate" type="text/html" href="https://salisford.net/index.php?title=Module:Weather_box&amp;diff=646&amp;oldid=prev"/>
		<updated>2023-04-05T14:39:05Z</updated>

		<summary type="html">&lt;p&gt;1 revision imported&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 14:39, 5 April 2023&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Cascadia</name></author>
	</entry>
	<entry>
		<id>https://salisford.net/index.php?title=Module:Weather_box&amp;diff=645&amp;oldid=prev</id>
		<title>wp&gt;Seddon: reverting. Solving at the &lt;td&gt; level in Module:Weather_box/row</title>
		<link rel="alternate" type="text/html" href="https://salisford.net/index.php?title=Module:Weather_box&amp;diff=645&amp;oldid=prev"/>
		<updated>2023-04-03T04:18:18Z</updated>

		<summary type="html">&lt;p&gt;reverting. Solving at the &amp;lt;td&amp;gt; level in Module:Weather_box/row&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;-- Implement [[Template:Weather box]].&lt;br /&gt;
&lt;br /&gt;
local _precision = require('Module:Math')._precision&lt;br /&gt;
local function precision(text)&lt;br /&gt;
	-- Input like 'Jan precipitation inch = trace' calls this with text = 'trace'&lt;br /&gt;
	-- which would cause _precision to throw an error since it is not numeric.&lt;br /&gt;
	-- Workaround: Return 0 as the precision if an error occurs.&lt;br /&gt;
	local success, result = pcall(_precision, text)&lt;br /&gt;
	if success then&lt;br /&gt;
		return result&lt;br /&gt;
	end&lt;br /&gt;
	return 0&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function stripToNil(text)&lt;br /&gt;
	-- If text is a non-empty string, return its trimmed content.&lt;br /&gt;
	-- Otherwise, return nothing (text is an empty string or is not a string).&lt;br /&gt;
	if type(text) == 'string' then&lt;br /&gt;
		return text:match('(%S.-)%s*$')&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function isAny(args, suffix)&lt;br /&gt;
	local months = { 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' }&lt;br /&gt;
	for _, month in ipairs(months) do&lt;br /&gt;
		if stripToNil(args[month .. suffix]) then&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeLabel(args, options, is_first, base, what)&lt;br /&gt;
	local first&lt;br /&gt;
	if isAny(args, ' ' .. what .. ' cm') then&lt;br /&gt;
		first = 'cm'&lt;br /&gt;
	else&lt;br /&gt;
		if isAny(args, ' ' .. what .. ' mm') then&lt;br /&gt;
			first = 'mm'&lt;br /&gt;
		else&lt;br /&gt;
			first = (what:sub(1, 4) == 'snow' or&lt;br /&gt;
				precision(args['Jan ' .. what .. ' inch'] or '0') &amp;lt; 1)&lt;br /&gt;
					and 'cm'&lt;br /&gt;
					or 'mm'&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local second = 'inches'&lt;br /&gt;
	if not stripToNil(args['metric first']) then&lt;br /&gt;
		first, second = second, first&lt;br /&gt;
	end&lt;br /&gt;
	if is_first then&lt;br /&gt;
		if options.wantSingleLine then&lt;br /&gt;
			first = first .. ' (' .. second .. ')'&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		first = second&lt;br /&gt;
	end&lt;br /&gt;
	return base .. ' ' .. first&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function makeSources(frame, args)&lt;br /&gt;
	local source1 = stripToNil(args.source) or stripToNil(args['source 1'])&lt;br /&gt;
	local source2 = stripToNil(args['source 2']) or stripToNil(args['source2'])&lt;br /&gt;
	local result = '|-\n|colspan=&amp;quot;14&amp;quot; style=&amp;quot;text-align:center;font-size:95%;&amp;quot;|'&lt;br /&gt;
	local text&lt;br /&gt;
	if source1 or source2 then&lt;br /&gt;
		if source1 and source2 then&lt;br /&gt;
			text = 'Source 1: ' .. source1 .. '\n' .. result .. 'Source 2: ' .. source2&lt;br /&gt;
		else&lt;br /&gt;
			text = 'Source: ' .. (source1 and source1 or source2)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		text = frame:expandTemplate({ title = 'citation needed', args = {date = stripToNil(args.date)} })&lt;br /&gt;
	end&lt;br /&gt;
	return result .. text .. '\n|}'&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function wantSingle(parm)&lt;br /&gt;
	--------------------------------------------------------------------------------&lt;br /&gt;
	-- Result before July 2022 for single_line setting:&lt;br /&gt;
	-- blank/omitted : separate table rows for metric and imperial (two rows)&lt;br /&gt;
	-- N             : bug: only one row with either metric or imperial (not both)&lt;br /&gt;
	--                      but heading like &amp;quot;cm (inches)&amp;quot;&lt;br /&gt;
	-- Y/junk        : single row with both metric/imperial in same cell&lt;br /&gt;
	--------------------------------------------------------------------------------&lt;br /&gt;
	-- Intend changing in July 2022 so single_line=Y is the default and&lt;br /&gt;
	-- need single_line=N for separate lines.&lt;br /&gt;
	-- However, this release (1 July 2022) keeps blank/omitted as meaning &amp;quot;no&amp;quot;&lt;br /&gt;
	-- so the other large changes can be tested before switching the default.&lt;br /&gt;
	parm = (parm or ''):lower()&lt;br /&gt;
	return not (parm == 'no' or parm == 'n' or parm == '')&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function getDefinitions(frame, args, options)&lt;br /&gt;
	-- Return a list of tables or strings that define each row.&lt;br /&gt;
	local function _if(parm, a, b)&lt;br /&gt;
		return stripToNil(args[parm]) and a or b or ''&lt;br /&gt;
	end&lt;br /&gt;
	local function _ifset(parm, a)&lt;br /&gt;
		return stripToNil(args[parm]) and args[parm] or a&lt;br /&gt;
	end&lt;br /&gt;
	local function _ifany(suffix)&lt;br /&gt;
		return isAny(args, suffix)&lt;br /&gt;
	end&lt;br /&gt;
	local function _ifSingle(a, b)&lt;br /&gt;
		return options.wantSingleLine and a or b or ''&lt;br /&gt;
	end&lt;br /&gt;
	local location = _if('location', args.location, '{{{location}}}')  -- show &amp;quot;{{{location}}}&amp;quot; to alert editor if parameter is blank&lt;br /&gt;
	local navbarText&lt;br /&gt;
	if not stripToNil(args.open) then&lt;br /&gt;
		if stripToNil(args.name) then&lt;br /&gt;
			local navbar = require('Module:Navbar')._navbar&lt;br /&gt;
			navbarText = navbar({'Climate data for ' .. location, args.name, collapsible=1})&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return {&lt;br /&gt;
&lt;br /&gt;
----------- HEADER ----------&lt;br /&gt;
'{| class=&amp;quot;wikitable ' .. _if('open', '', 'mw-collapsible' .. _if('collapsed', ' mw-collapsed')) ..&lt;br /&gt;
'&amp;quot; style=&amp;quot;width:' .. _ifset('width', 'auto') ..&lt;br /&gt;
'; text-align:center; line-height: 1.2em; margin:' ..&lt;br /&gt;
_ifset('margin', '') .. ';&amp;quot;' ..&lt;br /&gt;
_if('open',&lt;br /&gt;
	'\n|+Climate data for ' .. location,&lt;br /&gt;
	'\n|-' ..&lt;br /&gt;
	'\n!colspan=&amp;quot;14&amp;quot; | ' .. _if('name', navbarText, 'Climate data for ' .. location)&lt;br /&gt;
) ..&lt;br /&gt;
[=[&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; |Month&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |Jan&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |Feb&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |Mar&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |Apr&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |May&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |Jun&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |Jul&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |Aug&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |Sep&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |Oct&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |Nov&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; |Dec&lt;br /&gt;
!scope=&amp;quot;col&amp;quot; style=&amp;quot;border-left-width:medium&amp;quot; |Year&lt;br /&gt;
]=],&lt;br /&gt;
&lt;br /&gt;
{---------- FIRST LINE MAXIMUM HUMIDEX ----------&lt;br /&gt;
	WANTROW = _ifany(' maximum humidex') and (_ifset('metric first') or options.wantSingleLine),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'maximum humidex',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Record high [[humidex]]',&lt;br /&gt;
	annual_mode = 'max',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST LINE RECORD HIGH TEMPERATURES ----------&lt;br /&gt;
	WANTROW = _ifany(' record high C') or _ifany(' record high F'),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'record high',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Record high °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),&lt;br /&gt;
	annual_mode = 'max',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST-SECOND LINE AVG MONTHLY MAXIMUM TEMPERATURES ----------&lt;br /&gt;
	WANTROW = _ifany(' avg record high C') or _ifany(' avg record high F'),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'avg record high',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Mean maximum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),&lt;br /&gt;
	annual_mode = 'max',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST LINE AVERAGE HIGH TEMPERATURES ----------&lt;br /&gt;
	WANTROW = _ifany(' high C') or _ifany(' high F'),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'high',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average high °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST LINE DAILY MEAN TEMPERATURES ----------&lt;br /&gt;
	WANTROW = _ifany(' mean C') or _ifany(' mean F'),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'mean',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Daily mean °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST LINE AVERAGE LOW TEMPERATURES ----------&lt;br /&gt;
	WANTROW = _ifany(' low C') or _ifany(' low F'),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'low',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average low °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST-SECOND LINE AVG MONTHLY MINIMUM TEMPERATURES ----------&lt;br /&gt;
	WANTROW = _ifany(' avg record low C') or _ifany(' avg record low F'),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'avg record low',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Mean minimum °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),&lt;br /&gt;
	annual_mode = 'min',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST LINE RECORD LOW TEMPERATURES ----------&lt;br /&gt;
	WANTROW = _ifany(' record low C') or _ifany(' record low F'),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'record low',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Record low °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),&lt;br /&gt;
	annual_mode = 'min',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST LINE MINIMUM WIND CHILL ----------&lt;br /&gt;
	WANTROW = _ifany(' chill') and (_ifset('metric first') or options.wantSingleLine),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'chill',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Record low [[wind chill]]',&lt;br /&gt;
	annual_mode = 'min',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST LINE TOTAL PRECIPITATION ----------&lt;br /&gt;
	WANTROW = _ifany(' precipitation cm') or _ifany(' precipitation mm') or _ifany(' precipitation inch'),&lt;br /&gt;
	mode = 'precipitation',&lt;br /&gt;
	group_name = 'precipitation',&lt;br /&gt;
	color_scheme = _ifset('precipitation colour', 'p'),&lt;br /&gt;
	date_mode = true,&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	prefer_cm = precision(_ifset('Jan precipitation inch', '0')) &amp;lt; 1,&lt;br /&gt;
	label = makeLabel(args, options, true, 'Average [[precipitation]]', 'precipitation'),&lt;br /&gt;
	annual_mode = 'sum',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST LINE RAINFALL ----------&lt;br /&gt;
	WANTROW = _ifany(' rain cm') or _ifany(' rain mm') or _ifany(' rain inch'),&lt;br /&gt;
	mode = 'precipitation',&lt;br /&gt;
	group_name = 'rain',&lt;br /&gt;
	color_scheme = _ifset('rain colour', 'p'),&lt;br /&gt;
	date_mode = true,&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	prefer_cm = precision(_ifset('Jan rain inch', '0')) &amp;lt; 1,&lt;br /&gt;
	label = makeLabel(args, options, true, 'Average rainfall', 'rain'),&lt;br /&gt;
	annual_mode = 'sum',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST LINE SNOWFALL ----------&lt;br /&gt;
	WANTROW = _ifany(' snow cm') or _ifany(' snow mm') or _ifany(' snow inch'),&lt;br /&gt;
	mode = 'precipitation',&lt;br /&gt;
	group_name = 'snow',&lt;br /&gt;
	prefer_cm = true,&lt;br /&gt;
	color_scheme = _ifset('snow colour', 'p'),&lt;br /&gt;
	date_mode = true,&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = makeLabel(args, options, true, 'Average snowfall', 'snow'),&lt;br /&gt;
	annual_mode = 'sum',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST LINE AVERAGE EXTREME SNOW DEPTH ----------&lt;br /&gt;
	WANTROW = _ifany(' snow depth cm') or _ifany(' snow depth mm') or _ifany(' snow depth inch'),&lt;br /&gt;
	mode = 'precipitation',&lt;br /&gt;
	group_name = 'snow depth',&lt;br /&gt;
	prefer_cm = true,&lt;br /&gt;
	color_scheme = _ifset('snow colour', 'p'),&lt;br /&gt;
	scale_factor = '0.2',&lt;br /&gt;
	label = makeLabel(args, options, true, 'Average extreme snow depth', 'snow depth'),&lt;br /&gt;
	annual_mode = 'max',&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE MAXIMUM HUMIDEX ----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and _ifany(' maximum humidex'),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'maximum humidex',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = '[[Humidex]]',&lt;br /&gt;
	annual_mode = 'max',&lt;br /&gt;
	second_line = true,&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE RECORD HIGH TEMPERATURES ----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and (_ifany(' record high C') or _ifany(' record high F')),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'record high',&lt;br /&gt;
	second_line = true,&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Record high °' .. _if('metric first', 'F', 'C'),&lt;br /&gt;
	annual_mode = 'max',&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE AVERAGE HIGH TEMPERATURES ----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and (_ifany(' high C') or _ifany(' high F')),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'high',&lt;br /&gt;
	second_line = true,&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average high °' .. _if('metric first', 'F', 'C'),&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE DAILY MEAN TEMPERATURES ----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and (_ifany(' mean C') or _ifany(' mean F')),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'mean',&lt;br /&gt;
	second_line = true,&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Daily mean °' .. _if('metric first', 'F', 'C'),&lt;br /&gt;
	show = _if('metric first', '2', '1'),&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE AVERAGE LOW TEMPERATURES ----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and (_ifany(' low C') or _ifany(' low F')),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'low',&lt;br /&gt;
	second_line = true,&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average low °' .. _if('metric first', 'F', 'C'),&lt;br /&gt;
	show = _if('metric first', '2', '1'),&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE RECORD LOW TEMPERATURES ----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and (_ifany(' record low C') or _ifany(' record low F')),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'record low',&lt;br /&gt;
	second_line = true,&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Record low °' .. _if('metric first', 'F', 'C'),&lt;br /&gt;
	show = _if('metric first', '2', '1'),&lt;br /&gt;
	annual_mode = 'min',&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE MINIMUM WIND CHILL ----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and (_ifany(' chill') and _if('metric first')),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'chill',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = '[[Wind chill]]',&lt;br /&gt;
	annual_mode = 'min',&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE TOTAL PRECIPITATION ----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and (_ifany(' precipitation cm') or _ifany(' precipitation mm') or _ifany(' precipitation inch')),&lt;br /&gt;
	mode = 'precipitation',&lt;br /&gt;
	group_name = 'precipitation',&lt;br /&gt;
	second_line = true,&lt;br /&gt;
	color_scheme = _ifset('precipitation colour', 'p'),&lt;br /&gt;
	date_mode = true,&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	prefer_cm = precision(_ifset('Jan precipitation inch', '0')) &amp;lt; 1,&lt;br /&gt;
	label = makeLabel(args, options, false, 'Average [[precipitation]]', 'precipitation'),&lt;br /&gt;
	annual_mode = 'sum',&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE RAINFALL ----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and (_ifany(' rain cm') or _ifany(' rain mm') or _ifany(' rain inch')),&lt;br /&gt;
	mode = 'precipitation',&lt;br /&gt;
	group_name = 'rain',&lt;br /&gt;
	second_line = true,&lt;br /&gt;
	color_scheme = _ifset('rain colour', 'p'),&lt;br /&gt;
	date_mode = true,&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	prefer_cm = precision(_ifset('Jan rain inch', '0')) &amp;lt; 1,&lt;br /&gt;
	label = makeLabel(args, options, false, 'Average rainfall', 'rain'),&lt;br /&gt;
	annual_mode = 'sum',&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE SNOWFALL ----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and (_ifany(' snow cm') or _ifany(' snow mm') or _ifany(' snow inch')),&lt;br /&gt;
	mode = 'precipitation',&lt;br /&gt;
	group_name = 'snow',&lt;br /&gt;
	second_line = true,&lt;br /&gt;
	prefer_cm = true,&lt;br /&gt;
	color_scheme = _ifset('snow colour', 'p'),&lt;br /&gt;
	date_mode = true,&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = makeLabel(args, options, false, 'Average snowfall', 'snow'),&lt;br /&gt;
	annual_mode = 'sum',&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE AVERAGE EXTREME SNOW DEPTH ----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and (_ifany(' snow depth cm') or _ifany(' snow depth mm') or _ifany(' snow depth inch')),&lt;br /&gt;
	mode = 'precipitation',&lt;br /&gt;
	group_name = 'snow depth',&lt;br /&gt;
	second_line = true,&lt;br /&gt;
	prefer_cm = true,&lt;br /&gt;
	color_scheme = _ifset('snow colour', 'p'),&lt;br /&gt;
	scale_factor = '0.2',&lt;br /&gt;
	label = makeLabel(args, options, false, 'Average extreme snow depth', 'snow depth'),&lt;br /&gt;
	annual_mode = 'max',&lt;br /&gt;
},&lt;br /&gt;
{---------- PRECIPITATION DAYS ----------&lt;br /&gt;
	WANTROW = _ifany(' precipitation days'),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'precipitation days',&lt;br /&gt;
	color_scheme = _ifset('precip days colour', 'd'),&lt;br /&gt;
	date_mode = true,&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average precipitation days' .. _if('unit precipitation days', ' &amp;lt;span style=&amp;quot;font-size:90%;&amp;quot; class=&amp;quot;nowrap&amp;quot;&amp;gt;(≥ ' .. _ifset('unit precipitation days', '') .. ')&amp;lt;/span&amp;gt;'),&lt;br /&gt;
	annual_mode = 'sum',&lt;br /&gt;
},&lt;br /&gt;
{---------- RAINY DAYS ----------&lt;br /&gt;
	WANTROW = _ifany(' rain days'),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'rain days',&lt;br /&gt;
	color_scheme = _ifset('precip days colour', 'd'),&lt;br /&gt;
	date_mode = true,&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average rainy days' .. _if('unit rain days', ' &amp;lt;span style=&amp;quot;font-size:90%;&amp;quot; class=&amp;quot;nowrap&amp;quot;&amp;gt;(≥ ' .. _ifset('unit rain days', '') .. ')&amp;lt;/span&amp;gt;'),&lt;br /&gt;
	annual_mode = 'sum',&lt;br /&gt;
},&lt;br /&gt;
{---------- SNOWY DAYS ----------&lt;br /&gt;
	WANTROW = _ifany(' snow days'),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'snow days',&lt;br /&gt;
	color_scheme = _ifset('precip days colour', 'd'),&lt;br /&gt;
	date_mode = true,&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average snowy days' .. _if('unit snow days', ' &amp;lt;span style=&amp;quot;font-size:90%;&amp;quot; class=&amp;quot;nowrap&amp;quot;&amp;gt;(≥ ' .. _ifset('unit snow days', '') .. ')&amp;lt;/span&amp;gt;'),&lt;br /&gt;
	annual_mode = 'sum',&lt;br /&gt;
},&lt;br /&gt;
{---------- PERCENT RELATIVE HUMIDITY ----------&lt;br /&gt;
	WANTROW = _ifany(' humidity'),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'humidity',&lt;br /&gt;
	color_scheme = _ifset('humidity colour', 'h'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average [[relative humidity]] (%)' ..&lt;br /&gt;
		_if('time day', ' &amp;lt;span style=&amp;quot;font-size:90%;&amp;quot; class=&amp;quot;nowrap&amp;quot;&amp;gt;(at ' .. _ifset('time day', '') .. ')&amp;lt;/span&amp;gt;') ..&lt;br /&gt;
		_if('daily', ' &amp;lt;span style=&amp;quot;font-size:90%;&amp;quot; class=&amp;quot;nowrap&amp;quot;&amp;gt;(daily average)&amp;lt;/span&amp;gt;'),&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- AFTERNOON PERCENT RELATIVE HUMIDITY ----------&lt;br /&gt;
	WANTROW = _ifany(' afthumidity'),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'afthumidity',&lt;br /&gt;
	color_scheme = _ifset('humidity colour', 'h'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average afternoon [[relative humidity]] (%)' ..&lt;br /&gt;
		_if('time day', ' &amp;lt;span style=&amp;quot;font-size:90%;&amp;quot; class=&amp;quot;nowrap&amp;quot;&amp;gt;(at ' .. _ifset('time day', '') .. ')&amp;lt;/span&amp;gt;') ..&lt;br /&gt;
		_if('daily', ' &amp;lt;span style=&amp;quot;font-size:90%;&amp;quot; class=&amp;quot;nowrap&amp;quot;&amp;gt;(daily average)&amp;lt;/span&amp;gt;'),&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- FIRST LINE AVERAGE DEW POINT ----------&lt;br /&gt;
	WANTROW = _ifany(' dew point C') or _ifany(' dew point F'),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'dew point',&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average [[dew point]] °' .. _if('metric first', 'C', 'F') .. _ifSingle(' (°' .. _if('metric first', 'F', 'C') .. ')'),&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- SECOND LINE AVERAGE DEW POINT----------&lt;br /&gt;
	WANTROW = not options.wantSingleLine and (_ifany(' dew point C') or _ifany(' dew point F')),&lt;br /&gt;
	mode = 'temperature',&lt;br /&gt;
	group_name = 'dew point',&lt;br /&gt;
	second_line = true,&lt;br /&gt;
	color_scheme = _ifset('temperature colour', 't'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average [[dew point]] °' .. _if('metric first', 'F', 'C'),&lt;br /&gt;
	show = _if('metric first', '2', '1'),&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- MONTHLY SUNSHINE HOURS ----------&lt;br /&gt;
	WANTROW = _ifany(' sun'),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'sun',&lt;br /&gt;
	color_scheme = _ifset('sun colour', 's'),&lt;br /&gt;
	date_mode = true,&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Mean monthly [[Sunshine duration|sunshine hours]]',&lt;br /&gt;
	annual_mode = 'sum',&lt;br /&gt;
},&lt;br /&gt;
{---------- DAILY SUNSHINE HOURS ----------&lt;br /&gt;
	WANTROW = _ifany('d sun'),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'd sun',&lt;br /&gt;
	color_scheme = _ifset('sun colour', 's'),&lt;br /&gt;
	include_space = false,&lt;br /&gt;
	scale_factor = '30.44',&lt;br /&gt;
	label = 'Mean daily [[Sunshine duration|sunshine hours]]',&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- DAILY DAYLIGHT HOURS ----------&lt;br /&gt;
	WANTROW = _ifany(' light'),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = ' light',&lt;br /&gt;
	color_scheme = _ifset('sun colour', 's'),&lt;br /&gt;
	include_space = false,&lt;br /&gt;
	scale_factor = '30.44',&lt;br /&gt;
	label = 'Mean daily [[Daytime|daylight hours]]',&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- PERCENT SUNSHINE ----------&lt;br /&gt;
	WANTROW = _ifany(' percentsun'),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'percentsun',&lt;br /&gt;
	color_scheme = _ifset('sun colour', 's'),&lt;br /&gt;
	scale_factor = '7.2',&lt;br /&gt;
	label = 'Percent [[Sunshine duration|possible sunshine]]',&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
{---------- ULTRAVIOLET INDEX ----------&lt;br /&gt;
	WANTROW = _ifany(' uv'),&lt;br /&gt;
	mode = 'basic',&lt;br /&gt;
	group_name = 'uv',&lt;br /&gt;
	color_scheme = _ifset('uv colour', 'u'),&lt;br /&gt;
	scale_factor = '1',&lt;br /&gt;
	label = 'Average [[ultraviolet index]]',&lt;br /&gt;
	annual_mode = 'avg',&lt;br /&gt;
},&lt;br /&gt;
----------- SOURCES ----------&lt;br /&gt;
makeSources(frame, args),&lt;br /&gt;
}&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function main(frame)&lt;br /&gt;
	local sandbox = frame:getTitle():find('sandbox', 1, true) and '/sandbox' or ''&lt;br /&gt;
	local buildRow = require('Module:Weather box/row' .. sandbox)._buildRow&lt;br /&gt;
	local args = frame:getParent().args&lt;br /&gt;
	local options = {&lt;br /&gt;
		wantSingleLine = wantSingle(args['single line']),&lt;br /&gt;
		sandbox = sandbox,&lt;br /&gt;
	}&lt;br /&gt;
	local results = {}&lt;br /&gt;
	for i, definition in ipairs(getDefinitions(frame, args, options)) do&lt;br /&gt;
		local row&lt;br /&gt;
		if type(definition) == 'string' then&lt;br /&gt;
			row = definition&lt;br /&gt;
		elseif definition.WANTROW then&lt;br /&gt;
			row = buildRow(definition, args, options)&lt;br /&gt;
		else&lt;br /&gt;
			row = ''&lt;br /&gt;
		end&lt;br /&gt;
		results[i] = row&lt;br /&gt;
	end&lt;br /&gt;
	return '&amp;lt;div&amp;gt;\n'..table.concat(results)..'\n&amp;lt;/div&amp;gt;'  -- prevent Scribunto from inserting a blank line before the table&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return {&lt;br /&gt;
	main = main,&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>wp&gt;Seddon</name></author>
	</entry>
</feed>