UNPKG

@zodiac-ui/editor

Version:

A rich text editor for Angular based on `@atlaskit/editor-core`.

82 lines 12.1 kB
import { Schema } from "prosemirror-model"; import { docNode } from "../../plugins/doc/doc.node"; import { paragraphNode } from "../../plugins/paragraph/paragraph.node"; import { alignment } from "../../plugins/alignment/alignment.mark"; import { sanitizeNodes } from "./sanitize"; import { textNode } from "../../plugins/text/text.node"; const nodesInOrder = [ { name: 'doc', spec: docNode }, { name: 'paragraph', spec: paragraphNode }, { name: 'text', spec: textNode }, ]; const marksInOrder = [ { name: 'alignment', spec: alignment }, ]; const markGroupDeclarations = [ // groupDeclaration(COLOR), // groupDeclaration(FONT_STYLE), // groupDeclaration(SEARCH_QUERY), // groupDeclaration(LINK), ]; const ɵ0 = groupMark => groupMark.name; const markGroupDeclarationsNames = markGroupDeclarations.map0); function addItems(builtInItems, config, customSpecs = {}) { if (!config) { return {}; } /** * Add built-in Node / Mark specs */ const items = builtInItems.reduce((items, { name, spec }) => { if (config.indexOf(name) !== -1) { items[name] = customSpecs[name] || spec; } return items; }, {}); /** * Add Custom Node / Mark specs */ return Object.keys(customSpecs).reduce((items, name) => { if (items[name]) { return items; } items[name] = customSpecs[name]; return items; }, items); } export function sortByRank(a, b) { return a.rank - b.rank; } function sortByOrder(item) { // return function(a: { name: string }, b: { name: string }): number { // return Ranks[item].indexOf(a.name) - Ranks[item].indexOf(b.name); // }; return () => 0; } export function fixExcludes(marks) { const markKeys = Object.keys(marks); const markGroups = new Set(markKeys.map(mark => marks[mark].group)); markKeys.map(markKey => { const mark = marks[markKey]; if (mark.excludes) { mark.excludes = mark.excludes .split(' ') .filter(group => markGroups.has(group)) .join(' '); } }); return marks; } export function createSchema(editorConfig) { const marks = fixExcludes(editorConfig.marks.sort(sortByOrder('marks')).reduce((acc, mark) => { acc[mark.name] = mark.mark; return acc; }, {})); const nodes = sanitizeNodes(editorConfig.nodes.sort(sortByOrder('nodes')).reduce((acc, node) => { acc[node.name] = node.node; return acc; }, {}), marks); return new Schema({ nodes, marks }); } export { ɵ0 }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXNjaGVtYS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B6b2RpYWMtdWkvZWRpdG9yLyIsInNvdXJjZXMiOlsibGliL3V0aWxzL2NyZWF0ZS1zY2hlbWEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFzQixNQUFNLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFDcEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdDQUF3QyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQTtBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRTFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQXNCdkQsTUFBTSxZQUFZLEdBQXdCO0lBQ3RDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO0lBQzlCLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFO0lBQzFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0NBQ25DLENBQUM7QUFFRixNQUFNLFlBQVksR0FBd0I7SUFDdEMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUU7Q0FDekMsQ0FBQztBQUVGLE1BQU0scUJBQXFCLEdBQUc7QUFDMUIsMkJBQTJCO0FBQzNCLGdDQUFnQztBQUNoQyxrQ0FBa0M7QUFDbEMsMEJBQTBCO0NBQzdCLENBQUM7V0FHRSxTQUFTLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJO0FBRC9CLE1BQU0sMEJBQTBCLEdBQUcscUJBQXFCLENBQUMsR0FBRyxJQUUzRCxDQUFDO0FBRUYsU0FBUyxRQUFRLENBQ2IsWUFBaUMsRUFDakMsTUFBZ0IsRUFDaEIsY0FBNkQsRUFBRTtJ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Q0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztRQUMzQixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUMsRUFDRCxFQUFzQyxDQUN6QyxFQUNELEtBQUssQ0FDUixDQUFDO0lBRUYsT0FBTyxJQUFJLE1BQU0sQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ3hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNYXJrU3BlYywgTm9kZVNwZWMsIFNjaGVtYSB9IGZyb20gXCJwcm9zZW1pcnJvci1tb2RlbFwiXHJcbmltcG9ydCB7IGRvY05vZGUgfSBmcm9tIFwiLi4vLi4vcGx1Z2lucy9kb2MvZG9jLm5vZGVcIlxyXG5pbXBvcnQgeyBwYXJhZ3JhcGhOb2RlIH0gZnJvbSBcIi4uLy4uL3BsdWdpbnMvcGFyYWdyYXBoL3BhcmFncmFwaC5ub2RlXCJcclxuaW1wb3J0IHsgYWxpZ25tZW50IH0gZnJvbSBcIi4uLy4uL3BsdWdpbnMvYWxpZ25tZW50L2FsaWdubWVudC5tYXJrXCJcclxuaW1wb3J0IHsgc2FuaXRpemVOb2RlcyB9IGZyb20gXCIuL3Nhbml0aXplXCJcclxuaW1wb3J0IHsgRWRpdG9yQ29uZmlnIH0gZnJvbSBcIi4uL2ludGVyZmFjZXMvZWRpdG9yLWNvbmZpZ1wiXHJcbmltcG9ydCB7IHRleHROb2RlIH0gZnJvbSBcIi4uLy4uL3BsdWdpbnMvdGV4dC90ZXh0Lm5vZGVcIlxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFDb25maWcge1xyXG4gICAgbm9kZXM6IHN0cmluZ1tdO1xyXG4gICAgY3VzdG9tTm9kZVNwZWNzPzogU2NoZW1hQ3VzdG9tTm9kZVNwZWNzO1xyXG4gICAgbWFya3M/OiBzdHJpbmdbXTtcclxuICAgIGN1c3RvbU1hcmtTcGVjcz86IFNjaGVtYUN1c3RvbU1hcmtTcGVjcztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFCdWlsdEluSXRlbSB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBzcGVjOiBOb2RlU3BlYyB8IE1hcmtTcGVjO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYUN1c3RvbU5vZGVTcGVjcyB7XHJcbiAgICBbbmFtZTogc3RyaW5nXTogTm9kZVNwZWM7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hQ3VzdG9tTWFya1NwZWNzIHtcclxuICAgIFtuYW1lOiBzdHJpbmddOiBNYXJrU3BlYztcclxufVxyXG5cclxuY29uc3Qgbm9kZXNJbk9yZGVyOiBTY2hlbWFCdWlsdEluSXRlbVtdID0gW1xyXG4gICAgeyBuYW1lOiAnZG9jJywgc3BlYzogZG9jTm9kZSB9LFxyXG4gICAgeyBuYW1lOiAncGFyYWdyYXBoJywgc3BlYzogcGFyYWdyYXBoTm9kZSB9LFxyXG4gICAgeyBuYW1lOiAndGV4dCcsIHNwZWM6IHRleHROb2RlIH0sXHJcbl07XHJcblxyXG5jb25zdCBtYXJrc0luT3JkZXI6IFNjaGVtYUJ1aWx0SW5JdGVtW10gPSBbXHJcbiAgICB7IG5hbWU6ICdhbGlnbm1lbnQnLCBzcGVjOiBhbGlnbm1lbnQgfSxcclxuXTtcclxuXHJcbmNvbnN0IG1hcmtHcm91cERlY2xhcmF0aW9ucyA9IFtcclxuICAgIC8vIGdyb3VwRGVjbGFyYXRpb24oQ09MT1IpLFxyXG4gICAgLy8gZ3JvdXBEZWNsYXJhdGlvbihGT05UX1NUWUxFKSxcclxuICAgIC8vIGdyb3VwRGVjbGFyYXRpb24oU0VBUkNIX1FVRVJZKSxcclxuICAgIC8vIGdyb3VwRGVjbGFyYXRpb24oTElOSyksXHJcbl07XHJcblxyXG5jb25zdCBtYXJrR3JvdXBEZWNsYXJhdGlvbnNOYW1lcyA9IG1hcmtHcm91cERlY2xhcmF0aW9ucy5tYXAoXHJcbiAgICBncm91cE1hcmsgPT4gZ3JvdXBNYXJrLm5hbWUsXHJcbik7XHJcblxyXG5mdW5jdGlvbiBhZGRJdGVtcyhcclxuICAgIGJ1aWx0SW5JdGVtczogU2NoZW1hQnVpbHRJbkl0ZW1bXSxcclxuICAgIGNvbmZpZzogc3RyaW5nW10sXHJcbiAgICBjdXN0b21TcGVjczogU2NoZW1hQ3VzdG9tTm9kZVNwZWNzIHwgU2NoZW1hQ3VzdG9tTWFya1NwZWNzID0ge30sXHJcbikge1xyXG4gICAgaWYgKCFjb25maWcpIHtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGQgYnVpbHQtaW4gTm9kZSAvIE1hcmsgc3BlY3NcclxuICAgICAqL1xyXG4gICAgY29uc3QgaXRlbXMgPSBidWlsdEluSXRlbXMucmVkdWNlPFJlY29yZDxzdHJpbmcsIE5vZGVTcGVjIHwgTWFya1NwZWM+PihcclxuICAgICAgICAoaXRlbXMsIHsgbmFtZSwgc3BlYyB9KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb25maWcuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1zW25hbWVdID0gY3VzdG9tU3BlY3NbbmFtZV0gfHwgc3BlYztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAge30sXHJcbiAgICApO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWRkIEN1c3RvbSBOb2RlIC8gTWFyayBzcGVjc1xyXG4gICAgICovXHJcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoY3VzdG9tU3BlY3MpLnJlZHVjZSgoaXRlbXMsIG5hbWUpID0+IHtcclxuICAgICAgICBpZiAoaXRlbXNbbmFtZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaXRlbXNbbmFtZV0gPSBjdXN0b21TcGVjc1tuYW1lXTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xyXG4gICAgfSwgaXRlbXMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc29ydEJ5UmFuayhhOiB7IHJhbms6IG51bWJlciB9LCBiOiB7IHJhbms6IG51bWJlciB9KTogbnVtYmVyIHtcclxuICAgIHJldHVybiBhLnJhbmsgLSBiLnJhbms7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNvcnRCeU9yZGVyKGl0ZW06ICdwbHVnaW5zJyB8ICdub2RlcycgfCAnbWFya3MnKSB7XHJcbiAgICAvLyByZXR1cm4gZnVuY3Rpb24oYTogeyBuYW1lOiBzdHJpbmcgfSwgYjogeyBuYW1lOiBzdHJpbmcgfSk6IG51bWJlciB7XHJcbiAgICAvLyAgICAgcmV0dXJuIFJhbmtzW2l0ZW1dLmluZGV4T2YoYS5uYW1lKSAtIFJhbmtzW2l0ZW1dLmluZGV4T2YoYi5uYW1lKTtcclxuICAgIC8vIH07XHJcblxyXG4gICAgcmV0dXJuICgpID0+IDBcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpeEV4Y2x1ZGVzKG1hcmtzOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBNYXJrU3BlYztcclxufSk6IHsgW2tleTogc3RyaW5nXTogTWFya1NwZWMgfSB7XHJcbiAgICBjb25zdCBtYXJrS2V5cyA9IE9iamVjdC5rZXlzKG1hcmtzKTtcclxuICAgIGNvbnN0IG1hcmtHcm91cHMgPSBuZXcgU2V0KG1hcmtLZXlzLm1hcChtYXJrID0+IG1hcmtzW21hcmtdLmdyb3VwKSk7XHJcblxyXG4gICAgbWFya0tleXMubWFwKG1hcmtLZXkgPT4ge1xyXG4gICAgICAgIGNvbnN0IG1hcmsgPSBtYXJrc1ttYXJrS2V5XTtcclxuICAgICAgICBpZiAobWFyay5leGNsdWRlcykge1xyXG4gICAgICAgICAgICBtYXJrLmV4Y2x1ZGVzID0gbWFyay5leGNsdWRlc1xyXG4gICAgICAgICAgICAgICAgLnNwbGl0KCcgJylcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoZ3JvdXAgPT4gbWFya0dyb3Vwcy5oYXMoZ3JvdXApKVxyXG4gICAgICAgICAgICAgICAgLmpvaW4oJyAnKTtcclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBtYXJrcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVNjaGVtYShlZGl0b3JDb25maWc6IEVkaXRvckNvbmZpZykge1xyXG4gICAgY29uc3QgbWFya3MgPSBmaXhFeGNsdWRlcyhcclxuICAgICAgICBlZGl0b3JDb25maWcubWFya3Muc29ydChzb3J0QnlPcmRlcignbWFya3MnKSkucmVkdWNlKFxyXG4gICAgICAgICAgICAoYWNjLCBtYXJrKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBhY2NbbWFyay5uYW1lXSA9IG1hcmsubWFyaztcclxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHt9IGFzIHsgW25vZGVOYW1lOiBzdHJpbmddOiBNYXJrU3BlYyB9LFxyXG4gICAgICAgICksXHJcbiAgICApO1xyXG4gICAgY29uc3Qgbm9kZXMgPSBzYW5pdGl6ZU5vZGVzKFxyXG4gICAgICAgIGVkaXRvckNvbmZpZy5ub2Rlcy5zb3J0KHNvcnRCeU9yZGVyKCdub2RlcycpKS5yZWR1Y2UoXHJcbiAgICAgICAgICAgIChhY2MsIG5vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGFjY1tub2RlLm5hbWVdID0gbm9kZS5ub2RlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge30gYXMgeyBbbm9kZU5hbWU6IHN0cmluZ106IE5vZGVTcGVjIH0sXHJcbiAgICAgICAgKSxcclxuICAgICAgICBtYXJrcyxcclxuICAgICk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBTY2hlbWEoeyBub2RlcywgbWFya3MgfSk7XHJcbn1cclxuIl19