@atlaskit/editor-wikimarkup-transformer
Version:
Wiki markup transformer for JIRA and Confluence
65 lines • 1.85 kB
JavaScript
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');
};