local w = local math_mod = require('Module:Math')
local function hex(value) return string.format("%02X", value)end
local function format_line(background, text_color) return "background: #" .. background .. "; color:#" .. text_color .. ";"end
local function range_pos(value, start, stop) if start < stop then if value < start then return 0 elseif value > stop then return 1 else return (value - start) / (stop - start) end else if value < stop then return 1 elseif value > start then return 0 else return (start - value) / (start - stop) end endend
function w.color_d(frame) local val = math_mod._cleanNumber(frame.args[1]) return w._days_color(val)endfunction w.color_pastel(frame) local val = math_mod._cleanNumber(frame.args[1]) return w._pastel_color(val)endfunction w.color_t(frame) local val = math_mod._cleanNumber(frame.args[1]) return w._temperature_color(val)endfunction w.color_green(frame) local val = math_mod._cleanNumber(frame.args[1]) return w._green_color(val)endfunction w.color_s(frame) local val = math_mod._cleanNumber(frame.args[1]) return w._sunshine_color(val)endfunction w.color_h(frame) local val = math_mod._cleanNumber(frame.args[1]) return w._humidity_color(val)endfunction w.color_p(frame) local val = math_mod._cleanNumber(frame.args[1]) return w._precipitation_color(val)endfunction w.color_u(frame) local val = math_mod._cleanNumber(frame.args[1]) return w._uv_color(val)end
function w._days_color(val) local item, background, text_color
if val
item = hex(range_pos(val, 20, 0)*255) background = item .. item
item = hex(range_pos(val, 40, 20)*255) background = background .. item
if val >= 12 then text_color = "FFFFFF" else text_color = "000000" end
return format_line(background, text_color)end
function w._green_color(val) local item1, item2, background, text_color
if val
item1 = hex(range_pos(val, 165.6, 0)*255) item2 = hex(range_pos(val, 300, 165.61)*207 + 48) background = item1 .. item2 .. item1 if val >= 200 then text_color = "FFFFFF" else text_color = "000000" end
return format_line(background, text_color)end
function w._temperature_color(val) local item, background, text_color
if val
if val < 4.5 then item = range_pos(val, -42.75, 4.5)*255 background = hex(item) else item = range_pos(val, 60, 41.5)*255 background = hex(item) end
if val <= 4.5 then item = range_pos(val, -42.75, 4.5)*255 background = background .. hex(item) else item = range_pos(val, 41.5, 4.5)*255 background = background .. hex(item) end
if val < -42.78 then item = range_pos(val, -90, -42.78)*255 background = background .. hex(item) else item = range_pos(val, 23, 4.5)*255 background = background .. hex(item) end
if val < -23.3 or val >= 37.8 then text_color = "FFFFFF" else text_color = "000000" end
return format_line(background, text_color)end
function w._precipitation_color(val) local item, background, text_color
if val
item = hex(range_pos(val, 165.6, 0)*255) background = item .. item
item = hex(range_pos(val, 300, 165.61)*207 + 48) background = background .. item
if val > 90 then text_color = "FFFFFF" else text_color = "000000" end
return format_line(background, text_color)end
function w._humidity_color(val) local item, background, text_color
if val
item = hex(range_pos(val, 66.67, 0)*255) background = item .. item
item = hex(range_pos(val, 133.33, 66.667)*255) background = background .. item
if val >= 40 then text_color = "FFFFFF" else text_color = "000000" end
return format_line(background, text_color)end
function w._sunshine_color(val) local item, background, text_color
if val
if val < 90 then item = hex(range_pos(val, 0, 90)*170) elseif val < 180 then item = hex(range_pos(val, 90, 180)*42.5 + 170) else item = hex(range_pos(val, 180, 360)*42.5 + 212.5) end background = item .. item
if val < 90 then item = hex(range_pos(val, 0, 90)*170) elseif val < 270 then item = hex(range_pos(val, 150, 90)*170) else item = hex(range_pos(val, 270, 720)*255) end background = background .. item
if val < 80 then text_color = "FFFFFF" else text_color = "000000" end
return format_line(background, text_color)end
function w._pastel_color(val) local background, text_color
if val
if val < -15 or val >= 39 then text_color = "FFFFFF" else text_color = "000000" end
if val >= 51 then background = 'EE2200' else val = math_mod._round((val + 25.5)/3, 0) if val
2 then background = 'CC00EE' elseif val
4 then background = 'CC55EE' elseif val
6 then background = 'DD77EE' elseif val
8 then background = 'DDAAEE' elseif val
10 then background = 'EECCFF' elseif val
12 then background = 'F1F1F1' elseif val
14 then background = 'FFFFCC' elseif val
16 then background = 'FFFFAA' elseif val
18 then background = 'FFCC33' elseif val
20 then background = 'FF9900' elseif val
22 then background = 'FF6633' elseif val
24 then background = 'FF4422' elseif val
return format_line(background, text_color)end
function w._uv_color(val) local background, text_color
if val
if val < 3 then background = "3EA72D" elseif val >= 3 and val < 6 then background = "FFF300" elseif val >= 6 and val < 8 then background = "F18B00" elseif val >= 8 and val < 11 then background = "E53210" else background = "B567A4" end
if val < 3 then text_color = "FFFFFF" elseif val >= 3 and val < 8 then text_color = "000000" else text_color = "FFFFFF" end
return format_line(background, text_color)end
function w._none_color return format_line("FAFAFA", "000000")end
function w.interpret_color_code(code) code = code:lower if code
'pastel' then return w._pastel_color elseif code
'h' then return w._humidity_color elseif code
'p' then return w._precipitation_color elseif code
'u' then return w._uv_color elseif code
return w