@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
56 lines • 10.8 kB
JavaScript
import { InputRule } from 'prosemirror-inputrules';
export function defaultInputRuleHandler(inputRule, isBlockNodeRule = false) {
const originalHandler = inputRule.handler;
inputRule.handler = (state, match, start, end) => {
// Skip any input rule inside code
// https://product-fabric.atlassian.net/wiki/spaces/E/pages/37945345/Editor+content+feature+rules#Editorcontent/featurerules-Rawtextblocks
const unsupportedMarks = isBlockNodeRule
? hasUnsupportedMarkForBlockInputRule(state, start, end)
: hasUnsupportedMarkForInputRule(state, start, end);
if (state.selection.$from.parent.type.spec.code || unsupportedMarks) {
return;
}
return originalHandler(state, match, start, end);
};
return inputRule;
}
export function createInputRule(match, handler, isBlockNodeRule = false) {
return defaultInputRuleHandler(new InputRule(match, handler), isBlockNodeRule);
}
// ProseMirror uses the Unicode Character 'OBJECT REPLACEMENT CHARACTER' (U+FFFC) as text representation for
// leaf nodes, i.e. nodes that don't have any content or text property (e.g. hardBreak, emoji, mention, rule)
// It was introduced because of https://github.com/ProseMirror/prosemirror/issues/262
// This can be used in an input rule regex to be able to include or exclude such nodes.
export const leafNodeReplacementCharacter = '\ufffc';
// tslint:disable:no-bitwise
export const uuid = () => 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
const r = (Math.random() * 16) | 0;
return (c === 'x' ? r : (r & 0x3) | 0x8).toString(16);
});
const hasUnsupportedMarkForBlockInputRule = (state, start, end) => {
const { doc, schema: { marks }, } = state;
let unsupportedMarksPresent = false;
const isUnsupportedMark = node => node.type === marks.code ||
node.type === marks.link ||
node.type === marks.typeAheadQuery;
doc.nodesBetween(start, end, node => {
unsupportedMarksPresent =
unsupportedMarksPresent ||
node.marks.filter(isUnsupportedMark).length > 0;
});
return unsupportedMarksPresent;
};
const ɵ0 = hasUnsupportedMarkForBlockInputRule;
const hasUnsupportedMarkForInputRule = (state, start, end) => {
const { doc, schema: { marks }, } = state;
let unsupportedMarksPresent = false;
const isCodemark = node => node.type === marks.code || node.type === marks.typeAheadQuery;
doc.nodesBetween(start, end, node => {
unsupportedMarksPresent =
unsupportedMarksPresent || node.marks.filter(isCodemark).length > 0;
});
return unsupportedMarksPresent;
};
const ɵ1 = hasUnsupportedMarkForInputRule;
export { ɵ0, ɵ1 };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcnVsZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9Aem9kaWFjLXVpL2VkaXRvci8iLCJzb3VyY2VzIjpbImxpYi91dGlscy9pbnB1dC1ydWxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFZbkQsTUFBTSxVQUFVLHVCQUF1QixDQUNuQyxTQUErQixFQUMvQixrQkFBMkIsS0FBSztJQUVoQyxNQUFNLGVBQWUsR0FBSSxTQUFpQixDQUFDLE9BQU8sQ0FBQztJQUNuRCxTQUFTLENBQUMsT0FBTyxHQUFHLENBQUMsS0FBa0IsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQzFELGtDQUFrQztRQUNsQywwSUFBMEk7UUFDMUksTUFBTSxnQkFBZ0IsR0FBRyxlQUFlO1lBQ3BDLENBQUMsQ0FBQyxtQ0FBbUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQztZQUN4RCxDQUFDLENBQUMsOEJBQThCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN4RCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBRTtZQUNqRSxPQUFPO1NBQ1Y7UUFDRCxPQUFPLGVBQWUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNyRCxDQUFDLENBQUM7SUFDRixPQUFPLFNBQVMsQ0FBQztBQUNyQixDQUFDO0FBRUQsTUFBTSxVQUFVLGVBQWUsQ0FDM0IsS0FBYSxFQUNiLE9BQXlCLEVBQ3pCLGtCQUEyQixLQUFLO0lBRWhDLE9BQU8sdUJBQXVCLENBQzFCLElBQUksU0FBUyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQXlCLEVBQ3JELGVBQWUsQ0FDbEIsQ0FBQztBQUNOLENBQUM7QUFFRCw0R0FBNEc7QUFDNUcsNkdBQTZHO0FBQzdHLHFGQUFxRjtBQUNyRix1RkFBdUY7QUFDdkYsTUFBTSxDQUFDLE1BQU0sNEJBQTRCLEdBQUcsUUFBUSxDQUFDO0FBRXJELDRCQUE0QjtBQUM1QixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFLENBQ3JCLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUU7SUFDeEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLE9BQU8sQ0FBQyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMsQ0FBQztBQUVQLE1BQU0sbUNBQW1DLEdBQUcsQ0FDeEMsS0FBa0IsRUFDbEIsS0FBYSxFQUNiLEdBQVcsRUFDYixFQUFFO0lBQ0EsTUFBTSxFQUNGLEdBQUcsRUFDSCxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FDcEIsR0FBRyxLQUFLLENBQUM7SUFDVixJQUFJLHVCQUF1QixHQUFHLEtBQUssQ0FBQztJQUNwQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxFQUFFLENBQzdCLElBQUksQ0FBQyxJQUFJLEtBQUssS0FBSyxDQUFDLElBQUk7UUFDeEIsSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsSUFBSTtRQUN4QixJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDdkMsR0FBRyxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO1FBQ2hDLHVCQUF1QjtZQUNuQix1QkFBdUI7Z0JBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUN4RCxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sdUJBQXVCLENBQUM7QUFDbkMsQ0FBQyxDQUFDOztBQUVGLE1BQU0sOEJBQThCLEdBQUcsQ0FDbkMsS0FBa0IsRUFDbEIsS0FBYSxFQUNiLEdBQVcsRUFDYixFQUFFO0lBQ0EsTUFBTSxFQUNGLEdBQUcsRUFDSCxNQUFNLEVBQUUsRUFBRSxLQUFLLEVBQUUsR0FDcEIsR0FBRyxLQUFLLENBQUM7SUFDVixJQUFJLHVCQUF1QixHQUFHLEtBQUssQ0FBQztJQUNwQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUN0QixJQUFJLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsY0FBYyxDQUFDO0lBQ25FLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsRUFBRTtRQUNoQyx1QkFBdUI7WUFDbkIsdUJBQXVCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUM1RSxDQUFDLENBQUMsQ0FBQztJQUNILE9BQU8sdUJBQXVCLENBQUM7QUFDbkMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5wdXRSdWxlIH0gZnJvbSAncHJvc2VtaXJyb3ItaW5wdXRydWxlcyc7XHJcbmltcG9ydCB7IEVkaXRvclN0YXRlLCBUcmFuc2FjdGlvbiB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcclxuXHJcbmV4cG9ydCB0eXBlIElucHV0UnVsZVdpdGhIYW5kbGVyID0gSW5wdXRSdWxlICYgeyBoYW5kbGVyOiBJbnB1dFJ1bGVIYW5kbGVyIH07XHJcblxyXG5leHBvcnQgdHlwZSBJbnB1dFJ1bGVIYW5kbGVyID0gKChcclxuICAgIHN0YXRlOiBFZGl0b3JTdGF0ZSxcclxuICAgIG1hdGNoLFxyXG4gICAgc3RhcnQsXHJcbiAgICBlbmQsXHJcbikgPT4gVHJhbnNhY3Rpb24gfCBudWxsKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0SW5wdXRSdWxlSGFuZGxlcihcclxuICAgIGlucHV0UnVsZTogSW5wdXRSdWxlV2l0aEhhbmRsZXIsXHJcbiAgICBpc0Jsb2NrTm9kZVJ1bGU6IGJvb2xlYW4gPSBmYWxzZSxcclxuKTogSW5wdXRSdWxlV2l0aEhhbmRsZXIge1xyXG4gICAgY29uc3Qgb3JpZ2luYWxIYW5kbGVyID0gKGlucHV0UnVsZSBhcyBhbnkpLmhhbmRsZXI7XHJcbiAgICBpbnB1dFJ1bGUuaGFuZGxlciA9IChzdGF0ZTogRWRpdG9yU3RhdGUsIG1hdGNoLCBzdGFydCwgZW5kKSA9PiB7XHJcbiAgICAgICAgLy8gU2tpcCBhbnkgaW5wdXQgcnVsZSBpbnNpZGUgY29kZVxyXG4gICAgICAgIC8vIGh0dHBzOi8vcHJvZHVjdC1mYWJyaWMuYXRsYXNzaWFuLm5ldC93aWtpL3NwYWNlcy9FL3BhZ2VzLzM3OTQ1MzQ1L0VkaXRvcitjb250ZW50K2ZlYXR1cmUrcnVsZXMjRWRpdG9yY29udGVudC9mZWF0dXJlcnVsZXMtUmF3dGV4dGJsb2Nrc1xyXG4gICAgICAgIGNvbnN0IHVuc3VwcG9ydGVkTWFya3MgPSBpc0Jsb2NrTm9kZVJ1bGVcclxuICAgICAgICAgICAgPyBoYXNVbnN1cHBvcnRlZE1hcmtGb3JCbG9ja0lucHV0UnVsZShzdGF0ZSwgc3RhcnQsIGVuZClcclxuICAgICAgICAgICAgOiBoYXNVbnN1cHBvcnRlZE1hcmtGb3JJbnB1dFJ1bGUoc3RhdGUsIHN0YXJ0LCBlbmQpO1xyXG4gICAgICAgIGlmIChzdGF0ZS5zZWxlY3Rpb24uJGZyb20ucGFyZW50LnR5cGUuc3BlYy5jb2RlIHx8IHVuc3VwcG9ydGVkTWFya3MpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gb3JpZ2luYWxIYW5kbGVyKHN0YXRlLCBtYXRjaCwgc3RhcnQsIGVuZCk7XHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGlucHV0UnVsZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlucHV0UnVsZShcclxuICAgIG1hdGNoOiBSZWdFeHAsXHJcbiAgICBoYW5kbGVyOiBJbnB1dFJ1bGVIYW5kbGVyLFxyXG4gICAgaXNCbG9ja05vZGVSdWxlOiBib29sZWFuID0gZmFsc2UsXHJcbik6IElucHV0UnVsZVdpdGhIYW5kbGVyIHtcclxuICAgIHJldHVybiBkZWZhdWx0SW5wdXRSdWxlSGFuZGxlcihcclxuICAgICAgICBuZXcgSW5wdXRSdWxlKG1hdGNoLCBoYW5kbGVyKSBhcyBJbnB1dFJ1bGVXaXRoSGFuZGxlcixcclxuICAgICAgICBpc0Jsb2NrTm9kZVJ1bGUsXHJcbiAgICApO1xyXG59XHJcblxyXG4vLyBQcm9zZU1pcnJvciB1c2VzIHRoZSBVbmljb2RlIENoYXJhY3RlciAnT0JKRUNUIFJFUExBQ0VNRU5UIENIQVJBQ1RFUicgKFUrRkZGQykgYXMgdGV4dCByZXByZXNlbnRhdGlvbiBmb3JcclxuLy8gbGVhZiBub2RlcywgaS5lLiBub2RlcyB0aGF0IGRvbid0IGhhdmUgYW55IGNvbnRlbnQgb3IgdGV4dCBwcm9wZXJ0eSAoZS5nLiBoYXJkQnJlYWssIGVtb2ppLCBtZW50aW9uLCBydWxlKVxyXG4vLyBJdCB3YXMgaW50cm9kdWNlZCBiZWNhdXNlIG9mIGh0dHBzOi8vZ2l0aHViLmNvbS9Qcm9zZU1pcnJvci9wcm9zZW1pcnJvci9pc3N1ZXMvMjYyXHJcbi8vIFRoaXMgY2FuIGJlIHVzZWQgaW4gYW4gaW5wdXQgcnVsZSByZWdleCB0byBiZSBhYmxlIHRvIGluY2x1ZGUgb3IgZXhjbHVkZSBzdWNoIG5vZGVzLlxyXG5leHBvcnQgY29uc3QgbGVhZk5vZGVSZXBsYWNlbWVudENoYXJhY3RlciA9ICdcXHVmZmZjJztcclxuXHJcbi8vIHRzbGludDpkaXNhYmxlOm5vLWJpdHdpc2VcclxuZXhwb3J0IGNvbnN0IHV1aWQgPSAoKSA9PlxyXG4gICAgJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBjID0+IHtcclxuICAgICAgICBjb25zdCByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwO1xyXG4gICAgICAgIHJldHVybiAoYyA9PT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4OCkudG9TdHJpbmcoMTYpO1xyXG4gICAgfSk7XHJcblxyXG5jb25zdCBoYXNVbnN1cHBvcnRlZE1hcmtGb3JCbG9ja0lucHV0UnVsZSA9IChcclxuICAgIHN0YXRlOiBFZGl0b3JTdGF0ZSxcclxuICAgIHN0YXJ0OiBudW1iZXIsXHJcbiAgICBlbmQ6IG51bWJlcixcclxuKSA9PiB7XHJcbiAgICBjb25zdCB7XHJcbiAgICAgICAgZG9jLFxyXG4gICAgICAgIHNjaGVtYTogeyBtYXJrcyB9LFxyXG4gICAgfSA9IHN0YXRlO1xyXG4gICAgbGV0IHVuc3VwcG9ydGVkTWFya3NQcmVzZW50ID0gZmFsc2U7XHJcbiAgICBjb25zdCBpc1Vuc3VwcG9ydGVkTWFyayA9IG5vZGUgPT5cclxuICAgICAgICBub2RlLnR5cGUgPT09IG1hcmtzLmNvZGUgfHxcclxuICAgICAgICBub2RlLnR5cGUgPT09IG1hcmtzLmxpbmsgfHxcclxuICAgICAgICBub2RlLnR5cGUgPT09IG1hcmtzLnR5cGVBaGVhZFF1ZXJ5O1xyXG4gICAgZG9jLm5vZGVzQmV0d2VlbihzdGFydCwgZW5kLCBub2RlID0+IHtcclxuICAgICAgICB1bnN1cHBvcnRlZE1hcmtzUHJlc2VudCA9XHJcbiAgICAgICAgICAgIHVuc3VwcG9ydGVkTWFya3NQcmVzZW50IHx8XHJcbiAgICAgICAgICAgIG5vZGUubWFya3MuZmlsdGVyKGlzVW5zdXBwb3J0ZWRNYXJrKS5sZW5ndGggPiAwO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRNYXJrc1ByZXNlbnQ7XHJcbn07XHJcblxyXG5jb25zdCBoYXNVbnN1cHBvcnRlZE1hcmtGb3JJbnB1dFJ1bGUgPSAoXHJcbiAgICBzdGF0ZTogRWRpdG9yU3RhdGUsXHJcbiAgICBzdGFydDogbnVtYmVyLFxyXG4gICAgZW5kOiBudW1iZXIsXHJcbikgPT4ge1xyXG4gICAgY29uc3Qge1xyXG4gICAgICAgIGRvYyxcclxuICAgICAgICBzY2hlbWE6IHsgbWFya3MgfSxcclxuICAgIH0gPSBzdGF0ZTtcclxuICAgIGxldCB1bnN1cHBvcnRlZE1hcmtzUHJlc2VudCA9IGZhbHNlO1xyXG4gICAgY29uc3QgaXNDb2RlbWFyayA9IG5vZGUgPT5cclxuICAgICAgICBub2RlLnR5cGUgPT09IG1hcmtzLmNvZGUgfHwgbm9kZS50eXBlID09PSBtYXJrcy50eXBlQWhlYWRRdWVyeTtcclxuICAgIGRvYy5ub2Rlc0JldHdlZW4oc3RhcnQsIGVuZCwgbm9kZSA9PiB7XHJcbiAgICAgICAgdW5zdXBwb3J0ZWRNYXJrc1ByZXNlbnQgPVxyXG4gICAgICAgICAgICB1bnN1cHBvcnRlZE1hcmtzUHJlc2VudCB8fCBub2RlLm1hcmtzLmZpbHRlcihpc0NvZGVtYXJrKS5sZW5ndGggPiAwO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdW5zdXBwb3J0ZWRNYXJrc1ByZXNlbnQ7XHJcbn07XHJcbiJdfQ==