nanoc-toolbox 0.0.3 → 0.0.4

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.
@@ -1,14 +1,17 @@
1
1
  # Changelog
2
2
 
3
3
  ## developement
4
+ * NEW: add_section Filter
5
+ * CHANGED: bugfix on navigation helper
6
+
4
7
 
5
8
  ## Release 0.0.3
6
9
 
7
- * NEW: Gravatar Helper
10
+ * NEW: Gravatar Helper
8
11
  * CHANGED: Better Yardoc documentation
9
- * NEW: RSpec tests
10
- * NEW: HTML Tag Helper
11
- * NEW: HtlmTidy Filter
12
+ * NEW: RSpec tests
13
+ * NEW: HTML Tag Helper
14
+ * NEW: HtlmTidy Filter
12
15
 
13
16
  ## Release 0.0.2
14
17
 
data/README.md CHANGED
@@ -12,6 +12,9 @@ The nanoc-toolbox is a collection of filters and helpers for the static site gen
12
12
  * Gravatar Helper
13
13
  * HtmlTag Helper
14
14
 
15
+ * AddSection Filter
16
+ * HtmlTidy Filter
17
+
15
18
  ## Requirements
16
19
 
17
20
  * nanoc3
@@ -1,4 +1,5 @@
1
1
  require 'nanoc/toolbox/filters/html_tidy'
2
+ require 'nanoc/toolbox/filters/add_sections'
2
3
 
3
4
  # This module will regroup all the filters for nanoc
4
5
  module Nanoc::Toolbox::Filters
@@ -0,0 +1,92 @@
1
+ module Nanoc::Toolbox::Filters
2
+
3
+ # This filters adds section div’s based on headers. For example, this:
4
+ # @example
5
+ # h1
6
+ # p
7
+ # foo
8
+ # p
9
+ # h2
10
+ # p
11
+ # p
12
+ # h2
13
+ # p
14
+ # p
15
+ # h1
16
+ # p
17
+ #
18
+ # section
19
+ # h1
20
+ # p
21
+ # foo
22
+ # p
23
+ # section
24
+ # h2
25
+ # p
26
+ # p
27
+ # section
28
+ # h2
29
+ # p
30
+ # p
31
+ # section
32
+ # p
33
+ # @author Denis Defreyne <denis.defreyne@stoneship.org>
34
+ class AddSections < Nanoc3::Filter
35
+
36
+ identifiers :add_sections
37
+
38
+ def run(content, arguments={})
39
+ require 'nokogiri'
40
+
41
+ # Parse
42
+ doc = Nokogiri::HTML.fragment(content)
43
+
44
+ # Add sections for all headers
45
+ (1..6).each do |level|
46
+ # For each header on this level
47
+ doc.css("h#{level}").each do |header|
48
+ # Get all siblings
49
+ siblings = header.parent.children
50
+
51
+ # Remove previous siblings
52
+ siblings_after = []
53
+ should_include = false
54
+ siblings.each do |sibling|
55
+ if sibling == header
56
+ should_include = true
57
+ elsif should_include
58
+ siblings_after << sibling
59
+ end
60
+ end
61
+
62
+ # Remove next siblings that should not be part of this section
63
+ siblings_in_between = []
64
+ siblings_after.each do |sibling|
65
+ if sibling.name =~ /^h(\d)/ && $1.to_i <= level
66
+ break
67
+ else
68
+ siblings_in_between << sibling
69
+ end
70
+ end
71
+
72
+ # Create section
73
+ section = Nokogiri::XML::Node.new('div', doc)
74
+ section['class'] = 'section'
75
+ section['id'] = header.content.downcase.gsub(/\W+/, '-').gsub(/^-|-$/, '')
76
+ header.add_previous_sibling(section)
77
+
78
+ # Move children into section
79
+ header.unlink
80
+ section.add_child(header)
81
+ siblings_in_between.each do |sibling|
82
+ sibling.unlink
83
+ section.add_child(sibling)
84
+ end
85
+ end
86
+ end
87
+
88
+ # Done
89
+ doc.to_s
90
+ end
91
+ end
92
+ end
@@ -18,17 +18,10 @@ module Nanoc::Toolbox::Helpers
18
18
  #
19
19
  # @param [String] identifier - the identifier string of the root element
20
20
  # @param [Hash] options - The Optional parameters
21
- # @option options [Interger] :depth (3) maximum depth of the rendered menu
22
- # @option options [String] :collection_tag ('ol') collection englobing tag name
23
- # @option options [String] :item_tag ('li') item englobing tag name
21
+ # @option options (see #render_menu)
24
22
  #
25
23
  # @return [String] The output ready to be displayed by the caller
26
24
  def navigation_for(identifier, options={})
27
- # Parse options or set to default values
28
- options[:depth] ||= 3
29
- options[:collection_tag] ||= 'ol'
30
- options[:item_tag] ||= 'li'
31
-
32
25
  # Get root item for which we need to draw the navigation
33
26
  root = @items.find { |i| i.identifier == identifier }
34
27
 
@@ -46,9 +39,7 @@ module Nanoc::Toolbox::Helpers
46
39
  #
47
40
  # @param [String] item_rep - the representation of desired item
48
41
  # @param [Hash] options - The Optional parameters
49
- # @option options [Interger] :depth (3) maximum depth of the rendered menu
50
- # @option options [String] :collection_tag ('ol') collection englobing tag name
51
- # @option options [String] :item_tag ('li') item englobing tag name
42
+ # @option options (see #render_menu)
52
43
  #
53
44
  # @return [String] The output ready to be displayed by the caller
54
45
  #
@@ -57,9 +48,6 @@ module Nanoc::Toolbox::Helpers
57
48
  require 'nokogiri'
58
49
 
59
50
  # Parse options or set to default values
60
- options[:depth] ||= 3
61
- options[:collection_tag] ||= 'ol'
62
- options[:item_tag] ||= 'li'
63
51
  options[:path] ||= 'div[@class="section"]'
64
52
 
65
53
  # Retreive the parsed content and init nokogiri
@@ -80,8 +68,7 @@ module Nanoc::Toolbox::Helpers
80
68
  #
81
69
  # @param [String] identifier - the identifier string of element
82
70
  # @param [Hash] options - The Optional parameters
83
- # @option options [String] :collection_tag ('ol') collection englobing tag name
84
- # @option options [String] :item_tag ('li') item englobing tag name
71
+ # @option options (see #render_menu)
85
72
  #
86
73
  # @return [String] The output ready to be displayed by the caller
87
74
  #
@@ -90,8 +77,7 @@ module Nanoc::Toolbox::Helpers
90
77
 
91
78
  # Parse options or set to default values
92
79
  options[:collection_tag] ||= 'ul'
93
- options[:item_tag] ||= 'li'
94
-
80
+
95
81
  # Retreive the breadcrumbs trail and format them
96
82
  sections = find_breadcrumbs_trail(identifier)
97
83
  render_menu(sections, options)
@@ -122,8 +108,11 @@ module Nanoc::Toolbox::Helpers
122
108
  #
123
109
  # @param [Array] items - The array of links that need to be rendered
124
110
  # @param [Hash] options - The Optional parameters
125
- # @option options [String] :collection_tag ('ol') collection englobing tag name
126
- # @option options [String] :item_tag ('li') item englobing tag name
111
+ # @option options [Interger] :depth (3) maximum depth of the rendered menu
112
+ # @option options [String] :collection_tag ('ol') tag englobing collection of items
113
+ # @option options [String] :item_tag ('li') tag englobing item
114
+ # @option options [String] :title_tag ('h2') tag englobing the title
115
+ # @option options [String] :title ('') Title of the menu, if nil will not display title
127
116
  #
128
117
  # @return [String] The output ready to be displayed by the caller
129
118
  def render_menu(items, options={})
@@ -132,7 +121,14 @@ module Nanoc::Toolbox::Helpers
132
121
  options[:depth] ||= 3
133
122
  options[:collection_tag] ||= 'ol'
134
123
  options[:item_tag] ||= 'li'
135
-
124
+ options[:title_tag] ||= 'h2'
125
+ options[:title] ||= nil
126
+
127
+ # Parse the title and remove it from the options
128
+ title = options[:title] ? content_tag(options[:title_tag], options[:title]) : ''
129
+ options.delete(:title_tag)
130
+ options.delete(:title)
131
+
136
132
  # Decrease the depth level
137
133
  options[:depth] -= 1
138
134
 
@@ -148,7 +144,8 @@ module Nanoc::Toolbox::Helpers
148
144
 
149
145
  end.join()
150
146
 
151
- content_tag(options[:collection_tag], rendered_menu) unless rendered_menu.empty?
147
+
148
+ title + content_tag(options[:collection_tag], rendered_menu) unless rendered_menu.strip.empty?
152
149
  end
153
150
 
154
151
  private
@@ -163,12 +160,11 @@ module Nanoc::Toolbox::Helpers
163
160
  # For each section found call the find_toc_sections on it with an
164
161
  # increased header level (ex: h1 => h2) and then generate the hash res
165
162
  sections = section.xpath(section_xpath).map do |subsection|
166
- header = subsection.xpath("h#{title_level}").first
163
+ header = subsection.css("h1, h2, h3, h4, h5, h6").first
167
164
  sub_id = subsection['id']
168
- sub_title = header.inner_html if header
165
+ sub_title = header ? header.inner_html : 'untitled'
169
166
  subsections = {}
170
167
 
171
-
172
168
  if subsection.xpath("#{section_xpath}") && title_level <= 6
173
169
  subsections = find_toc_sections(subsection, "#{section_xpath}", title_level+1)
174
170
  end
@@ -4,7 +4,7 @@ module Nanoc
4
4
  module Version
5
5
  MAJOR = 0
6
6
  MINOR = 0
7
- PATCH = 3
7
+ PATCH = 4
8
8
  BUILD = nil
9
9
 
10
10
  STRING = [MAJOR, MINOR, PATCH, BUILD].compact.join(".")
@@ -0,0 +1,25 @@
1
+ <div>
2
+ <h1>Title</h1>
3
+
4
+ <h2>Sub title1</h2>
5
+ <p>Lorem Ipsum</p>
6
+
7
+ <h3>Sub Sub Title1</h3>
8
+ <p>Lorem Ipsum</p>
9
+
10
+ <h3>Sub Sub Title2</h3>
11
+ <p>Lorem Ipsum</p>
12
+
13
+ <h3>Sub Sub Title3</h3>
14
+ <p>Lorem Ipsum</p>
15
+
16
+
17
+ <h2>Sub title2</h2>
18
+ <p>Lorem Ipsum</p>
19
+
20
+ <h2>Sub title3</h2>
21
+ <p>Lorem Ipsum</p>
22
+
23
+ <h2>Sub title4</h2>
24
+ <p>Lorem Ipsum</p>
25
+ </div>
@@ -0,0 +1,38 @@
1
+ # <div>
2
+ # <h1>Title</h1>
3
+ #
4
+ # <h2>Sub title1</h2>
5
+ # <p>Lorem Ipsum</p>
6
+ #
7
+ # <h3>Sub Sub Title1</h3>
8
+ # <p>Lorem Ipsum</p>
9
+ #
10
+ # <h3>Sub Sub Title2</h3>
11
+ # <p>Lorem Ipsum</p>
12
+ #
13
+ # <h3>Sub Sub Title3</h3>
14
+ # <p>Lorem Ipsum</p>
15
+ #
16
+ #
17
+ # <h2>Sub title2</h2>
18
+ # <p>Lorem Ipsum</p>
19
+ #
20
+ # <h2>Sub title3</h2>
21
+ # <p>Lorem Ipsum</p>
22
+ #
23
+ # <h2>Sub title4</h2>
24
+ # <p>Lorem Ipsum</p>
25
+ # </div>
26
+
27
+ require "spec_helper"
28
+ require "nokogiri"
29
+
30
+ describe Nanoc::Toolbox::Filters::AddSections do
31
+ before(:each) do
32
+ @filter = described_class.new
33
+ end
34
+
35
+ describe ".run" do
36
+
37
+ end
38
+ end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 3
9
- version: 0.0.3
8
+ - 4
9
+ version: 0.0.4
10
10
  platform: ruby
11
11
  authors:
12
12
  - Anouar ADLANI
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-01-12 00:00:00 +01:00
17
+ date: 2011-01-17 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -97,6 +97,7 @@ files:
97
97
  - Rakefile
98
98
  - lib/nanoc/toolbox.rb
99
99
  - lib/nanoc/toolbox/filters.rb
100
+ - lib/nanoc/toolbox/filters/add_sections.rb
100
101
  - lib/nanoc/toolbox/filters/html_tidy.rb
101
102
  - lib/nanoc/toolbox/helpers.rb
102
103
  - lib/nanoc/toolbox/helpers/gravatar.rb
@@ -104,6 +105,8 @@ files:
104
105
  - lib/nanoc/toolbox/helpers/navigation.rb
105
106
  - lib/nanoc/toolbox/version.rb
106
107
  - nanoc-toolbox.gemspec
108
+ - spec/data/filters/item_without_sections.html
109
+ - spec/filters/add_sections_spec.rb
107
110
  - spec/filters/html_tidy_spec.rb
108
111
  - spec/helpers/gravatar_spec.rb
109
112
  - spec/helpers/html_tag_spec.rb