jekyll-tagging 0.0.1 → 0.1.0

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/ChangeLog CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.1.0 [2010-10-28]
2
+
3
+ * Added a <tt>tags</tt> filter.
4
+ * Ease customization by adding additional layers.
5
+
1
6
  == 0.0.1 [2010-10-25]
2
7
 
3
8
  * Here I am!
data/README.rdoc CHANGED
@@ -19,7 +19,7 @@ And in your <tt>_config.yml</tt> you have to define your layout used to generate
19
19
  tag_page_layout: tag_page
20
20
  tag_page_dir: tag
21
21
 
22
- Now you got a new filter called <tt>tag_cloud</tt> which you can use with the <tt>site</tt> object as argument in your layout to get a cloud of all your site's tags. The tags are linked to their related tag page.
22
+ Now you got a new filter called <tt>tag_cloud</tt> which you can use with the <tt>site</tt> object as argument in your layout to get a cloud of all your site's tags. The tags are linked to their related tag page. Furthermore, you got a <tt>tags</tt> filter which you can feed withe a <tt>post</tt> or a <tt>site</tt> object to get a link list of all its tags.
23
23
 
24
24
  === Example tag page layout
25
25
 
@@ -29,7 +29,7 @@ Now you got a new filter called <tt>tag_cloud</tt> which you can use with the <t
29
29
  <h2>{{ page.tag }}</h2>
30
30
  <ul>
31
31
  {% for post in page.posts %}
32
- <li><a href="{{ post.url }}">{{ post.title }}</a> ({{ post.date | date_to_string }})</li>
32
+ <li><a href="{{ post.url }}">{{ post.title }}</a> ({{ post.date | date_to_string }} | Tags: {{ post | tags }})</li>
33
33
  {% endfor %}
34
34
  </ul>
35
35
 
@@ -5,8 +5,8 @@ module Jekyll
5
5
  module Version
6
6
 
7
7
  MAJOR = 0
8
- MINOR = 0
9
- TINY = 1
8
+ MINOR = 1
9
+ TINY = 0
10
10
 
11
11
  class << self
12
12
 
@@ -1,18 +1,16 @@
1
- require 'nuggets/range/quantile_mixin'
1
+ require 'nuggets/range/quantile'
2
2
  require 'erb'
3
3
 
4
- class Range
5
- include Nuggets::Range::QuantileMixin
6
- end
7
-
8
4
  module Jekyll
9
5
 
10
6
  class Tagger < Generator
11
7
 
12
8
  safe true
13
9
 
10
+ DEFAULT_TAG_PAGE_DIR = 'tag'
11
+
14
12
  def generate(site)
15
- @tag_page_dir = site.config['tag_page_dir'] || 'tag'
13
+ @tag_page_dir = site.config['tag_page_dir'] || DEFAULT_TAG_PAGE_DIR
16
14
  @tag_page_layout = site.config['tag_page_layout']
17
15
 
18
16
  generate_tag_pages(site) if @tag_page_layout
@@ -39,19 +37,17 @@ module Jekyll
39
37
  # classes are: set-1..set-5.
40
38
  #
41
39
  # [[<TAG>, <CLASS>], ...]
42
- def calculate_tag_cloud(site)
43
- tag_data = []
44
- max = site.tags.map { |t| t[1].size }.max
45
- site.tags.sort.each { |t|
46
- quant = (1..max).quantile(t[1].size, 5)
47
- tag_data << [t[0], "set-#{quant}"]
48
- }
49
- tag_data
40
+ def calculate_tag_cloud(site, num = 5)
41
+ tags = site.tags.map { |tag, posts| [tag, posts.size] }.sort
42
+ range = 1..tags.map { |_, size| size }.max
43
+
44
+ tags.map { |tag, size| [tag, range.quantile(size, num)] }
50
45
  end
51
46
 
52
47
  end
53
48
 
54
49
  class TagPage < Page
50
+
55
51
  def initialize(site, base, dir, name, data = {})
56
52
  self.content = data.delete('content') || ''
57
53
  self.data = data
@@ -72,11 +68,29 @@ module Jekyll
72
68
  module Filters
73
69
 
74
70
  def tag_cloud(site)
75
- site['tag_data'].collect { |t|
76
- "<a href=\"/#{site['tag_page_dir']}/#{ERB::Util.u(t[0])}.html\" class=\"#{t[1]}\">#{t[0]}</a>"
71
+ dir = site['tag_page_dir']
72
+
73
+ site['tag_data'].map { |tag, set|
74
+ tag_link(tag, tag_url(tag, dir), { :class => "set-#{set}" })
77
75
  }.join(' ')
78
76
  end
79
77
 
78
+ def tag_link(tag, url = tag_url(tag), html_opts = nil)
79
+ unless html_opts.nil?
80
+ html_opts = ' ' + html_opts.map { |k, v| %Q{#{k}="#{v}"} }.join(' ')
81
+ end
82
+ %Q{<a href="#{url}"#{html_opts}>#{tag}</a>}
83
+ end
84
+
85
+ def tag_url(tag, dir = Tagger::DEFAULT_TAG_PAGE_DIR)
86
+ "/#{dir}/#{ERB::Util.u(tag)}.html"
87
+ end
88
+
89
+ def tags(obj)
90
+ tags = obj['tags'][0].is_a?(Array) ? obj['tags'].map{ |t| t[0]} : obj['tags']
91
+ tags.map { |t| tag_link(t, tag_url(t)) if t.is_a?(String) }.compact.join(', ')
92
+ end
93
+
80
94
  end
81
95
 
82
96
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-tagging
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 0
9
8
  - 1
10
- version: 0.0.1
9
+ - 0
10
+ version: 0.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Arne Eilermann
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-10-27 00:00:00 +02:00
19
+ date: 2010-10-28 00:00:00 +02:00
20
20
  default_executable:
21
21
  dependencies:
22
22
  - !ruby/object:Gem::Dependency