ngx-editor
Version:
The Rich Text Editor for Angular, Built on ProseMirror
37 lines • 5 kB
JavaScript
import { DOMSerializer, DOMParser } from 'prosemirror-model';
import defaultSchema from './schema';
import { isHtml } from './trustedTypesUtil';
export const emptyDoc = {
type: 'doc',
content: [
{
type: 'paragraph',
},
],
};
// https://developer.mozilla.org/en-US/docs/Web/API/DocumentFragment
export const toHTML = (json, inputSchema) => {
const schema = inputSchema ?? defaultSchema;
const contentNode = schema.nodeFromJSON(json);
const html = DOMSerializer.fromSchema(schema).serializeFragment(contentNode.content);
const div = document.createElement('div');
div.appendChild(html);
return div.innerHTML;
};
export const toDoc = (html, inputSchema) => {
const schema = inputSchema ?? defaultSchema;
const el = document.createElement('div');
el.innerHTML = html;
return DOMParser.fromSchema(schema).parse(el).toJSON();
};
export const parseContent = (value, schema) => {
if (!value) {
return schema.nodeFromJSON(emptyDoc);
}
if (!isHtml(value)) {
return schema.nodeFromJSON(value);
}
const docJson = toDoc(value, schema);
return schema.nodeFromJSON(docJson);
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Vycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3Ivc3JjL2xpYi9wYXJzZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQVUsU0FBUyxFQUEyQixNQUFNLG1CQUFtQixDQUFDO0FBRTlGLE9BQU8sYUFBYSxNQUFNLFVBQVUsQ0FBQztBQUNyQyxPQUFPLEVBQVEsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbEQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHO0lBQ3RCLElBQUksRUFBRSxLQUFLO0lBQ1gsT0FBTyxFQUFFO1FBQ1A7WUFDRSxJQUFJLEVBQUUsV0FBVztTQUNsQjtLQUNGO0NBQ0YsQ0FBQztBQUVGLG9FQUFvRTtBQUNwRSxNQUFNLENBQUMsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUF5QixFQUFFLFdBQW9CLEVBQVUsRUFBRTtJQUNoRixNQUFNLE1BQU0sR0FBRyxXQUFXLElBQUksYUFBYSxDQUFDO0lBRTVDLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsTUFBTSxJQUFJLEdBQUcsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFckYsTUFBTSxHQUFHLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQyxHQUFHLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3RCLE9BQU8sR0FBRyxDQUFDLFNBQVMsQ0FBQztBQUN2QixDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxJQUFVLEVBQUUsV0FBb0IsRUFBdUIsRUFBRTtJQUM3RSxNQUFNLE1BQU0sR0FBRyxXQUFXLElBQUksYUFBYSxDQUFDO0lBRTVDLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsRUFBRSxDQUFDLFNBQVMsR0FBRyxJQUFXLENBQUM7SUFFM0IsT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztBQUN6RCxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxLQUF3QyxFQUFFLE1BQWMsRUFBbUIsRUFBRTtJQUN4RyxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3RDO0lBRUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNsQixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbkM7SUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBYSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzdDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET01TZXJpYWxpemVyLCBTY2hlbWEsIERPTVBhcnNlciwgTm9kZSBhcyBQcm9zZU1pcnJvck5vZGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5cbmltcG9ydCBkZWZhdWx0U2NoZW1hIGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB7IEhUTUwsIGlzSHRtbCB9IGZyb20gJy4vdHJ1c3RlZFR5cGVzVXRpbCc7XG5cbmV4cG9ydCBjb25zdCBlbXB0eURvYyA9IHtcbiAgdHlwZTogJ2RvYycsXG4gIGNvbnRlbnQ6IFtcbiAgICB7XG4gICAgICB0eXBlOiAncGFyYWdyYXBoJyxcbiAgICB9LFxuICBdLFxufTtcblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0RvY3VtZW50RnJhZ21lbnRcbmV4cG9ydCBjb25zdCB0b0hUTUwgPSAoanNvbjogUmVjb3JkPHN0cmluZywgYW55PiwgaW5wdXRTY2hlbWE/OiBTY2hlbWEpOiBzdHJpbmcgPT4ge1xuICBjb25zdCBzY2hlbWEgPSBpbnB1dFNjaGVtYSA/PyBkZWZhdWx0U2NoZW1hO1xuXG4gIGNvbnN0IGNvbnRlbnROb2RlID0gc2NoZW1hLm5vZGVGcm9tSlNPTihqc29uKTtcbiAgY29uc3QgaHRtbCA9IERPTVNlcmlhbGl6ZXIuZnJvbVNjaGVtYShzY2hlbWEpLnNlcmlhbGl6ZUZyYWdtZW50KGNvbnRlbnROb2RlLmNvbnRlbnQpO1xuXG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBkaXYuYXBwZW5kQ2hpbGQoaHRtbCk7XG4gIHJldHVybiBkaXYuaW5uZXJIVE1MO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvRG9jID0gKGh0bWw6IEhUTUwsIGlucHV0U2NoZW1hPzogU2NoZW1hKTogUmVjb3JkPHN0cmluZywgYW55PiA9PiB7XG4gIGNvbnN0IHNjaGVtYSA9IGlucHV0U2NoZW1hID8/IGRlZmF1bHRTY2hlbWE7XG5cbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZWwuaW5uZXJIVE1MID0gaHRtbCBhcyBhbnk7XG5cbiAgcmV0dXJuIERPTVBhcnNlci5mcm9tU2NoZW1hKHNjaGVtYSkucGFyc2UoZWwpLnRvSlNPTigpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudCA9ICh2YWx1ZTogSFRNTCB8IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBzY2hlbWE6IFNjaGVtYSk6IFByb3NlTWlycm9yTm9kZSA9PiB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gc2NoZW1hLm5vZGVGcm9tSlNPTihlbXB0eURvYyk7XG4gIH1cblxuICBpZiAoIWlzSHRtbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc2NoZW1hLm5vZGVGcm9tSlNPTih2YWx1ZSk7XG4gIH1cblxuICBjb25zdCBkb2NKc29uID0gdG9Eb2ModmFsdWUgYXMgSFRNTCwgc2NoZW1hKTtcbiAgcmV0dXJuIHNjaGVtYS5ub2RlRnJvbUpTT04oZG9jSnNvbik7XG59O1xuIl19