# File doc/plugins/tags.rb, line 16 def generate(site) self.class.site = self.site = site generate_tag_pages add_tag_cloud end
# File doc/plugins/tags.rb, line 52 def add_tag_cloud(num = 5, name = 'tag_data') s, t = site, { name => calculate_tag_cloud(num) } s.respond_to?(:add_payload) ? s.add_payload(t) : s.config.update(t) end
Calculates the css class of every tag for a tag cloud. The possible classes are: set-1..set-5.
# File doc/plugins/tags.rb, line 61 def calculate_tag_cloud(num = 5) range = 0 tags = active_tags.map { |tag, posts| [tag.to_s, range < (size = posts.size) ? range = size : size] } range = 1..range tags.sort!.map! { |tag, size| [tag, range.quantile(size, num)] } end
Generates a page per tag and adds them to all the pages of
site
. A tag_page_layout
have to be defined in
your _config.yml
to use this.
# File doc/plugins/tags.rb, line 28 def generate_tag_pages active_tags.each { |tag, posts| new_tag(tag, posts) } end
# File doc/plugins/tags.rb, line 32 def new_tag(tag, posts) self.class.types.each { |type| if layout = site.config["tag_#{type}_layout"] data = { 'layout' => layout, 'posts' => posts.sort.reverse!, 'tag' => tag, 'title' => tag } name = yield data if block_given? name ||= tag tag_dir = site.config["tag_#{type}_dir"] tag_dir = File.join(tag_dir, (pretty? ? name : '')) page_name = "#{pretty? ? 'index' : name}#{site.layouts[data['layout']].ext}" site.pages << TagPage.new( site, site.source, tag_dir, page_name, data ) end } end
# File doc/plugins/tags.rb, line 79 def pretty? @pretty ||= (site.permalink_style == :pretty || site.config['tag_permalink_style'] == 'pretty') end