Files

34 lines
1.0 KiB
TypeScript

import { EditorView } from '@codemirror/view';
import referenceLinkStateField from './referenceLinksStateField';
import modifierKeyCssExtension from '../modifierKeyCssExtension';
import openLink from './utils/openLink';
import getUrlAtPosition from './utils/getUrlAtPosition';
import { syntaxTree } from '@codemirror/language';
import ctrlClickActionExtension from '../ctrlClickActionExtension';
type OnOpenLink = (url: string, view: EditorView)=> void;
const ctrlClickLinksExtension = (onOpenExternalLink: OnOpenLink) => {
return [
modifierKeyCssExtension,
referenceLinkStateField,
EditorView.theme({
'&.-ctrl-or-cmd-pressed .cm-url, &.-ctrl-or-cmd-pressed .tok-link': {
cursor: 'pointer',
},
}),
ctrlClickActionExtension((view: EditorView, event: MouseEvent) => {
const target = view.posAtCoords(event);
const url = getUrlAtPosition(target, syntaxTree(view.state), view.state);
if (url) {
openLink(url.url, view, onOpenExternalLink);
return true;
}
return false;
}),
];
};
export default ctrlClickLinksExtension;