Skip to content

Commit 569856e

Browse files
dorayxleesei
authored andcommitted
Add a new option max_depth to the helper toc (#1809)
* Add a new option `max_depth` to the helper `toc` * Fix the code style.
1 parent c5a2e06 commit 569856e

File tree

2 files changed

+88
-56
lines changed

2 files changed

+88
-56
lines changed

lib/plugins/helper/toc.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ function tocHelper(str, options) {
88
if (!cheerio) cheerio = require('cheerio');
99

1010
var $ = cheerio.load(str);
11-
var headings = $('h1, h2, h3, h4, h5, h6');
11+
var headingsMaxDepth = options.hasOwnProperty('max_depth') ? options.max_depth : 6;
12+
var headingsSelector = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'].slice(0, headingsMaxDepth).join(',');
13+
var headings = $(headingsSelector);
1214

1315
if (!headings.length) return '';
1416

test/scripts/helpers/toc.js

Lines changed: 85 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -24,73 +24,95 @@ describe('toc', function() {
2424
var genResult = function(options) {
2525
options = _.assign({
2626
class: 'toc',
27-
list_number: true
27+
list_number: true,
28+
max_depth: 6
2829
}, options);
2930

3031
var className = options.class;
3132
var listNumber = options.list_number;
33+
var maxDepth = options.max_depth;
3234

33-
var result = [
34-
'<ol class="' + className + '">',
35-
'<li class="' + className + '-item ' + className + '-level-1">',
36-
'<a class="' + className + '-link" href="#title_1">',
37-
ifTrue(listNumber, '<span class="' + className + '-number">1.</span> ', ''),
38-
'<span class="' + className + '-text">Title 1</span>',
35+
var resultTitle_1_1_1 = [
36+
'<ol class="' + className + '-child">',
37+
'<li class="' + className + '-item ' + className + '-level-3">',
38+
'<a class="' + className + '-link" href="#title_1_1_1">',
39+
ifTrue(listNumber, '<span class="' + className + '-number">1.1.1.</span> ', ''),
40+
'<span class="' + className + '-text">Title 1.1.1</span>',
41+
'</a>',
42+
'</li>',
43+
'</ol>'
44+
].join('');
45+
46+
var resultTitle_1_3_1 = [
47+
'<ol class="' + className + '-child">',
48+
'<li class="' + className + '-item ' + className + '-level-3">',
49+
'<a class="' + className + '-link" href="#title_1_3_1">',
50+
ifTrue(listNumber, '<span class="' + className + '-number">1.3.1.</span> ', ''),
51+
'<span class="' + className + '-text">Title 1.3.1</span>',
52+
'</a>',
53+
'</li>',
54+
'</ol>'
55+
].join('');
56+
57+
var resultTitle_1_1 = [
58+
'<ol class="' + className + '-child">',
59+
'<li class="' + className + '-item ' + className + '-level-2">',
60+
'<a class="' + className + '-link" href="#title_1_1">',
61+
ifTrue(listNumber, '<span class="' + className + '-number">1.1.</span> ', ''),
62+
'<span class="' + className + '-text">Title 1.1</span>',
63+
'</a>',
64+
ifTrue(maxDepth >= 3, resultTitle_1_1_1, ''),
65+
'</li>',
66+
'<li class="' + className + '-item ' + className + '-level-2">',
67+
'<a class="' + className + '-link" href="#title_1_2">',
68+
ifTrue(listNumber, '<span class="' + className + '-number">1.2.</span> ', ''),
69+
'<span class="' + className + '-text">Title 1.2</span>',
70+
'</a>',
71+
'</li>',
72+
'<li class="' + className + '-item ' + className + '-level-2">',
73+
'<a class="' + className + '-link" href="#title_1_3">',
74+
ifTrue(listNumber, '<span class="' + className + '-number">1.3.</span> ', ''),
75+
'<span class="' + className + '-text">Title 1.3</span>',
3976
'</a>',
40-
'<ol class="' + className + '-child">',
41-
'<li class="' + className + '-item ' + className + '-level-2">',
42-
'<a class="' + className + '-link" href="#title_1_1">',
43-
ifTrue(listNumber, '<span class="' + className + '-number">1.1.</span> ', ''),
44-
'<span class="' + className + '-text">Title 1.1</span>',
45-
'</a>',
46-
'<ol class="' + className + '-child">',
47-
'<li class="' + className + '-item ' + className + '-level-3">',
48-
'<a class="' + className + '-link" href="#title_1_1_1">',
49-
ifTrue(listNumber, '<span class="' + className + '-number">1.1.1.</span> ', ''),
50-
'<span class="' + className + '-text">Title 1.1.1</span>',
51-
'</a>',
52-
'</li>',
53-
'</ol>',
54-
'</li>',
55-
'<li class="' + className + '-item ' + className + '-level-2">',
56-
'<a class="' + className + '-link" href="#title_1_2">',
57-
ifTrue(listNumber, '<span class="' + className + '-number">1.2.</span> ', ''),
58-
'<span class="' + className + '-text">Title 1.2</span>',
59-
'</a>',
60-
'</li>',
61-
'<li class="' + className + '-item ' + className + '-level-2">',
62-
'<a class="' + className + '-link" href="#title_1_3">',
63-
ifTrue(listNumber, '<span class="' + className + '-number">1.3.</span> ', ''),
64-
'<span class="' + className + '-text">Title 1.3</span>',
65-
'</a>',
66-
'<ol class="' + className + '-child">',
67-
'<li class="' + className + '-item ' + className + '-level-3">',
68-
'<a class="' + className + '-link" href="#title_1_3_1">',
69-
ifTrue(listNumber, '<span class="' + className + '-number">1.3.1.</span> ', ''),
70-
'<span class="' + className + '-text">Title 1.3.1</span>',
71-
'</a>',
72-
'</li>',
73-
'</ol>',
74-
'</li>',
75-
'</ol>',
77+
ifTrue(maxDepth >= 3, resultTitle_1_3_1, ''),
7678
'</li>',
77-
'<li class="' + className + '-item ' + className + '-level-1">',
78-
'<a class="' + className + '-link" href="#title_2">',
79-
ifTrue(listNumber, '<span class="' + className + '-number">2.</span> ', ''),
80-
'<span class="' + className + '-text">Title 2</span>',
79+
'</ol>'
80+
].join('');
81+
82+
var resultTitle_2_1 = [
83+
'<ol class="' + className + '-child">',
84+
'<li class="' + className + '-item ' + className + '-level-2">',
85+
'<a class="' + className + '-link" href="#title_2_1">',
86+
ifTrue(listNumber, '<span class="' + className + '-number">2.1.</span> ', ''),
87+
'<span class="' + className + '-text">Title 2.1</span>',
8188
'</a>',
82-
'<ol class="' + className + '-child">',
83-
'<li class="' + className + '-item ' + className + '-level-2">',
84-
'<a class="' + className + '-link" href="#title_2_1">',
85-
ifTrue(listNumber, '<span class="' + className + '-number">2.1.</span> ', ''),
86-
'<span class="' + className + '-text">Title 2.1</span>',
87-
'</a>',
88-
'</li>',
89-
'</ol>',
9089
'</li>',
9190
'</ol>'
9291
].join('');
9392

93+
var resultAllTitles_Level1 = [
94+
'<li class="' + className + '-item ' + className + '-level-1">',
95+
'<a class="' + className + '-link" href="#title_1">',
96+
ifTrue(listNumber, '<span class="' + className + '-number">1.</span> ', ''),
97+
'<span class="' + className + '-text">Title 1</span>',
98+
'</a>',
99+
ifTrue(maxDepth >= 2, resultTitle_1_1, ''),
100+
'</li>',
101+
'<li class="' + className + '-item ' + className + '-level-1">',
102+
'<a class="' + className + '-link" href="#title_2">',
103+
ifTrue(listNumber, '<span class="' + className + '-number">2.</span> ', ''),
104+
'<span class="' + className + '-text">Title 2</span>',
105+
'</a>',
106+
ifTrue(maxDepth >= 2, resultTitle_2_1, ''),
107+
'</li>'
108+
].join('');
109+
110+
var result = [
111+
'<ol class="' + className + '">',
112+
ifTrue(maxDepth >= 1, resultAllTitles_Level1, ''),
113+
'</ol>'
114+
].join('');
115+
94116
return result;
95117
};
96118

@@ -113,4 +135,12 @@ describe('toc', function() {
113135

114136
genResult(options).should.eql(toc(html, options));
115137
});
138+
139+
it('max_depth', function() {
140+
var options = {
141+
max_depth: 2
142+
};
143+
144+
genResult(options).should.eql(toc(html, options));
145+
});
116146
});

0 commit comments

Comments
 (0)