Module:WeatherBoxColors:修订间差异
外观
创建页面,内容为“w = {}; convert = require( 'Module:BaseConvert' ); math_mod = require( 'Module:Math' ); function hex( value ) return convert.convert( { n = value, base = 16, wi…” |
// Edit via Wikiplus |
||
| 第1行: | 第1行: | ||
w = {} | local w = {} | ||
local math_mod = require('Module:Math') | |||
math_mod = require( 'Module:Math' ) | |||
function hex( value ) | local function hex( value ) | ||
return string.format("%02X", value) | |||
end | end | ||
function format_line( background, text_color ) | local function format_line( background, text_color ) | ||
return "background: #" .. background .. "; color:#" .. text_color .. ";" | |||
end | end | ||
function range_pos( value, start, stop ) | 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 | end | ||
function w.color_d( frame ) | function w.color_d( frame ) | ||
local val = math_mod._cleanNumber( frame.args[1] ) | |||
return w._days_color( val ) | |||
end | end | ||
function w.color_pastel( frame ) | function w.color_pastel( frame ) | ||
local val = math_mod._cleanNumber( frame.args[1] ) | |||
return w._pastel_color( val ) | |||
end | end | ||
function w.color_t( frame ) | function w.color_t( frame ) | ||
local val = math_mod._cleanNumber( frame.args[1] ) | |||
return w._temperature_color( val ) | |||
end | end | ||
function w.color_green( frame ) | function w.color_green( frame ) | ||
local val = math_mod._cleanNumber( frame.args[1] ) | |||
return w._green_color( val ) | |||
end | end | ||
function w.color_s( frame ) | function w.color_s( frame ) | ||
local val = math_mod._cleanNumber( frame.args[1] ) | |||
return w._sunshine_color( val ) | |||
end | end | ||
function w.color_h( frame ) | function w.color_h( frame ) | ||
local val = math_mod._cleanNumber( frame.args[1] ) | |||
return w._humidity_color( val ) | |||
end | end | ||
function w.color_p( frame ) | 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 | end | ||
function w._days_color( val ) | 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 | end | ||
function w._green_color( val ) | 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 | end | ||
function w._temperature_color( val ) | 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 | end | ||
function w._precipitation_color( val ) | 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 | end | ||
function w._humidity_color( val ) | 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 | end | ||
function w._sunshine_color( val ) | 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 | end | ||
function w._pastel_color( val ) | 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 | end | ||
function w._none_color( | function w._none_color() | ||
return format_line( "FAFAFA", "000000" ) | |||
end | end | ||
function w.interpret_color_code( code ) | 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 | end | ||
return w | return w | ||
2022年11月5日 (六) 23:19的最新版本
此模块的文档可以在Module:WeatherBoxColors/doc创建
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