Module:College color/contrast
This submodule is used to generate the complete color contrast table in the documentation for Module:College color.
-- This submodule is used to generate the complete color contrast table in
-- the documentation for [[Module:College color]]
local contrast = {}
local all_colors = {}
local contrast_mod = require("Module:Color contrast")
local function stripwhitespace(text)
return text:match("^%s*(.-)%s*$")
end
local function preprocesscitation(text)
text = mw.ustring.gsub(text, '%{%{%s*[Cc]ite%s*web%s*%|%s*url%s*=%s*([^|%[%]]-)%s*%|%s*title%s*=%s*([^|]-)%s*%|%s*date%s*=%s*([^|]-)%s*%|%s*access%-?date%s*=%s*([^|]-)%s*%}%}', '\"[%1 %2]\". %3. Retrieved %4.')
text = mw.ustring.gsub(text, '%{%{%s*[Cc]ite%s*manual%s*%|%s*url%s*=%s*([^|%[%]]-)%s*%|%s*title%s*=%s*([^|]-)%s*%|%s*date%s*=%s*([^|]-)%s*%|%s*access%-?date%s*=%s*([^|]-)%s*%}%}', '<i>[%1 %2]</i>. %3. Retrieved %4.')
text = mw.ustring.gsub(text, '%{%{%s*[Cc]ite%s*web%s*%|%s*title%s*=%s*([^|]-)%s*%|%s*url%s*=%s*([^|%[%]]-)%s*%|%s*date%s*=%s*([^|]-)%s*%|%s*access%-?date%s*=%s*([^|]-)%s*%}%}', '\"[%2 %1]\". %3. Retrieved %4.')
text = mw.ustring.gsub(text, '%{%{%s*[Cc]ite%s*manual%s*%|%s*title%s*=%s*([^|]-)%s*%|%s*url%s*=%s*([^|%[%]]-)%s*%|%s*date%s*=%s*([^|]-)%s*%|%s*access%-?date%s*=%s*([^|]-)%s*%}%}', '<i>[%2 %1]</i>. %3. Retrieved %4.')
text = mw.ustring.gsub(text, '%{%{%s*[Cc]ite%s*web%s*%|%s*url%s*=%s*([^|%[%]]-)%s*%|%s*title%s*=%s*([^|]-)%s*%|%s*access%-?date%s*=%s*([^|]-)%s*%}%}', '\"[%1 %2]\". Retrieved %3.')
text = mw.ustring.gsub(text, '%{%{%s*[Cc]ite%s*manual%s*%|%s*url%s*=%s*([^|%[%]]-)%s*%|%s*title%s*=%s*([^|]-)%s*%|%s*access%-?date%s*=%s*([^|]-)%s*%}%}', '<i>[%1 %2]</i>. Retrieved %3.')
text = mw.ustring.gsub(text, '%{%{%s*[Cc]ite%s*web%s*%|%s*title%s*=%s*([^|]-)%s*%|%s*url%s*=%s*([^|%[%]]-)%s*%|%s*access%-?date%s*=%s*([^|]-)%s*%}%}', '\"[%2 %1]\". Retrieved %3.')
text = mw.ustring.gsub(text, '%{%{%s*[Cc]ite%s*manual%s*%|%s*title%s*=%s*([^|]-)%s*%|%s*url%s*=%s*([^|%[%]]-)%s*%|%s*access%-?date%s*=%s*([^|]-)%s*%}%}', '<i>[%2 %1]</i>. Retrieved %3.')
return text
end
local function get_colors(team, unknown)
team = stripwhitespace(team or '')
unknown = unknown or {"DCDCDC", "000000"}
local use_default = {
[""] = 1,
["retired"] = 1,
["free agent"] = 1,
}
local colors = nil
if ( team and use_default[team:lower()] ) then
colors = {"DCDCDC", "000000"}
else
colors = all_colors[team]
if ( colors and type(colors) == 'string' ) then
colors = all_colors[colors]
end
end
return colors or unknown
end
local function color_contrast_ratio(hex1, hex2)
if( hex1 and hex2) then
local r = contrast_mod._ratio({'#' .. hex1, '#' .. hex2, error = 0})
if( r > 0 ) then
r = (r > 1) and r or (1/r)
r = math.floor(r * 100 + 0.5) / 100
return (r > 1) and r or (1/r)
end
end
return ''
end
function contrast._testtable(args)
local teamlist = {}
local aliaslist = {}
local style = args['style']
local data_module = args['data'] or "Module:College color/data"
all_colors = mw.loadData(data_module)
-- helper function
local function table_row(t, c)
local res = mw.html.create('')
if( c[1] ) then
res:tag('td'):wikitext(t)
else
res:tag('td'):wikitext(t .. ' <span class=error>ERROR</span>')
end
for i=1,3 do
res:tag('td')
:css('background', c[i] and ('#' .. c[i]) or 'transparent')
:wikitext(c[i] and '' or 'X')
end
for i=1,3 do
local j = math.fmod(i,3) + 1
res:tag('td'):wikitext(color_contrast_ratio(c[i],c[j]))
end
res:tag('td'):wikitext(color_contrast_ratio(c[1],'FFFFFF'))
res:tag('td'):wikitext(color_contrast_ratio(c[1],'000000'))
local r = ''
for k, v in pairs(c) do
if ( type(k) == 'string' and mw.ustring.match(k, '^cite') ) then
r = r .. '<ref>' .. preprocesscitation(v) .. '</ref>'
end
if( type(k) == 'string' and mw.ustring.match(k, '^ref') ) then
local rt = mw.ustring.gsub(v, '^%s*https?://(.*)', '%1') or ''
rt = mw.ustring.gsub(rt, '^(.-)/.*', '%1')
rt = mw.ustring.gsub(rt, '^www%.(.-)$', '%1') or rt
r = r .. '<ref>[' .. v .. ' ' .. rt .. ']</ref>'
end
end
res:tag('td'):wikitext(r)
return tostring(res)
end
-- list of teams
if( args and args[1] ) then
for k, team in pairs(args) do
if type(k) == 'number' then
table.insert(teamlist, team)
end
end
else
for team, colors in pairs( all_colors ) do
if type(colors) == 'string' then
aliaslist[colors] = (aliaslist[colors] or '') .. '<br />aka ' .. team
else
table.insert(teamlist, team)
end
end
table.sort(teamlist)
table.insert(teamlist, 'Free agent')
table.insert(teamlist, 'Retired')
end
-- build table
local root = mw.html.create('table')
root:addClass('wikitable sortable')
:css('font-size', '90%')
:css('line-height', '100%')
:cssText(style)
local row = root:tag('tr')
row:tag('th')
:attr('rowspan',2)
:wikitext('Team')
for i=1,3 do
row:tag('th')
:addClass('unsortable')
:attr('rowspan',2)
:wikitext(i)
end
row:tag('th')
:attr('colspan', 5)
:wikitext('Contrast')
row:tag('th')
:attr('rowspan',2)
:wikitext('refs')
row = root:tag('tr')
for i=1,3 do
local j = math.fmod(i,3) + 1
row:tag('th'):wikitext(i .. '/' .. j)
end
row:tag('th'):wikitext('1/w')
row:tag('th'):wikitext('1/b')
for k, team in pairs( teamlist ) do
row = root:tag('tr')
row:wikitext(table_row(team .. (aliaslist[team] or ''), get_colors(team)))
end
return tostring(root) .. '{{hidden begin|title=References|toggle=left}}{{reflist}}{{hidden end}}'
end
function contrast._exampletable(frame, args, styletemplate)
local teamlist = {}
local style = args['style']
local data_module = args['data'] or "Module:College color/data"
all_colors = mw.loadData(data_module)
local function stripestyle(frame, in_args)
return frame:expandTemplate{ title = styletemplate, args = in_args }
end
-- list of teams
if( args and args[1] ) then
for k, team in pairs(args) do
if type(k) == 'number' then
table.insert(teamlist, team)
end
end
else
for team, colors in pairs( all_colors ) do
if type(colors) ~= 'string' then
table.insert(teamlist, team)
end
end
table.sort(teamlist)
table.insert(teamlist, 'Free agent')
table.insert(teamlist, 'Retired')
end
-- build table
local root = mw.html.create('table')
if( args['title'] ) then
root:tag('caption'):wikitext(args['title'])
:cssText('padding: 0.2em;font-size: 125%;font-weight: bold;')
end
root:cssText('border: 1px solid #a2a9b1;border-spacing: 3px;')
:cssText('margin: 0.5em 0 0.5em 1em;')
:cssText('padding: 0.2em;float: right;clear: right;font-size: 88%;line-height: 1.5em;width: 22em;')
:cssText(style)
for k, team in pairs( teamlist ) do
local cell = root:tag('tr'):tag('th')
cell
:cssText('text-align: left;' .. stripestyle(frame,{team}))
:wikitext(team)
end
return tostring(root)
end
function contrast.testtable(frame)
return frame:preprocess(contrast._testtable(frame.args))
end
function contrast.stripetable(frame)
return contrast._exampletable(frame,frame.args, 'College stripe style')
end
function contrast.header1table(frame)
return contrast._exampletable(frame,frame.args, 'NCAA color cell')
end
function contrast.header2table(frame)
return contrast._exampletable(frame,frame.args, 'NCAA secondary color cell')
end
return contrast
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.