Module:Color contrast: Difference between revisions

    m>Frietjes
    (better error checking)
    m>Kephir
    (rudimentary CSS parser)
    Line 202: Line 202:
    local args = frame.args[1] and frame.args or frame:getParent().args
    local args = frame.args[1] and frame.args or frame:getParent().args
    return p._greatercontrast(args)
    return p._greatercontrast(args)
    end
    -- warning: crude! may be fooled by sufficientry tricky CSS
    function p.extract_css_colors(css, e)
    local fgcolor, bgcolor
    css = css:gsub("/%*.-%*/", "")
    for name, value in string.gmatch(css, "([a-z-]*)%s*:%s*([^;]*)") do
    value = mw.text.trim(value)
    if name == 'color' then
    fgcolor = value
    elseif name == 'background-color' then
    bgcolor = value
    elseif name == 'background' then
    value = value:gsub("url%((['\"]?).-%1%)", "")
    bgcolor = value:match("#[0-9A-Fa-f]*") or value:match("rgba?%([0-9.%, ]*%)") or value:match("hsla?%([0-9.%, ]*%)")
    if not bgcolor then
    value = value:gsub("[0-9.][0-9.]*[%%a-z][a-z]?[a-z]?", "")
    value = value:gsub("auto", ""):gsub("cover", ""):gsub("contain", "")
    value = value:gsub("scroll", ""):gsub("fixed", ""):gsub("local", "")
    value = value:gsub("left", ""):gsub("right", ""):gsub("top", ""):gsub("bottom", ""):gsub("center", "")
    value = value:gsub("no%-repeat", ""):gsub("repeat", ""):gsub("repeat%-[xy]", ""):gsub("space", ""):gsub("round", "")
    value = value:gsub("border%-box", ""):gsub("padding%-box", ""):gsub("content%-box", "")
    bgcolor = mw.text.trim(value)
    end
    end
    end
    return fgcolor, bgcolor
    end
    end


    return p
    return p