This commit is contained in:
98
node_modules/hast-util-to-mdast/lib/handlers/dl.js
generated
vendored
Normal file
98
node_modules/hast-util-to-mdast/lib/handlers/dl.js
generated
vendored
Normal file
@@ -0,0 +1,98 @@
|
||||
'use strict'
|
||||
|
||||
module.exports = dl
|
||||
|
||||
var convert = require('hast-util-is-element/convert')
|
||||
var spread = require('../util/list-items-spread')
|
||||
var wrapListItems = require('../util/wrap-list-items')
|
||||
|
||||
var div = convert('div')
|
||||
var dt = convert('dt')
|
||||
var dd = convert('dd')
|
||||
|
||||
function dl(h, node) {
|
||||
var children = node.children
|
||||
var index = -1
|
||||
var clean = []
|
||||
var groups = []
|
||||
var group = {titles: [], definitions: []}
|
||||
var content
|
||||
var child
|
||||
|
||||
// Unwrap `<div>`s
|
||||
while (++index < children.length) {
|
||||
child = children[index]
|
||||
clean = clean.concat(div(child) ? child.children : child)
|
||||
}
|
||||
|
||||
index = -1
|
||||
|
||||
// Group titles and definitions.
|
||||
while (++index < clean.length) {
|
||||
child = clean[index]
|
||||
|
||||
if (dt(child)) {
|
||||
if (dd(clean[index - 1])) {
|
||||
groups.push(group)
|
||||
group = {titles: [], definitions: []}
|
||||
}
|
||||
|
||||
group.titles.push(child)
|
||||
} else {
|
||||
group.definitions.push(child)
|
||||
}
|
||||
}
|
||||
|
||||
groups.push(group)
|
||||
|
||||
// Create items.
|
||||
index = -1
|
||||
content = []
|
||||
|
||||
while (++index < groups.length) {
|
||||
group = handle(h, groups[index].titles).concat(
|
||||
handle(h, groups[index].definitions)
|
||||
)
|
||||
|
||||
if (group.length) {
|
||||
content.push({
|
||||
type: 'listItem',
|
||||
spread: group.length > 1,
|
||||
checked: null,
|
||||
children: group
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// Create a list if there are items.
|
||||
if (content.length) {
|
||||
return h(
|
||||
node,
|
||||
'list',
|
||||
{ordered: false, start: null, spread: spread(content)},
|
||||
content
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
function handle(h, children) {
|
||||
var nodes = wrapListItems(h, {children: children})
|
||||
|
||||
if (!nodes.length) {
|
||||
return nodes
|
||||
}
|
||||
|
||||
if (nodes.length === 1) {
|
||||
return nodes[0].children
|
||||
}
|
||||
|
||||
return [
|
||||
{
|
||||
type: 'list',
|
||||
ordered: false,
|
||||
start: null,
|
||||
spread: spread(nodes),
|
||||
children: nodes
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user