Revision: 1083
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at September 7, 2006 17:08 by jnunemaker
Initial Code
def font_size_for_tag_cloud( total, lowest, highest, options={} )
return nil if total.nil? or highest.nil? or lowest.nil?
#
# options
maxf = options.delete( :max_font_size ) || 14
minf = options.delete( :min_font_size ) || 11
maxc = options.delete( :max_color ) || [ 0, 0, 0 ]
minc = options.delete( :min_color ) || [ 156, 156, 156 ]
hide_sizes = options.delete( :hide_sizes )
hide_colours = options.delete( :hide_colours )
#
# function to work out rgb values
def rgb_color( a, b, i, x)
return nil if i <= 1 or x <= 1
if a > b
a-(Math.log(i)*(a-b)/Math.log(x)).floor
else
(Math.log(i)*(b-a)/Math.log(x)+a).floor
end
end
#
# work out colours
c = []
(0..2).each { |i| c << rgb_color( minc[i], maxc[i], total, highest ) || nil }
colors = c.compact.empty? ? minc.join(',') : c.join(',')
#
# work out the font size
spread = highest.to_f - lowest.to_f
spread = 1.to_f if spread <= 0
fontspread = maxf.to_f - minf.to_f
fontstep = spread / fontspread
size = ( minf + ( total.to_f / fontstep ) ).to_i
size = maxf if size > maxf
#
# display the results
size_txt = "font-size:#{ size.to_s }px;" unless hide_sizes
color_txt = "color:rgb(#{ colors });" unless hide_colours
return [ size_txt, color_txt ].join
end
Initial URL
Initial Description
Initial Title
Tag Cloud in Ruby
Initial Tags
sql, html, rails, ruby
Initial Language
Other