UNPKG

ngx-editor

Version:

The Rich Text Editor for Angular, Built on ProseMirror

37 lines 5 kB
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