@wordpress/blocks
Version:
Block API for WordPress.
37 lines (36 loc) • 1.15 kB
JavaScript
// packages/blocks/src/api/raw-handling/is-inline-content.js
import { isTextContent } from "@wordpress/dom";
function isInline(node, contextTag) {
if (isTextContent(node)) {
return true;
}
if (!contextTag) {
return false;
}
const tag = node.nodeName.toLowerCase();
const inlineAllowedTagGroups = [
["ul", "li", "ol"],
["h1", "h2", "h3", "h4", "h5", "h6"]
];
return inlineAllowedTagGroups.some(
(tagGroup) => [tag, contextTag].filter((t) => !tagGroup.includes(t)).length === 0
);
}
function deepCheck(nodes, contextTag) {
return nodes.every(
(node) => isInline(node, contextTag) && deepCheck(Array.from(node.children), contextTag)
);
}
function isDoubleBR(node) {
return node.nodeName === "BR" && node.previousSibling && node.previousSibling.nodeName === "BR";
}
function isInlineContent(HTML, contextTag) {
const doc = document.implementation.createHTMLDocument("");
doc.body.innerHTML = HTML;
const nodes = Array.from(doc.body.children);
return !nodes.some(isDoubleBR) && deepCheck(nodes, contextTag);
}
export {
isInlineContent as default
};
//# sourceMappingURL=is-inline-content.js.map