<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FErutuon%2FTemperature_arrays%2Fmw.html</id>
	<title>Module:Sandbox/Erutuon/Temperature arrays/mw.html - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://stockhub.co/index.php?action=history&amp;feed=atom&amp;title=Module%3ASandbox%2FErutuon%2FTemperature_arrays%2Fmw.html"/>
	<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Erutuon/Temperature_arrays/mw.html&amp;action=history"/>
	<updated>2026-05-24T07:19:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://stockhub.co/index.php?title=Module:Sandbox/Erutuon/Temperature_arrays/mw.html&amp;diff=145382&amp;oldid=prev</id>
		<title>imported&gt;Erutuon: meh</title>
		<link rel="alternate" type="text/html" href="https://stockhub.co/index.php?title=Module:Sandbox/Erutuon/Temperature_arrays/mw.html&amp;diff=145382&amp;oldid=prev"/>
		<updated>2017-09-15T02:04:48Z</updated>

		<summary type="html">&lt;p&gt;meh&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
local degree = &amp;quot;°&amp;quot;&lt;br /&gt;
local m_weather = require(&amp;quot;Module:Weather/sandbox&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
local format&lt;br /&gt;
&lt;br /&gt;
local message = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local function add_message(new_message)&lt;br /&gt;
	if message == &amp;quot;&amp;quot; then&lt;br /&gt;
		message = &amp;quot;Notices: &amp;quot; .. new_message&lt;br /&gt;
	else&lt;br /&gt;
		message = message .. &amp;quot; &amp;quot; .. new_message&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function get_format (frame)&lt;br /&gt;
	local input_format_parameter = frame.args.input_format&lt;br /&gt;
	local input_unit, output_unit, length, output_format, display_unit, array_names&lt;br /&gt;
	&lt;br /&gt;
	if input_format_parameter == nil then&lt;br /&gt;
		input_unit = frame.args.input_unit&lt;br /&gt;
		length = tonumber(frame.args.length)&lt;br /&gt;
	else&lt;br /&gt;
		length = string.match(input_format_parameter, &amp;#039;(%d+)&amp;#039;) -- find digits in the input_format parameter&lt;br /&gt;
		length = tonumber(length)&lt;br /&gt;
		&lt;br /&gt;
		input_unit = string.match(input_format_parameter, &amp;#039;([CF])&amp;#039;) -- C or F&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	if input_unit == &amp;quot;C&amp;quot; then&lt;br /&gt;
		output_unit = &amp;quot;F&amp;quot;&lt;br /&gt;
	elseif input_unit == &amp;quot;F&amp;quot; then&lt;br /&gt;
		output_unit = &amp;quot;C&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		error (&amp;quot;Input unit is not recognized. Please choose F for Fahrenheit or C for Celsius&amp;quot;, 0)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	output_format = tostring(frame.args.output_format)&lt;br /&gt;
	display_unit = frame.args.display_unit&lt;br /&gt;
	&lt;br /&gt;
	if length == nil then&lt;br /&gt;
		error (&amp;quot;get_format has not found a length value in the length or input_format parameter&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	return { input_unit = input_unit, output_unit = output_unit,&lt;br /&gt;
		length = length, output_format = output_format,&lt;br /&gt;
		display_unit = display_unit, array_names = array_names }&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function precision(value, decimals)&lt;br /&gt;
	local string = string.format(&amp;#039;%.&amp;#039; .. decimals .. &amp;#039;f&amp;#039;, value)&lt;br /&gt;
	return string&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function check_for_string(string)&lt;br /&gt;
	return string ~= &amp;quot;&amp;quot; and string ~= nil&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function check_for_number(value)&lt;br /&gt;
	return type(tonumber(value)) == &amp;quot;number&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function convert(value, decimals, unit) -- Unit is the unit being converted from. It defaults to input_unit.&lt;br /&gt;
	if not unit then&lt;br /&gt;
		unit = format.input_unit&lt;br /&gt;
	end&lt;br /&gt;
	if check_for_number(value) then&lt;br /&gt;
		local value = tonumber(value)&lt;br /&gt;
		if unit == &amp;quot;C&amp;quot; then&lt;br /&gt;
			return precision(value * 9/5 + 32, decimals)&lt;br /&gt;
		elseif unit == &amp;quot;F&amp;quot; then&lt;br /&gt;
			return precision((value - 32) * 5/9, decimals)&lt;br /&gt;
		else&lt;br /&gt;
			error(&amp;quot;Input unit not recognized&amp;quot;, 2)&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;&amp;quot; -- Setting result to empty string if value is not a number avoids concatenation errors.&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_array(parameter, array, frame)&lt;br /&gt;
	format = get_format(frame)&lt;br /&gt;
	local array = {}&lt;br /&gt;
	local n = 1&lt;br /&gt;
	for number in parameter:gmatch(&amp;#039;%-?%d+%.?%d?&amp;#039;) do&lt;br /&gt;
		local number = number&lt;br /&gt;
		table.insert(array, n, number)&lt;br /&gt;
		if array[n] == nil then&lt;br /&gt;
			if n &amp;gt; 1 then&lt;br /&gt;
				error(&amp;quot;There should be &amp;quot; .. length .. &amp;quot; values in the &amp;quot; .. parameter .. &amp;quot; parameter, but there are only &amp;quot; .. n .. &amp;quot; values&amp;quot;)&lt;br /&gt;
			else&lt;br /&gt;
				error(&amp;quot;There should be &amp;quot; .. length .. &amp;quot; values in the &amp;quot; .. parameter .. &amp;quot; parameter, but there is only &amp;quot; .. n .. &amp;quot; value&amp;quot;)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		n = n + 1&lt;br /&gt;
		if n &amp;gt; format.length then&lt;br /&gt;
			break&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return array&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_arrays(frame)&lt;br /&gt;
	local a, b, c&lt;br /&gt;
	get_format(frame)&lt;br /&gt;
	local parameter_a = frame.args.a&lt;br /&gt;
	local parameter_b = frame.args.b&lt;br /&gt;
	local parameter_c = frame.args.c&lt;br /&gt;
	if parameter_a then&lt;br /&gt;
		a = make_array(parameter_a, a, frame)&lt;br /&gt;
	else&lt;br /&gt;
		error(&amp;quot;Please provide a set of numbers in parameter &amp;lt;span style=\&amp;quot;background-color: #EEE; font-family: monospace;\&amp;quot;&amp;gt;a&amp;lt;/span&amp;gt;&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if parameter_b then&lt;br /&gt;
		b = make_array(parameter_b, b, frame)&lt;br /&gt;
	else&lt;br /&gt;
		add_message(&amp;quot;There is no content in parameter &amp;lt;span style=\&amp;quot;background-color: #EEE; font-family: monospace;\&amp;quot;&amp;gt;b&amp;lt;/span&amp;gt;.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	if parameter_c then&lt;br /&gt;
		c = make_array(parameter_c, c, frame)&lt;br /&gt;
	else&lt;br /&gt;
		add_message(&amp;quot;There is no content in parameter &amp;lt;span style=\&amp;quot;background-color: #EEE; font-family: monospace;\&amp;quot;&amp;gt;c&amp;lt;/span&amp;gt;.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return a, b, c&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local output_formats = {&lt;br /&gt;
	high_low_average_F = &lt;br /&gt;
		{ first = &amp;quot;F&amp;quot;,&lt;br /&gt;
		line_break = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		convert_units = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		unit_names = &amp;quot;no&amp;quot;,&lt;br /&gt;
		brackets = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		add_color = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		small_font = &amp;quot;no&amp;quot;,&lt;br /&gt;
		sortable = &amp;quot;yes&amp;quot;, },&lt;br /&gt;
	high_low_F =&lt;br /&gt;
		{ line_break = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		first = &amp;quot;F&amp;quot;,&lt;br /&gt;
		convert_units = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		unit_names = &amp;quot;no&amp;quot;,&lt;br /&gt;
		brackets = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;no&amp;quot;,&lt;br /&gt;
		add_color = &amp;quot;no&amp;quot;,&lt;br /&gt;
		small_font = &amp;quot;no&amp;quot;,&lt;br /&gt;
		sortable = &amp;quot;yes&amp;quot;, },&lt;br /&gt;
	average_F = &lt;br /&gt;
		{ first = &amp;quot;F&amp;quot;,&lt;br /&gt;
		line_break = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		convert_units = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		unit_names = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		brackets = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		tooltip = &amp;quot;no&amp;quot;,&lt;br /&gt;
		add_color = &amp;quot;yes&amp;quot;,&lt;br /&gt;
		small_font = &amp;quot;no&amp;quot;,&lt;br /&gt;
		sortable = &amp;quot;no&amp;quot;, },&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
local function add_unit_names(value, unit)&lt;br /&gt;
	if not unit then&lt;br /&gt;
		unit = format.input_unit&lt;br /&gt;
	end&lt;br /&gt;
	if format.output_format.unit_names == &amp;quot;yes&amp;quot; then&lt;br /&gt;
		if value == &amp;quot;&amp;quot; then&lt;br /&gt;
			return value -- Don&amp;#039;t add a unit name to an empty string&lt;br /&gt;
		else&lt;br /&gt;
			return value .. degree .. unit&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		return value&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function interpret_format(parameter, realization1, realization2)&lt;br /&gt;
	if realization1 then&lt;br /&gt;
		if realization2 then&lt;br /&gt;
			if parameter == &amp;quot;yes&amp;quot; then&lt;br /&gt;
				parameter = { realization1, realization2 }&lt;br /&gt;
			else&lt;br /&gt;
				parameter = { &amp;quot;&amp;quot;, &amp;quot;&amp;quot; }&lt;br /&gt;
			end&lt;br /&gt;
		else&lt;br /&gt;
			if parameter == &amp;quot;yes&amp;quot; then&lt;br /&gt;
				parameter = realization1&lt;br /&gt;
			else&lt;br /&gt;
				parameter = &amp;quot;&amp;quot;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		parameter = &amp;quot;&amp;quot;&lt;br /&gt;
		add_message(&amp;quot;&amp;lt;span style=\&amp;quot;background-color: #EEE; font-family: monospace;\&amp;quot;&amp;gt;interpret_format&amp;lt;/span&amp;gt; needs at least one realization&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	return parameter&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function make_cell(row, output_format, a, b, c)&lt;br /&gt;
	local cell, CSS, cell_content = &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;&lt;br /&gt;
	local title_content, sort_attribute, sortkey, attribute_separator&lt;br /&gt;
	local style_attribute, title_attribute, values_separator = {}, {}, {}&lt;br /&gt;
	&lt;br /&gt;
	local values, converted_units&lt;br /&gt;
	local line_break, brackets = interpret_format(output_format.line_break, &amp;quot;&amp;lt;br&amp;gt;&amp;quot;), interpret_format(output_format.brackets, &amp;quot;(&amp;quot;, &amp;quot;)&amp;quot; )&lt;br /&gt;
	if a then&lt;br /&gt;
		if b then&lt;br /&gt;
			values, values_separator = { a, b  }, { &amp;quot;/&amp;quot;, interpret_format(output_format.convert_units, &amp;quot;/&amp;quot;) }&lt;br /&gt;
		else&lt;br /&gt;
			values, values_separator = { a, &amp;quot;&amp;quot; }, { &amp;quot;&amp;quot;, &amp;quot;&amp;quot; } -- Empty values must be strings, or concatenation will not work.&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	if format.input_unit == output_format.first then&lt;br /&gt;
		converted_units = interpret_format(&lt;br /&gt;
			output_format.convert_units,&lt;br /&gt;
			add_unit_names(convert(values[1], 1), format.output_unit),&lt;br /&gt;
			add_unit_names(convert(values[2], 1), format.output_unit)&lt;br /&gt;
		)&lt;br /&gt;
		values = { add_unit_names(values[1]), add_unit_names(values[2]) }&lt;br /&gt;
	elseif output_format.first == &amp;quot;C&amp;quot; or output_format.first == &amp;quot;F&amp;quot; then&lt;br /&gt;
		converted_units = interpret_format(output_format.convert_units, add_unit_names(values[1]), add_unit_names(values[2]) )&lt;br /&gt;
		values = { add_unit_names(convert(values[1], 1), output_unit), add_unit_names(convert(values[2], 1), output_unit) }&lt;br /&gt;
	else&lt;br /&gt;
		add_message(&amp;quot;The value for &amp;lt;span style=\&amp;quot;background-color: #EEE; font-family: monospace;\&amp;quot;&amp;gt;first&amp;lt;/span&amp;gt; in &amp;lt;span style=\&amp;quot;background-color: #EEE; font-family: monospace;\&amp;quot;&amp;gt;output_format&amp;lt;/span&amp;gt; is not recognized.&amp;quot;)&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	cell_content = values[1] .. values_separator[1] .. values[2] .. line_break .. brackets[1] .. converted_units[1] .. values_separator[2] .. converted_units[2] .. brackets[2]&lt;br /&gt;
	&lt;br /&gt;
	if a and b and c then&lt;br /&gt;
		CSS = interpret_format(output_format.add_color, temperature_CSS(c, input_unit))&lt;br /&gt;
		if input_unit == output_format.first then&lt;br /&gt;
			title_content = &amp;quot;Average temperature: &amp;quot; .. c .. interpret_format(output_format.convert_units, degree .. input_unit)&lt;br /&gt;
			sortkey = c&lt;br /&gt;
		else&lt;br /&gt;
			title_content = &amp;quot;Average temperature: &amp;quot; .. convert(c, 1) .. interpret_format(output_format.convert_units, degree .. output_unit)&lt;br /&gt;
			sortkey = convert(c, 1)&lt;br /&gt;
		end&lt;br /&gt;
		title_content = interpret_format(output_format.tooltip, title_content)&lt;br /&gt;
		sortkey = interpret_format(output_format.sortable, sortkey)&lt;br /&gt;
	elseif a and not b then&lt;br /&gt;
		CSS = interpret_format(output_format.add_color, temperature_CSS(a, input_unit))&lt;br /&gt;
	end&lt;br /&gt;
	CSS = CSS .. interpret_format(output_format.small_font, &amp;quot;font-size: 85%;&amp;quot;)&lt;br /&gt;
	--[[&lt;br /&gt;
	if color_CSS == &amp;quot;&amp;quot; and other_CSS == &amp;quot;&amp;quot; then&lt;br /&gt;
		style_attribute = { &amp;quot;&amp;quot;, &amp;quot;&amp;quot; }&lt;br /&gt;
	else&lt;br /&gt;
		style_attribute = { &amp;quot;style=\&amp;quot;&amp;quot;, &amp;quot;\&amp;quot;&amp;quot; }&lt;br /&gt;
	end&lt;br /&gt;
	]]&lt;br /&gt;
	&lt;br /&gt;
	--[[&lt;br /&gt;
	if other_CSS == &amp;quot;&amp;quot; and color_CSS == &amp;quot;&amp;quot; and title_content == &amp;quot;&amp;quot; and sort_attribute == &amp;quot;&amp;quot; then&lt;br /&gt;
		attribute_separator = &amp;quot;&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		attribute_separator = &amp;quot; | &amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	]]&lt;br /&gt;
	&lt;br /&gt;
	local td = row:tag(&amp;quot;td&amp;quot;)&lt;br /&gt;
		if check_for_string(cell_content) then&lt;br /&gt;
			td:wikitext (cell_content)&lt;br /&gt;
		else&lt;br /&gt;
			add_message(&amp;quot;&amp;lt;span style=\&amp;quot;background-color: #EEE; font-family: monospace;\&amp;quot;&amp;gt;cell_content&amp;lt;/span&amp;gt; is not defined.&amp;quot;)&lt;br /&gt;
		end&lt;br /&gt;
		if check_for_string(CSS) then&lt;br /&gt;
			td:cssText (CSS)&lt;br /&gt;
		end&lt;br /&gt;
		if check_for_string(title_content) then&lt;br /&gt;
			td:attr (&amp;quot;title&amp;quot;, title_content)&lt;br /&gt;
		end&lt;br /&gt;
		if check_for_string(sortkey) then&lt;br /&gt;
			td:attr (&amp;quot;data-sort-value&amp;quot;, sortkey)&lt;br /&gt;
		end&lt;br /&gt;
	-- cell = &amp;quot;\n| &amp;quot; .. style_attribute[1] ..  .. style_attribute[2] .. title_attribute[1] .. title_content .. title_attribute[2] .. sort_attribute .. attribute_separator .. cell_content&lt;br /&gt;
	return td&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.print_arrays(frame)&lt;br /&gt;
	local a, b, c = make_arrays(frame)&lt;br /&gt;
	local classes = &amp;quot;wikitable&amp;quot;&lt;br /&gt;
	if format.sortable == &amp;quot;yes&amp;quot; then&lt;br /&gt;
		classes = classes .. &amp;quot; sortable&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	local t = mw.html.create(&amp;quot;table&amp;quot;)&lt;br /&gt;
		t:addClass(classes)&lt;br /&gt;
	local tr = t:tag(&amp;quot;tr&amp;quot;)&lt;br /&gt;
	if a and b and c then&lt;br /&gt;
		for i = 1, format.length do&lt;br /&gt;
			make_cell(tr, output_formats.high_low_average_F, a[i], b[i], c[i])&lt;br /&gt;
		end&lt;br /&gt;
	elseif a and b then&lt;br /&gt;
		for i = 1, format.length do&lt;br /&gt;
			make_cell(tr, output_formats.high_low_F, a[i], b[i])&lt;br /&gt;
		end&lt;br /&gt;
	elseif a then&lt;br /&gt;
		for i = 1, format.length do&lt;br /&gt;
			make_cell(tr, output_formats.average_F, a[i])&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return tostring(t) .. &amp;quot;\n\n&amp;lt;span style=\&amp;quot;color: red; font-size: 80%; line-height: 100%;\&amp;quot;&amp;gt;&amp;quot; .. message .. &amp;quot;&amp;lt;/span&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;Erutuon</name></author>
	</entry>
</feed>