1da0fe11edfff565202d8d2b13fcf03730b801ce
[web.git] / ralf / _plugins / categories.rb
1 module Jekyll
2
3   class CategoryPage < Page
4     def initialize(site, base, dir, name, category, layout)
5       @site = site
6       @base = base
7       @dir = dir
8       @name = name
9
10       self.process(@name)
11       self.read_yaml(File.join(base, '_layouts'), layout)
12       self.data['category'] = category
13
14       category_title_prefix = site.config['blog']['category_title_prefix'] || 'Category: '
15       self.data['title'] = "#{category_title_prefix}#{category.capitalize}"
16     end
17   end
18
19   class CategoryPageGenerator < Generator
20     safe true
21
22     def generate(site)
23       return if site.config['blog'].nil?
24       dir = site.config['blog']['category_dir'] || 'categories'
25       if site.layouts.key? 'category_index'
26         site.categories.each_key do |category|
27           site.pages << CategoryPage.new(site, site.source, dir, "#{category}.html", category, 'category_index.html')
28         end
29       end
30       if site.layouts.key? 'category_feed'
31         site.categories.each_key do |category|
32           site.pages << CategoryPage.new(site, site.source, dir, "#{category}.xml", category, 'category_feed.html')
33         end
34       end
35     end
36   end
37
38   # Adds some extra filters used during the category creation process.
39   module Filters
40
41     # Outputs a list of categories as comma-separated <a> links. This is used
42     # to output the category list for each post on a category page.
43     #
44     #  +categories+ is the list of categories to format.
45     #
46     # Returns string
47     def category_links(categories)
48       base_dir = @context.registers[:site].config['blog']['category_dir']
49       categories = categories.sort!.map do |category|
50         category_url = File.join(base_dir, "#{category}.html")
51         # Make sure the category directory begins with a slash.
52         category_dir = "/#{category_dir}" unless category_dir =~ /^\//
53         "<a class='category' href='#{category_url}'>#{category.capitalize}</a>"
54       end
55
56       case categories.length
57       when 0
58         ""
59       when 1
60         categories[0].to_s
61       else
62         categories.join(', ')
63       end
64     end
65   end
66 end