در حال ویرایش پودمان:Color contrast
این ویرایش را میتوان خنثی کرد. لطفاً تفاوت زیر را بررسی کنید تا تأیید کنید که این چیزی است که میخواهید انجام دهید، سپس تغییرات زیر را ذخیره کنید تا خنثیسازی ویرایش را به پایان ببرید.
نسخهٔ فعلی | متن شما | ||
خط ۱: | خط ۱: | ||
-- | -- | ||
-- This module implements | -- This module implements | ||
-- {{Color contrast ratio}} | -- {{Color contrast ratio}} | ||
-- {{Greater color contrast ratio}} | -- {{Greater color contrast ratio}} | ||
خط ۹: | خط ۹: | ||
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 | ||
خط ۱۸: | خط ۱۸: | ||
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) | ||
خط ۲۶: | خط ۲۶: | ||
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 | ||
خط ۵۸: | خط ۵۸: | ||
end | end | ||
local function color2lum(c) | local function color2lum( c ) | ||
if (c == nil) then | if (c == nil) then | ||
return '' | return '' | ||
end | end | ||
-- whitespace | -- whitespace | ||
c = c:match( '^%s*(.-)[%s;]*$' ) | c = c:match( '^%s*(.-)[%s;]*$' ) | ||
خط ۸۲: | خط ۷۸: | ||
end | end | ||
-- 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 | |||
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 | |||
-- 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 | |||
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 | |||
-- 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 | |||
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 | |||
-- remove leading # (if there is one) and whitespace | -- remove leading # (if there is one) and whitespace | ||
خط ۱۲۱: | خط ۱۱۷: | ||
-- failure, return blank | -- failure, return blank | ||
return '' | return '' | ||
end | end | ||
function p._greatercontrast(args) | function p._greatercontrast(args) | ||
local bias = tonumber(args['bias'] or '0') or 0 | local bias = tonumber(args['bias'] or '0') or 0 | ||
local v1 = color2lum(args[1] or '') | local v1 = color2lum(args[1] or '') | ||
local c2 = args[2] or '#FFFFFF' | local c2 = args[2] or '#FFFFFF' | ||
خط ۱۳۷: | خط ۱۲۶: | ||
local c3 = args[3] or '#000000' | local c3 = args[3] or '#000000' | ||
local v3 = color2lum(c3) | local v3 = color2lum(c3) | ||
local ratio1 = | local ratio1 = 0; | ||
local ratio2 = | local ratio2 = 0; | ||
if (type(v1) == 'number' and type(v2) == 'number') then | if (type(v1) == 'number' and type(v2) == 'number') then | ||
ratio1 = (v2 + 0.05)/(v1 + 0.05) | ratio1 = (v2 + 0.05)/(v1 + 0.05) | ||
خط ۱۴۷: | خط ۱۳۶: | ||
ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2 | ratio2 = (ratio2 < 1) and 1/ratio2 or ratio2 | ||
end | end | ||
return (ratio1 + bias > ratio2) and c2 or c3 | |||
return | |||
end | end | ||
خط ۱۹۸: | خط ۱۶۹: | ||
local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or '', '&#[Xx]23;', '#'), '#', '#'), ';') | local slist = mw.text.split(mw.ustring.gsub(mw.ustring.gsub(style or '', '&#[Xx]23;', '#'), '#', '#'), ';') | ||
for k = 1,#slist do | for k = 1,#slist do | ||
s = slist[k] | |||
local k,v = s:match( '^[%s]*([^:]-):([^:]-)[%s;]*$' ) | local k,v = s:match( '^[%s]*([^:]-):([^:]-)[%s;]*$' ) | ||
k = k or '' | k = k or '' | ||
خط ۲۱۷: | خط ۱۸۸: | ||
end | end | ||
function p.lum(frame) | function p.lum(frame) | ||
return color2lum(frame.args[1] or frame:getParent().args[1]) | |||
end | end | ||