@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
82 lines • 12.1 kB
JavaScript
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.map(ɵ0);
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