Документация
local p = {} -- p stands for package
local colorContrast = require('Module:Color contrast')
-- from https://github.com/EmmanuelOga/columns/blob/master/utils/color.lua
function hsvToRgb(h, s, v)
local r, g, b
local i = math.floor(h * 6);
local f = h * 6 - i;
local p = v * (1 - s);
local q = v * (1 - f * s);
local t = v * (1 - (1 - f) * s);
i = i % 6
if i == 0 then r, g, b = v, t, p
elseif i == 1 then r, g, b = q, v, p
elseif i == 2 then r, g, b = p, v, t
elseif i == 3 then r, g, b = p, q, v
elseif i == 4 then r, g, b = t, p, v
elseif i == 5 then r, g, b = v, p, q
end
return math.floor(r * 255), math.floor(g * 255), math.floor(b * 255)
end
function p.main (frame)
local res = ''
local number = tonumber(frame.args['number'] or '0')
local colors = {}
for k, value in pairs(frame.args) do
if k ~= 'number' then
local h, s, v = string.match(value, "([0-9.]+), ([0-9.]+), ([0-9.]+)")
local r, g, b = hsvToRgb(tonumber(h)/360, tonumber(s)/100, tonumber(v)/100)
table.insert(colors, {h=tonumber(h), s=tonumber(s), v=tonumber(v), r=r, g=g, b=b, hex=string.format("%x%x%x", r , g , b)})
-- res = res .. value:sub(1,#value-1) .. ': ' .. colors[tonumber(k)].hex.. '\r\n'
end
end
res = res .. 'Строчки кликабельны и от/с-крывают карточку ниже'
res = res .. '<table class="wikitable">'
for k, c in pairs(colors) do
res = res .. '<tr>'
res = res .. string.format('<td class="mw-customtoggle-color%d-%d" style="background:#%s">#%s (%d, %d, %.1f)</td>', number, k, c.hex, c.hex, c.h, c.s, c.v)
res = res .. '<td>' .. math.floor(colorContrast._ratio({'#' .. c.hex, 'black'}) * 10) / 10 .. '</td>'
res = res .. '</tr>'
end
res = res .. '</table>'
res = res .. '<div class="mw-customtoggle-colorarticle' .. number .. '" style="font-weight: bold;">Статья?</div>'
res = res .. '<div class="mw-collapsible'
if number ~= 0 then
res = res .. ' mw-collapsed'
end
res = res .. '" id="mw-customcollapsible-colorarticle' .. number .. '">'
for k, c in pairs(colors) do
res = res .. '<div class="mw-collapsible'
if k ~= 1 then
res = res .. ' mw-collapsed'
end
res = res .. '" id="mw-customcollapsible-color' .. number .. '-' .. k .. '">'
res = res .. frame:expandTemplate{title='Участник:Wikisaurus/Служебное/Цветная карточка', args={c.hex}}
res = res .. '</div>'
end
res = res .. frame:expandTemplate{title='Участник:Wikisaurus/Служебное/Цветная статья', args={}}
res = res .. '</div>'
res = res .. '<div class="mw-customtoggle-colortable' .. number .. '" style="font-weight: bold;">Таблица?</div>'
res = res .. '<div class="mw-collapsible'
if number ~= 0 then
res = res .. ' mw-collapsed'
end
res = res .. '" id="mw-customcollapsible-colortable' .. number .. '">'
res = res .. '<table><tr>'
for k, c in pairs(colors) do
local infobox = frame:expandTemplate{title='Участник:Wikisaurus/Служебное/Цветная карточка', args={c.hex}}
res = res .. '<td>' .. infobox .. '</td>'
if k ~= 1 and math.fmod(k, 3) == 1 then
res = res .. '</tr><tr><td>' .. infobox .. '</td>'
end
end
res = res .. '</tr></table>'
res = res .. '</div>'
return res .. '</pre>'
end
return p