UNPKG

@atlaskit/editor-core

Version:

A package contains Atlassian editor core functionality

38 lines 1.66 kB
import { keymap } from '../../prosemirror'; import * as keymaps from '../../keymaps'; import * as commands from '../../commands'; import { analyticsService, trackAndInvoke } from '../../analytics'; import { getLinkMatch } from './utils'; export function keymapPlugin(schema, props) { var list = {}; if (props.appearance !== 'message') { keymaps.bindKeymapWithCommand(keymaps.addLink.common, trackAndInvoke('atlassian.editor.format.hyperlink.keyboard', commands.showLinkPanel()), list); } keymaps.bindKeymapWithCommand(keymaps.enter.common, mayConvertLastWordToHyperlink, list); keymaps.bindKeymapWithCommand(keymaps.insertNewLine.common, mayConvertLastWordToHyperlink, list); return keymap(list); } function mayConvertLastWordToHyperlink(state, dispatch) { var nodeBefore = state.selection.$from.nodeBefore; if (!nodeBefore || !nodeBefore.isText) { return false; } var words = nodeBefore.text.split(' '); var lastWord = words[words.length - 1]; var match = getLinkMatch(lastWord); if (match) { var hyperlinkedText = match.raw; var start = state.selection.$from.pos - hyperlinkedText.length; var end = state.selection.$from.pos; if (state.doc.rangeHasMark(start, end, state.schema.marks.link)) { return false; } var url = match.url; var markType = state.schema.mark('link', { href: url, }); analyticsService.trackEvent('atlassian.editor.format.hyperlink.autoformatting'); dispatch(state.tr.addMark(start, end, markType)); } return false; } export default keymapPlugin; //# sourceMappingURL=keymap.js.map