X-Git-Url: https://git.ralfj.de/web.git/blobdiff_plain/2cedbd920036c821da952ed585c203699fb499f1..2af997a3ebc742057551ac0de6e750fe728326eb:/ralf/_plugins/categories.rb diff --git a/ralf/_plugins/categories.rb b/ralf/_plugins/categories.rb new file mode 100644 index 0000000..69375da --- /dev/null +++ b/ralf/_plugins/categories.rb @@ -0,0 +1,65 @@ +module Jekyll + + class CategoryPage < Page + def initialize(site, base, dir, name, category, layout) + @site = site + @base = base + @dir = dir + @name = name + + self.process(@name) + self.read_yaml(File.join(base, '_layouts'), layout) + self.data['category'] = category + + category_title_prefix = site.config['blog']['category_title_prefix'] || 'Category: ' + self.data['title'] = "#{category_title_prefix}#{category.capitalize}" + end + end + + class CategoryPageGenerator < Generator + safe true + + def generate(site) + dir = site.config['blog']['category_dir'] || 'categories' + if site.layouts.key? 'category_index' + site.categories.each_key do |category| + site.pages << CategoryPage.new(site, site.source, dir, "#{category}.html", category, 'category_index.html') + end + end + if site.layouts.key? 'category_feed' + site.categories.each_key do |category| + site.pages << CategoryPage.new(site, site.source, dir, "#{category}.xml", category, 'category_feed.html') + end + end + end + end + + # Adds some extra filters used during the category creation process. + module Filters + + # Outputs a list of categories as comma-separated links. This is used + # to output the category list for each post on a category page. + # + # +categories+ is the list of categories to format. + # + # Returns string + def category_links(categories) + base_dir = @context.registers[:site].config['blog']['category_dir'] + categories = categories.sort!.map do |category| + category_url = File.join(base_dir, "#{category}.html") + # Make sure the category directory begins with a slash. + category_dir = "/#{category_dir}" unless category_dir =~ /^\// + "#{category.capitalize}" + end + + case categories.length + when 0 + "" + when 1 + categories[0].to_s + else + categories.join(', ') + end + end + end +end