@atlaskit/editor-core
Version:
A package contains Atlassian editor core functionality
37 lines • 1.63 kB
JavaScript
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