UNPKG

@wordpress/blocks

Version:
43 lines (42 loc) 1.53 kB
// packages/blocks/src/api/raw-handling/figure-content-reducer.js import { isTextContent } from "@wordpress/dom"; function isFigureContent(node, schema) { const tag = node.nodeName.toLowerCase(); if (tag === "figcaption" || isTextContent(node)) { return false; } return tag in (schema?.figure?.children ?? {}); } function canHaveAnchor(node, schema) { const tag = node.nodeName.toLowerCase(); return tag in (schema?.figure?.children?.a?.children ?? {}); } function wrapFigureContent(element, beforeElement = element) { const figure = element.ownerDocument.createElement("figure"); beforeElement.parentNode.insertBefore(figure, beforeElement); figure.appendChild(element); } function figureContentReducer(node, doc, schema) { if (!isFigureContent(node, schema)) { return; } let nodeToInsert = node; const parentNode = node.parentNode; if (canHaveAnchor(node, schema) && parentNode.nodeName === "A" && parentNode.childNodes.length === 1) { nodeToInsert = node.parentNode; } const wrapper = nodeToInsert.closest("p,div"); if (wrapper) { if (!node.classList) { wrapFigureContent(nodeToInsert, wrapper); } else if (node.classList.contains("alignright") || node.classList.contains("alignleft") || node.classList.contains("aligncenter") || !wrapper.textContent.trim()) { wrapFigureContent(nodeToInsert, wrapper); } } else { wrapFigureContent(nodeToInsert); } } export { figureContentReducer as default }; //# sourceMappingURL=figure-content-reducer.js.map