UNPKG

ngx-editor

Version:

Rich Text Editor for angular using ProseMirror

43 lines 5.97 kB
import { Fragment, Slice } from 'prosemirror-model'; import { Plugin, PluginKey } from 'prosemirror-state'; const HTTP_LINK_REGEX = /(?:https?:\/\/)?[\w-]+(?:\.[\w-]+)+\.?(?:\d+)?(?:\/\S*)?$/; const linkify = (fragment) => { const linkified = []; fragment.forEach((child) => { if (child.isText) { const text = child.text; let pos = 0; const match = HTTP_LINK_REGEX.exec(text); if (match) { const start = match.index; const end = start + match[0].length; const { link } = child.type.schema.marks; if (start > 0) { linkified.push(child.cut(pos, start)); } const urlText = text.slice(start, end); linkified.push(child.cut(start, end).mark(link.create({ href: urlText }).addToSet(child.marks))); pos = end; } if (pos < text.length) { linkified.push(child.cut(pos)); } } else { linkified.push(child.copy(linkify(child.content))); } }); return Fragment.fromArray(linkified); }; const linkifyPlugin = () => { return new Plugin({ key: new PluginKey('linkify'), props: { transformPasted: (slice) => { return new Slice(linkify(slice.content), slice.openStart, slice.openEnd); }, }, }); }; export default linkifyPlugin; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1lZGl0b3Ivc3JjL2xpYi9wbHVnaW5zL2xpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQTJCLE1BQU0sbUJBQW1CLENBQUM7QUFDN0UsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RCxNQUFNLGVBQWUsR0FBRywyREFBMkQsQ0FBQztBQUVwRixNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQWtCLEVBQVksRUFBRTtJQUMvQyxNQUFNLFNBQVMsR0FBc0IsRUFBRSxDQUFDO0lBRXhDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFzQixFQUFFLEVBQUU7UUFDMUMsSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxJQUFjLENBQUM7WUFDbEMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO1lBRVosTUFBTSxLQUFLLEdBQTRCLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFbEUsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDMUIsTUFBTSxHQUFHLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7Z0JBQ3BDLE1BQU0sRUFBRSxJQUFJLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUM7Z0JBRXpDLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtvQkFDYixTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7aUJBQ3ZDO2dCQUVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxTQUFTLENBQUMsSUFBSSxDQUNaLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUNqRixDQUFDO2dCQUNGLEdBQUcsR0FBRyxHQUFHLENBQUM7YUFDWDtZQUVELElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ3JCLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ2hDO1NBQ0Y7YUFBTTtZQUNMLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNwRDtJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxRQUFRLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZDLENBQUMsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHLEdBQVUsRUFBRTtJQUNoQyxPQUFPLElBQUksTUFBTSxDQUFDO1FBQ2hCLEdBQUcsRUFBRSxJQUFJLFNBQVMsQ0FBQyxTQUFTLENBQUM7UUFDN0IsS0FBSyxFQUFFO1lBQ0wsZUFBZSxFQUFFLENBQUMsS0FBWSxFQUFFLEVBQUU7Z0JBQ2hDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzRSxDQUFDO1NBQ0Y7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixlQUFlLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZyYWdtZW50LCBTbGljZSwgTm9kZSBhcyBQcm9zZU1pcnJvck5vZGUgfSBmcm9tICdwcm9zZW1pcnJvci1tb2RlbCc7XG5pbXBvcnQgeyBQbHVnaW4sIFBsdWdpbktleSB9IGZyb20gJ3Byb3NlbWlycm9yLXN0YXRlJztcblxuY29uc3QgSFRUUF9MSU5LX1JFR0VYID0gLyg/Omh0dHBzPzpcXC9cXC8pP1tcXHctXSsoPzpcXC5bXFx3LV0rKStcXC4/KD86XFxkKyk/KD86XFwvXFxTKik/JC87XG5cbmNvbnN0IGxpbmtpZnkgPSAoZnJhZ21lbnQ6IEZyYWdtZW50KTogRnJhZ21lbnQgPT4ge1xuICBjb25zdCBsaW5raWZpZWQ6IFByb3NlTWlycm9yTm9kZVtdID0gW107XG5cbiAgZnJhZ21lbnQuZm9yRWFjaCgoY2hpbGQ6IFByb3NlTWlycm9yTm9kZSkgPT4ge1xuICAgIGlmIChjaGlsZC5pc1RleHQpIHtcbiAgICAgIGNvbnN0IHRleHQgPSBjaGlsZC50ZXh0IGFzIHN0cmluZztcbiAgICAgIGxldCBwb3MgPSAwO1xuXG4gICAgICBjb25zdCBtYXRjaDogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgPSBIVFRQX0xJTktfUkVHRVguZXhlYyh0ZXh0KTtcblxuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gbWF0Y2guaW5kZXg7XG4gICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICBjb25zdCB7IGxpbmsgfSA9IGNoaWxkLnR5cGUuc2NoZW1hLm1hcmtzO1xuXG4gICAgICAgIGlmIChzdGFydCA+IDApIHtcbiAgICAgICAgICBsaW5raWZpZWQucHVzaChjaGlsZC5jdXQocG9zLCBzdGFydCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdXJsVGV4dCA9IHRleHQuc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgICAgIGxpbmtpZmllZC5wdXNoKFxuICAgICAgICAgIGNoaWxkLmN1dChzdGFydCwgZW5kKS5tYXJrKGxpbmsuY3JlYXRlKHsgaHJlZjogdXJsVGV4dCB9KS5hZGRUb1NldChjaGlsZC5tYXJrcykpLFxuICAgICAgICApO1xuICAgICAgICBwb3MgPSBlbmQ7XG4gICAgICB9XG5cbiAgICAgIGlmIChwb3MgPCB0ZXh0Lmxlbmd0aCkge1xuICAgICAgICBsaW5raWZpZWQucHVzaChjaGlsZC5jdXQocG9zKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxpbmtpZmllZC5wdXNoKGNoaWxkLmNvcHkobGlua2lmeShjaGlsZC5jb250ZW50KSkpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIEZyYWdtZW50LmZyb21BcnJheShsaW5raWZpZWQpO1xufTtcblxuY29uc3QgbGlua2lmeVBsdWdpbiA9ICgpOlBsdWdpbiA9PiB7XG4gIHJldHVybiBuZXcgUGx1Z2luKHtcbiAgICBrZXk6IG5ldyBQbHVnaW5LZXkoJ2xpbmtpZnknKSxcbiAgICBwcm9wczoge1xuICAgICAgdHJhbnNmb3JtUGFzdGVkOiAoc2xpY2U6IFNsaWNlKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgU2xpY2UobGlua2lmeShzbGljZS5jb250ZW50KSwgc2xpY2Uub3BlblN0YXJ0LCBzbGljZS5vcGVuRW5kKTtcbiAgICAgIH0sXG4gICAgfSxcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBsaW5raWZ5UGx1Z2luO1xuIl19