diff options
-rw-r--r-- | packages/gitbook-markdown/lib/summary.js | 27 | ||||
-rw-r--r-- | packages/gitbook-markdown/test/fixtures/SUMMARY_EMPTY.md | 5 | ||||
-rw-r--r-- | packages/gitbook-markdown/test/summary.js | 5 |
3 files changed, 29 insertions, 8 deletions
diff --git a/packages/gitbook-markdown/lib/summary.js b/packages/gitbook-markdown/lib/summary.js index 58fa910..2cb31be 100644 --- a/packages/gitbook-markdown/lib/summary.js +++ b/packages/gitbook-markdown/lib/summary.js @@ -101,10 +101,16 @@ function parseTitle(src) { } function parseChapter(nodes) { - return _.extend(parseTitle(_.first(nodes).text), { - articles: _.map(listSplit(filterList(nodes), 'list_item_start', 'list_item_end'), function(nodes, i) { - return parseChapter(nodes); - }) + var node = _.first(nodes); + if (!node) return null; + + return _.extend(parseTitle(node.text), { + articles: _.chain(listSplit(filterList(nodes), 'list_item_start', 'list_item_end')) + .map(function(nodes, i) { + return parseChapter(nodes); + }) + .compact() + .value() }); } @@ -120,16 +126,21 @@ function listGroups(src) { function parseSummary(src) { // Split out chapter sections - var chapters = listGroups(src) - .map(parseChapter); + var chapters = _.chain(listGroups(src)) + .map(parseChapter) + .compact() + .value(); return { chapters: chapters }; } -function parseEntries (src) { - return listGroups(src).map(parseChapter); +function parseEntries(src) { + return _.chain(listGroups(src)) + .map(parseChapter) + .compact() + .value(); } diff --git a/packages/gitbook-markdown/test/fixtures/SUMMARY_EMPTY.md b/packages/gitbook-markdown/test/fixtures/SUMMARY_EMPTY.md new file mode 100644 index 0000000..3ffacfd --- /dev/null +++ b/packages/gitbook-markdown/test/fixtures/SUMMARY_EMPTY.md @@ -0,0 +1,5 @@ +# Summary + +* [Chapter 1](chapter-1/README.md) +* + diff --git a/packages/gitbook-markdown/test/summary.js b/packages/gitbook-markdown/test/summary.js index 6854bc0..98cd57f 100644 --- a/packages/gitbook-markdown/test/summary.js +++ b/packages/gitbook-markdown/test/summary.js @@ -51,6 +51,11 @@ describe('Summary parsing', function () { assert.equal(l.chapters.length, 5); }); + it('should allow ignore empty entries', function() { + var l = lex('SUMMARY_EMPTY.md'); + assert.equal(l.chapters.length, 1); + }); + it('should correctly convert it to text', function() { var text = summary.toText(LEXED); assertObjectsEqual(summary(text), LEXED); |