UNPKG

@atlaskit/editor-wikimarkup-transformer

Version:

Wiki markup transformer for JIRA and Confluence

65 lines 1.85 kB
import { encode } from '..'; import { paragraph } from './paragraph'; import { unknown } from './unknown'; import { codeBlock } from './code-block'; import { mediaGroup } from './media-group'; import { mediaInline } from './media-inline'; export const listItem = (node, prefix, context) => { const result = []; let contentBuffer = []; node.forEach(n => { switch (n.type.name) { case 'paragraph': { contentBuffer.push(paragraph(n, { context })); break; } case 'bulletList': case 'orderedList': case 'taskList': { if (contentBuffer.length) { result.push(`${prefix} ${contentBuffer.join('\n')}`); contentBuffer = []; } // eslint-disable-next-line @atlassian/perf-linting/no-expensive-split-replace -- Ignored via go/ees017 (to be fixed) const nestedList = encode(n, context).split('\n').map(line => { if (['#', '*'].indexOf(line.substr(0, 1)) !== -1) { return `${prefix}${line}`; } return line; }).join('\n'); result.push(nestedList); break; } case 'codeBlock': { contentBuffer.push(codeBlock(n)); break; } case 'mediaInline': { contentBuffer.push(mediaInline(n, { context })); break; } case 'mediaSingle': { // mediaSingle and mediaGroup are holding the same conversion logic contentBuffer.push(mediaGroup(n, { context })); break; } default: contentBuffer.push(unknown(n)); } }); if (contentBuffer.length) { result.push(`${prefix} ${contentBuffer.join('\n')}`); } return result.join('\n'); };