ngx-editor
Version:
Rich Text Editor for angular using ProseMirror
36 lines • 4.83 kB
JavaScript
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2Vycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3Ivc3JjL2xpYi9wYXJzZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQVUsU0FBUyxFQUEyQixNQUFNLG1CQUFtQixDQUFDO0FBRTlGLE9BQU8sYUFBYSxNQUFNLFVBQVUsQ0FBQztBQUVyQyxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUc7SUFDdEIsSUFBSSxFQUFFLEtBQUs7SUFDWCxPQUFPLEVBQUU7UUFDUDtZQUNFLElBQUksRUFBRSxXQUFXO1NBQ2xCO0tBQ0Y7Q0FDRixDQUFDO0FBRUYsb0VBQW9FO0FBQ3BFLE1BQU0sQ0FBQyxNQUFNLE1BQU0sR0FBRyxDQUFDLElBQXlCLEVBQUUsV0FBb0IsRUFBVSxFQUFFO0lBQ2hGLE1BQU0sTUFBTSxHQUFHLFdBQVcsSUFBSSxhQUFhLENBQUM7SUFFNUMsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxNQUFNLElBQUksR0FBRyxhQUFhLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUVyRixNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEIsT0FBTyxHQUFHLENBQUMsU0FBUyxDQUFDO0FBQ3ZCLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxDQUFDLElBQVksRUFBRSxXQUFvQixFQUF1QixFQUFFO0lBQy9FLE1BQU0sTUFBTSxHQUFHLFdBQVcsSUFBSSxhQUFhLENBQUM7SUFFNUMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxFQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztJQUVwQixPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO0FBQ3pELENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxDQUFDLEtBQTBDLEVBQUUsTUFBYyxFQUFtQixFQUFFO0lBQzFHLElBQUksQ0FBQyxLQUFLLEVBQUU7UUFDVixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7S0FDdEM7SUFFRCxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtRQUM3QixPQUFPLE1BQU0sQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7S0FDbkM7SUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3JDLE9BQU8sTUFBTSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET01TZXJpYWxpemVyLCBTY2hlbWEsIERPTVBhcnNlciwgTm9kZSBhcyBQcm9zZU1pcnJvck5vZGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5cbmltcG9ydCBkZWZhdWx0U2NoZW1hIGZyb20gJy4vc2NoZW1hJztcblxuZXhwb3J0IGNvbnN0IGVtcHR5RG9jID0ge1xuICB0eXBlOiAnZG9jJyxcbiAgY29udGVudDogW1xuICAgIHtcbiAgICAgIHR5cGU6ICdwYXJhZ3JhcGgnLFxuICAgIH1cbiAgXSxcbn07XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9Eb2N1bWVudEZyYWdtZW50XG5leHBvcnQgY29uc3QgdG9IVE1MID0gKGpzb246IFJlY29yZDxzdHJpbmcsIGFueT4sIGlucHV0U2NoZW1hPzogU2NoZW1hKTogc3RyaW5nID0+IHtcbiAgY29uc3Qgc2NoZW1hID0gaW5wdXRTY2hlbWEgPz8gZGVmYXVsdFNjaGVtYTtcblxuICBjb25zdCBjb250ZW50Tm9kZSA9IHNjaGVtYS5ub2RlRnJvbUpTT04oanNvbik7XG4gIGNvbnN0IGh0bWwgPSBET01TZXJpYWxpemVyLmZyb21TY2hlbWEoc2NoZW1hKS5zZXJpYWxpemVGcmFnbWVudChjb250ZW50Tm9kZS5jb250ZW50KTtcblxuICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZGl2LmFwcGVuZENoaWxkKGh0bWwpO1xuICByZXR1cm4gZGl2LmlubmVySFRNTDtcbn07XG5cbmV4cG9ydCBjb25zdCB0b0RvYyA9IChodG1sOiBzdHJpbmcsIGlucHV0U2NoZW1hPzogU2NoZW1hKTogUmVjb3JkPHN0cmluZywgYW55PiA9PiB7XG4gIGNvbnN0IHNjaGVtYSA9IGlucHV0U2NoZW1hID8/IGRlZmF1bHRTY2hlbWE7XG5cbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgZWwuaW5uZXJIVE1MID0gaHRtbDtcblxuICByZXR1cm4gRE9NUGFyc2VyLmZyb21TY2hlbWEoc2NoZW1hKS5wYXJzZShlbCkudG9KU09OKCk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VDb250ZW50ID0gKHZhbHVlOiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbCwgc2NoZW1hOiBTY2hlbWEpOiBQcm9zZU1pcnJvck5vZGUgPT4ge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIHNjaGVtYS5ub2RlRnJvbUpTT04oZW1wdHlEb2MpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc2NoZW1hLm5vZGVGcm9tSlNPTih2YWx1ZSk7XG4gIH1cblxuICBjb25zdCBkb2NKc29uID0gdG9Eb2ModmFsdWUsIHNjaGVtYSk7XG4gIHJldHVybiBzY2hlbWEubm9kZUZyb21KU09OKGRvY0pzb24pO1xufTtcbiJdfQ==