jekyll-categories 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +3 -0
- data/Gemfile +4 -0
- data/Rakefile +2 -0
- data/jekyll-categories.gemspec +23 -0
- data/lib/jekyll-categories.rb +121 -0
- data/lib/jekyll-categories/version.rb +5 -0
- data/readme.md +37 -0
- metadata +85 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "jekyll-categories/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "jekyll-categories"
|
7
|
+
s.version = Jekyll::Categories::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Roger López"]
|
10
|
+
s.email = ["roger@zroger.com"]
|
11
|
+
s.homepage = "http://github.com/zroger/jekyll-categories"
|
12
|
+
s.summary = %q{Category generators for Jekyll}
|
13
|
+
s.description = %q{Provides a category index page, category pages and category atom feeds for Jekyll.}
|
14
|
+
|
15
|
+
s.rubyforge_project = "jekyll-categories"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_runtime_dependency('jekyll', [">= 0.10.0"])
|
23
|
+
end
|
@@ -0,0 +1,121 @@
|
|
1
|
+
module Jekyll
|
2
|
+
module Categories
|
3
|
+
class CategoryIndex < Page
|
4
|
+
def initialize(site, base, dir, category)
|
5
|
+
@site = site
|
6
|
+
@base = base
|
7
|
+
@dir = dir
|
8
|
+
@name = 'index.html'
|
9
|
+
|
10
|
+
self.process(@name)
|
11
|
+
self.read_yaml(File.join(base, '_layouts'), 'category_index.html')
|
12
|
+
self.data['category'] = category
|
13
|
+
|
14
|
+
category_title_prefix = site.config['category_title_prefix'] || 'Category: '
|
15
|
+
self.data['title'] = "#{category_title_prefix}#{category}"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class CategoryFeed < Page
|
20
|
+
def initialize(site, base, dir, category)
|
21
|
+
@site = site
|
22
|
+
@base = base
|
23
|
+
@dir = dir
|
24
|
+
@name = 'atom.xml'
|
25
|
+
|
26
|
+
self.process(@name)
|
27
|
+
self.read_yaml(File.join(base, '_layouts'), 'category_feed.xml')
|
28
|
+
self.data['category'] = category
|
29
|
+
|
30
|
+
category_title_prefix = site.config['category_title_prefix'] || 'Category: '
|
31
|
+
self.data['title'] = "#{category_title_prefix}#{category}"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class CategoryList < Page
|
36
|
+
def initialize(site, base, dir, categories)
|
37
|
+
@site = site
|
38
|
+
@base = base
|
39
|
+
@dir = dir
|
40
|
+
@name = 'index.html'
|
41
|
+
|
42
|
+
self.process(@name)
|
43
|
+
self.read_yaml(File.join(base, '_layouts'), 'category_list.html')
|
44
|
+
self.data['categories'] = categories
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
class CategoryGenerator < Generator
|
49
|
+
safe true
|
50
|
+
|
51
|
+
def generate(site)
|
52
|
+
if site.layouts.key? 'category_index'
|
53
|
+
dir = site.config['category_dir'] || 'categories'
|
54
|
+
site.categories.keys.each do |category|
|
55
|
+
write_category_index(site, File.join(dir, category.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase), category)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
if site.layouts.key? 'category_feed'
|
60
|
+
dir = site.config['category_dir'] || 'categories'
|
61
|
+
site.categories.keys.each do |category|
|
62
|
+
write_category_feed(site, File.join(dir, category.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase), category)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
if site.layouts.key? 'category_list'
|
67
|
+
dir = site.config['category_dir'] || 'categories'
|
68
|
+
write_category_list(site, dir, site.categories.keys.sort)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def write_category_index(site, dir, category)
|
73
|
+
index = CategoryIndex.new(site, site.source, dir, category)
|
74
|
+
index.render(site.layouts, site.site_payload)
|
75
|
+
index.write(site.dest)
|
76
|
+
site.static_files << index
|
77
|
+
end
|
78
|
+
|
79
|
+
def write_category_feed(site, dir, category)
|
80
|
+
index = CategoryFeed.new(site, site.source, dir, category)
|
81
|
+
index.render(site.layouts, site.site_payload)
|
82
|
+
index.write(site.dest)
|
83
|
+
site.static_files << index
|
84
|
+
end
|
85
|
+
|
86
|
+
def write_category_list(site, dir, categories)
|
87
|
+
index = CategoryList.new(site, site.source, dir, categories)
|
88
|
+
index.render(site.layouts, site.site_payload)
|
89
|
+
index.write(site.dest)
|
90
|
+
site.static_files << index
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
# Returns a correctly formatted category url based on site configuration.
|
95
|
+
#
|
96
|
+
# Use without arguments to return the url of the category list page.
|
97
|
+
# {% category_url %}
|
98
|
+
#
|
99
|
+
# Use with argument to return the url of a specific catogory page. The
|
100
|
+
# argument can be either a string or a variable in the current context.
|
101
|
+
# {% category_url category_name %}
|
102
|
+
# {% category_url category_var %}
|
103
|
+
#
|
104
|
+
class CategoryUrlTag < Liquid::Tag
|
105
|
+
def initialize(tag_name, text, tokens)
|
106
|
+
super
|
107
|
+
@category = text
|
108
|
+
end
|
109
|
+
|
110
|
+
def render(context)
|
111
|
+
base_url = context.registers[:site].config['base-url'] || '/'
|
112
|
+
category_dir = context.registers[:site].config['category_dir'] || 'categories'
|
113
|
+
|
114
|
+
category = context[@category] || @category.strip.tr(' ', '-').downcase
|
115
|
+
category.empty? ? "#{base_url}#{category_dir}" : "#{base_url}#{category_dir}/#{category}"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
Liquid::Template.register_tag('category_url', Jekyll::Categories::CategoryUrlTag)
|
data/readme.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
Jekyll Categories
|
2
|
+
=================
|
3
|
+
|
4
|
+
This gem provides a [Jekyll](http://github.com/mojombo/jekyll) generator for
|
5
|
+
category pages, category feeds and a category index.
|
6
|
+
|
7
|
+
Basic Setup
|
8
|
+
-----------
|
9
|
+
Install the gem:
|
10
|
+
|
11
|
+
[sudo] gem install jekyll-categories
|
12
|
+
|
13
|
+
In a plugin file within your Jekyll project's _plugins directory:
|
14
|
+
|
15
|
+
# _plugins/my-plugin.rb
|
16
|
+
require "jekyll-categories"
|
17
|
+
|
18
|
+
Create the following layouts:
|
19
|
+
|
20
|
+
- category_index.html
|
21
|
+
- category_list.html
|
22
|
+
- category_feed.xml
|
23
|
+
|
24
|
+
Bundler Setup
|
25
|
+
-------------
|
26
|
+
Already using bundler to manage gems for your Jekyll project? Then just add
|
27
|
+
|
28
|
+
gem "jekyll-categories"
|
29
|
+
|
30
|
+
to your gemfile and create the following plugin in your projects _plugins
|
31
|
+
directory. I've called mine bundler.rb. This will automatically require all
|
32
|
+
of the gems specified in your Gemfile.
|
33
|
+
|
34
|
+
# _plugins/bundler.rb
|
35
|
+
require "rubygems"
|
36
|
+
require "bundler/setup"
|
37
|
+
Bundler.require(:default)
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jekyll-categories
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- "Roger L\xC3\xB3pez"
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2011-06-30 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: jekyll
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
30
|
+
- 10
|
31
|
+
- 0
|
32
|
+
version: 0.10.0
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: Provides a category index page, category pages and category atom feeds for Jekyll.
|
36
|
+
email:
|
37
|
+
- roger@zroger.com
|
38
|
+
executables: []
|
39
|
+
|
40
|
+
extensions: []
|
41
|
+
|
42
|
+
extra_rdoc_files: []
|
43
|
+
|
44
|
+
files:
|
45
|
+
- .gitignore
|
46
|
+
- Gemfile
|
47
|
+
- Rakefile
|
48
|
+
- jekyll-categories.gemspec
|
49
|
+
- lib/jekyll-categories.rb
|
50
|
+
- lib/jekyll-categories/version.rb
|
51
|
+
- readme.md
|
52
|
+
has_rdoc: true
|
53
|
+
homepage: http://github.com/zroger/jekyll-categories
|
54
|
+
licenses: []
|
55
|
+
|
56
|
+
post_install_message:
|
57
|
+
rdoc_options: []
|
58
|
+
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
segments:
|
67
|
+
- 0
|
68
|
+
version: "0"
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
none: false
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
requirements: []
|
78
|
+
|
79
|
+
rubyforge_project: jekyll-categories
|
80
|
+
rubygems_version: 1.3.7
|
81
|
+
signing_key:
|
82
|
+
specification_version: 3
|
83
|
+
summary: Category generators for Jekyll
|
84
|
+
test_files: []
|
85
|
+
|