Skip to content
Snippets Groups Projects
Commit 8a09ece8 authored by Loïc Correnson's avatar Loïc Correnson
Browse files

[ivette/source] fixed global selection

Need to click in source code to select
parent c4926cc3
No related branches found
No related tags found
No related merge requests found
...@@ -106,7 +106,7 @@ type SourceCursor = { file: string, line: number, column: number }; ...@@ -106,7 +106,7 @@ type SourceCursor = { file: string, line: number, column: number };
type SourceCallback = ((pos: Position) => void) | null; type SourceCallback = ((pos: Position) => void) | null;
const noCursor: SourceCursor = { file: '', line: 0, column: 0 }; const noCursor: SourceCursor = { file: '', line: 0, column: 0 };
const OnSelection = Editor.OnSelection; const OnClick = Editor.createField<SourceCallback>(null);
const OnControlClick = Editor.createField<SourceCallback>(null); const OnControlClick = Editor.createField<SourceCallback>(null);
const OnContextMenu = Editor.createField<SourceCallback>(null); const OnContextMenu = Editor.createField<SourceCallback>(null);
...@@ -114,14 +114,16 @@ const OnContextMenu = Editor.createField<SourceCallback>(null); ...@@ -114,14 +114,16 @@ const OnContextMenu = Editor.createField<SourceCallback>(null);
const EventHandlers = createEventHandlers(); const EventHandlers = createEventHandlers();
function createEventHandlers(): Editor.Extension { function createEventHandlers(): Editor.Extension {
const deps = { const deps = {
onClick: OnClick,
onControlClick: OnControlClick, onControlClick: OnControlClick,
onContextMenu: OnContextMenu onContextMenu: OnContextMenu
}; };
return Editor.createEventHandler(deps, { return Editor.createEventHandler(deps, {
// Control Click // Control Click
mouseup: ({ onControlClick }, view, event) => { mouseup: ({ onClick, onControlClick }, view, event) => {
const pos = getCursorPosition(view);
if (onClick !== null) onClick(pos);
if (event.ctrlKey && onControlClick !== null) { if (event.ctrlKey && onControlClick !== null) {
const pos = getCursorPosition(view);
onControlClick(pos); onControlClick(pos);
} }
}, },
...@@ -164,7 +166,7 @@ const extensions: Editor.Extension[] = [ ...@@ -164,7 +166,7 @@ const extensions: Editor.Extension[] = [
Editor.LineNumbers, Editor.LineNumbers,
Editor.LanguageHighlighter, Editor.LanguageHighlighter,
Editor.HighlightActiveLine, Editor.HighlightActiveLine,
OnSelection, OnClick,
OnContextMenu, OnContextMenu,
OnControlClick, OnControlClick,
EventHandlers, EventHandlers,
...@@ -205,17 +207,15 @@ export default function SourceCode(): JSX.Element { ...@@ -205,17 +207,15 @@ export default function SourceCode(): JSX.Element {
}]); }]);
}, [file, command, editFile] ); }, [file, command, editFile] );
const onSelect = React.useCallback((offset, endOffset) => { const onClick = React.useCallback((pos: Position) => {
if (!view || !file || endOffset !== offset) return; if (!file) return;
const theLine = view.state.doc.lineAt(offset); const { line, column } = pos;
const line = theLine.number;
const column = offset - theLine.from;
setCursor({ file, line, column }); setCursor({ file, line, column });
}, [view, file]); }, [file]);
React.useEffect(() => { if (!file) setCursor(noCursor); }, [file]); React.useEffect(() => { if (!file) setCursor(noCursor); }, [file]);
React.useEffect(() => Source.set(view, source), [view, source]); React.useEffect(() => Source.set(view, source), [view, source]);
React.useEffect(() => OnSelection.set(view, onSelect), [view, onSelect]); React.useEffect(() => OnClick.set(view, onClick), [view, onClick]);
React.useEffect(() => OnContextMenu.set(view, menuPopup), [view, menuPopup]); React.useEffect(() => OnContextMenu.set(view, menuPopup), [view, menuPopup]);
React.useEffect(() => OnControlClick.set(view, editFile), [view, editFile]); React.useEffect(() => OnControlClick.set(view, editFile), [view, editFile]);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment