/** * @typedef {import('hast').Element} Element * @typedef {import('hast').Properties} Properties * @typedef {import('mdast').List} List * @typedef {import('../state.js').State} State */ // Make VS Code show references to the above types. '' /** * Turn an mdast `list` node into hast. * * @param {State} state * Info passed around. * @param {List} node * mdast node. * @returns {Element} * hast node. */ export function list(state, node) { /** @type {Properties} */ const properties = {} const results = state.all(node) let index = -1 if (typeof node.start === 'number' && node.start !== 1) { properties.start = node.start } // Like GitHub, add a class for custom styling. while (++index < results.length) { const child = results[index] if ( child.type === 'element' && child.tagName === 'li' && child.properties && Array.isArray(child.properties.className) && child.properties.className.includes('task-list-item') ) { properties.className = ['contains-task-list'] break } } /** @type {Element} */ const result = { type: 'element', tagName: node.ordered ? 'ol' : 'ul', properties, children: state.wrap(results, true) } state.patch(node, result) return state.applyData(node, result) }