Files
sgauthier 6e64e138e2
All checks were successful
Publish To Prod / deploy_and_publish (push) Successful in 35s
planning
2024-10-14 09:15:30 +02:00

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
}