UNPKG

@atlaskit/editor-jira-transformer

Version:
96 lines (95 loc) 2.65 kB
function getNodeName(node) { return node && node.nodeName.toUpperCase(); } function isMedia(node) { if (!node) { return false; } if (getNodeName(node) === 'SPAN' && node instanceof HTMLElement) { return !!node.querySelector('a > jira-attachment-thumbnail > img[data-attachment-type="thumbnail"], ' + 'a[data-attachment-type="file"]'); } return false; } function repairParagraph(p) { var paragraphs = []; var buffer = []; var mediaGroupFound = false; var skipBuffer = false; var processMedia = function processMedia() { if (buffer.length) { var head = buffer[0]; if (getNodeName(head) === 'BR') { buffer.shift(); } paragraphs.push(buffer); buffer = []; } }; for (var i = 0, length = p.childNodes.length; i < length; i++) { var node = p.childNodes[i]; skipBuffer = false; // [..., M, BR, ...] if (getNodeName(node) === 'BR') { // [mmm, M, BR, ...] if (mediaGroupFound) { processMedia(); mediaGroupFound = false; skipBuffer = true; } // [..., BR, M, ...] if (isMedia(node.nextSibling)) { mediaGroupFound = true; if (buffer.length) { paragraphs.push(buffer); buffer = []; } } } else if (isMedia(node)) { // [M, ...] if (node.previousSibling === null) { mediaGroupFound = true; } } else { if (mediaGroupFound) { // Skip white space characters inside media if (getNodeName(node) === '#TEXT' && (node.textContent || '').trim() === '') { continue; } buffer = (paragraphs.pop() || []).concat(buffer); mediaGroupFound = false; } } if (!skipBuffer) { buffer.push(node); } } if (mediaGroupFound) { processMedia(); } else { paragraphs.push(buffer); } if (paragraphs.length > 1) { var fragment = document.createDocumentFragment(); paragraphs.forEach(function (childP) { var innerP = document.createElement('p'); childP.forEach(function (child) { return innerP.appendChild(child); }); fragment.appendChild(innerP); }); // Replace old P // Ignored via go/ees005 // eslint-disable-next-line @typescript-eslint/no-non-null-assertion var parent = p.parentNode; parent.insertBefore(fragment, p.nextSibling); // IE11 doesn't support remove parent.removeChild(p); } } export default function (doc) { var paragraphs = doc.querySelectorAll('p'); for (var i = 0, length = paragraphs.length; i < length; i++) { repairParagraph(paragraphs[i]); } return doc; }