UNPKG

@atlaskit/editor-core

Version:

A package contains Atlassian editor core functionality

37 lines 1.63 kB
import { inputRules } from '../../prosemirror'; import { analyticsService } from '../../analytics'; import { createInputRule } from '../utils'; import { LinkMatcher, normalizeUrl } from './utils'; export function createLinkInputRule(regexp, formatUrl) { return createInputRule(regexp, function (state, match, start, end) { var schema = state.schema; if (state.doc.rangeHasMark(start, end, schema.marks.link)) { return; } var markType = schema.mark('link', { href: match[0].url, }); analyticsService.trackEvent('atlassian.editor.format.hyperlink.autoformatting'); return state.tr.addMark(start, end, markType).insertText(' '); }); } export function inputRulePlugin(schema) { if (!schema.marks.link) { return; } var urlWithASpaceRule = createLinkInputRule((new LinkMatcher()), function (match) { return match[3] ? match[1] : "http://" + match[1]; }); // [something](link) should convert to a hyperlink var markdownLinkRule = createInputRule(/(^|[^!])\[(.*?)\]\((\S+)\)$/, function (state, match, start, end) { var schema = state.schema; var url = normalizeUrl(match[3]); var markType = schema.mark('link', { href: url }); analyticsService.trackEvent('atlassian.editor.format.hyperlink.autoformatting'); return state.tr.replaceWith(start + match[1].length, end, schema.text(match[2], [markType])); }); return inputRules({ rules: [ urlWithASpaceRule, markdownLinkRule ] }); } export default inputRulePlugin; //# sourceMappingURL=input-rule.js.map