jekyll-toc 0.7.0.beta1 → 0.7.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.
- checksums.yaml +4 -4
- data/README.md +14 -6
- data/lib/table_of_contents/parser.rb +5 -9
- data/lib/version.rb +1 -1
- data/test/test_kramdown_list.rb +35 -14
- data/test/test_option_error.rb +3 -3
- data/test/test_various_toc_html.rb +29 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bf842397d274621c986cf5182baaed15cff4f406e309741621ca897545525cf0
|
4
|
+
data.tar.gz: ac1181c4a77d63773b6fa12d3b646582b01e77aba41104291cf8c2bff3a6babb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f01826275203ce38ebdc8d8ce427e91bf9f8e1c4e437803caf5a3073fe44e5cdc4b022f4319199ec3eeca2b834cf8a282bfd38843bfb5d7bd918958c90994722
|
7
|
+
data.tar.gz: 0df513610cb1aa29706f069404424d66d0e50252b3df93254c8419cf7a297497b96eb9ba33506b53f3f56681950f4f14881fb3156e2f50713d708ee4fe4d8e9e
|
data/README.md
CHANGED
@@ -5,6 +5,16 @@
|
|
5
5
|
[](https://codeclimate.com/github/toshimaru/jekyll-toc)
|
6
6
|
[](https://codeclimate.com/github/toshimaru/jekyll-toc/test_coverage)
|
7
7
|
|
8
|
+
# Table of Contents
|
9
|
+
|
10
|
+
- [Installation](#installation)
|
11
|
+
- [Usage](#usage)
|
12
|
+
- [Generated HTML](#generated-html)
|
13
|
+
- [Customization](#customization)
|
14
|
+
- [Skip TOC](#skip-toc)
|
15
|
+
- [TOC levels](#toc-levels)
|
16
|
+
- [CSS Styling](#css-styling)
|
17
|
+
|
8
18
|
# Installation
|
9
19
|
|
10
20
|
Add jekyll-toc plugin in your site's `Gemfile`, and run `bundle install`.
|
@@ -73,6 +83,8 @@ location with the `toc_only` filter.
|
|
73
83
|
|
74
84
|
## Generated HTML
|
75
85
|
|
86
|
+

|
87
|
+
|
76
88
|
jekyll-toc generates an unordered list. The HTML output is as follows.
|
77
89
|
|
78
90
|
```html
|
@@ -97,13 +109,9 @@ jekyll-toc generates an unordered list. The HTML output is as follows.
|
|
97
109
|
</ul>
|
98
110
|
```
|
99
111
|
|
100
|
-
It looks like the image below.
|
101
|
-
|
102
|
-

|
103
|
-
|
104
112
|
## Customization
|
105
113
|
|
106
|
-
### Skip TOC
|
114
|
+
### Skip TOC
|
107
115
|
|
108
116
|
The heding is ignored in the toc when you add `no_toc` to the class.
|
109
117
|
|
@@ -113,7 +121,7 @@ The heding is ignored in the toc when you add `no_toc` to the class.
|
|
113
121
|
<h2>h2</h2>
|
114
122
|
```
|
115
123
|
|
116
|
-
### TOC
|
124
|
+
### TOC levels
|
117
125
|
|
118
126
|
The toc levels can be configured on `_config.yml`.
|
119
127
|
|
@@ -19,7 +19,7 @@ module Jekyll
|
|
19
19
|
end
|
20
20
|
|
21
21
|
def build_toc
|
22
|
-
%(<ul class="section-nav">\n#{build_toc_list(@entries
|
22
|
+
%(<ul class="section-nav">\n#{build_toc_list(@entries)}</ul>)
|
23
23
|
end
|
24
24
|
|
25
25
|
def inject_anchors_into_html
|
@@ -68,7 +68,7 @@ module Jekyll
|
|
68
68
|
end
|
69
69
|
|
70
70
|
# Returns the list items for entries
|
71
|
-
def build_toc_list(entries
|
71
|
+
def build_toc_list(entries)
|
72
72
|
i = 0
|
73
73
|
toc_list = ''.dup
|
74
74
|
min_h_num = entries.map { |e| e[:h_num] }.min
|
@@ -83,7 +83,7 @@ module Jekyll
|
|
83
83
|
next_entry = entries[i + 1]
|
84
84
|
if next_entry[:h_num] > min_h_num
|
85
85
|
nest_entries = get_nest_entries(entries[i + 1, entries.count], min_h_num)
|
86
|
-
toc_list << %(\n<ul>\n#{build_toc_list(nest_entries
|
86
|
+
toc_list << %(\n<ul>\n#{build_toc_list(nest_entries)}</ul>\n)
|
87
87
|
i += nest_entries.count
|
88
88
|
end
|
89
89
|
end
|
@@ -92,11 +92,7 @@ module Jekyll
|
|
92
92
|
elsif entry[:h_num] > min_h_num
|
93
93
|
# If the current entry should be indented in the list, generate a sublist
|
94
94
|
nest_entries = get_nest_entries(entries[i, entries.count], min_h_num)
|
95
|
-
|
96
|
-
toc_list << build_toc_list(nest_entries, last_ul_used: true)
|
97
|
-
else
|
98
|
-
toc_list << %(<ul>\n#{build_toc_list(nest_entries, last_ul_used: true)}</ul>\n)
|
99
|
-
end
|
95
|
+
toc_list << build_toc_list(nest_entries)
|
100
96
|
i += nest_entries.count - 1
|
101
97
|
end
|
102
98
|
i += 1
|
@@ -116,7 +112,7 @@ module Jekyll
|
|
116
112
|
end
|
117
113
|
|
118
114
|
def toc_headings
|
119
|
-
@toc_levels.map { |level| "h#{level}" }.join(
|
115
|
+
@toc_levels.map { |level| "h#{level}" }.join(',')
|
120
116
|
end
|
121
117
|
|
122
118
|
def generate_option_hash(options)
|
data/lib/version.rb
CHANGED
data/test/test_kramdown_list.rb
CHANGED
@@ -4,7 +4,6 @@ require 'test_helper'
|
|
4
4
|
|
5
5
|
class TestKramdownList < Minitest::Test
|
6
6
|
# NOTE: kramdown automatically injects `id` attribute
|
7
|
-
# TODO: test Japanese heading
|
8
7
|
def test_kramdown_heading
|
9
8
|
text = <<-MARKDOWN
|
10
9
|
# h1
|
@@ -14,10 +13,27 @@ class TestKramdownList < Minitest::Test
|
|
14
13
|
expected = <<-HTML
|
15
14
|
<h1 id="h1">h1</h1>
|
16
15
|
|
17
|
-
<h2 id
|
16
|
+
<h2 id="h2">h2</h2>
|
18
17
|
HTML
|
18
|
+
actual = Kramdown::Document.new(text).to_html
|
19
19
|
|
20
|
-
assert_equal(expected,
|
20
|
+
assert_equal(expected, actual)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_japanese_heading
|
24
|
+
text = <<-MARKDOWN
|
25
|
+
# 日本語見出し1
|
26
|
+
|
27
|
+
## 日本語見出し2
|
28
|
+
MARKDOWN
|
29
|
+
expected = <<-HTML
|
30
|
+
<h1 id="section">日本語見出し1</h1>
|
31
|
+
|
32
|
+
<h2 id="section-1">日本語見出し2</h2>
|
33
|
+
HTML
|
34
|
+
actual = Kramdown::Document.new(text).to_html
|
35
|
+
|
36
|
+
assert_equal(expected, actual)
|
21
37
|
end
|
22
38
|
|
23
39
|
def test_kramdown_list_1
|
@@ -49,8 +65,9 @@ class TestKramdownList < Minitest::Test
|
|
49
65
|
</li>
|
50
66
|
</ul>
|
51
67
|
HTML
|
68
|
+
actual = Kramdown::Document.new(text).to_html
|
52
69
|
|
53
|
-
assert_equal(expected,
|
70
|
+
assert_equal(expected, actual)
|
54
71
|
end
|
55
72
|
|
56
73
|
def test_kramdown_list_2
|
@@ -79,8 +96,9 @@ class TestKramdownList < Minitest::Test
|
|
79
96
|
</li>
|
80
97
|
</ul>
|
81
98
|
HTML
|
99
|
+
actual = Kramdown::Document.new(text).to_html
|
82
100
|
|
83
|
-
assert_equal(expected,
|
101
|
+
assert_equal(expected, actual)
|
84
102
|
end
|
85
103
|
|
86
104
|
def test_kramdown_list_3
|
@@ -95,8 +113,9 @@ class TestKramdownList < Minitest::Test
|
|
95
113
|
* level-3 * level-2 * level-1
|
96
114
|
</code></pre>
|
97
115
|
HTML
|
116
|
+
actual = Kramdown::Document.new(text).to_html
|
98
117
|
|
99
|
-
assert_equal(expected,
|
118
|
+
assert_equal(expected, actual)
|
100
119
|
end
|
101
120
|
|
102
121
|
def test_kramdown_list_4
|
@@ -119,18 +138,19 @@ class TestKramdownList < Minitest::Test
|
|
119
138
|
<li>level-1</li>
|
120
139
|
</ul>
|
121
140
|
HTML
|
141
|
+
actual = Kramdown::Document.new(text).to_html
|
122
142
|
|
123
|
-
assert_equal(expected,
|
143
|
+
assert_equal(expected, actual)
|
124
144
|
end
|
125
145
|
|
126
|
-
|
127
|
-
|
146
|
+
def test_kramdown_list_5
|
147
|
+
text = <<-MARKDOWN
|
128
148
|
* level-1
|
129
149
|
* level-3
|
130
150
|
* level-2
|
131
151
|
* level-1
|
132
|
-
|
133
|
-
|
152
|
+
MARKDOWN
|
153
|
+
expected = <<-HTML
|
134
154
|
<ul>
|
135
155
|
<li>level-1
|
136
156
|
<ul>
|
@@ -140,8 +160,9 @@ class TestKramdownList < Minitest::Test
|
|
140
160
|
</li>
|
141
161
|
<li>level-1</li>
|
142
162
|
</ul>
|
143
|
-
|
163
|
+
HTML
|
164
|
+
actual = Kramdown::Document.new(text).to_html
|
144
165
|
|
145
|
-
|
146
|
-
|
166
|
+
assert_equal(expected, actual)
|
167
|
+
end
|
147
168
|
end
|
data/test/test_option_error.rb
CHANGED
@@ -3,7 +3,7 @@
|
|
3
3
|
require 'test_helper'
|
4
4
|
|
5
5
|
class TestOptionError < Minitest::Test
|
6
|
-
BASE_HTML =
|
6
|
+
BASE_HTML = '<h1>h1</h1>'
|
7
7
|
EXPECTED_HTML = <<-HTML
|
8
8
|
<ul class="section-nav">
|
9
9
|
<li class="toc-entry toc-h1"><a href="#h1">h1</a></li>
|
@@ -18,14 +18,14 @@ class TestOptionError < Minitest::Test
|
|
18
18
|
end
|
19
19
|
|
20
20
|
def test_option_is_epmty_string
|
21
|
-
parser = Jekyll::TableOfContents::Parser.new(BASE_HTML,
|
21
|
+
parser = Jekyll::TableOfContents::Parser.new(BASE_HTML, '')
|
22
22
|
doc = Nokogiri::HTML(parser.toc)
|
23
23
|
expected = EXPECTED_HTML
|
24
24
|
assert_equal(expected, doc.css('ul.section-nav').to_s)
|
25
25
|
end
|
26
26
|
|
27
27
|
def test_option_is_string
|
28
|
-
parser = Jekyll::TableOfContents::Parser.new(BASE_HTML,
|
28
|
+
parser = Jekyll::TableOfContents::Parser.new(BASE_HTML, 'string')
|
29
29
|
doc = Nokogiri::HTML(parser.toc)
|
30
30
|
expected = EXPECTED_HTML
|
31
31
|
assert_equal(expected, doc.css('ul.section-nav').to_s)
|
@@ -44,6 +44,12 @@ class TestVariousTocHtml < Minitest::Test
|
|
44
44
|
<h4 class="no_toc">no_toc h4</h4>
|
45
45
|
HTML
|
46
46
|
|
47
|
+
TEST_JAPANESE_HTML = <<-HTML
|
48
|
+
<h1>あ</h1>
|
49
|
+
<h2>い</h2>
|
50
|
+
<h3>う</h3>
|
51
|
+
HTML
|
52
|
+
|
47
53
|
def test_nested_toc
|
48
54
|
parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_1)
|
49
55
|
doc = Nokogiri::HTML(parser.toc)
|
@@ -177,4 +183,27 @@ class TestVariousTocHtml < Minitest::Test
|
|
177
183
|
|
178
184
|
assert_equal(expected, actual)
|
179
185
|
end
|
186
|
+
|
187
|
+
def test_japanese_toc
|
188
|
+
parser = Jekyll::TableOfContents::Parser.new(TEST_JAPANESE_HTML)
|
189
|
+
doc = Nokogiri::HTML(parser.toc)
|
190
|
+
expected = <<-HTML
|
191
|
+
<ul class="section-nav">
|
192
|
+
<li class="toc-entry toc-h1">
|
193
|
+
<a href="#%E3%81%82">あ</a>
|
194
|
+
<ul>
|
195
|
+
<li class="toc-entry toc-h2">
|
196
|
+
<a href="#%E3%81%84">い</a>
|
197
|
+
<ul>
|
198
|
+
<li class="toc-entry toc-h3"><a href="#%E3%81%86">う</a></li>
|
199
|
+
</ul>
|
200
|
+
</li>
|
201
|
+
</ul>
|
202
|
+
</li>
|
203
|
+
</ul>
|
204
|
+
HTML
|
205
|
+
actual = doc.css('ul.section-nav').to_s
|
206
|
+
|
207
|
+
assert_equal(expected, actual)
|
208
|
+
end
|
180
209
|
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.7.0
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- toshimaru
|
@@ -153,9 +153,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
153
|
version: 2.2.2
|
154
154
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
155
155
|
requirements:
|
156
|
-
- - "
|
156
|
+
- - ">="
|
157
157
|
- !ruby/object:Gem::Version
|
158
|
-
version:
|
158
|
+
version: '0'
|
159
159
|
requirements: []
|
160
160
|
rubyforge_project:
|
161
161
|
rubygems_version: 2.7.6
|