UNPKG

ngx-editor

Version:

Rich Text Editor for angular using ProseMirror

36 lines 4.83 kB
import { DOMSerializer, DOMParser } from 'prosemirror-model'; import defaultSchema from './schema'; 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 (typeof value !== 'string') { return schema.nodeFromJSON(value); } const docJson = toDoc(value, schema); return schema.nodeFromJSON(docJson); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Vycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3Ivc3JjL2xpYi9wYXJzZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQVUsU0FBUyxFQUEyQixNQUFNLG1CQUFtQixDQUFDO0FBRTlGLE9BQU8sYUFBYSxNQUFNLFVBQVUsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7SUFDdEIsSUFBSSxFQUFFLEtBQUs7SUFDWCxPQUFPLEVBQUU7UUFDUDtZQUNFLElBQUksRUFBRSxXQUFXO1NBQ2xCO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQXlCLEVBQUUsV0FBb0IsRUFBVSxFQUFFO0lBQ2hGLE1BQU0sTUFBTSxHQUFHLFdBQVcsSUFBSSxhQUFhLENBQUM7SUFFNUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVyRixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQVksRUFBRSxXQUFvQixFQUF1QixFQUFFO0lBQy9FLE1BQU0sTUFBTSxHQUFHLFdBQVcsSUFBSSxhQUFhLENBQUM7SUFFNUMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxFQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUVwQixPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQTBDLEVBQUUsTUFBYyxFQUFtQixFQUFFO0lBQzFHLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdEM7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbkM7SUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET01TZXJpYWxpemVyLCBTY2hlbWEsIERPTVBhcnNlciwgTm9kZSBhcyBQcm9zZU1pcnJvck5vZGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5cbmltcG9ydCBkZWZhdWx0U2NoZW1hIGZyb20gJy4vc2NoZW1hJztcblxuZXhwb3J0IGNvbnN0IGVtcHR5RG9jID0ge1xuICB0eXBlOiAnZG9jJyxcbiAgY29udGVudDogW1xuICAgIHtcbiAgICAgIHR5cGU6ICdwYXJhZ3JhcGgnLFxuICAgIH0sXG4gIF0sXG59O1xuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRG9jdW1lbnRGcmFnbWVudFxuZXhwb3J0IGNvbnN0IHRvSFRNTCA9IChqc29uOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBpbnB1dFNjaGVtYT86IFNjaGVtYSk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHNjaGVtYSA9IGlucHV0U2NoZW1hID8/IGRlZmF1bHRTY2hlbWE7XG5cbiAgY29uc3QgY29udGVudE5vZGUgPSBzY2hlbWEubm9kZUZyb21KU09OKGpzb24pO1xuICBjb25zdCBodG1sID0gRE9NU2VyaWFsaXplci5mcm9tU2NoZW1hKHNjaGVtYSkuc2VyaWFsaXplRnJhZ21lbnQoY29udGVudE5vZGUuY29udGVudCk7XG5cbiAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGRpdi5hcHBlbmRDaGlsZChodG1sKTtcbiAgcmV0dXJuIGRpdi5pbm5lckhUTUw7XG59O1xuXG5leHBvcnQgY29uc3QgdG9Eb2MgPSAoaHRtbDogc3RyaW5nLCBpbnB1dFNjaGVtYT86IFNjaGVtYSk6IFJlY29yZDxzdHJpbmcsIGFueT4gPT4ge1xuICBjb25zdCBzY2hlbWEgPSBpbnB1dFNjaGVtYSA/PyBkZWZhdWx0U2NoZW1hO1xuXG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIGVsLmlubmVySFRNTCA9IGh0bWw7XG5cbiAgcmV0dXJuIERPTVBhcnNlci5mcm9tU2NoZW1hKHNjaGVtYSkucGFyc2UoZWwpLnRvSlNPTigpO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlQ29udGVudCA9ICh2YWx1ZTogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgYW55PiB8IG51bGwsIHNjaGVtYTogU2NoZW1hKTogUHJvc2VNaXJyb3JOb2RlID0+IHtcbiAgaWYgKCF2YWx1ZSkge1xuICAgIHJldHVybiBzY2hlbWEubm9kZUZyb21KU09OKGVtcHR5RG9jKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHNjaGVtYS5ub2RlRnJvbUpTT04odmFsdWUpO1xuICB9XG5cbiAgY29uc3QgZG9jSnNvbiA9IHRvRG9jKHZhbHVlLCBzY2hlbWEpO1xuICByZXR1cm4gc2NoZW1hLm5vZGVGcm9tSlNPTihkb2NKc29uKTtcbn07XG4iXX0=