All checks were successful
Publish To Prod / deploy_and_publish (push) Successful in 35s
90 lines
1.8 KiB
JavaScript
90 lines
1.8 KiB
JavaScript
'use strict'
|
|
|
|
module.exports = listItem
|
|
|
|
var u = require('unist-builder')
|
|
var wrap = require('../wrap')
|
|
var all = require('../all')
|
|
|
|
function listItem(h, node, parent) {
|
|
var children = node.children
|
|
var head = children[0]
|
|
var raw = all(h, node)
|
|
var loose = parent ? listLoose(parent) : listItemLoose(node)
|
|
var props = {}
|
|
var result
|
|
var container
|
|
var index
|
|
var length
|
|
var child
|
|
|
|
/* Tight lists should not render 'paragraph' nodes as 'p' tags */
|
|
if (loose) {
|
|
result = raw
|
|
} else {
|
|
result = []
|
|
length = raw.length
|
|
index = -1
|
|
|
|
while (++index < length) {
|
|
child = raw[index]
|
|
|
|
if (child.tagName === 'p') {
|
|
result = result.concat(child.children)
|
|
} else {
|
|
result.push(child)
|
|
}
|
|
}
|
|
}
|
|
|
|
if (typeof node.checked === 'boolean') {
|
|
if (loose && (!head || head.type !== 'paragraph')) {
|
|
result.unshift(h(null, 'p', []))
|
|
}
|
|
|
|
container = loose ? result[0].children : result
|
|
|
|
if (container.length !== 0) {
|
|
container.unshift(u('text', ' '))
|
|
}
|
|
|
|
container.unshift(
|
|
h(null, 'input', {
|
|
type: 'checkbox',
|
|
checked: node.checked,
|
|
disabled: true
|
|
})
|
|
)
|
|
|
|
// According to github-markdown-css, this class hides bullet.
|
|
props.className = ['task-list-item']
|
|
}
|
|
|
|
if (loose && result.length !== 0) {
|
|
result = wrap(result, true)
|
|
}
|
|
|
|
return h(node, 'li', props, result)
|
|
}
|
|
|
|
function listLoose(node) {
|
|
var loose = node.spread
|
|
var children = node.children
|
|
var length = children.length
|
|
var index = -1
|
|
|
|
while (!loose && ++index < length) {
|
|
loose = listItemLoose(children[index])
|
|
}
|
|
|
|
return loose
|
|
}
|
|
|
|
function listItemLoose(node) {
|
|
var spread = node.spread
|
|
|
|
return spread === undefined || spread === null
|
|
? node.children.length > 1
|
|
: spread
|
|
}
|