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