jekyll-toc 0.17.1 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f104b77b718e1f5f1947d68afae1d18c7ad1c741c14df44b3e52f889cb2100eb
4
- data.tar.gz: 1a48474b9d6c4d8fd87dc2b81fdf7335e10e1df7da9fb15a4e15f7629697a51a
3
+ metadata.gz: 134612904c442d4388e7ce83780964185032ff84ddc9a805e1daa4d2831c1f3b
4
+ data.tar.gz: 4325199932afd53280b773f30532a2c5b49f513fdeb99bceb82ad8afe453570c
5
5
  SHA512:
6
- metadata.gz: '09f70b02a681ec9237a05fa1e6613ecb2bea4911e5f53e4ded034ac930d689d61ec2f0df325dd080d66d810b10539d2ae3fc015e9b68dba7a67e7fd06573ce73'
7
- data.tar.gz: 89649e97c2b4640c4787cb2c546a18d3a86303b4a2a08594c95f2c43c7a75bca00ca57029e534b537c2d6861ea8e274e735f75f79bf528ebf026e54c601c73a9
6
+ metadata.gz: af33d04f7640d6c23efcc4eef4cdbb2d339812f0868ddb65cbf6734208eafa5a17c08ab9234d2e733b11140db306b870f4111a3d4725047f23cbf07c33f3dd0f
7
+ data.tar.gz: 0fb98855e359b87ac9ad79116c6ccb83527fa69eeaa3be7d60989ecc2a4f9abbd15d55c240a788c5432b4b92d97144c832fafed9754ec84f935993dad72bd875
data/.rubocop.yml CHANGED
@@ -1,5 +1,5 @@
1
1
  AllCops:
2
- TargetRubyVersion: 2.5
2
+ TargetRubyVersion: 2.6
3
3
  NewCops: enable
4
4
  Exclude:
5
5
  - "*.gemspec"
data/Appraisals CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- SUPPORTED_VERSIONS = %w[3.8 3.9 4.0 4.1 4.2].freeze
3
+ SUPPORTED_VERSIONS = %w[3.9 4.0 4.1 4.2 4.3].freeze
4
4
 
5
5
  SUPPORTED_VERSIONS.each do |version|
6
6
  appraise "jekyll-#{version}" do
data/Gemfile CHANGED
@@ -11,4 +11,4 @@ gem 'rubocop-minitest'
11
11
  gem 'rubocop-performance'
12
12
  gem 'rubocop-rake'
13
13
  gem 'rubocop'
14
- gem 'simplecov', '~> 0.17.1'
14
+ gem 'simplecov', '~> 0.22.0'
data/LICENSE.md CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2020 Toshimaru
3
+ Copyright (c) 2020-2021 Toshimaru
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/Rakefile CHANGED
@@ -1,6 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
2
 
3
- task :default => [:test]
3
+ task default: :test
4
4
 
5
5
  require 'rake/testtask'
6
6
  Rake::TestTask.new(:test) do |test|
@@ -11,7 +11,7 @@ gem "rubocop-minitest"
11
11
  gem "rubocop-performance"
12
12
  gem "rubocop-rake"
13
13
  gem "rubocop"
14
- gem "simplecov", "~> 0.17.1"
14
+ gem "simplecov", "~> 0.22.0"
15
15
  gem "jekyll", "3.9"
16
16
 
17
17
  gemspec path: "../"
@@ -11,7 +11,7 @@ gem "rubocop-minitest"
11
11
  gem "rubocop-performance"
12
12
  gem "rubocop-rake"
13
13
  gem "rubocop"
14
- gem "simplecov", "~> 0.17.1"
14
+ gem "simplecov", "~> 0.22.0"
15
15
  gem "jekyll", "4.0"
16
16
 
17
17
  gemspec path: "../"
@@ -11,7 +11,7 @@ gem "rubocop-minitest"
11
11
  gem "rubocop-performance"
12
12
  gem "rubocop-rake"
13
13
  gem "rubocop"
14
- gem "simplecov", "~> 0.17.1"
14
+ gem "simplecov", "~> 0.22.0"
15
15
  gem "jekyll", "4.1"
16
16
 
17
17
  gemspec path: "../"
@@ -11,7 +11,7 @@ gem "rubocop-minitest"
11
11
  gem "rubocop-performance"
12
12
  gem "rubocop-rake"
13
13
  gem "rubocop"
14
- gem "simplecov", "~> 0.17.1"
14
+ gem "simplecov", "~> 0.22.0"
15
15
  gem "jekyll", "4.2"
16
16
 
17
17
  gemspec path: "../"
@@ -11,7 +11,7 @@ gem "rubocop-minitest"
11
11
  gem "rubocop-performance"
12
12
  gem "rubocop-rake"
13
13
  gem "rubocop"
14
- gem "simplecov", "~> 0.17.1"
15
- gem "jekyll", "3.8"
14
+ gem "simplecov", "~> 0.22.0"
15
+ gem "jekyll", "4.3"
16
16
 
17
17
  gemspec path: "../"
data/jekyll-toc.gemspec CHANGED
@@ -1,24 +1,33 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- lib = File.expand_path('../lib', __FILE__)
4
- $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
- require 'table_of_contents/version'
3
+ require_relative 'lib/table_of_contents/version'
6
4
 
7
5
  Gem::Specification.new do |spec|
8
6
  spec.name = 'jekyll-toc'
9
7
  spec.version = Jekyll::TableOfContents::VERSION
10
8
  spec.summary = 'Jekyll Table of Contents plugin'
11
9
  spec.description = 'Jekyll (Ruby static website generator) plugin which generates a Table of Contents for the page.'
12
- spec.authors = %w(toshimaru torbjoernk)
10
+ spec.authors = %w[toshimaru torbjoernk]
13
11
  spec.email = 'me@toshimaru.net'
14
- spec.files = `git ls-files -z`.split("\x0")
15
12
  spec.homepage = 'https://github.com/toshimaru/jekyll-toc'
16
13
  spec.license = 'MIT'
17
- spec.test_files = spec.files.grep(%r{^(test|spec)/})
18
14
  spec.require_paths = ['lib']
19
15
 
20
- spec.required_ruby_version = '>= 2.5'
16
+ spec.metadata['homepage_uri'] = spec.homepage
17
+ spec.metadata['source_code_uri'] = 'https://github.com/toshimaru/jekyll-toc'
18
+ spec.metadata['changelog_uri'] = 'https://github.com/toshimaru/jekyll-toc/releases'
19
+ spec.metadata['rubygems_mfa_required'] = 'true'
20
+
21
+ # Specify which files should be added to the gem when it is released.
22
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
23
+ spec.files = Dir.chdir(__dir__) do
24
+ `git ls-files -z`.split("\x0").reject do |f|
25
+ (f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|circleci)|appveyor)})
26
+ end
27
+ end
28
+
29
+ spec.required_ruby_version = '>= 2.6'
21
30
 
22
31
  spec.add_dependency 'jekyll', '>= 3.9'
23
- spec.add_dependency 'nokogiri', '~> 1.11'
32
+ spec.add_dependency 'nokogiri', '~> 1.12'
24
33
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module TableOfContents
5
- VERSION = '0.17.1'
5
+ VERSION = '0.18.0'
6
6
  end
7
7
  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.17.1
4
+ version: 0.18.0
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: 2021-05-16 00:00:00.000000000 Z
12
+ date: 2023-01-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: jekyll
@@ -31,14 +31,14 @@ dependencies:
31
31
  requirements:
32
32
  - - "~>"
33
33
  - !ruby/object:Gem::Version
34
- version: '1.11'
34
+ version: '1.12'
35
35
  type: :runtime
36
36
  prerelease: false
37
37
  version_requirements: !ruby/object:Gem::Requirement
38
38
  requirements:
39
39
  - - "~>"
40
40
  - !ruby/object:Gem::Version
41
- version: '1.11'
41
+ version: '1.12'
42
42
  description: Jekyll (Ruby static website generator) plugin which generates a Table
43
43
  of Contents for the page.
44
44
  email: me@toshimaru.net
@@ -46,11 +46,6 @@ executables: []
46
46
  extensions: []
47
47
  extra_rdoc_files: []
48
48
  files:
49
- - ".github/dependabot.yml"
50
- - ".github/workflows/ci.yml"
51
- - ".github/workflows/coverage.yml"
52
- - ".github/workflows/rubocop.yml"
53
- - ".gitignore"
54
49
  - ".rubocop.yml"
55
50
  - Appraisals
56
51
  - CHANGELOG.md
@@ -58,32 +53,25 @@ files:
58
53
  - LICENSE.md
59
54
  - README.md
60
55
  - Rakefile
61
- - gemfiles/jekyll_3.8.gemfile
62
56
  - gemfiles/jekyll_3.9.gemfile
63
57
  - gemfiles/jekyll_4.0.gemfile
64
58
  - gemfiles/jekyll_4.1.gemfile
65
59
  - gemfiles/jekyll_4.2.gemfile
60
+ - gemfiles/jekyll_4.3.gemfile
66
61
  - jekyll-toc.gemspec
67
62
  - lib/jekyll-toc.rb
68
63
  - lib/table_of_contents/configuration.rb
69
64
  - lib/table_of_contents/helper.rb
70
65
  - lib/table_of_contents/parser.rb
71
66
  - lib/table_of_contents/version.rb
72
- - test/parser/test_inject_anchors_filter.rb
73
- - test/parser/test_invalid_options.rb
74
- - test/parser/test_ordered_list.rb
75
- - test/parser/test_toc_filter.rb
76
- - test/parser/test_toc_only_filter.rb
77
- - test/parser/test_various_toc_html.rb
78
- - test/test_configuration.rb
79
- - test/test_helper.rb
80
- - test/test_jekyll-toc.rb
81
- - test/test_kramdown_list.rb
82
- - test/test_toc_tag.rb
83
67
  homepage: https://github.com/toshimaru/jekyll-toc
84
68
  licenses:
85
69
  - MIT
86
- metadata: {}
70
+ metadata:
71
+ homepage_uri: https://github.com/toshimaru/jekyll-toc
72
+ source_code_uri: https://github.com/toshimaru/jekyll-toc
73
+ changelog_uri: https://github.com/toshimaru/jekyll-toc/releases
74
+ rubygems_mfa_required: 'true'
87
75
  post_install_message:
88
76
  rdoc_options: []
89
77
  require_paths:
@@ -92,26 +80,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
92
80
  requirements:
93
81
  - - ">="
94
82
  - !ruby/object:Gem::Version
95
- version: '2.5'
83
+ version: '2.6'
96
84
  required_rubygems_version: !ruby/object:Gem::Requirement
97
85
  requirements:
98
86
  - - ">="
99
87
  - !ruby/object:Gem::Version
100
88
  version: '0'
101
89
  requirements: []
102
- rubygems_version: 3.2.15
90
+ rubygems_version: 3.3.26
103
91
  signing_key:
104
92
  specification_version: 4
105
93
  summary: Jekyll Table of Contents plugin
106
- test_files:
107
- - test/parser/test_inject_anchors_filter.rb
108
- - test/parser/test_invalid_options.rb
109
- - test/parser/test_ordered_list.rb
110
- - test/parser/test_toc_filter.rb
111
- - test/parser/test_toc_only_filter.rb
112
- - test/parser/test_various_toc_html.rb
113
- - test/test_configuration.rb
114
- - test/test_helper.rb
115
- - test/test_jekyll-toc.rb
116
- - test/test_kramdown_list.rb
117
- - test/test_toc_tag.rb
94
+ test_files: []
@@ -1,19 +0,0 @@
1
- # To get started with Dependabot version updates, you'll need to specify which
2
- # package ecosystems to update and where the package manifests are located.
3
- # Please see the documentation for all configuration options:
4
- # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
5
-
6
- version: 2
7
- updates:
8
- - package-ecosystem: "bundler"
9
- directory: "/"
10
- schedule:
11
- interval: "weekly"
12
- reviewers:
13
- - toshimaru
14
- - package-ecosystem: "github-actions"
15
- directory: "/"
16
- schedule:
17
- interval: "weekly"
18
- reviewers:
19
- - toshimaru
@@ -1,27 +0,0 @@
1
- name: CI
2
- on: [push, pull_request]
3
- jobs:
4
- build:
5
- strategy:
6
- matrix:
7
- ruby: [2.5, 2.6, 2.7, 3.0]
8
- gemfile:
9
- - gemfiles/jekyll_3.9.gemfile
10
- - gemfiles/jekyll_4.0.gemfile
11
- - gemfiles/jekyll_4.1.gemfile
12
- - gemfiles/jekyll_4.2.gemfile
13
- env:
14
- BUNDLE_GEMFILE: ${{ matrix.gemfile }}
15
- runs-on: ubuntu-latest
16
- steps:
17
- - uses: actions/checkout@v2
18
- - name: Set up Ruby ${{ matrix.ruby }}
19
- uses: ruby/setup-ruby@v1
20
- with:
21
- ruby-version: ${{ matrix.ruby }}
22
- - name: bundle install
23
- run: |
24
- gem install bundler
25
- bundle install --jobs 4 --retry 3
26
- - name: Run Test
27
- run: bundle exec rake
@@ -1,22 +0,0 @@
1
- name: Coverage
2
- on: [push, pull_request]
3
- jobs:
4
- build:
5
- strategy:
6
- matrix:
7
- ruby: [3.0]
8
- runs-on: ubuntu-latest
9
- name: coverage
10
- steps:
11
- - uses: actions/checkout@v2
12
- - name: Set up Ruby ${{ matrix.ruby }}
13
- uses: ruby/setup-ruby@v1
14
- with:
15
- ruby-version: ${{ matrix.ruby }}
16
- - name: bundle install
17
- run: bundle install --jobs 4 --retry 3
18
- - uses: paambaati/codeclimate-action@v2.7.5
19
- env:
20
- CC_TEST_REPORTER_ID: 6b81e393ea6ad38560386f650ea2fb0e57a7beb5e20f8c8364fabee30d5bff07
21
- with:
22
- coverageCommand: bundle exec rake
@@ -1,19 +0,0 @@
1
- name: RuboCop
2
- on: [push, pull_request]
3
- jobs:
4
- build:
5
- strategy:
6
- matrix:
7
- ruby: [3.0]
8
- runs-on: ubuntu-latest
9
- name: rubocop
10
- steps:
11
- - uses: actions/checkout@v2
12
- - name: Set up Ruby ${{ matrix.ruby }}
13
- uses: ruby/setup-ruby@v1
14
- with:
15
- ruby-version: ${{ matrix.ruby }}
16
- - name: bundle install
17
- run: bundle install --jobs 4 --retry 3
18
- - name: Run RuboCop
19
- run: bundle exec rubocop
data/.gitignore DELETED
@@ -1,5 +0,0 @@
1
- *.gem
2
- /Gemfile.lock
3
- /.bundle/
4
- /coverage
5
- *.gemfile.lock
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestInjectAnchorsFilter < Minitest::Test
6
- include TestHelpers
7
-
8
- def setup
9
- read_html_and_create_parser
10
- end
11
-
12
- def test_injects_anchors_into_content
13
- html = @parser.inject_anchors_into_html
14
-
15
- assert_match(%r{<a class="anchor" href="#simple-h1" aria-hidden="true"><span.*span></a>Simple H1}, html)
16
- end
17
-
18
- def test_does_not_inject_toc
19
- html = @parser.inject_anchors_into_html
20
-
21
- refute_includes(html, %(<ul id="toc" class="section-nav">))
22
- end
23
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestInvalidOptions < Minitest::Test
6
- BASE_HTML = '<h1>h1</h1>'
7
- EXPECTED_HTML = <<~HTML.chomp
8
- <ul id="toc" class="section-nav">
9
- <li class="toc-entry toc-h1"><a href="#h1">h1</a></li>
10
- </ul>
11
- HTML
12
-
13
- def test_option_is_nil
14
- parser = Jekyll::TableOfContents::Parser.new(BASE_HTML, nil)
15
- assert_equal(EXPECTED_HTML, parser.build_toc)
16
- end
17
-
18
- def test_option_is_epmty_string
19
- parser = Jekyll::TableOfContents::Parser.new(BASE_HTML, '')
20
- assert_equal(EXPECTED_HTML, parser.build_toc)
21
- end
22
-
23
- def test_option_is_string
24
- parser = Jekyll::TableOfContents::Parser.new(BASE_HTML, 'string')
25
- assert_equal(EXPECTED_HTML, parser.build_toc)
26
- end
27
-
28
- def test_option_is_array
29
- parser = Jekyll::TableOfContents::Parser.new(BASE_HTML, [])
30
- assert_equal(EXPECTED_HTML, parser.build_toc)
31
- end
32
- end
@@ -1,76 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestOrderedList < Minitest::Test
6
- include TestHelpers
7
-
8
- def test_default_configuration
9
- configuration = Jekyll::TableOfContents::Configuration.new({})
10
-
11
- refute(configuration.ordered_list)
12
- end
13
-
14
- def test_disabled_ordered_list
15
- configuration = Jekyll::TableOfContents::Configuration.new('ordered_list' => false)
16
-
17
- refute(configuration.ordered_list)
18
- end
19
-
20
- def test_enabled_ordered_list
21
- configuration = Jekyll::TableOfContents::Configuration.new('ordered_list' => true)
22
-
23
- assert(configuration.ordered_list)
24
- end
25
-
26
- def test_basic_ordered_list_top_heading
27
- parse_with_ordered_list
28
- html = @parser.toc
29
-
30
- assert_match(/^<ol id="toc" class="section-nav">/, html)
31
- end
32
-
33
- def test_ordered_list_sub_headings
34
- parse_with_ordered_list
35
- html = @parser.toc
36
-
37
- assert_match(/<ol>\n<li class="toc-entry/, html)
38
- end
39
-
40
- def test_ordered_list_top_heading_with_classes
41
- parse_with_ordered_list_and_classes
42
- html = @parser.toc
43
-
44
- assert_match(/^<ol id="toc" class="top-list-class">/, html)
45
- end
46
-
47
- def test_ordered_list_sub_headings_with_classes
48
- parse_with_ordered_list_and_classes
49
- html = @parser.toc
50
-
51
- assert_match(/<ol class="sublist-class">/, html)
52
- end
53
-
54
- def test_ordered_list_subheadings_with_classes_nested_structure
55
- parse_with_ordered_list_and_classes
56
- html = @parser.toc
57
-
58
- occurrences = html.scan(/<ol class="sublist-class">/).count
59
-
60
- assert_equal(5, occurrences)
61
- end
62
-
63
- private
64
-
65
- def parse_with_ordered_list
66
- read_html_and_create_parser('ordered_list' => true)
67
- end
68
-
69
- def parse_with_ordered_list_and_classes
70
- read_html_and_create_parser(
71
- 'ordered_list' => true,
72
- 'list_class' => 'top-list-class',
73
- 'sublist_class' => 'sublist-class'
74
- )
75
- end
76
- end
@@ -1,36 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestTOCFilter < Minitest::Test
6
- include TestHelpers
7
-
8
- def setup
9
- read_html_and_create_parser
10
- end
11
-
12
- def test_injects_anchors
13
- html = @parser.toc
14
-
15
- assert_match(%r{<a class="anchor" href="#simple-h1" aria-hidden="true"><span.*span></a>Simple H1}, html)
16
- end
17
-
18
- def test_nested_toc
19
- doc = Nokogiri::HTML(@parser.toc)
20
- nested_h6_text = doc.css('ul.section-nav')
21
- .css('li.toc-h1')
22
- .css('li.toc-h2')
23
- .css('li.toc-h3')
24
- .css('li.toc-h4')
25
- .css('li.toc-h5')
26
- .css('li.toc-h6')
27
- .text
28
- assert_equal('Simple H6', nested_h6_text)
29
- end
30
-
31
- def test_injects_toc_container
32
- html = @parser.toc
33
-
34
- assert_match(/<ul id="toc" class="section-nav">/, html)
35
- end
36
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestTOCOnlyFilter < Minitest::Test
6
- include TestHelpers
7
-
8
- def setup
9
- read_html_and_create_parser
10
- end
11
-
12
- def test_injects_toc_container
13
- html = @parser.build_toc
14
-
15
- assert_includes(html, %(<ul id="toc" class="section-nav">))
16
- end
17
-
18
- def test_does_not_return_content
19
- html = @parser.build_toc
20
-
21
- refute_includes(html, %(<h1>Simple H1</h1>))
22
- end
23
- end
@@ -1,376 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestVariousTocHtml < Minitest::Test
6
- TEST_HTML = <<~HTML
7
- <h1>h1</h1>
8
- <h3>h3</h3>
9
- <h6>h6</h6>
10
- HTML
11
-
12
- def test_nested_toc
13
- parser = Jekyll::TableOfContents::Parser.new(TEST_HTML)
14
- expected = <<~HTML.chomp
15
- <ul id="toc" class="section-nav">
16
- <li class="toc-entry toc-h1"><a href="#h1">h1</a>
17
- <ul>
18
- <li class="toc-entry toc-h3"><a href="#h3">h3</a>
19
- <ul>
20
- <li class="toc-entry toc-h6"><a href="#h6">h6</a></li>
21
- </ul>
22
- </li>
23
- </ul>
24
- </li>
25
- </ul>
26
- HTML
27
-
28
- assert_equal(expected, parser.build_toc)
29
- end
30
-
31
- def test_nested_toc_with_min_and_max
32
- parser = Jekyll::TableOfContents::Parser.new(TEST_HTML, 'min_level' => 2, 'max_level' => 5)
33
- expected = <<~HTML.chomp
34
- <ul id="toc" class="section-nav">
35
- <li class="toc-entry toc-h3"><a href="#h3">h3</a></li>
36
- </ul>
37
- HTML
38
-
39
- assert_equal(expected, parser.build_toc)
40
- end
41
-
42
- def test_complex_nested_toc
43
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML)
44
- <h1>h1</h1>
45
- <h3>h3</h3>
46
- <h2>h2</h2>
47
- <h6>h6</h6>
48
- HTML
49
- expected = <<~HTML.chomp
50
- <ul id="toc" class="section-nav">
51
- <li class="toc-entry toc-h1"><a href="#h1">h1</a>
52
- <ul>
53
- <li class="toc-entry toc-h3"><a href="#h3">h3</a></li>
54
- <li class="toc-entry toc-h2"><a href="#h2">h2</a>
55
- <ul>
56
- <li class="toc-entry toc-h6"><a href="#h6">h6</a></li>
57
- </ul>
58
- </li>
59
- </ul>
60
- </li>
61
- </ul>
62
- HTML
63
-
64
- assert_equal(expected, parser.build_toc)
65
- end
66
-
67
- def test_decremental_headings1
68
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML)
69
- <h6>h6</h6>
70
- <h5>h5</h5>
71
- <h4>h4</h4>
72
- <h3>h3</h3>
73
- <h2>h2</h2>
74
- <h1>h1</h1>
75
- HTML
76
- expected = <<~HTML.chomp
77
- <ul id="toc" class="section-nav">
78
- <li class="toc-entry toc-h6"><a href="#h6">h6</a></li>
79
- <li class="toc-entry toc-h5"><a href="#h5">h5</a></li>
80
- <li class="toc-entry toc-h4"><a href="#h4">h4</a></li>
81
- <li class="toc-entry toc-h3"><a href="#h3">h3</a></li>
82
- <li class="toc-entry toc-h2"><a href="#h2">h2</a></li>
83
- <li class="toc-entry toc-h1"><a href="#h1">h1</a></li>
84
- </ul>
85
- HTML
86
-
87
- assert_equal(expected, parser.build_toc)
88
- end
89
-
90
- def test_decremental_headings2
91
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML)
92
- <h1>h1</h1>
93
- <h3>h3</h3>
94
- <h2>h2</h2>
95
- <h4>h4</h4>
96
- <h5>h5</h5>
97
- HTML
98
- expected = <<~HTML.chomp
99
- <ul id="toc" class="section-nav">
100
- <li class="toc-entry toc-h1"><a href="#h1">h1</a>
101
- <ul>
102
- <li class="toc-entry toc-h3"><a href="#h3">h3</a></li>
103
- <li class="toc-entry toc-h2"><a href="#h2">h2</a>
104
- <ul>
105
- <li class="toc-entry toc-h4"><a href="#h4">h4</a>
106
- <ul>
107
- <li class="toc-entry toc-h5"><a href="#h5">h5</a></li>
108
- </ul>
109
- </li>
110
- </ul>
111
- </li>
112
- </ul>
113
- </li>
114
- </ul>
115
- HTML
116
-
117
- assert_equal(expected, parser.build_toc)
118
- end
119
-
120
- def test_no_toc
121
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML)
122
- <h1>h1</h1>
123
- <h1 class="no_toc">no_toc h1</h1>
124
- <h2>h2</h2>
125
- <h2 class="no_toc">no_toc h2</h2>
126
- <h3>h3</h3>
127
- <h3 class="no_toc">no_toc h3</h3>
128
- <h4>h4</h4>
129
- <h4 class="no_toc">no_toc h4</h4>
130
- HTML
131
- expected = <<~HTML.chomp
132
- <ul id="toc" class="section-nav">
133
- <li class="toc-entry toc-h1"><a href="#h1">h1</a>
134
- <ul>
135
- <li class="toc-entry toc-h2"><a href="#h2">h2</a>
136
- <ul>
137
- <li class="toc-entry toc-h3"><a href="#h3">h3</a>
138
- <ul>
139
- <li class="toc-entry toc-h4"><a href="#h4">h4</a></li>
140
- </ul>
141
- </li>
142
- </ul>
143
- </li>
144
- </ul>
145
- </li>
146
- </ul>
147
- HTML
148
-
149
- assert_equal(expected, parser.build_toc)
150
- end
151
-
152
- def test_japanese_toc
153
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML)
154
- <h1>あ</h1>
155
- <h2>い</h2>
156
- <h3>う</h3>
157
- HTML
158
- expected = <<~HTML.chomp
159
- <ul id="toc" class="section-nav">
160
- <li class="toc-entry toc-h1"><a href="#%E3%81%82">あ</a>
161
- <ul>
162
- <li class="toc-entry toc-h2"><a href="#%E3%81%84">い</a>
163
- <ul>
164
- <li class="toc-entry toc-h3"><a href="#%E3%81%86">う</a></li>
165
- </ul>
166
- </li>
167
- </ul>
168
- </li>
169
- </ul>
170
- HTML
171
-
172
- assert_equal(expected, parser.build_toc)
173
- html_with_anchors = parser.inject_anchors_into_html
174
- assert_match(%r{<a class="anchor" href="#%E3%81%82" aria-hidden="true"><span.*span></a>あ}, html_with_anchors)
175
- assert_match(%r{<a class="anchor" href="#%E3%81%84" aria-hidden="true"><span.*span></a>い}, html_with_anchors)
176
- assert_match(%r{<a class="anchor" href="#%E3%81%86" aria-hidden="true"><span.*span></a>う}, html_with_anchors)
177
- end
178
-
179
- # ref. https://github.com/toshimaru/jekyll-toc/issues/45
180
- def test_angle_bracket
181
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML)
182
- <h1>h1</h1>
183
- <h1>&lt;base href&gt;</h1>
184
- <h1>&amp; &lt; &gt;</h1>
185
- HTML
186
- expected = <<~HTML.chomp
187
- <ul id="toc" class="section-nav">
188
- <li class="toc-entry toc-h1"><a href="#h1">h1</a></li>
189
- <li class="toc-entry toc-h1"><a href="#base-href">&lt;base href&gt;</a></li>
190
- <li class="toc-entry toc-h1"><a href="#--">&amp; &lt; &gt;</a></li>
191
- </ul>
192
- HTML
193
-
194
- assert_equal(expected, parser.build_toc)
195
- end
196
-
197
- def test_tags_inside_heading
198
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML)
199
- <h2><strong>h2</strong></h2>
200
- <h2><em>h2</em></h2>
201
- HTML
202
- expected = <<~HTML.chomp
203
- <ul id="toc" class="section-nav">
204
- <li class="toc-entry toc-h2"><a href="#h2">h2</a></li>
205
- <li class="toc-entry toc-h2"><a href="#h2-1">h2</a></li>
206
- </ul>
207
- HTML
208
-
209
- assert_equal(expected, parser.build_toc)
210
- end
211
-
212
- def test_nested_toc_with_no_toc_section_class
213
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML)
214
- <h1>h1</h1>
215
- <div class="no_toc_section">
216
- <h2>h2</h2>
217
- </div>
218
- <h3>h3</h3>
219
- <h6>h6</h6>
220
- HTML
221
- expected = <<~HTML.chomp
222
- <ul id="toc" class="section-nav">
223
- <li class="toc-entry toc-h1"><a href="#h1">h1</a>
224
- <ul>
225
- <li class="toc-entry toc-h3"><a href="#h3">h3</a>
226
- <ul>
227
- <li class="toc-entry toc-h6"><a href="#h6">h6</a></li>
228
- </ul>
229
- </li>
230
- </ul>
231
- </li>
232
- </ul>
233
- HTML
234
- assert_equal(expected, parser.build_toc)
235
-
236
- html = parser.inject_anchors_into_html
237
- assert_match(%r{<h1>.+</h1>}m, html)
238
- assert_match(%r{<h3>.+</h3>}m, html)
239
- assert_match(%r{<h6>.+</h6>}m, html)
240
- assert_includes(html, '<h2>h2</h2>')
241
- end
242
-
243
- def test_nested_toc_with_no_toc_section_class_option
244
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML, 'no_toc_section_class' => 'exclude')
245
- <h1>h1</h1>
246
- <div class="exclude">
247
- <h2>h2</h2>
248
- </div>
249
- <h3>h3</h3>
250
- <div class="exclude">
251
- <h4>h4</h4>
252
- <h5>h5</h5>
253
- </div>
254
- <h6>h6</h6>
255
- HTML
256
- expected = <<~HTML.chomp
257
- <ul id="toc" class="section-nav">
258
- <li class="toc-entry toc-h1"><a href="#h1">h1</a>
259
- <ul>
260
- <li class="toc-entry toc-h3"><a href="#h3">h3</a>
261
- <ul>
262
- <li class="toc-entry toc-h6"><a href="#h6">h6</a></li>
263
- </ul>
264
- </li>
265
- </ul>
266
- </li>
267
- </ul>
268
- HTML
269
- assert_equal(expected, parser.build_toc)
270
-
271
- html = parser.inject_anchors_into_html
272
- assert_match(%r{<h1>.+</h1>}m, html)
273
- assert_match(%r{<h3>.+</h3>}m, html)
274
- assert_match(%r{<h6>.+</h6>}m, html)
275
- assert_includes(html, '<h2>h2</h2>')
276
- assert_includes(html, '<h4>h4</h4>')
277
- assert_includes(html, '<h5>h5</h5>')
278
- end
279
-
280
- def test_multiple_no_toc_section_classes
281
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML, 'no_toc_section_class' => ['no_toc_section', 'exclude'])
282
- <h1>h1</h1>
283
- <div class="no_toc_section">
284
- <h2>h2</h2>
285
- </div>
286
- <h3>h3</h3>
287
- <div class="exclude">
288
- <h4>h4</h4>
289
- <h5>h5</h5>
290
- </div>
291
- <h6>h6</h6>
292
- HTML
293
- expected = <<~HTML.chomp
294
- <ul id="toc" class="section-nav">
295
- <li class="toc-entry toc-h1"><a href="#h1">h1</a>
296
- <ul>
297
- <li class="toc-entry toc-h3"><a href="#h3">h3</a>
298
- <ul>
299
- <li class="toc-entry toc-h6"><a href="#h6">h6</a></li>
300
- </ul>
301
- </li>
302
- </ul>
303
- </li>
304
- </ul>
305
- HTML
306
- assert_equal(expected, parser.build_toc)
307
-
308
- html = parser.inject_anchors_into_html
309
- assert_match(%r{<h1>.+</h1>}m, html)
310
- assert_match(%r{<h3>.+</h3>}m, html)
311
- assert_match(%r{<h6>.+</h6>}m, html)
312
- assert_includes(html, '<h2>h2</h2>')
313
- assert_includes(html, '<h4>h4</h4>')
314
- assert_includes(html, '<h5>h5</h5>')
315
- end
316
-
317
- def test_toc_with_explicit_id
318
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML)
319
- <h1>h1</h1>
320
- <h1 id="second">h2</h1>
321
- <h1 id="third">h3</h1>
322
- HTML
323
- expected = <<~HTML.chomp
324
- <ul id="toc" class="section-nav">
325
- <li class="toc-entry toc-h1"><a href="#h1">h1</a></li>
326
- <li class="toc-entry toc-h1"><a href="#second">h2</a></li>
327
- <li class="toc-entry toc-h1"><a href="#third">h3</a></li>
328
- </ul>
329
- HTML
330
- assert_equal(expected, parser.build_toc)
331
-
332
- html = parser.inject_anchors_into_html
333
- assert_includes(html, %(<a class="anchor" href="#h1" aria-hidden="true">))
334
- assert_includes(html, %(<a class="anchor" href="#second" aria-hidden="true">))
335
- assert_includes(html, %(<a class="anchor" href="#third" aria-hidden="true">))
336
- end
337
-
338
- def test_anchor_is_uniq
339
- parser = Jekyll::TableOfContents::Parser.new(<<~HTML)
340
- <h1>h1</h1>
341
- <h1>h1</h1>
342
- <h1>h1</h1>
343
- HTML
344
- expected = <<~HTML.chomp
345
- <ul id="toc" class="section-nav">
346
- <li class="toc-entry toc-h1"><a href="#h1">h1</a></li>
347
- <li class="toc-entry toc-h1"><a href="#h1-1">h1</a></li>
348
- <li class="toc-entry toc-h1"><a href="#h1-2">h1</a></li>
349
- </ul>
350
- HTML
351
-
352
- assert_equal(expected, parser.build_toc)
353
- end
354
-
355
- def test_custom_css_classes
356
- parser = Jekyll::TableOfContents::Parser.new(
357
- TEST_HTML,
358
- 'item_class' => 'custom-item', 'list_id' => 'custom-toc-id', 'list_class' => 'custom-list', 'sublist_class' => 'custom-sublist', 'item_prefix' => 'custom-prefix-'
359
- )
360
- expected = <<~HTML.chomp
361
- <ul id="custom-toc-id" class="custom-list">
362
- <li class="custom-item custom-prefix-h1"><a href="#h1">h1</a>
363
- <ul class="custom-sublist">
364
- <li class="custom-item custom-prefix-h3"><a href="#h3">h3</a>
365
- <ul class="custom-sublist">
366
- <li class="custom-item custom-prefix-h6"><a href="#h6">h6</a></li>
367
- </ul>
368
- </li>
369
- </ul>
370
- </li>
371
- </ul>
372
- HTML
373
-
374
- assert_equal(expected, parser.build_toc)
375
- end
376
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestConfiguration < Minitest::Test
6
- def test_default_configuration
7
- configuration = Jekyll::TableOfContents::Configuration.new({})
8
-
9
- assert_equal(1..6, configuration.toc_levels)
10
- refute(configuration.ordered_list)
11
- assert_equal('no_toc_section', configuration.no_toc_section_class)
12
- assert_equal('toc', configuration.list_id)
13
- assert_equal('section-nav', configuration.list_class)
14
- assert_equal('', configuration.sublist_class)
15
- assert_equal('toc-entry', configuration.item_class)
16
- assert_equal('toc-', configuration.item_prefix)
17
- end
18
-
19
- def test_type_error
20
- configuration = Jekyll::TableOfContents::Configuration.new('TypeError!')
21
-
22
- assert_equal(1..6, configuration.toc_levels)
23
- refute(configuration.ordered_list)
24
- assert_equal('no_toc_section', configuration.no_toc_section_class)
25
- assert_equal('toc', configuration.list_id)
26
- assert_equal('section-nav', configuration.list_class)
27
- assert_equal('', configuration.sublist_class)
28
- assert_equal('toc-entry', configuration.item_class)
29
- assert_equal('toc-', configuration.item_prefix)
30
- end
31
- end
data/test/test_helper.rb DELETED
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'simplecov'
4
- SimpleCov.start
5
-
6
- require 'minitest/autorun'
7
- require 'minitest/reporters'
8
- Minitest::Reporters.use!
9
-
10
- require 'jekyll'
11
- require 'jekyll-toc'
12
-
13
- SIMPLE_HTML = <<~HTML
14
- <h1>Simple H1</h1>
15
- <h2>Simple H2</h2>
16
- <h3>Simple H3</h3>
17
- <h4>Simple H4</h4>
18
- <h5>Simple H5</h5>
19
- <h6>Simple H6</h6>
20
- HTML
21
-
22
- module TestHelpers
23
- def read_html_and_create_parser(options = {})
24
- @parser = Jekyll::TableOfContents::Parser.new(SIMPLE_HTML, options)
25
- end
26
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestTableOfContentsFilter < Minitest::Test
6
- include Jekyll::TableOfContentsFilter
7
-
8
- DUMMY_HTML = '<div>Dummy HTML Content</div>'
9
-
10
- def test_toc_only
11
- @context = disable_toc_context
12
- assert_empty toc_only(DUMMY_HTML)
13
- end
14
-
15
- def test_inject_anchors
16
- @context = disable_toc_context
17
- assert_equal DUMMY_HTML, inject_anchors(DUMMY_HTML)
18
- end
19
-
20
- def test_toc
21
- @context = disable_toc_context
22
- assert_equal DUMMY_HTML, toc(DUMMY_HTML)
23
- end
24
-
25
- def test_toc_only2
26
- @context = enable_toc_context
27
- assert_equal %(<ul id="toc" class="section-nav">\n</ul>), toc_only(DUMMY_HTML)
28
- end
29
-
30
- def test_inject_anchors2
31
- @context = enable_toc_context
32
- assert_equal DUMMY_HTML, inject_anchors(DUMMY_HTML)
33
- end
34
-
35
- def test_toc2
36
- @context = enable_toc_context
37
- assert_equal %(<ul id="toc" class="section-nav">\n</ul>#{DUMMY_HTML}), toc(DUMMY_HTML)
38
- end
39
-
40
- private
41
-
42
- def disable_toc_context
43
- Struct.new(:registers).new(page: { 'toc' => false })
44
- end
45
-
46
- def enable_toc_context
47
- Struct.new(:registers).new(
48
- page: { 'toc' => true },
49
- site: Struct.new(:config).new({ 'toc' => false })
50
- )
51
- end
52
- end
@@ -1,168 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestKramdownList < Minitest::Test
6
- # NOTE: kramdown automatically injects `id` attribute
7
- def test_kramdown_heading
8
- text = <<~MARKDOWN
9
- # h1
10
-
11
- ## h2
12
- MARKDOWN
13
- expected = <<~HTML
14
- <h1 id="h1">h1</h1>
15
-
16
- <h2 id="h2">h2</h2>
17
- HTML
18
- actual = Kramdown::Document.new(text).to_html
19
-
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)
37
- end
38
-
39
- def test_kramdown_list_l1_l5
40
- text = <<~MARKDOWN
41
- * level-1
42
- * level-2
43
- * level-3
44
- * level-4
45
- * level-5
46
- MARKDOWN
47
- expected = <<~HTML
48
- <ul>
49
- <li>level-1
50
- <ul>
51
- <li>level-2
52
- <ul>
53
- <li>level-3
54
- <ul>
55
- <li>level-4
56
- <ul>
57
- <li>level-5</li>
58
- </ul>
59
- </li>
60
- </ul>
61
- </li>
62
- </ul>
63
- </li>
64
- </ul>
65
- </li>
66
- </ul>
67
- HTML
68
- actual = Kramdown::Document.new(text).to_html
69
-
70
- assert_equal(expected, actual)
71
- end
72
-
73
- def test_kramdown_list_l1_l3_l2_l4
74
- text = <<~MARKDOWN
75
- * level-1
76
- * level-3
77
- * level-2
78
- * level-4
79
- * level-5
80
- MARKDOWN
81
- expected = <<~HTML
82
- <ul>
83
- <li>level-1
84
- <ul>
85
- <li>level-3</li>
86
- <li>level-2
87
- <ul>
88
- <li>level-4
89
- <ul>
90
- <li>level-5</li>
91
- </ul>
92
- </li>
93
- </ul>
94
- </li>
95
- </ul>
96
- </li>
97
- </ul>
98
- HTML
99
- actual = Kramdown::Document.new(text).to_html
100
-
101
- assert_equal(expected, actual)
102
- end
103
-
104
- def test_kramdown_list_l4_l1
105
- text = <<~MARKDOWN
106
- * level-4
107
- * level-3
108
- * level-2
109
- * level-1
110
- MARKDOWN
111
- expected = <<~HTML
112
- <pre><code> * level-4
113
- * level-3 * level-2 * level-1
114
- </code></pre>
115
- HTML
116
- actual = Kramdown::Document.new(text).to_html
117
-
118
- assert_equal(expected, actual)
119
- end
120
-
121
- def test_kramdown_list_l1_l4_l1
122
- text = <<~MARKDOWN
123
- * level-1
124
- * level-4
125
- * level-3
126
- * level-2
127
- * level-1
128
- MARKDOWN
129
- expected = <<~HTML
130
- <ul>
131
- <li>level-1
132
- * level-4
133
- <ul>
134
- <li>level-3</li>
135
- <li>level-2</li>
136
- </ul>
137
- </li>
138
- <li>level-1</li>
139
- </ul>
140
- HTML
141
- actual = Kramdown::Document.new(text).to_html
142
-
143
- assert_equal(expected, actual)
144
- end
145
-
146
- def test_kramdown_list_l1_l3_l1
147
- text = <<~MARKDOWN
148
- * level-1
149
- * level-3
150
- * level-2
151
- * level-1
152
- MARKDOWN
153
- expected = <<~HTML
154
- <ul>
155
- <li>level-1
156
- <ul>
157
- <li>level-3</li>
158
- <li>level-2</li>
159
- </ul>
160
- </li>
161
- <li>level-1</li>
162
- </ul>
163
- HTML
164
- actual = Kramdown::Document.new(text).to_html
165
-
166
- assert_equal(expected, actual)
167
- end
168
- end
data/test/test_toc_tag.rb DELETED
@@ -1,28 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'test_helper'
4
-
5
- class TestTableOfContentsTag < Minitest::Test
6
- include Liquid
7
-
8
- def setup
9
- @stubbed_context = Struct.new(:registers)
10
- @stubbed_context1 = Struct.new(:config)
11
- @stubbed_context2 = Struct.new(:toc, :content)
12
- end
13
-
14
- def test_toc_tag
15
- context = @stubbed_context.new(
16
- page: @stubbed_context2.new({ 'toc' => false }, '<h1>test</h1>'),
17
- site: @stubbed_context1.new({ 'toc' => nil })
18
- )
19
- tag = Jekyll::TocTag.parse('toc_tag', '', Tokenizer.new(''), ParseContext.new)
20
- assert_equal(%(<ul id="toc" class="section-nav">\n<li class="toc-entry toc-h1"><a href="#test">test</a></li>\n</ul>), tag.render(context))
21
- end
22
-
23
- def test_toc_tag_returns_empty_string
24
- context = @stubbed_context.new(page: { 'toc' => false })
25
- tag = Jekyll::TocTag.parse('toc_tag', '', Tokenizer.new(''), ParseContext.new)
26
- assert_empty tag.render(context)
27
- end
28
- end