0.2.0 • Published 7 years ago
metalsmith-structure v0.2.0
metalsmith-structure
A Metalsmith plugin that transforms markdown-generated HTML to be hierarchically structured and extracts heading hierarchy for navigation.
Useful for generating a table of contents for your pages, or making your sections collapsible.
Installation
$ npm install --save metalsmith-structureExample
var Metalsmith = require('metalsmith'),
markdown = require('metalsmith-markdown'),
structure = require('metalsmith-structure');
Metalsmith(__dirname)
.use(markdown())
.use(structure({
// All of these options are optional
headings: ['h1', 'h2', 'h3'],
divId: '%s-content',
divAttrs: {
class: 'generated-div',
'data-collapse': 'collapse'
}
}))
.build();Options
metalsmith-structure takes a single options object which supports the following options:
headings- an array of heading tags to use, you can use this to ignore certain heading levels,
by default this is set to['h1', 'h2', 'h3'], meaning that lower-level headings, such ash4andh5will be ignored.
The order of these tags matter as it is used to determine hierarchical level.divId- Format for generated divids, default is%s-content, soheading-1will produceheading-1-content,%swill be replaced by the heading id.divAttrs- Optional object containing additional HTML attributes for generateddivs, for example{ class: 'collapse' }
Output
metalsmith-structure transforms the generated HTML so it contains divs that group the content based on headings.
For example, starting from the following markdown:
# Heading 1
## Heading 1.1
Content 1.1
# Heading 2
Content 2The end result will be:
<h1>Heading 1</h1>
<div id="heading-1-content">
<h2 id="heading-1-1">Heading 1.1</h2>
<div id="heading-1-1-content">
Content 1.1
</div>
</div>
<h1 id="heading-2">Heading 2</h1>
<div id="heading-2-content">
Content 2
</div>metalsmith-structure also adds a headings array to the metadata, which can be used to render navigation.
For the above document, the headings array will look like this:
[
{
id: 'heading-1', //original id of the heading generated by markdown, this is moved to the generated div
priority: 0, //lower number means higher priority
tag: 'h1',
text: 'Heading 1',
children: [
{
id: 'heading-1-1',
priority: 1,
tag: 'h2',
text: 'Heading 1.1'
}
]
},
{
id: 'heading-2',
priority: 0,
tag: 'h1',
text: 'Heading 2'
}
]License
This project uses the MIT License, see LICENSE for more information.