Skip to content

Commit

Permalink
Add a new option max_depth to the helper toc (hexojs#1809)
Browse files Browse the repository at this point in the history
* Add a new option `max_depth` to the helper `toc`

* Fix the code style.
  • Loading branch information
dorayx authored and leesei committed Apr 18, 2016
1 parent c5a2e06 commit 569856e
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 56 deletions.
4 changes: 3 additions & 1 deletion lib/plugins/helper/toc.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ function tocHelper(str, options) {
if (!cheerio) cheerio = require('cheerio');

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

if (!headings.length) return '';

Expand Down
140 changes: 85 additions & 55 deletions test/scripts/helpers/toc.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,73 +24,95 @@ describe('toc', function() {
var genResult = function(options) {
options = _.assign({
class: 'toc',
list_number: true
list_number: true,
max_depth: 6
}, options);

var className = options.class;
var listNumber = options.list_number;
var maxDepth = options.max_depth;

var result = [
'<ol class="' + className + '">',
'<li class="' + className + '-item ' + className + '-level-1">',
'<a class="' + className + '-link" href="#title_1">',
ifTrue(listNumber, '<span class="' + className + '-number">1.</span> ', ''),
'<span class="' + className + '-text">Title 1</span>',
var resultTitle_1_1_1 = [
'<ol class="' + className + '-child">',
'<li class="' + className + '-item ' + className + '-level-3">',
'<a class="' + className + '-link" href="#title_1_1_1">',
ifTrue(listNumber, '<span class="' + className + '-number">1.1.1.</span> ', ''),
'<span class="' + className + '-text">Title 1.1.1</span>',
'</a>',
'</li>',
'</ol>'
].join('');

var resultTitle_1_3_1 = [
'<ol class="' + className + '-child">',
'<li class="' + className + '-item ' + className + '-level-3">',
'<a class="' + className + '-link" href="#title_1_3_1">',
ifTrue(listNumber, '<span class="' + className + '-number">1.3.1.</span> ', ''),
'<span class="' + className + '-text">Title 1.3.1</span>',
'</a>',
'</li>',
'</ol>'
].join('');

var resultTitle_1_1 = [
'<ol class="' + className + '-child">',
'<li class="' + className + '-item ' + className + '-level-2">',
'<a class="' + className + '-link" href="#title_1_1">',
ifTrue(listNumber, '<span class="' + className + '-number">1.1.</span> ', ''),
'<span class="' + className + '-text">Title 1.1</span>',
'</a>',
ifTrue(maxDepth >= 3, resultTitle_1_1_1, ''),
'</li>',
'<li class="' + className + '-item ' + className + '-level-2">',
'<a class="' + className + '-link" href="#title_1_2">',
ifTrue(listNumber, '<span class="' + className + '-number">1.2.</span> ', ''),
'<span class="' + className + '-text">Title 1.2</span>',
'</a>',
'</li>',
'<li class="' + className + '-item ' + className + '-level-2">',
'<a class="' + className + '-link" href="#title_1_3">',
ifTrue(listNumber, '<span class="' + className + '-number">1.3.</span> ', ''),
'<span class="' + className + '-text">Title 1.3</span>',
'</a>',
'<ol class="' + className + '-child">',
'<li class="' + className + '-item ' + className + '-level-2">',
'<a class="' + className + '-link" href="#title_1_1">',
ifTrue(listNumber, '<span class="' + className + '-number">1.1.</span> ', ''),
'<span class="' + className + '-text">Title 1.1</span>',
'</a>',
'<ol class="' + className + '-child">',
'<li class="' + className + '-item ' + className + '-level-3">',
'<a class="' + className + '-link" href="#title_1_1_1">',
ifTrue(listNumber, '<span class="' + className + '-number">1.1.1.</span> ', ''),
'<span class="' + className + '-text">Title 1.1.1</span>',
'</a>',
'</li>',
'</ol>',
'</li>',
'<li class="' + className + '-item ' + className + '-level-2">',
'<a class="' + className + '-link" href="#title_1_2">',
ifTrue(listNumber, '<span class="' + className + '-number">1.2.</span> ', ''),
'<span class="' + className + '-text">Title 1.2</span>',
'</a>',
'</li>',
'<li class="' + className + '-item ' + className + '-level-2">',
'<a class="' + className + '-link" href="#title_1_3">',
ifTrue(listNumber, '<span class="' + className + '-number">1.3.</span> ', ''),
'<span class="' + className + '-text">Title 1.3</span>',
'</a>',
'<ol class="' + className + '-child">',
'<li class="' + className + '-item ' + className + '-level-3">',
'<a class="' + className + '-link" href="#title_1_3_1">',
ifTrue(listNumber, '<span class="' + className + '-number">1.3.1.</span> ', ''),
'<span class="' + className + '-text">Title 1.3.1</span>',
'</a>',
'</li>',
'</ol>',
'</li>',
'</ol>',
ifTrue(maxDepth >= 3, resultTitle_1_3_1, ''),
'</li>',
'<li class="' + className + '-item ' + className + '-level-1">',
'<a class="' + className + '-link" href="#title_2">',
ifTrue(listNumber, '<span class="' + className + '-number">2.</span> ', ''),
'<span class="' + className + '-text">Title 2</span>',
'</ol>'
].join('');

var resultTitle_2_1 = [
'<ol class="' + className + '-child">',
'<li class="' + className + '-item ' + className + '-level-2">',
'<a class="' + className + '-link" href="#title_2_1">',
ifTrue(listNumber, '<span class="' + className + '-number">2.1.</span> ', ''),
'<span class="' + className + '-text">Title 2.1</span>',
'</a>',
'<ol class="' + className + '-child">',
'<li class="' + className + '-item ' + className + '-level-2">',
'<a class="' + className + '-link" href="#title_2_1">',
ifTrue(listNumber, '<span class="' + className + '-number">2.1.</span> ', ''),
'<span class="' + className + '-text">Title 2.1</span>',
'</a>',
'</li>',
'</ol>',
'</li>',
'</ol>'
].join('');

var resultAllTitles_Level1 = [
'<li class="' + className + '-item ' + className + '-level-1">',
'<a class="' + className + '-link" href="#title_1">',
ifTrue(listNumber, '<span class="' + className + '-number">1.</span> ', ''),
'<span class="' + className + '-text">Title 1</span>',
'</a>',
ifTrue(maxDepth >= 2, resultTitle_1_1, ''),
'</li>',
'<li class="' + className + '-item ' + className + '-level-1">',
'<a class="' + className + '-link" href="#title_2">',
ifTrue(listNumber, '<span class="' + className + '-number">2.</span> ', ''),
'<span class="' + className + '-text">Title 2</span>',
'</a>',
ifTrue(maxDepth >= 2, resultTitle_2_1, ''),
'</li>'
].join('');

var result = [
'<ol class="' + className + '">',
ifTrue(maxDepth >= 1, resultAllTitles_Level1, ''),
'</ol>'
].join('');

return result;
};

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

genResult(options).should.eql(toc(html, options));
});

it('max_depth', function() {
var options = {
max_depth: 2
};

genResult(options).should.eql(toc(html, options));
});
});

0 comments on commit 569856e

Please sign in to comment.