Module:Weather box/row

This is an old revision of this page, as edited by Dragons flight (talk | contribs) at 04:11, 8 March 2013 (easier to read range finding). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
w = {};
convert = require( "Module:BaseConvert" );

function hex( value )
    return convert._convert( value, 16, 10, 0, 2, nil, nil, nil );
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, item, result;
    
    val = tonumber( frame.args[1] );
    if val == nil then
        return "background:#FFFFFF;color:#000000;"
    end
   
    result = 'background:#';
    item = hex( range_pos( val, 20, 0 )*256 );
    result = result .. item .. item;
    
    item = hex( range_pos( val, 40, 20 )*256 );
    result = result .. hex( item );
            
    if val >= 12 then
        result = result .. ";color:#FFFFFF";
    else
        result = result .. ";color:#000000";
    end        
   
    return result .. ';font-size:85%;text-align:center;';
end

function w.color_t( frame )
    local val, item, result;
    
    val = tonumber( frame.args[1] );
    if val == nil then
        return "background:#FFFFFF;color:#000000;"
    end
   
    result = 'background:#';
    if val < -42.75 or val > 60 then
        result = result .. "00";
    elseif val < 4.47 then
        item = 5.4*(42.75 + val)
        result = result .. hex( item );
    elseif val > 41.5 then      
        item = 13.78*(60-val);
        result = result .. hex( item );
    else
        result = result .. "FF"
    end
    
    if val < -42.75 or val > 41.5 then
        result = result .. "00";
    elseif val < 4.47 then
        item = 5.4*(42.75 + val)
        result = result .. hex( item );
    elseif val > 4.5 then  
        item = 6.89*(41.5 - val);
        result = result .. hex( item );
    else
        result = result .. "FF"
    end
            
    if val < -90 or val > 23 then
        result = result .. "00";
    elseif val < -42.78 then
        item = 5.4*(90 + val)
        result = result .. hex( item );
    elseif val > 4.5 then     
        item = 13.78*(23 - val);
        result = result .. hex( item );
    else
        result = result .. "FF"
    end
    
    if val < -23.3 or val >= 37.8 then
        result = result .. ";color:#FFFFFF";
    end        
   
    return result .. ';font-size:85%';
end

function w.color_p( frame )
    local val, item, result;
    
    val = tonumber( frame.args[1] );
    if val == nil then
        return "background:#FFFFFF;color:#000000;"
    end
   
    result = 'background:#';
    if val > 165.6 then
        result = result .. "0000";
    elseif val > 0.02 then
        item = 1.54*(165.6 - val);
        item = hex( item );
        result = result .. item .. item;
    else
        result = result .. "FFFF"
    end
    
    if val > 300 then
        result = result .. "30";
    elseif val > 165.61 then
        item = 1.54*(331.2 - val);
        result = result .. hex( item );
    else
        result = result .. "FF"
    end
    
    if val > 90 then
        result = result .. ";color:#FFFFFF";
    else        
        result = result .. ";color:#000000";
    end

    return result .. ';font-size:85%;text-align:center;';
end

return w;