@zodiac-ui/editor
Version:
A rich text editor for Angular based on `@atlaskit/editor-core`.
44 lines • 8.41 kB
JavaScript
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=