Acts as Taggable on Steroids: tag cloud rhtml + view helper
// description of your code here
controller layout (base) stylesheet update
create stylesheet, put it in ./public/, name it tag_cloud.css or similar
partial template call
view template code, as a partial or within index/show action template
helper code
controller layout (base) stylesheet update
<%= stylesheet_link_tag 'scaffold', 'tag_cloud' %>
create stylesheet, put it in ./public/, name it tag_cloud.css or similar
/* tag_cloud styles*/ .nube1 {font-size: 1.0em;} .nube2 {font-size: 1.2em;} .nube3 {font-size: 1.4em;} .nube4 {font-size: 1.6em;} .nube5 {font-size: 1.8em;} .nube6 {font-size: 2.0em;}
partial template call
TAG CLOUD<br/>
<%= render(:partial => "shared/article_tag_cloud", :locals => {:tags => @tags}) %>
view template code, as a partial or within index/show action template
<% # For our purposes, have this filter the list of articles to those with the chosen tag
tag_cloud true, tags, %w(nube1 nube2 nube3 nube4 nube5) do |name, css_class| %>
<%= link_to name, tag_path(name), class => css_class # links to Tag resource, with tag name as 'id'
%>
<% end %>
helper code
def tag_cloud(active, tags, classes)
if !active then return end
max, min = 0, 0
unless tags.empty?
tags.sort! {|x,y| y.count <=> x.count}
max = tags.first.count
min = tags.last.count
end
divisor = ((max - min) / classes.size) + 1
tags.each { |t|
yield t.name, classes[(t.count.to_i - min) / divisor]
}
end