UNPKG

@zodiac-ui/editor

Version:

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

44 lines 8.41 kB
import { inputRules } from 'prosemirror-inputrules'; import { LinkMatcher, normalizeUrl } from '../utils'; import { createInputRule } from "../../../lib/utils/input-rules"; import { queueCards } from "../../card/pm-plugins/actions"; export function createLinkInputRule(regexp, formatUrl) { return createInputRule(regexp, (state, match, start, end) => { const { schema } = state; if (state.doc.rangeHasMark(start, end, schema.marks.link)) { return null; } const [link] = match; const markType = schema.mark('link', { href: link.url }); const tr = state.tr .addMark(start - (link.input.length - link.lastIndex), end - (link.input.length - link.lastIndex), markType) .insertText(' '); return queueCards([ { url: link.url, pos: start - (link.input.length - link.lastIndex), appearance: 'inline', }, ])(tr); }); } export function createInputRulePlugin(schema) { if (!schema.marks.link) { return; } const urlWithASpaceRule = createLinkInputRule(new LinkMatcher(), match => (match[3] ? match[1] : `https?://${match[1]}`)); // [something](link) should convert to a hyperlink const markdownLinkRule = createInputRule(/(^|[^])\[(.*?)\]\((\S+)\)$/, (state, match, start, end) => { // tslint:disable-next-line:no-shadowed-variable const { schema } = state; const [, prefix, linkText, linkUrl] = match; const url = normalizeUrl(linkUrl); const markType = schema.mark('link', { href: url }); console.log('match?'); return state.tr.replaceWith(start + prefix.length, end, schema.text(linkText, [markType])); }); return inputRules({ rules: [urlWithASpaceRule, markdownLinkRule], }); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtcnVsZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B6b2RpYWMtdWkvZWRpdG9yLyIsInNvdXJjZXMiOlsicGx1Z2lucy9saW5rL3BtL2lucHV0LXJ1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBYSxNQUFNLHdCQUF3QixDQUFDO0FBRy9ELE9BQU8sRUFBUyxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUE7QUFFMUQsTUFBTSxVQUFVLG1CQUFtQixDQUMvQixNQUFjLEVBQ2QsU0FBb0M7SUFFcEMsT0FBTyxlQUFlLENBQ2xCLE1BQU0sRUFDTixDQUFDLEtBQWtCLEVBQUUsS0FBYyxFQUFFLEtBQWEsRUFBRSxHQUFXLEVBQUUsRUFBRTtRQUMvRCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRXpCLElBQUksS0FBSyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3ZELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBRXJCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRXpELE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxFQUFFO2FBQ2QsT0FBTyxDQUNKLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFDNUMsR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUMxQyxRQUFRLENBQ1g7YUFDQSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFckIsT0FBTyxVQUFVLENBQUM7WUFDZDtnQkFDSSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUc7Z0JBQ2IsR0FBRyxFQUFFLEtBQUssR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2pELFVBQVUsRUFBRSxRQUFRO2FBQ3ZCO1NBQ0osQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ1gsQ0FBQyxDQUNKLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLE1BQWM7SUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFO1FBQ3BCLE9BQU87S0FDVjtJQUVELE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQ3pDLElBQUksV0FBVyxFQUF1QixFQUN0QyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FDMUQsQ0FBQztJQUVGLGtEQUFrRDtJQUNsRCxNQUFNLGdCQUFnQixHQUFHLGVBQWUsQ0FDcEMsNEJBQTRCLEVBQzVCLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDekIsZ0RBQWdEO1FBQ2hELE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUM7UUFDekIsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDNUMsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFcEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUVyQixPQUFPLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUN2QixLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFDckIsR0FBRyxFQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FDcEMsQ0FBQztJQUNOLENBQUMsQ0FDSixDQUFDO0lBRUYsT0FBTyxVQUFVLENBQUM7UUFDZCxLQUFLLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQztLQUMvQyxDQUFDLENBQUM7QUFDUCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5wdXRSdWxlcywgSW5wdXRSdWxlIH0gZnJvbSAncHJvc2VtaXJyb3ItaW5wdXRydWxlcyc7XHJcbmltcG9ydCB7IFNjaGVtYSB9IGZyb20gJ3Byb3NlbWlycm9yLW1vZGVsJztcclxuaW1wb3J0IHsgUGx1Z2luLCBFZGl0b3JTdGF0ZSB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcclxuaW1wb3J0IHsgTWF0Y2gsIExpbmtNYXRjaGVyLCBub3JtYWxpemVVcmwgfSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IGNyZWF0ZUlucHV0UnVsZSB9IGZyb20gXCIuLi8uLi8uLi9saWIvdXRpbHMvaW5wdXQtcnVsZXNcIlxyXG5pbXBvcnQgeyBxdWV1ZUNhcmRzIH0gZnJvbSBcIi4uLy4uL2NhcmQvcG0tcGx1Z2lucy9hY3Rpb25zXCJcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMaW5rSW5wdXRSdWxlKFxyXG4gICAgcmVnZXhwOiBSZWdFeHAsXHJcbiAgICBmb3JtYXRVcmw6ICh1cmw6IHN0cmluZ1tdKSA9PiBzdHJpbmcsXHJcbik6IElucHV0UnVsZSB7XHJcbiAgICByZXR1cm4gY3JlYXRlSW5wdXRSdWxlKFxyXG4gICAgICAgIHJlZ2V4cCxcclxuICAgICAgICAoc3RhdGU6IEVkaXRvclN0YXRlLCBtYXRjaDogTWF0Y2hbXSwgc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHN0YXRlO1xyXG5cclxuICAgICAgICAgICAgaWYgKHN0YXRlLmRvYy5yYW5nZUhhc01hcmsoc3RhcnQsIGVuZCwgc2NoZW1hLm1hcmtzLmxpbmspKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBbbGlua10gPSBtYXRjaDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG1hcmtUeXBlID0gc2NoZW1hLm1hcmsoJ2xpbmsnLCB7IGhyZWY6IGxpbmsudXJsIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgdHIgPSBzdGF0ZS50clxyXG4gICAgICAgICAgICAgICAgLmFkZE1hcmsoXHJcbiAgICAgICAgICAgICAgICAgICAgc3RhcnQgLSAobGluay5pbnB1dC5sZW5ndGggLSBsaW5rLmxhc3RJbmRleCksXHJcbiAgICAgICAgICAgICAgICAgICAgZW5kIC0gKGxpbmsuaW5wdXQubGVuZ3RoIC0gbGluay5sYXN0SW5kZXgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1hcmtUeXBlLFxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLmluc2VydFRleHQoJyAnKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBxdWV1ZUNhcmRzKFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6IGxpbmsudXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIHBvczogc3RhcnQgLSAobGluay5pbnB1dC5sZW5ndGggLSBsaW5rLmxhc3RJbmRleCksXHJcbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZTogJ2lubGluZScsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBdKSh0cik7XHJcbiAgICAgICAgfSxcclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVJbnB1dFJ1bGVQbHVnaW4oc2NoZW1hOiBTY2hlbWEpOiBQbHVnaW4gfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFzY2hlbWEubWFya3MubGluaykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCB1cmxXaXRoQVNwYWNlUnVsZSA9IGNyZWF0ZUxpbmtJbnB1dFJ1bGUoXHJcbiAgICAgICAgbmV3IExpbmtNYXRjaGVyKCkgYXMgdW5rbm93biBhcyBSZWdFeHAsXHJcbiAgICAgICAgbWF0Y2ggPT4gKG1hdGNoWzNdID8gbWF0Y2hbMV0gOiBgaHR0cHM/Oi8vJHttYXRjaFsxXX1gKSxcclxuICAgICk7XHJcblxyXG4gICAgLy8gW3NvbWV0aGluZ10obGluaykgc2hvdWxkIGNvbnZlcnQgdG8gYSBoeXBlcmxpbmtcclxuICAgIGNvbnN0IG1hcmtkb3duTGlua1J1bGUgPSBjcmVhdGVJbnB1dFJ1bGUoXHJcbiAgICAgICAgLyhefFteXSlcXFsoLio/KVxcXVxcKChcXFMrKVxcKSQvLFxyXG4gICAgICAgIChzdGF0ZSwgbWF0Y2gsIHN0YXJ0LCBlbmQpID0+IHtcclxuICAgICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXNoYWRvd2VkLXZhcmlhYmxlXHJcbiAgICAgICAgICAgIGNvbnN0IHsgc2NoZW1hIH0gPSBzdGF0ZTtcclxuICAgICAgICAgICAgY29uc3QgWywgcHJlZml4LCBsaW5rVGV4dCwgbGlua1VybF0gPSBtYXRjaDtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gbm9ybWFsaXplVXJsKGxpbmtVcmwpO1xyXG4gICAgICAgICAgICBjb25zdCBtYXJrVHlwZSA9IHNjaGVtYS5tYXJrKCdsaW5rJywgeyBocmVmOiB1cmwgfSk7XHJcblxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnbWF0Y2g/JylcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzdGF0ZS50ci5yZXBsYWNlV2l0aChcclxuICAgICAgICAgICAgICAgIHN0YXJ0ICsgcHJlZml4Lmxlbmd0aCxcclxuICAgICAgICAgICAgICAgIGVuZCxcclxuICAgICAgICAgICAgICAgIHNjaGVtYS50ZXh0KGxpbmtUZXh0LCBbbWFya1R5cGVdKSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgKTtcclxuXHJcbiAgICByZXR1cm4gaW5wdXRSdWxlcyh7XHJcbiAgICAgICAgcnVsZXM6IFt1cmxXaXRoQVNwYWNlUnVsZSwgbWFya2Rvd25MaW5rUnVsZV0sXHJcbiAgICB9KTtcclxufVxyXG4iXX0=