class Jekyll::Tagger

Attributes

site[RW]
types[RW]
site[RW]

Public Instance Methods

generate(site) click to toggle source
# File doc/plugins/tags.rb, line 16
def generate(site)
  self.class.site = self.site = site

  generate_tag_pages
  add_tag_cloud
end

Private Instance Methods

active_tags() click to toggle source
# File doc/plugins/tags.rb, line 73
def active_tags
  return site.tags unless site.config['ignored_tags']
  site.tags.reject { |t| site.config['ignored_tags'].include? t[0] }
end
add_tag_cloud(num = 5, name = 'tag_data') click to toggle source
# 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
calculate_tag_cloud(num = 5) click to toggle source

Calculates the css class of every tag for a tag cloud. The possible classes are: set-1..set-5.

[<TAG>, <CLASS>], …
# File doc/plugins/tags.rb, line 61
def calculate_tag_cloud(num = 5)
  range = 0

  tags = active_tags.map do |tag, posts|
    [tag.to_s, range < (size = posts.size) ? range = size : size]
  end

  range = 1..range

  tags.sort!.map! { |tag, size| [tag, range.quantile(size, num)] }
end
generate_tag_pages() click to toggle source

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
new_tag(tag, posts) { |data| ... } click to toggle source
# File doc/plugins/tags.rb, line 32
def new_tag(tag, posts)
  self.class.types.each do |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
end
pretty?() click to toggle source
# File doc/plugins/tags.rb, line 78
def pretty?
  @pretty ||= (site.permalink_style == :pretty || site.config['tag_permalink_style'] == 'pretty')
end