@tiptap/core
Version:
headless rich text editor
28 lines (21 loc) • 855 B
text/typescript
const removeWhitespaces = (node: HTMLElement) => {
const children = node.childNodes
for (let i = children.length - 1; i >= 0; i -= 1) {
const child = children[i]
if (child.nodeType === 3 && child.nodeValue && /^(\n\s\s|\n)$/.test(child.nodeValue)) {
node.removeChild(child)
} else if (child.nodeType === 1) {
removeWhitespaces(child as HTMLElement)
}
}
return node
}
export function elementFromString(value: string): HTMLElement {
if (typeof window === 'undefined') {
throw new Error('[tiptap error]: there is no window object available, so this function cannot be used')
}
// add a wrapper to preserve leading and trailing whitespace
const wrappedValue = `<body>${value}</body>`
const html = new window.DOMParser().parseFromString(wrappedValue, 'text/html').body
return removeWhitespaces(html)
}