Changes

Jump to navigation Jump to search
fix unintended color2lum global error which is causing errors; clean whitespace
Line 1: Line 1:  
--
 
--
-- This module implements  
+
-- This module implements
 
--  {{Color contrast ratio}}
 
--  {{Color contrast ratio}}
 
--  {{Greater color contrast ratio}}
 
--  {{Greater color contrast ratio}}
Line 9: Line 9:  
local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' )
 
local HTMLcolor = mw.loadData( 'Module:Color contrast/colors' )
   −
local function sRGB ( v )  
+
local function sRGB (v)
if (v <= 0.03928) then  
+
if (v <= 0.03928) then
 
v = v / 12.92
 
v = v / 12.92
 
else
 
else
Line 18: Line 18:  
end
 
end
   −
local function rgbdec2lum( R, G, B )
+
local function rgbdec2lum(R, G, B)
 
if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then
 
if ( 0 <= R and R < 256 and 0 <= G and G < 256 and 0 <= B and B < 256 ) then
 
return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255)
 
return 0.2126 * sRGB(R/255) + 0.7152 * sRGB(G/255) + 0.0722 * sRGB(B/255)
Line 26: Line 26:  
end
 
end
   −
local function hsl2lum( h, s, l )
+
local function hsl2lum(h, s, l)
 
if ( 0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1 ) then
 
if ( 0 <= h and h < 360 and 0 <= s and s <= 1 and 0 <= l and l <= 1 ) then
 
local c = (1 - math.abs(2*l - 1))*s
 
local c = (1 - math.abs(2*l - 1))*s
Line 58: Line 58:  
end
 
end
   −
local function color2lum( c )
+
local function color2lum(c)
    
if (c == nil) then
 
if (c == nil) then
Line 82: Line 82:  
end
 
end
   −
  -- convert from hsl
+
-- convert from hsl
  if mw.ustring.match(c,'^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
+
if mw.ustring.match(c,'^hsl%([%s]*[0-9][0-9%.]*[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
 
local h, s, l = mw.ustring.match(c,'^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
 
local h, s, l = mw.ustring.match(c,'^hsl%([%s]*([0-9][0-9%.]*)[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
 
return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100)
 
return hsl2lum(tonumber(h), tonumber(s)/100, tonumber(l)/100)
  end
+
end
   −
  -- convert from rgb
+
-- convert from rgb
  if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$') then
+
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*,[%s]*[0-9][0-9]*[%s]*%)$') then
 
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$')
 
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*,[%s]*([0-9][0-9]*)[%s]*%)$')
 
return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B))
 
return rgbdec2lum(tonumber(R), tonumber(G), tonumber(B))
  end
+
end
   −
  -- convert from rgb percent
+
-- convert from rgb percent
  if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
+
if mw.ustring.match(c,'^rgb%([%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*,[%s]*[0-9][0-9%.]*%%[%s]*%)$') then
 
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
 
local R, G, B = mw.ustring.match(c,'^rgb%([%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*,[%s]*([0-9][0-9%.]*)%%[%s]*%)$')
 
return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100)
 
return rgbdec2lum(255*tonumber(R)/100, 255*tonumber(G)/100, 255*tonumber(B)/100)
  end
+
end
    
-- remove leading # (if there is one) and whitespace
 
-- remove leading # (if there is one) and whitespace
Line 121: Line 121:  
-- failure, return blank
 
-- failure, return blank
 
return ''
 
return ''
 +
end
 +
 +
-- This exports the function for use in other modules.
 +
-- The colour is passed as a string.
 +
function p._lum(color)
 +
return color2lum(color)
 
end
 
end
   Line 141: Line 147:  
ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2
 
ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2
 
end
 
end
+
 
 
if css then
 
if css then
 
local c1 = args[1] or ''
 
local c1 = args[1] or ''
Line 158: Line 164:  
return 'background-color:' .. c1 .. '; color:' .. ((ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '') .. ';'
 
return 'background-color:' .. c1 .. '; color:' .. ((ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or '') .. ';'
 
end
 
end
+
 
 
return (ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or ''
 
return (ratio1 > 0) and (ratio2 > 0) and ((ratio1 + bias > ratio2) and c2 or c3) or ''
 
end
 
end
Line 211: Line 217:  
end
 
end
    +
--[[
 +
Use {{#invoke:Color contrast|somecolor}} directly or
 +
{{#invoke:Color contrast}} from a wrapper template.
 +
 +
Parameters:
 +
-- |1= — required; A color to check.
 +
--]]
 
function p.lum(frame)
 
function p.lum(frame)
return color2lum(frame.args[1] or frame:getParent().args[1])
+
local color = frame.args[1] or frame:getParent().args[1]
 +
return p._lum(color)
 
end
 
end
  
Anonymous user

Navigation menu