Share to:

Modul:WeatherBoxColors

w = {};
math_mod = require( 'Module:Math' );

function hex( value )
    return string.format("%02X", value)
end

function format_line( background, text_color )
    return table.concat( {"background: #", background, "; color:#", text_color, ";"} );
end

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._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 = table.concat( { 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 item, 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._none_color( val )
    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 == 'none' then
        return w._none_color;
    else
        error( 'Unknown color scheme option' );
    end    
end

return w;

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya