| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- /**
- * @import {Element, ElementContent, Properties} from 'hast'
- * @import {Parents, TableRow} from 'mdast'
- * @import {State} from '../state.js'
- */
- /**
- * Turn an mdast `tableRow` node into hast.
- *
- * @param {State} state
- * Info passed around.
- * @param {TableRow} node
- * mdast node.
- * @param {Parents | undefined} parent
- * Parent of `node`.
- * @returns {Element}
- * hast node.
- */
- export function tableRow(state, node, parent) {
- const siblings = parent ? parent.children : undefined
- // Generate a body row when without parent.
- const rowIndex = siblings ? siblings.indexOf(node) : 1
- const tagName = rowIndex === 0 ? 'th' : 'td'
- // To do: option to use `style`?
- const align = parent && parent.type === 'table' ? parent.align : undefined
- const length = align ? align.length : node.children.length
- let cellIndex = -1
- /** @type {Array<ElementContent>} */
- const cells = []
- while (++cellIndex < length) {
- // Note: can also be undefined.
- const cell = node.children[cellIndex]
- /** @type {Properties} */
- const properties = {}
- const alignValue = align ? align[cellIndex] : undefined
- if (alignValue) {
- properties.align = alignValue
- }
- /** @type {Element} */
- let result = {type: 'element', tagName, properties, children: []}
- if (cell) {
- result.children = state.all(cell)
- state.patch(cell, result)
- result = state.applyData(cell, result)
- }
- cells.push(result)
- }
- /** @type {Element} */
- const result = {
- type: 'element',
- tagName: 'tr',
- properties: {},
- children: state.wrap(cells, true)
- }
- state.patch(node, result)
- return state.applyData(node, result)
- }
|