모듈:Color contrast: 두 판 사이의 차이

둘러보기로 이동 검색으로 이동
339 바이트 추가됨 ,  2019년 1월 7일 (월)
fix unintended color2lum global error which is causing errors; clean whitespace
편집 요약 없음
(fix unintended color2lum global error which is causing errors; clean whitespace)
1번째 줄: 1번째 줄:
--
--
-- This module implements  
-- This module implements
--  {{Color contrast ratio}}
--  {{Color contrast ratio}}
--  {{Greater color contrast ratio}}
--  {{Greater color contrast ratio}}
9번째 줄: 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
18번째 줄: 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)
26번째 줄: 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
58번째 줄: 58번째 줄:
end
end


local function color2lum( c )
local function color2lum(c)


if (c == nil) then
if (c == nil) then
return ''
return ''
end
end
-- html '#' entity
c = c:gsub("&#35;", "#")
-- whitespace
-- whitespace
c = c:match( '^%s*(.-)[%s;]*$' )
c = c:match( '^%s*(.-)[%s;]*$' )
78번째 줄: 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
117번째 줄: 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


137번째 줄: 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 ''
154번째 줄: 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
207번째 줄: 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


익명 사용자

둘러보기 메뉴