وحدة:Weather box

Usage

This module is used by {{Weather box}}.

{{#invoke:Weather box|function_name}}


بيانات المناخ لـ Edmonton City Centre (Blatchford Field) Airport (1981−2010)
الشهر ينا فب مار أبر ماي يون يول أغس سبت أكت نوف ديس السنة
القصوى القياسية °س (°ف) 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)
متوسط القصوى اليومية °س (°ف) −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)
المتوسط اليومي °س (°ف) −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)
متوسط الدنيا اليومية °س (°ف) −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)
الصغرى القياسية °س (°ف) −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)
الصغرى القياسية تبريد الرياح −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
متوسط تساقط الأمطار 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)
متوسط تساقط الأمطار 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)
متوسط هطول الثلج 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
متوسط الرطوبة النسبية (%) 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 ساعات سطوع الشمس 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
نسبة السطوع المحتمل للشمس 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
متوسط مؤشر فوق البنفسجية 0 1 3 5 7 9 11 9 7 5 3 1 5
Source: Environment Canada,[1] Weather Atlas[2]

المراجع

  1. ^ "Edmonton City Centre Airport". Canadian Climate Normals 1981−2010. Environment Canada. August 19, 2013. Retrieved September 10, 2013.
  2. ^ "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({'بيانات المناخ لـ ' .. 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|+بيانات المناخ لـ ' .. location,
	'\n|-' ..
	'\n!colspan="14" | ' .. _if('name', navbarText, 'بيانات المناخ لـ ' .. location)
) ..
[=[

|-
!scope="row" |الشهر
!scope="col" |ينا
!scope="col" |فب
!scope="col" |مار
!scope="col" |أبر
!scope="col" |ماي
!scope="col" |يون
!scope="col" |يول
!scope="col" |أغس
!scope="col" |سبت
!scope="col" |أكت
!scope="col" |نوف
!scope="col" |ديس
!scope="col" style="border-left-width:medium" |السنة
]=],

{---------- 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 = 'القصوى القياسية [[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 = 'القصوى القياسية °' .. _if('metric first', 'س', 'ف') .. _ifSingle(' (°' .. _if('metric first', 'ف', 'س') .. ')'),
	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 = 'متوسط القصوى القياسية',
	color_scheme = _colorscheme('temperature', 't'),
	scale_factor = '1',
	label = 'متوسط القصوى °' .. _if('metric first', 'س', 'ف') .. _ifSingle(' (°' .. _if('metric first', 'ف', 'س') .. ')'),
	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 = 'متوسط القصوى اليومية °' .. _if('metric first', 'س', 'ف') .. _ifSingle(' (°' .. _if('metric first', 'ف', 'س') .. ')'),
	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 = 'المتوسط اليومي °' .. _if('metric first', 'س', 'ف') .. _ifSingle(' (°' .. _if('metric first', 'ف', 'س') .. ')'),
	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 = 'متوسط الدنيا اليومية °' .. _if('metric first', 'س', 'ف') .. _ifSingle(' (°' .. _if('metric first', 'ف', 'س') .. ')'),
	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 = 'متوسط الدنيا °' .. _if('metric first', 'س', 'ف') .. _ifSingle(' (°' .. _if('metric first', 'ف', 'س') .. ')'),
	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 = 'الصغرى القياسية °' .. _if('metric first', 'س', 'ف') .. _ifSingle(' (°' .. _if('metric first', 'ف', 'س') .. ')'),
	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 = 'الصغرى القياسية [[تبريد الرياح]]',
	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, 'متوسط [[تساقط الأمطار]]', '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, 'متوسط تساقط الأمطار', '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, 'متوسط هطول الثلج', '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, 'متوسط عمق الثلج الكثيف', '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 = '[[مؤشر الرطوبة]]',
	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 = 'القصوى القياسية °' .. _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 = 'متوسط القصوى اليومية °' .. _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 = 'المتوسط اليومي °' .. _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, 'متوسط سقوط الأمطار', '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, 'متوسط سقوط الأمطار', '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 = 'أيام الثلج',
	color_scheme = _colorscheme('precip days', 'd'),
	date_mode = true,
	scale_factor = '1',
	label = 'متوسط أيام الثلج' .. _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 = 'متوسط [[الرطوبة النسبية]] (%)' ..
		_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 = 'متوسط [[الرطوبة النسبية]] بعد الظهر (%)' ..
		_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 = 'متوسط [[نقطة الندى]] °' .. _if('metric first', 'س', 'ف') .. _ifSingle(' (°' .. _if('metric first', 'ف', 'س') .. ')'),
	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 = 'متوسط [[نقطة الندى]] °' .. _if('metric first', 'ف', 'س'),
	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 [[مدة سطوع الشمس|ساعات سطوع الشمس]]',
	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 = 'المتوسط اليومي [[مدة سطوع الشملس|ساعات سطوع الشمس]]',
	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 = 'المتوسط اليومي [[النهار|ساعات النهار]]',
	annual_mode = 'avg',
},
{---------- PERCENT SUNSHINE ----------
	WANTROW = _ifany(' percentsun'),
	mode = 'basic',
	group_name = 'percentsun',
	color_scheme = _colorscheme('sun', 's'),
	scale_factor = '7.2',
	label = 'نسبة [[مدة سطوع الشمس|السطوع المحتمل للشمس]]',
	annual_mode = 'avg',
},
{---------- ULTRAVIOLET INDEX ----------
	WANTROW = _ifany(' uv'),
	mode = 'basic',
	group_name = 'uv',
	color_scheme = _colorscheme('uv', 'u'),
	scale_factor = '1',
	label = 'متوسط [[مؤشر فوق البنفسجية]]',
	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,
}