UNPKG

@wordpress/blocks

Version:
60 lines (55 loc) 1.74 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = listReducer; var _dom = require("@wordpress/dom"); /** * WordPress dependencies */ function isList(node) { return node.nodeName === 'OL' || node.nodeName === 'UL'; } function shallowTextContent(element) { return Array.from(element.childNodes).map(({ nodeValue = '' }) => nodeValue).join(''); } function listReducer(node) { if (!isList(node)) { return; } const list = node; const prevElement = node.previousElementSibling; // Merge with previous list if: // * There is a previous list of the same type. // * There is only one list item. if (prevElement && prevElement.nodeName === node.nodeName && list.children.length === 1) { // Move all child nodes, including any text nodes, if any. while (list.firstChild) { prevElement.appendChild(list.firstChild); } list.parentNode.removeChild(list); } const parentElement = node.parentNode; // Nested list with empty parent item. if (parentElement && parentElement.nodeName === 'LI' && parentElement.children.length === 1 && !/\S/.test(shallowTextContent(parentElement))) { const parentListItem = parentElement; const prevListItem = parentListItem.previousElementSibling; const parentList = parentListItem.parentNode; if (prevListItem) { prevListItem.appendChild(list); parentList.removeChild(parentListItem); } } // Invalid: OL/UL > OL/UL. if (parentElement && isList(parentElement)) { const prevListItem = node.previousElementSibling; if (prevListItem) { prevListItem.appendChild(node); } else { (0, _dom.unwrap)(node); } } } //# sourceMappingURL=list-reducer.js.map