jekyll-toc 0.4.0.rc → 0.4.0.rc2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 14addb9f45e2c59684378d0a893225af44329358
4
- data.tar.gz: 61974f038bb809635bb874991aa9d962a1759a48
3
+ metadata.gz: 81dc11ec036241d6eed38ef5cddd5014ed2d12d7
4
+ data.tar.gz: 98c037df71e8684555a75f36fb29bdddf4826189
5
5
  SHA512:
6
- metadata.gz: ea6df1586db53071164ffa49bd6ef5e9cec024d690aa890838c222853e83de86e817fdd4c916618d4c50604ca3f61f3c253917cb015acb51f45787254d31e8fc
7
- data.tar.gz: 4c5b95c5d20a28f7bacdc1effaa717d6e9466fa555c449e7e53b80882c9bd7daf17ae715fb51b79b6abb3983e9ad4cee9075e6c2bf48bb37af12950f1ba98955
6
+ metadata.gz: 532db0dafa5253716f397e257b5256091e826a98be80644d5b089809e124bc5c9ab76f339786840f54259443ab821fee9ce6d4863c2f331aabda75dcad9e9a1c
7
+ data.tar.gz: bfd2b4fc0a808179e2e5d1caf2e535610e4ae6702733706b9e5e83e327c11d89a7aca5cb8d4d313d6e4e7388a10bc73b8423392cb931f89b1be03122657dc6ab
data/jekyll-toc.gemspec CHANGED
@@ -15,10 +15,6 @@ Gem::Specification.new do |spec|
15
15
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
16
16
  spec.require_paths = ['lib']
17
17
 
18
- spec.post_install_message = %q(As of jekyll-toc 0.3, nested toc is supported! Please make sure your toc is not broken after update jekyll-toc.
19
-
20
- For more info: https://github.com/toshimaru/jekyll-toc/wiki/0.3-Upgrade-Guide)
21
-
22
18
  spec.required_ruby_version = '>= 2.1.0'
23
19
 
24
20
  spec.add_runtime_dependency 'nokogiri', '~> 1.6'
@@ -4,15 +4,13 @@ module Jekyll
4
4
  class Parser
5
5
  PUNCTUATION_REGEXP = /[^\p{Word}\- ]/u
6
6
 
7
- attr_reader :doc
8
-
9
7
  def initialize(html)
10
8
  @doc = Nokogiri::HTML::DocumentFragment.parse(html)
11
9
  @entries = parse_content
12
10
  end
13
11
 
14
12
  def build_toc
15
- %(<ul class="section-nav">\n#{build_toc_list(@entries)}</ul>)
13
+ %(<ul class="section-nav">\n#{build_toc_list(@entries, last_ul_used: true)}</ul>)
16
14
  end
17
15
 
18
16
  def inject_anchors_into_html
@@ -60,7 +58,7 @@ module Jekyll
60
58
  end
61
59
 
62
60
  # Returns the list items for entries
63
- def build_toc_list(entries)
61
+ def build_toc_list(entries, last_ul_used: false)
64
62
  i = 0
65
63
  toc_list = ''
66
64
  min_h_num = entries.map { |e| e[:h_num] }.min
@@ -75,7 +73,7 @@ module Jekyll
75
73
  next_entry = entries[i + 1]
76
74
  if next_entry[:h_num] > min_h_num
77
75
  nest_entries = get_nest_entries(entries[i + 1, entries.count], min_h_num)
78
- toc_list << %(\n<ul>\n#{build_toc_list(nest_entries)}</ul>\n)
76
+ toc_list << %(\n<ul>\n#{build_toc_list(nest_entries, last_ul_used: true)}</ul>\n)
79
77
  i += nest_entries.count
80
78
  end
81
79
  end
@@ -84,7 +82,11 @@ module Jekyll
84
82
  elsif entry[:h_num] > min_h_num
85
83
  # If the current entry should be indented in the list, generate a sublist
86
84
  nest_entries = get_nest_entries(entries[i, entries.count], min_h_num)
87
- toc_list << %(<ul>\n#{build_toc_list(nest_entries)}</ul>\n)
85
+ if last_ul_used
86
+ toc_list << build_toc_list(nest_entries, last_ul_used: true)
87
+ else
88
+ toc_list << %(<ul>\n#{build_toc_list(nest_entries, last_ul_used: true)}</ul>\n)
89
+ end
88
90
  i += nest_entries.count - 1
89
91
  end
90
92
  i += 1
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module JekyllToc
2
- VERSION = '0.4.0.rc'.freeze
2
+ VERSION = '0.4.0.rc2'.freeze
3
3
  end
@@ -0,0 +1,125 @@
1
+ require 'test_helper'
2
+
3
+ class TestKramdownList < Minitest::Test
4
+ def test_kramdown_list_1
5
+ text = <<-MARKDOWN
6
+ * level-1
7
+ * level-2
8
+ * level-3
9
+ * level-4
10
+ * level-5
11
+ MARKDOWN
12
+ expected = <<-HTML
13
+ <ul>
14
+ <li>level-1
15
+ <ul>
16
+ <li>level-2
17
+ <ul>
18
+ <li>level-3
19
+ <ul>
20
+ <li>level-4
21
+ <ul>
22
+ <li>level-5</li>
23
+ </ul>
24
+ </li>
25
+ </ul>
26
+ </li>
27
+ </ul>
28
+ </li>
29
+ </ul>
30
+ </li>
31
+ </ul>
32
+ HTML
33
+
34
+ assert_equal(expected, Kramdown::Document.new(text).to_html)
35
+ end
36
+
37
+ def test_kramdown_list_2
38
+ text = <<-MARKDOWN
39
+ * level-1
40
+ * level-3
41
+ * level-2
42
+ * level-4
43
+ * level-5
44
+ MARKDOWN
45
+ expected = <<-HTML
46
+ <ul>
47
+ <li>level-1
48
+ <ul>
49
+ <li>level-3</li>
50
+ <li>level-2
51
+ <ul>
52
+ <li>level-4
53
+ <ul>
54
+ <li>level-5</li>
55
+ </ul>
56
+ </li>
57
+ </ul>
58
+ </li>
59
+ </ul>
60
+ </li>
61
+ </ul>
62
+ HTML
63
+
64
+ assert_equal(expected, Kramdown::Document.new(text).to_html)
65
+ end
66
+
67
+ def test_kramdown_list_3
68
+ text = <<-MARKDOWN
69
+ * level-4
70
+ * level-3
71
+ * level-2
72
+ * level-1
73
+ MARKDOWN
74
+ expected = <<-HTML
75
+ HTML
76
+
77
+ assert_equal(expected, Kramdown::Document.new(text).to_html)
78
+ end
79
+
80
+ def test_kramdown_list_3
81
+ text = <<-MARKDOWN
82
+ * level-1
83
+ * level-4
84
+ * level-3
85
+ * level-2
86
+ * level-1
87
+ MARKDOWN
88
+ expected = <<-HTML
89
+ <ul>
90
+ <li>level-1
91
+ * level-4
92
+ <ul>
93
+ <li>level-3</li>
94
+ <li>level-2</li>
95
+ </ul>
96
+ </li>
97
+ <li>level-1</li>
98
+ </ul>
99
+ HTML
100
+
101
+ assert_equal(expected, Kramdown::Document.new(text).to_html)
102
+ end
103
+
104
+ def test_kramdown_list_3
105
+ text = <<-MARKDOWN
106
+ * level-1
107
+ * level-3
108
+ * level-2
109
+ * level-1
110
+ MARKDOWN
111
+ expected = <<-HTML
112
+ <ul>
113
+ <li>level-1
114
+ <ul>
115
+ <li>level-3</li>
116
+ <li>level-2</li>
117
+ </ul>
118
+ </li>
119
+ <li>level-1</li>
120
+ </ul>
121
+ HTML
122
+
123
+ assert_equal(expected, Kramdown::Document.new(text).to_html)
124
+ end
125
+ end
@@ -23,10 +23,18 @@ class TestVariousTocHtml < Minitest::Test
23
23
  <h1>h1</h1>
24
24
  HTML
25
25
 
26
+ TEST_HTML_4 = <<-HTML
27
+ <h1>h1</h1>
28
+ <h3>h3</h3>
29
+ <h2>h2</h2>
30
+ <h4>h4</h4>
31
+ <h5>h5</h5>
32
+ HTML
33
+
26
34
  def test_nested_toc
27
- @parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_1)
28
- doc = Nokogiri::HTML(@parser.toc)
29
- assert_equal(doc.css('ul.section-nav').to_s, <<-HTML
35
+ parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_1)
36
+ doc = Nokogiri::HTML(parser.toc)
37
+ expected = <<-HTML
30
38
  <ul class="section-nav">
31
39
  <li class="toc-entry toc-h1">
32
40
  <a href="#h1">h1</a>
@@ -41,20 +49,19 @@ class TestVariousTocHtml < Minitest::Test
41
49
  </li>
42
50
  </ul>
43
51
  HTML
44
- )
52
+
53
+ assert_equal(expected, doc.css('ul.section-nav').to_s)
45
54
  end
46
55
 
47
56
  def test_complex_nested_toc
48
- @parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_2)
49
- doc = Nokogiri::HTML(@parser.toc)
50
- assert_equal(doc.css('ul.section-nav').to_s, <<-HTML
57
+ parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_2)
58
+ doc = Nokogiri::HTML(parser.toc)
59
+ expected = <<-HTML
51
60
  <ul class="section-nav">
52
61
  <li class="toc-entry toc-h1">
53
62
  <a href="#h1">h1</a>
54
63
  <ul>
55
- <ul>
56
64
  <li class="toc-entry toc-h3"><a href="#h3">h3</a></li>
57
- </ul>
58
65
  <li class="toc-entry toc-h2">
59
66
  <a href="#h2">h2</a>
60
67
  <ul>
@@ -65,32 +72,53 @@ class TestVariousTocHtml < Minitest::Test
65
72
  </li>
66
73
  </ul>
67
74
  HTML
68
- )
75
+
76
+ assert_equal(expected, doc.css('ul.section-nav').to_s)
69
77
  end
70
78
 
71
79
  def test_decremental_headings
72
- @parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_3)
73
- doc = Nokogiri::HTML(@parser.toc)
74
- assert_equal(doc.css('ul.section-nav').to_s, <<-HTML
80
+ parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_3)
81
+ doc = Nokogiri::HTML(parser.toc)
82
+ expected = <<-HTML
75
83
  <ul class="section-nav">
76
- <ul>
77
- <ul>
78
- <ul>
79
- <ul>
80
- <ul>
81
84
  <li class="toc-entry toc-h6"><a href="#h6">h6</a></li>
82
- </ul>
83
85
  <li class="toc-entry toc-h5"><a href="#h5">h5</a></li>
84
- </ul>
85
86
  <li class="toc-entry toc-h4"><a href="#h4">h4</a></li>
87
+ <li class="toc-entry toc-h3"><a href="#h3">h3</a></li>
88
+ <li class="toc-entry toc-h2"><a href="#h2">h2</a></li>
89
+ <li class="toc-entry toc-h1"><a href="#h1">h1</a></li>
86
90
  </ul>
91
+ HTML
92
+
93
+ assert_equal(expected, doc.css('ul.section-nav').to_s)
94
+ end
95
+
96
+
97
+ def test_decremental_headings
98
+ parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_4)
99
+ doc = Nokogiri::HTML(parser.toc)
100
+ expected = <<-HTML
101
+ <ul class="section-nav">
102
+ <li class="toc-entry toc-h1">
103
+ <a href="#h1">h1</a>
104
+ <ul>
87
105
  <li class="toc-entry toc-h3"><a href="#h3">h3</a></li>
106
+ <li class="toc-entry toc-h2">
107
+ <a href="#h2">h2</a>
108
+ <ul>
109
+ <li class="toc-entry toc-h4">
110
+ <a href="#h4">h4</a>
111
+ <ul>
112
+ <li class="toc-entry toc-h5"><a href="#h5">h5</a></li>
88
113
  </ul>
89
- <li class="toc-entry toc-h2"><a href="#h2">h2</a></li>
114
+ </li>
90
115
  </ul>
91
- <li class="toc-entry toc-h1"><a href="#h1">h1</a></li>
116
+ </li>
117
+ </ul>
118
+ </li>
92
119
  </ul>
93
120
  HTML
94
- )
121
+
122
+ assert_equal(expected, doc.css('ul.section-nav').to_s)
95
123
  end
96
124
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-toc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0.rc
4
+ version: 0.4.0.rc2
5
5
  platform: ruby
6
6
  authors:
7
7
  - toshimaru
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-10-03 00:00:00.000000000 Z
12
+ date: 2017-10-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri
@@ -136,6 +136,7 @@ files:
136
136
  - lib/version.rb
137
137
  - test/test_helper.rb
138
138
  - test/test_inject_anchors_filter.rb
139
+ - test/test_kramdown_list.rb
139
140
  - test/test_toc_filter.rb
140
141
  - test/test_toc_only_filter.rb
141
142
  - test/test_various_toc_html.rb
@@ -143,10 +144,7 @@ homepage: https://github.com/toshimaru/jekyll-toc
143
144
  licenses:
144
145
  - MIT
145
146
  metadata: {}
146
- post_install_message: |-
147
- As of jekyll-toc 0.3, nested toc is supported! Please make sure your toc is not broken after update jekyll-toc.
148
-
149
- For more info: https://github.com/toshimaru/jekyll-toc/wiki/0.3-Upgrade-Guide
147
+ post_install_message:
150
148
  rdoc_options: []
151
149
  require_paths:
152
150
  - lib
@@ -169,6 +167,7 @@ summary: Jekyll Table of Contents plugin
169
167
  test_files:
170
168
  - test/test_helper.rb
171
169
  - test/test_inject_anchors_filter.rb
170
+ - test/test_kramdown_list.rb
172
171
  - test/test_toc_filter.rb
173
172
  - test/test_toc_only_filter.rb
174
173
  - test/test_various_toc_html.rb