jekyll-toc 0.7.0.alpha1 → 0.7.0.beta1

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
  SHA256:
3
- metadata.gz: 216b7cc996afe5cf11876349eecb8911442b7eb510e709606056f68854a3191a
4
- data.tar.gz: f34f11a6aabc56e42d388d1407cdda508423091f899ca9104028e8843dc80e3b
3
+ metadata.gz: 2b7578981ba66427ed37a31d9705ad0e174d5646d31f5cd028fbe28038249a83
4
+ data.tar.gz: 63cfa7ca781467175dea8072975b41416fc556e2e4fa3c0f77f741ff0746c401
5
5
  SHA512:
6
- metadata.gz: 20b72524b5aa6101bc15e26dc6ba483b2ab39af9e660c4d01346752546fa585daf5967e06986bcaaf4c22ee84db2560958348dbe8fdbd88e8d0e808eb87d732d
7
- data.tar.gz: 58a5bc0982197f7118e249957bb465aa849dae8b42f1e6ded5f9c7425f16a49ede11814da24379cf5c88059bc27be988182de25a29e771d3296801cbcce29226
6
+ metadata.gz: 639bb631c1370b4c0f01f5769fa79048f883603d9582441d2c7d214e89bd2e578d6c174b72c48d5d1acaf52e496fe59332c8b6626eb4b1786c1ee6934bcce542
7
+ data.tar.gz: 120b7f1bafb23b34c99149d4db56418644e9918b436a9753ecf07ac5cabb19a3410eac999785277cc38bf6e3a88de2bc84efbac4e3162485250d460affcc5d92
data/README.md CHANGED
@@ -103,6 +103,16 @@ It looks like the image below.
103
103
 
104
104
  ## Customization
105
105
 
106
+ ### Skip TOC(`no_toc`)
107
+
108
+ The heding is ignored in the toc when you add `no_toc` to the class.
109
+
110
+ ```html
111
+ <h1>h1</h1>
112
+ <h1 class="no_toc">This heding is ignored in the toc</h1>
113
+ <h2>h2</h2>
114
+ ```
115
+
106
116
  ### TOC level
107
117
 
108
118
  The toc levels can be configured on `_config.yml`.
data/lib/jekyll-toc.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'nokogiri'
2
4
  require 'table_of_contents/parser'
3
5
 
@@ -33,7 +35,7 @@ module Jekyll
33
35
  end
34
36
 
35
37
  def toc_config
36
- @context.registers[:site].config["toc"] || {}
38
+ @context.registers[:site].config['toc'] || {}
37
39
  end
38
40
  end
39
41
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Jekyll
2
4
  module TableOfContents
3
5
  # Parse html contents and generate table of contents
@@ -5,14 +7,14 @@ module Jekyll
5
7
  PUNCTUATION_REGEXP = /[^\p{Word}\- ]/u
6
8
 
7
9
  DEFAULT_CONFIG = {
8
- "min_level" => 1,
9
- "max_level" => 6,
10
- }
10
+ 'min_level' => 1,
11
+ 'max_level' => 6
12
+ }.freeze
11
13
 
12
14
  def initialize(html, options = {})
13
15
  @doc = Nokogiri::HTML::DocumentFragment.parse(html)
14
16
  options = generate_option_hash(options)
15
- @toc_levels = options["min_level"]..options["max_level"]
17
+ @toc_levels = options['min_level']..options['max_level']
16
18
  @entries = parse_content
17
19
  end
18
20
 
@@ -41,11 +43,11 @@ module Jekyll
41
43
  headers = Hash.new(0)
42
44
 
43
45
  # TODO: Use kramdown auto ids
44
- @doc.css(toc_headings).each do |node|
46
+ @doc.css(toc_headings).reject { |n| n.classes.include?('no_toc') }.each do |node|
45
47
  text = node.text
46
48
  id = text.downcase
47
49
  id.gsub!(PUNCTUATION_REGEXP, '') # remove punctuation
48
- id.gsub!(' ', '-') # replace spaces with dash
50
+ id.tr!(' ', '-') # replace spaces with dash
49
51
 
50
52
  uniq = headers[id] > 0 ? "-#{headers[id]}" : ''
51
53
  headers[id] += 1
@@ -57,7 +59,6 @@ module Jekyll
57
59
  uniq: uniq,
58
60
  text: text,
59
61
  node_name: node.name,
60
- no_toc: node.attribute('class') && node.attribute('class').value.include?('no_toc'),
61
62
  content_node: header_content,
62
63
  h_num: node.name.delete('h').to_i
63
64
  }
@@ -69,14 +70,12 @@ module Jekyll
69
70
  # Returns the list items for entries
70
71
  def build_toc_list(entries, last_ul_used: false)
71
72
  i = 0
72
- toc_list = ''
73
+ toc_list = ''.dup
73
74
  min_h_num = entries.map { |e| e[:h_num] }.min
74
75
 
75
76
  while i < entries.count
76
77
  entry = entries[i]
77
- if entry[:no_toc]
78
- # Do nothing / skip entry
79
- elsif entry[:h_num] == min_h_num
78
+ if entry[:h_num] == min_h_num
80
79
  # If the current entry should not be indented in the list, add the entry to the list
81
80
  toc_list << %(<li class="toc-entry toc-#{entry[:node_name]}"><a href="##{entry[:id]}#{entry[:uniq]}">#{entry[:text]}</a>)
82
81
  # If the next entry should be indented in the list, generate a sublist
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module JekyllToc
2
- VERSION = '0.7.0.alpha1'.freeze
2
+ VERSION = '0.7.0.beta1'.freeze
3
3
  end
data/test/test_helper.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'simplecov'
2
4
  SimpleCov.start
3
5
 
@@ -12,7 +14,6 @@ SIMPLE_HTML = <<-HTML.freeze
12
14
  <h4>Simple H4</h4>
13
15
  <h5>Simple H5</h5>
14
16
  <h6>Simple H6</h6>
15
- <h1 class="no_toc">No-toc H1</h1>
16
17
  HTML
17
18
 
18
19
  module TestHelpers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestInjectAnchorsFilter < Minitest::Test
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestKramdownList < Minitest::Test
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestOptionError < Minitest::Test
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestTOCFilter < Minitest::Test
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestTOCOnlyFilter < Minitest::Test
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestVariousTocHtml < Minitest::Test
@@ -31,6 +33,17 @@ class TestVariousTocHtml < Minitest::Test
31
33
  <h5>h5</h5>
32
34
  HTML
33
35
 
36
+ NO_TOC_HTML = <<-HTML
37
+ <h1>h1</h1>
38
+ <h1 class="no_toc">no_toc h1</h1>
39
+ <h2>h2</h2>
40
+ <h2 class="no_toc">no_toc h2</h2>
41
+ <h3>h3</h3>
42
+ <h3 class="no_toc">no_toc h3</h3>
43
+ <h4>h4</h4>
44
+ <h4 class="no_toc">no_toc h4</h4>
45
+ HTML
46
+
34
47
  def test_nested_toc
35
48
  parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_1)
36
49
  doc = Nokogiri::HTML(parser.toc)
@@ -49,8 +62,9 @@ class TestVariousTocHtml < Minitest::Test
49
62
  </li>
50
63
  </ul>
51
64
  HTML
65
+ actual = doc.css('ul.section-nav').to_s
52
66
 
53
- assert_equal(expected, doc.css('ul.section-nav').to_s)
67
+ assert_equal(expected, actual)
54
68
  end
55
69
 
56
70
  def test_nested_toc_with_min_and_max
@@ -61,8 +75,9 @@ class TestVariousTocHtml < Minitest::Test
61
75
  <li class="toc-entry toc-h3"><a href="#h3">h3</a></li>
62
76
  </ul>
63
77
  HTML
78
+ actual = doc.css('ul.section-nav').to_s
64
79
 
65
- assert_equal(expected, doc.css('ul.section-nav').to_s)
80
+ assert_equal(expected, actual)
66
81
  end
67
82
 
68
83
  def test_complex_nested_toc
@@ -84,8 +99,9 @@ class TestVariousTocHtml < Minitest::Test
84
99
  </li>
85
100
  </ul>
86
101
  HTML
102
+ actual = doc.css('ul.section-nav').to_s
87
103
 
88
- assert_equal(expected, doc.css('ul.section-nav').to_s)
104
+ assert_equal(expected, actual)
89
105
  end
90
106
 
91
107
  def test_decremental_headings1
@@ -101,11 +117,11 @@ class TestVariousTocHtml < Minitest::Test
101
117
  <li class="toc-entry toc-h1"><a href="#h1">h1</a></li>
102
118
  </ul>
103
119
  HTML
120
+ actual = doc.css('ul.section-nav').to_s
104
121
 
105
- assert_equal(expected, doc.css('ul.section-nav').to_s)
122
+ assert_equal(expected, actual)
106
123
  end
107
124
 
108
-
109
125
  def test_decremental_headings2
110
126
  parser = Jekyll::TableOfContents::Parser.new(TEST_HTML_4)
111
127
  doc = Nokogiri::HTML(parser.toc)
@@ -133,4 +149,32 @@ class TestVariousTocHtml < Minitest::Test
133
149
 
134
150
  assert_equal(expected, doc.css('ul.section-nav').to_s)
135
151
  end
152
+
153
+ def test_no_toc
154
+ parser = Jekyll::TableOfContents::Parser.new(NO_TOC_HTML)
155
+ doc = Nokogiri::HTML(parser.toc)
156
+ expected = <<-HTML
157
+ <ul class="section-nav">
158
+ <li class="toc-entry toc-h1">
159
+ <a href="#h1">h1</a>
160
+ <ul>
161
+ <li class="toc-entry toc-h2">
162
+ <a href="#h2">h2</a>
163
+ <ul>
164
+ <li class="toc-entry toc-h3">
165
+ <a href="#h3">h3</a>
166
+ <ul>
167
+ <li class="toc-entry toc-h4"><a href="#h4">h4</a></li>
168
+ </ul>
169
+ </li>
170
+ </ul>
171
+ </li>
172
+ </ul>
173
+ </li>
174
+ </ul>
175
+ HTML
176
+ actual = doc.css('ul.section-nav').to_s
177
+
178
+ assert_equal(expected, actual)
179
+ end
136
180
  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.alpha1
4
+ version: 0.7.0.beta1
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: 2018-09-20 00:00:00.000000000 Z
12
+ date: 2018-09-29 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: nokogiri