<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://moasspedia.org/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ACollege_color</id>
	<title>Module:College color - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://moasspedia.org/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ACollege_color"/>
	<link rel="alternate" type="text/html" href="https://moasspedia.org/w/index.php?title=Module:College_color&amp;action=history"/>
	<updated>2026-04-04T02:13:15Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.37.2</generator>
	<entry>
		<id>https://moasspedia.org/w/index.php?title=Module:College_color&amp;diff=896&amp;oldid=prev</id>
		<title>Wikipedia&gt;Frietjes: optional color=auto</title>
		<link rel="alternate" type="text/html" href="https://moasspedia.org/w/index.php?title=Module:College_color&amp;diff=896&amp;oldid=prev"/>
		<updated>2021-09-20T16:00:56Z</updated>

		<summary type="html">&lt;p&gt;optional color=auto&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;--&lt;br /&gt;
-- This module implements {{CollegePrimaryHex}}, {{CollegePrimaryStyle}},&lt;br /&gt;
-- {{CollegePrimaryColorLink}}, {{CollegeSecondaryHex}},&lt;br /&gt;
-- {{CollegeSecondaryStyle}}, {{CollegeSecondaryColorLink}}, and {{NCAA color}}&lt;br /&gt;
--&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
local data_module = &amp;quot;Module:College color/data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
local function stripwhitespace(text)&lt;br /&gt;
	return text:match(&amp;quot;^%s*(.-)%s*$&amp;quot;)&lt;br /&gt;
end&lt;br /&gt;
local function ucfirst(s)&lt;br /&gt;
	local first = s:sub(1, 1)&lt;br /&gt;
	local others = s:sub(2, -1)&lt;br /&gt;
	return first:upper() .. others&lt;br /&gt;
end&lt;br /&gt;
local function bordercss(c, w)&lt;br /&gt;
	local s = &amp;#039;inset &amp;#039; .. w .. &amp;#039;px &amp;#039; .. w .. &amp;#039;px 0 &amp;#039; .. c &lt;br /&gt;
		.. &amp;#039;, inset -&amp;#039; .. w .. &amp;#039;px -&amp;#039; .. w .. &amp;#039;px 0 &amp;#039; .. c&lt;br /&gt;
	return &amp;#039;box-shadow: &amp;#039; .. s .. &amp;#039;;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
local function sRGB ( v )&lt;br /&gt;
	if (v &amp;lt;= 0.03928) then&lt;br /&gt;
		v = v / 12.92&lt;br /&gt;
	else&lt;br /&gt;
		v = math.pow((v+0.055)/1.055, 2.4)&lt;br /&gt;
	end&lt;br /&gt;
	return v&lt;br /&gt;
end&lt;br /&gt;
local function color2lum( origc )&lt;br /&gt;
	local c = stripwhitespace(origc or &amp;#039;&amp;#039;):lower()&lt;br /&gt;
&lt;br /&gt;
	-- remove leading # (if there is one)&lt;br /&gt;
	c = mw.ustring.match(c, &amp;#039;^[#]*([a-f0-9]*)$&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	-- split into rgb&lt;br /&gt;
	local cs = mw.text.split(c or &amp;#039;&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
	if( #cs == 6 ) then&lt;br /&gt;
		local R = sRGB( (16*tonumber(&amp;#039;0x&amp;#039; .. cs[1]) + tonumber(&amp;#039;0x&amp;#039; .. cs[2]))/255 )&lt;br /&gt;
		local G = sRGB( (16*tonumber(&amp;#039;0x&amp;#039; .. cs[3]) + tonumber(&amp;#039;0x&amp;#039; .. cs[4]))/255 )&lt;br /&gt;
		local B = sRGB( (16*tonumber(&amp;#039;0x&amp;#039; .. cs[5]) + tonumber(&amp;#039;0x&amp;#039; .. cs[6]))/255 )&lt;br /&gt;
&lt;br /&gt;
		return 0.2126 * R + 0.7152 * G + 0.0722 * B&lt;br /&gt;
	elseif ( #cs == 3 ) then&lt;br /&gt;
		local R = sRGB( (16*tonumber(&amp;#039;0x&amp;#039; .. cs[1]) + tonumber(&amp;#039;0x&amp;#039; .. cs[1]))/255 )&lt;br /&gt;
		local G = sRGB( (16*tonumber(&amp;#039;0x&amp;#039; .. cs[2]) + tonumber(&amp;#039;0x&amp;#039; .. cs[2]))/255 )&lt;br /&gt;
		local B = sRGB( (16*tonumber(&amp;#039;0x&amp;#039; .. cs[3]) + tonumber(&amp;#039;0x&amp;#039; .. cs[3]))/255 )&lt;br /&gt;
&lt;br /&gt;
		return 0.2126 * R + 0.7152 * G + 0.0722 * B&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- failure&lt;br /&gt;
	error(&amp;#039;Invalid hex color &amp;#039; .. origc, 2)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function remove_sport(team)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot;%s*&amp;lt;[Bb][Rr][^&amp;lt;&amp;gt;]*&amp;gt;%s*&amp;quot;, &amp;#039; &amp;#039;);&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Tt]eam$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Bb]asketball$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Bb]aseball$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Cc]ross [Cc]ountry$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Ff]ield [Hh]ockey$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Ff]ootball$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Gg]olf$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Gg]ymnastics$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Ii]ce [Hh]ockey$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Ll]acrosse$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Rr]owing$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Ss]ki$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Ss]occer$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Ss]oftball$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Ss]wim$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Tt]ennis$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Tt]rack [Aa]nd [Ff]ield$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Vv]olleyball$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Ww]restling$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Ww]omen&amp;#039;s$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
	team = mw.ustring.gsub(team, &amp;quot; [Mm]en&amp;#039;s$&amp;quot;, &amp;#039;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	return team&lt;br /&gt;
end&lt;br /&gt;
local function get_colors(team, unknown)&lt;br /&gt;
	team = stripwhitespace(team or &amp;#039;&amp;#039;)&lt;br /&gt;
	unknown = unknown or {&amp;quot;DCDCDC&amp;quot;, &amp;quot;000000&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
	local use_default = {&lt;br /&gt;
		[&amp;quot;&amp;quot;] = 1,&lt;br /&gt;
		[&amp;quot;retired&amp;quot;] = 1,&lt;br /&gt;
		[&amp;quot;free agent&amp;quot;] = 1,&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	local colors = nil&lt;br /&gt;
&lt;br /&gt;
	if ( team and use_default[team:lower()] ) then&lt;br /&gt;
		colors = {&amp;quot;DCDCDC&amp;quot;, &amp;quot;000000&amp;quot;}&lt;br /&gt;
	else&lt;br /&gt;
		local all_colors = mw.loadData(data_module)&lt;br /&gt;
		colors = all_colors[team]&lt;br /&gt;
		if ( colors and type(colors) == &amp;#039;string&amp;#039; ) then&lt;br /&gt;
			colors = all_colors[colors]&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return colors or unknown&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function team_color(team, num, num2)&lt;br /&gt;
	local colors = get_colors(team, nil)&lt;br /&gt;
&lt;br /&gt;
	num = tonumber(num:match(&amp;#039;[1-3]&amp;#039;) or &amp;#039;0&amp;#039;)&lt;br /&gt;
	num2 = tonumber(num2:match(&amp;#039;[1-3]&amp;#039;) or &amp;#039;0&amp;#039;)&lt;br /&gt;
	if ( num ) then&lt;br /&gt;
		return colors[num] or colors[num2] or &amp;#039;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function team_style1(team, borderwidth, fontcolor)&lt;br /&gt;
	local colors = get_colors(team, nil)&lt;br /&gt;
&lt;br /&gt;
	local color = &amp;#039;#&amp;#039; .. (colors[3] or colors[2] or &amp;#039;&amp;#039;)&lt;br /&gt;
	if fontcolor and fontcolor == &amp;#039;auto&amp;#039; then&lt;br /&gt;
		-- compute the luminosity of the background&lt;br /&gt;
		local lum = color2lum(colors[1] or &amp;#039;&amp;#039;)&lt;br /&gt;
		-- compute the contrast with white and black&lt;br /&gt;
		local wcontrast = (1 + 0.05)/(lum + 0.05)&lt;br /&gt;
		local bcontrast = (lum + 0.05)/(0 + 0.05)&lt;br /&gt;
		-- select the text color with the best contrast&lt;br /&gt;
		if( bcontrast &amp;gt; wcontrast + 1.25 ) then&lt;br /&gt;
			fontcolor = &amp;#039;#000000&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			fontcolor = &amp;#039;#FFFFFF&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local style = &amp;#039;background-color:#&amp;#039; .. (colors[1] or &amp;#039;&amp;#039;) .. &amp;#039;;color:&amp;#039; .. (fontcolor or color) .. &amp;#039;;&amp;#039;&lt;br /&gt;
	-- remove the border if it&amp;#039;s nearly white&lt;br /&gt;
	if ((1 + 0.05)/(color2lum(color) + 0.05) &amp;lt; 1.25) then&lt;br /&gt;
		borderwidth = &amp;#039;0&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	borderwidth = tonumber(borderwidth or &amp;#039;2&amp;#039;) or 0&lt;br /&gt;
	if (borderwidth &amp;gt; 0 and color ~= &amp;#039;#FFFFFF&amp;#039;) then&lt;br /&gt;
		style = style .. bordercss(color, borderwidth)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return style&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function team_style2(team, borderwidth, fontcolor)&lt;br /&gt;
	local colors = get_colors(team, nil)&lt;br /&gt;
&lt;br /&gt;
	local color = &amp;#039;#&amp;#039; .. (colors[1] or &amp;#039;&amp;#039;)&lt;br /&gt;
	if fontcolor and fontcolor == &amp;#039;auto&amp;#039; then&lt;br /&gt;
		-- compute the luminosity of the background&lt;br /&gt;
		local lum = color2lum(colors[3] or colors[2] or &amp;#039;&amp;#039;)&lt;br /&gt;
		-- compute the contrast with white and black&lt;br /&gt;
		local wcontrast = (1 + 0.05)/(lum + 0.05)&lt;br /&gt;
		local bcontrast = (lum + 0.05)/(0 + 0.05)&lt;br /&gt;
		-- select the text color with the best contrast&lt;br /&gt;
		if( bcontrast &amp;gt; wcontrast + 1.25 ) then&lt;br /&gt;
			fontcolor = &amp;#039;#000000&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			fontcolor = &amp;#039;#FFFFFF&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local style = &amp;#039;background-color:#&amp;#039; .. (colors[3] or colors[2] or &amp;#039;&amp;#039;) .. &amp;#039;;color:&amp;#039; .. (fontcolor or color) .. &amp;#039;;&amp;#039;&lt;br /&gt;
	-- remove the border if it&amp;#039;s nearly white&lt;br /&gt;
	if ((1 + 0.05)/(color2lum(color) + 0.05) &amp;lt; 1.25) then&lt;br /&gt;
		borderwidth = &amp;#039;0&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	borderwidth = tonumber(borderwidth or &amp;#039;2&amp;#039;) or 0&lt;br /&gt;
	if (borderwidth &amp;gt; 0 and color ~= &amp;#039;#FFFFFF&amp;#039;) then&lt;br /&gt;
		style = style .. bordercss(color, borderwidth)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return style&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function team_header1(team, borderwidth)&lt;br /&gt;
	local colors = get_colors(team, nil)&lt;br /&gt;
	-- set the default background&lt;br /&gt;
	local background = (colors[1] or &amp;#039;FFFFFF&amp;#039;):upper()&lt;br /&gt;
	-- set background to white if it&amp;#039;s nearly white&lt;br /&gt;
	if ((1 + 0.05)/(color2lum(background) + 0.05) &amp;lt; 1.25) then&lt;br /&gt;
		background = &amp;#039;FFFFFF&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- now pick a font color&lt;br /&gt;
	local fontcolor = &amp;#039;000000&amp;#039;&lt;br /&gt;
	-- compute the luminosity of the background&lt;br /&gt;
	local lum = color2lum(background)&lt;br /&gt;
	-- compute the contrast with white and black&lt;br /&gt;
	local wcontrast = (1 + 0.05)/(lum + 0.05)&lt;br /&gt;
	local bcontrast = (lum + 0.05)/(0 + 0.05)&lt;br /&gt;
	-- select the text color with the best contrast&lt;br /&gt;
	if( bcontrast &amp;gt; wcontrast + 1.25 ) then&lt;br /&gt;
		fontcolor = &amp;#039;000000&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		fontcolor = &amp;#039;FFFFFF&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local style&lt;br /&gt;
	if( background == &amp;#039;FFFFFF&amp;#039; ) then&lt;br /&gt;
		style = &amp;#039;background-color:none;color:#&amp;#039; .. fontcolor .. &amp;#039;;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		style = &amp;#039;background-color:#&amp;#039; .. background .. &amp;#039;;color:#&amp;#039; .. fontcolor .. &amp;#039;;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if borderwidth then&lt;br /&gt;
		borderwidth = tonumber(borderwidth or &amp;#039;2&amp;#039;) or 0&lt;br /&gt;
		local bordercolor = (colors[3] or colors[2] or &amp;#039;FFFFFF&amp;#039;):upper()&lt;br /&gt;
		if (borderwidth &amp;gt; 0 and bordercolor ~= &amp;#039;FFFFFF&amp;#039;) then&lt;br /&gt;
			-- do not add a border if it&amp;#039;s nearly white&lt;br /&gt;
			if ((1 + 0.05)/(color2lum(bordercolor) + 0.05) &amp;gt;= 1.25) then&lt;br /&gt;
				style = style .. bordercss(&amp;#039;#&amp;#039; .. bordercolor, borderwidth)&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return style&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function team_header2(team)&lt;br /&gt;
	local colors = get_colors(team, nil)&lt;br /&gt;
	-- set the default background&lt;br /&gt;
	local background = (colors[3] or colors[2] or &amp;#039;FFFFFF&amp;#039;):upper()&lt;br /&gt;
	-- set background to white if it&amp;#039;s nearly white&lt;br /&gt;
	if ((1 + 0.05)/(color2lum(background) + 0.05) &amp;lt; 1.25) then&lt;br /&gt;
		background = &amp;#039;FFFFFF&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	-- if the background is white, then use the primary background instead&lt;br /&gt;
	if( background == &amp;#039;FFFFFF&amp;#039; ) then&lt;br /&gt;
		background = (colors[1] or &amp;#039;FFFFFF&amp;#039;):upper()&lt;br /&gt;
	end&lt;br /&gt;
	-- now pick a font color&lt;br /&gt;
	local fontcolor = &amp;#039;000000&amp;#039;&lt;br /&gt;
	-- compute the luminosity of the background&lt;br /&gt;
	local lum = color2lum(background)&lt;br /&gt;
	-- compute the contrast with white and black&lt;br /&gt;
	local wcontrast = (1 + 0.05)/(lum + 0.05)&lt;br /&gt;
	local bcontrast = (lum + 0.05)/(0 + 0.05)&lt;br /&gt;
	-- select the text color with the best contrast&lt;br /&gt;
	if( bcontrast &amp;gt; wcontrast + 1.25 ) then&lt;br /&gt;
		fontcolor = &amp;#039;000000&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		fontcolor = &amp;#039;FFFFFF&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if( background == &amp;#039;FFFFFF&amp;#039; ) then&lt;br /&gt;
		return &amp;#039;background-color:none;color:#&amp;#039; .. fontcolor .. &amp;#039;;&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;#039;background-color:#&amp;#039; .. background .. &amp;#039;;color:#&amp;#039; .. fontcolor .. &amp;#039;;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function team_table_head(args, team, ctype)&lt;br /&gt;
	local colors = get_colors(team, nil)&lt;br /&gt;
	local borderwidth = tonumber(args[&amp;#039;border&amp;#039;]) or 0&lt;br /&gt;
	-- set the default background&lt;br /&gt;
	local background = (ctype == &amp;#039;p&amp;#039;) and&lt;br /&gt;
		(colors[1] or &amp;#039;FFFFFF&amp;#039;):upper() or&lt;br /&gt;
		(colors[3] or colors[2] or &amp;#039;FFFFFF&amp;#039;):upper()&lt;br /&gt;
	-- now pick a font color&lt;br /&gt;
	local fontcolor = &amp;#039;&amp;#039;&lt;br /&gt;
	-- compute the luminosity of the background&lt;br /&gt;
	local lum = color2lum(background)&lt;br /&gt;
	-- compute the contrast with white and black&lt;br /&gt;
	local wcontrast = (1 + 0.05)/(lum + 0.05)&lt;br /&gt;
	local bcontrast = (lum + 0.05)/(0 + 0.05)&lt;br /&gt;
	-- select the text color with the best contrast&lt;br /&gt;
	if( bcontrast &amp;gt; wcontrast + 1.25 ) then&lt;br /&gt;
		fontcolor = &amp;#039;#000000&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		fontcolor = &amp;#039;#FFFFFF&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	local s = &amp;#039;background-color:#&amp;#039; .. background .. &amp;#039;;color:&amp;#039; .. (args[&amp;#039;color&amp;#039;] or fontcolor) .. &amp;#039;;&amp;#039;&lt;br /&gt;
	if borderwidth &amp;gt; 0 then&lt;br /&gt;
		local bc = (ctype == &amp;#039;p&amp;#039;) and &lt;br /&gt;
		(colors[3] or colors[2] or &amp;#039;&amp;#039;) or (colors[1] or &amp;#039;&amp;#039;)&lt;br /&gt;
		if bc ~= &amp;#039;FFFFFF&amp;#039; then&lt;br /&gt;
			s = s .. bordercss(&amp;#039;#&amp;#039; .. bc, borderwidth)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local res = &amp;#039;|-\n&amp;#039;&lt;br /&gt;
	for i=1,50 do&lt;br /&gt;
		if( args[i] ~= nil ) then&lt;br /&gt;
			local cstyle = &amp;#039;scope=&amp;quot;col&amp;quot; style=&amp;quot;&amp;#039; .. s .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
			if args[&amp;#039;col&amp;#039; .. i .. &amp;#039;span&amp;#039;] ~= nil then&lt;br /&gt;
				cstyle = cstyle .. &amp;#039; colspan=&amp;#039; .. args[&amp;#039;col&amp;#039; .. i .. &amp;#039;span&amp;#039;]&lt;br /&gt;
			end&lt;br /&gt;
			if args[&amp;#039;class&amp;#039; .. i ] ~= nil then&lt;br /&gt;
				cstyle = cstyle .. &amp;#039; class=&amp;quot;&amp;#039; .. args[&amp;#039;class&amp;#039; .. i] .. &amp;#039;&amp;quot;&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			res = res .. &amp;#039;! &amp;#039; .. cstyle .. &amp;#039; |&amp;#039; .. args[i] .. &amp;#039;\n&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			return res .. &amp;#039;|-\n&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return res .. &amp;#039;&amp;lt;span class=&amp;quot;error&amp;quot;&amp;gt;Error!&amp;lt;/span&amp;gt;\n|-\n&amp;#039;&lt;br /&gt;
&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function team_stripe1(team, borderwidth)&lt;br /&gt;
	local colors = get_colors(team, nil)&lt;br /&gt;
&lt;br /&gt;
	-- set the default scheme&lt;br /&gt;
	local background = colors[1] or &amp;#039;&amp;#039;&lt;br /&gt;
	local fontcolor = colors[2] or &amp;#039;&amp;#039;&lt;br /&gt;
	local bordercolor = (colors[3] or colors[2] or &amp;#039;&amp;#039;):upper()&lt;br /&gt;
	borderwidth = tonumber(borderwidth or &amp;#039;3&amp;#039;) or 0&lt;br /&gt;
&lt;br /&gt;
	-- if there is no tertiary color, then pick a font color&lt;br /&gt;
	if (colors[3] == nil) then&lt;br /&gt;
		-- compute the luminosity of the background&lt;br /&gt;
		local lum = color2lum(colors[1])&lt;br /&gt;
		-- compute the contrast with white and black&lt;br /&gt;
		local wcontrast = (1 + 0.05)/(lum + 0.05)&lt;br /&gt;
		local bcontrast = (lum + 0.05)/(0 + 0.05)&lt;br /&gt;
		-- select the text color with the best contrast&lt;br /&gt;
		if( bcontrast &amp;gt; wcontrast + 1.25 ) then&lt;br /&gt;
			fontcolor = &amp;#039;000000&amp;#039;&lt;br /&gt;
		else&lt;br /&gt;
			fontcolor = &amp;#039;FFFFFF&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	-- finally build the style string&lt;br /&gt;
	local style = &amp;#039;&amp;#039;&lt;br /&gt;
	if (borderwidth &amp;gt; 0) then&lt;br /&gt;
		-- use the primary as the border if the border is white or close to white&lt;br /&gt;
		local bordercontrast = (1 + 0.05)/(color2lum(bordercolor) + 0.05)&lt;br /&gt;
		if (bordercontrast &amp;lt; 1.25) then&lt;br /&gt;
			bordercolor = background&lt;br /&gt;
			local fontcontrast = (1 + 0.05)/(color2lum(colors[2] or &amp;#039;FFFFFF&amp;#039;) + 0.05)&lt;br /&gt;
			if (fontcontrast &amp;lt; 1.25) then&lt;br /&gt;
				fontcolor = colors[2] or &amp;#039;FFFFFF&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		style = style .. &amp;#039; border:&amp;#039; .. borderwidth .. &amp;#039;px solid #&amp;#039; .. bordercolor .. &amp;#039;;&amp;#039;&lt;br /&gt;
		style = style .. &amp;#039; border-left: none; border-right: none;&amp;#039;&lt;br /&gt;
		style = style .. &amp;#039; box-shadow: inset 0 2px 0 #FEFEFE, inset 0 -2px 0 #FEFEFE;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	style = &amp;#039;background-color:#&amp;#039; .. background .. &amp;#039;;color:#&amp;#039; .. fontcolor .. &amp;#039;;&amp;#039; .. style&lt;br /&gt;
&lt;br /&gt;
	return style&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function team_boxes(frame, team, order, sep)&lt;br /&gt;
	local function colorbox( h )&lt;br /&gt;
		local r = mw.html.create(&amp;#039;&amp;#039;)&lt;br /&gt;
		r:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;legend-color&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;background-color&amp;#039;, &amp;#039;#&amp;#039; .. (h or &amp;#039;&amp;#039;))&lt;br /&gt;
			:wikitext(&amp;#039;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
		return tostring(r)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local colors = get_colors(team, &amp;#039;unknown&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if type(colors) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local colorboxes = {}&lt;br /&gt;
	local colororder = {&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;}&lt;br /&gt;
	local namecheck = 0&lt;br /&gt;
	if order == &amp;#039;&amp;#039; then&lt;br /&gt;
		order = colors[&amp;#039;order&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
		namecheck = 1&lt;br /&gt;
	end&lt;br /&gt;
	if order ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		colororder = mw.text.split(order, &amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	for k,v in pairs(colororder) do&lt;br /&gt;
		local i = tonumber(v) or 0&lt;br /&gt;
		if(	namecheck == 0 or colors[&amp;#039;name&amp;#039; .. i]) then&lt;br /&gt;
			if colors[i] then&lt;br /&gt;
				table.insert(colorboxes,colorbox(colors[i]))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (#colorboxes &amp;gt; 0) then&lt;br /&gt;
		return frame:extensionTag{ name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Legend/styles.css&amp;#039;} } .. table.concat(colorboxes, sep)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function team_list(frame, team, num1, num2, num3, num4, num5, sep)&lt;br /&gt;
	local function colorbox( h )&lt;br /&gt;
		local r = mw.html.create(&amp;#039;&amp;#039;)&lt;br /&gt;
		r:tag(&amp;#039;span&amp;#039;)&lt;br /&gt;
			:addClass(&amp;#039;legend-color&amp;#039;)&lt;br /&gt;
			:css(&amp;#039;background-color&amp;#039;, &amp;#039;#&amp;#039; .. (h or &amp;#039;&amp;#039;))&lt;br /&gt;
			:wikitext(&amp;#039;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
		return tostring(r)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local colors = get_colors(team, &amp;#039;unknown&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
	if type(colors) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
		return &amp;#039;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local nums = {&lt;br /&gt;
		tonumber(num1:match(&amp;#039;[1-5]&amp;#039;) or &amp;#039;0&amp;#039;) or 0,&lt;br /&gt;
		tonumber(num2:match(&amp;#039;[1-5]&amp;#039;) or &amp;#039;0&amp;#039;) or 0,&lt;br /&gt;
		tonumber(num3:match(&amp;#039;[1-5]&amp;#039;) or &amp;#039;0&amp;#039;) or 0,&lt;br /&gt;
		tonumber(num4:match(&amp;#039;[1-5]&amp;#039;) or &amp;#039;0&amp;#039;) or 0,&lt;br /&gt;
		tonumber(num5:match(&amp;#039;[1-5]&amp;#039;) or &amp;#039;0&amp;#039;) or 0}&lt;br /&gt;
&lt;br /&gt;
	local colorboxes = {}&lt;br /&gt;
	local colornames = {}&lt;br /&gt;
	local colororder = {&amp;#039;1&amp;#039;,&amp;#039;2&amp;#039;,&amp;#039;3&amp;#039;,&amp;#039;4&amp;#039;,&amp;#039;5&amp;#039;}&lt;br /&gt;
	local order = colors[&amp;#039;order&amp;#039;] or &amp;#039;&amp;#039;&lt;br /&gt;
	if(order ~= &amp;#039;&amp;#039;) then&lt;br /&gt;
		colororder = mw.text.split(order, &amp;#039;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	for k,v in pairs(colororder) do&lt;br /&gt;
		local i = tonumber(v) or 0&lt;br /&gt;
		if ( nums[i] &amp;gt; 0 ) then&lt;br /&gt;
			if(	colors[&amp;#039;name&amp;#039; .. nums[i]]) then&lt;br /&gt;
				table.insert(colornames,colors[&amp;#039;name&amp;#039; .. nums[i]])&lt;br /&gt;
				table.insert(colorboxes,colorbox(colors[nums[i]] or &amp;#039;&amp;#039;))&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local res = &amp;#039;&amp;#039;&lt;br /&gt;
	if (#colornames &amp;gt; 0) then&lt;br /&gt;
		colornames[1] = ucfirst(colornames[1])&lt;br /&gt;
	end&lt;br /&gt;
	&lt;br /&gt;
	res = mw.text.listToText(&lt;br /&gt;
		colornames,&lt;br /&gt;
		&amp;#039;,&amp;amp;nbsp;&amp;#039;,&lt;br /&gt;
		#colornames == 2 and &amp;#039;&amp;amp;nbsp;and&amp;amp;nbsp;&amp;#039; or &amp;#039;,&amp;amp;nbsp;and&amp;amp;nbsp;&amp;#039;&lt;br /&gt;
	)&lt;br /&gt;
&lt;br /&gt;
	if (colors[&amp;#039;cite&amp;#039;]) then&lt;br /&gt;
		res = res .. frame:preprocess(&amp;#039;&amp;lt;ref&amp;gt;&amp;#039; .. colors[&amp;#039;cite&amp;#039;] .. &amp;#039;&amp;lt;/ref&amp;gt;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
	if (colors[&amp;#039;ref&amp;#039;]) then&lt;br /&gt;
		res = res .. &amp;#039;[&amp;#039; .. colors[&amp;#039;ref&amp;#039;] .. &amp;#039;]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
	if (colors[&amp;#039;ref2&amp;#039;]) then&lt;br /&gt;
		res = res .. &amp;#039;[&amp;#039; .. colors[&amp;#039;ref2&amp;#039;] .. &amp;#039;]&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (#colornames &amp;gt; 0) then&lt;br /&gt;
		res = res .. sep&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (#colorboxes &amp;gt; 0) then&lt;br /&gt;
		res = res .. frame:extensionTag{ name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Legend/styles.css&amp;#039;} }&lt;br /&gt;
		res = res .. table.concat(colorboxes, &amp;#039;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return res&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function team_check(team, unknown)&lt;br /&gt;
	local colors = get_colors(team, unknown)&lt;br /&gt;
	if type(colors) == &amp;#039;table&amp;#039; then&lt;br /&gt;
		return &amp;#039;known&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return unknown&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.color(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_color(remove_sport(args[1] or &amp;#039;&amp;#039;), args[2] or &amp;#039;&amp;#039;, args[3] or &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.color1(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_color(remove_sport(args[1] or &amp;#039;&amp;#039;), &amp;#039;1&amp;#039;, &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.color32(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_color(remove_sport(args[1] or &amp;#039;&amp;#039;), &amp;#039;3&amp;#039;, &amp;#039;2&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.style1(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_style1(remove_sport(args[1] or &amp;#039;&amp;#039;), args[&amp;#039;border&amp;#039;], args[&amp;#039;color&amp;#039;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.style2(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_style2(remove_sport(args[1] or &amp;#039;&amp;#039;), args[&amp;#039;border&amp;#039;], args[&amp;#039;color&amp;#039;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.header1(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_header1(remove_sport(args[1] or &amp;#039;&amp;#039;), args[&amp;#039;border&amp;#039;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.header2(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_header2(remove_sport(args[1] or &amp;#039;&amp;#039;))&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.tablehead1(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_table_head(args, remove_sport(args[&amp;#039;team&amp;#039;] or &amp;#039;&amp;#039;), &amp;#039;p&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.tablehead2(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_table_head(args, remove_sport(args[&amp;#039;team&amp;#039;] or &amp;#039;&amp;#039;), &amp;#039;s&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.stripe1(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_stripe1(remove_sport(args[1] or &amp;#039;&amp;#039;), args[&amp;#039;border&amp;#039;])&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.boxes(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_boxes(frame, remove_sport(args[1] or &amp;#039;&amp;#039;),&lt;br /&gt;
		args[&amp;#039;order&amp;#039;] or &amp;#039;&amp;#039;, args[&amp;#039;sep&amp;#039;] or &amp;#039;&amp;amp;nbsp;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.list(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_list(frame, remove_sport(args[1] or &amp;#039;&amp;#039;),&lt;br /&gt;
		args[2] or &amp;#039;1&amp;#039;, args[3] or &amp;#039;2&amp;#039;, args[4] or &amp;#039;3&amp;#039;, args[5] or &amp;#039;4&amp;#039;, args[6] or &amp;#039;5&amp;#039;, args[&amp;#039;sep&amp;#039;] or &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.check(frame)&lt;br /&gt;
	local args = (frame.args[1] ~= nil) and frame.args or frame:getParent().args&lt;br /&gt;
	return team_check(remove_sport(args[1] or &amp;#039;&amp;#039;), args[2] or &amp;#039;&amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.check_data()&lt;br /&gt;
	-- In a sandbox, preview {{#invoke:college color|check_data}}&lt;br /&gt;
	local results = {&amp;#039;Problems in [[Module:College color/data]]:&amp;#039;}&lt;br /&gt;
	local function problems(msg)&lt;br /&gt;
		if msg then&lt;br /&gt;
			table.insert(results, msg)&lt;br /&gt;
		elseif results[2] then&lt;br /&gt;
			return table.concat(results, &amp;#039;\n*&amp;#039;)&lt;br /&gt;
		else&lt;br /&gt;
			return &amp;#039;No problems detected.&amp;#039;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local data = require(data_module)&lt;br /&gt;
	local keys = {}&lt;br /&gt;
	for k, _ in pairs(data) do&lt;br /&gt;
		table.insert(keys, k)&lt;br /&gt;
	end&lt;br /&gt;
	table.sort(keys)&lt;br /&gt;
	for _, key in ipairs(keys) do&lt;br /&gt;
		local val = data[key]&lt;br /&gt;
		if not (type(key) == &amp;#039;string&amp;#039; and (type(val) == &amp;#039;table&amp;#039; or type(val) == &amp;#039;string&amp;#039;)) then&lt;br /&gt;
			problems(&amp;#039;Invalid type for &amp;quot;&amp;#039; .. tostring(key) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
		if type(val) == &amp;#039;table&amp;#039; then&lt;br /&gt;
			if not (2 &amp;lt;= #val and #val &amp;lt;= 4) then&lt;br /&gt;
				problems(&amp;#039;Invalid number of numbered parameters for &amp;quot;&amp;#039; .. tostring(key) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
			end&lt;br /&gt;
			for i, v in ipairs(val) do&lt;br /&gt;
				if not tostring(v):match(&amp;#039;^%x%x%x%x%x%x$&amp;#039;) then&lt;br /&gt;
					problems(&amp;#039;Parameter [&amp;#039; .. i .. &amp;#039;] should be a 6-hex-digit color but is &amp;quot;&amp;#039; .. tostring(v) .. &amp;#039;&amp;quot; for &amp;quot;&amp;#039; .. tostring(key) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			for k, v in pairs(val) do&lt;br /&gt;
				if type(k) == &amp;#039;number&amp;#039; then&lt;br /&gt;
					if not (1 &amp;lt;= k and k &amp;lt;= 4) then&lt;br /&gt;
						problems(&amp;#039;Invalid numbered parameter for &amp;quot;&amp;#039; .. tostring(key) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
					end&lt;br /&gt;
				elseif type(k) == &amp;#039;string&amp;#039; then&lt;br /&gt;
					if not (&lt;br /&gt;
							k:match(&amp;#039;^name[1-4]$&amp;#039;) or&lt;br /&gt;
							k:match(&amp;#039;^cite2?$&amp;#039;) or&lt;br /&gt;
							k:match(&amp;#039;^order$&amp;#039;)&lt;br /&gt;
							) then&lt;br /&gt;
						problems(&amp;#039;Unexpected key in table for &amp;quot;&amp;#039; .. tostring(key) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					problems(&amp;#039;Invalid key type in table for &amp;quot;&amp;#039; .. tostring(key) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		elseif data[val] == nil then&lt;br /&gt;
			problems(&amp;#039;Undefined alias for &amp;quot;&amp;#039; .. tostring(key) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
		elseif type(data[val]) ~= &amp;#039;table&amp;#039; then&lt;br /&gt;
			problems(&amp;#039;Alias is not a table for &amp;quot;&amp;#039; .. tostring(key) .. &amp;#039;&amp;quot;&amp;#039;)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return problems()&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.testtable(frame)&lt;br /&gt;
	local contrasttable_mod = require(&amp;quot;Module:College color/contrast&amp;quot;)&lt;br /&gt;
	return contrasttable_mod._testtable(frame.args)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>Wikipedia&gt;Frietjes</name></author>
	</entry>
</feed>