Module:Weather box/colors
From Thetacola Wiki
< Module:Weather box
Jump to navigationJump to search
Revision as of 06:38, 28 June 2019 by en>Huntster (User specific WHO colours.)
File:Ambox warning yellow.svg | This Lua module is used on approximately 22,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
File:Full-protection-shackle.svg | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
File:Edit-copy green with red question mark.svg | This module's documentation is missing, inadequate, or does not accurately describe its functionality and/or the parameters in its code. Please help to expand and improve it. |
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 end end function w.color_d( frame ) local val = math_mod._cleanNumber( frame.args[1] ) return w._days_color( val ) end function w.color_pastel( frame ) local val = math_mod._cleanNumber( frame.args[1] ) return w._pastel_color( val ) end function w.color_t( frame ) local val = math_mod._cleanNumber( frame.args[1] ) return w._temperature_color( val ) end function w.color_green( frame ) local val = math_mod._cleanNumber( frame.args[1] ) return w._green_color( val ) end function w.color_s( frame ) local val = math_mod._cleanNumber( frame.args[1] ) return w._sunshine_color( val ) end function w.color_h( frame ) local val = math_mod._cleanNumber( frame.args[1] ) return w._humidity_color( val ) end function w.color_p( frame ) local val = math_mod._cleanNumber( frame.args[1] ) return w._precipitation_color( val ) end function 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 == nil then return format_line( "FFFFFF", "000000" ) end 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 == nil then return format_line( "FFFFFF", "000000" ) end 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 == nil then return format_line( "FFFFFF", "000000" ) end 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 == nil then return format_line( "FFFFFF", "000000" ) end 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 == nil then return format_line( "FFFFFF", "000000" ) end 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 == nil then return format_line( "FFFFFF", "000000" ) end 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 == nil then return format_line( "FFFFFF", "000000" ) end 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 == 1 then background = 'BB00CC' elseif val == 2 then background = 'CC00EE' elseif val == 3 then background = 'CC33EE' elseif val == 4 then background = 'CC55EE' elseif val == 5 then background = 'DD66EE' elseif val == 6 then background = 'DD77EE' elseif val == 7 then background = 'DD99EE' elseif val == 8 then background = 'DDAAEE' elseif val == 9 then background = 'DDBBEE' elseif val == 10 then background = 'EECCFF' elseif val == 11 then background = 'FFDDFF' elseif val == 12 then background = 'F1F1F1' elseif val == 13 then background = 'FFEEBB' elseif val == 14 then background = 'FFFFCC' elseif val == 15 then background = 'FFFFBB' elseif val == 16 then background = 'FFFFAA' elseif val == 17 then background = 'FFFF88' elseif val == 18 then background = 'FFCC33' elseif val == 19 then background = 'FFBB33' elseif val == 20 then background = 'FF9900' elseif val == 21 then background = 'FF8844' elseif val == 22 then background = 'FF6633' elseif val == 23 then background = 'FF5522' elseif val == 24 then background = 'FF4422' elseif val == 25 then background = 'EE4400' else background = 'AA00AA' end end return format_line( background, text_color ) end function w._uv_color( val ) local background, text_color if val == nil then return format_line( "FFFFFF", "000000" ) end 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 == 't' then return w._temperature_color elseif code == 'pastel' then return w._pastel_color elseif code == 'green' then return w._green_color elseif code == 'h' then return w._humidity_color elseif code == 's' then return w._sunshine_color elseif code == 'p' then return w._precipitation_color elseif code == 'd' then return w._days_color elseif code == 'u' then return w._uv_color elseif code == 'none' then return w._none_color else error( 'Unknown color scheme option' ) end end return w