import Node from '../api/html/Node';
const paddEmptyNode = function (settings, args, blockElements, node) {
const brPreferred = settings.padd_empty_with_br || args.insert;
if (brPreferred && blockElements[node.name]) {
node.empty().append(new Node('br', 1)).shortEnded = true;
} else {
node.empty().append(new Node('#text', 3)).value = '\u00a0';
}
};
const isPaddedWithNbsp = function (node) {
return hasOnlyChild(node, '#text') && node.firstChild.value === '\u00a0';
};
const hasOnlyChild = function (node, name) {
return node && node.firstChild && node.firstChild === node.lastChild && node.firstChild.name === name;
};
const isPadded = function (schema, node) {
const rule = schema.getElementRule(node.name);
return rule && rule.paddEmpty;
};
const isEmpty = function (schema, nonEmptyElements, whitespaceElements, node) {
return node.isEmpty(nonEmptyElements, whitespaceElements, function (node) {
return isPadded(schema, node);
});
};
const isLineBreakNode = (node, blockElements) => node && (blockElements[node.name] || node.name === 'br');
export {
paddEmptyNode,
isPaddedWithNbsp,
hasOnlyChild,
isEmpty,
isLineBreakNode
};