kosei-n 2 лет назад
Родитель
Сommit
8a7bf028d4

+ 2 - 2
packages/editor/src/components/CodeMirrorEditor/CodeMirrorEditor.tsx

@@ -9,7 +9,7 @@ import type { ReactCodeMirrorProps } from '@uiw/react-codemirror';
 import { GlobalCodeMirrorEditorKey, AcceptedUploadFileType } from '../../consts';
 import { GlobalCodeMirrorEditorKey, AcceptedUploadFileType } from '../../consts';
 import { useFileDropzone, FileDropzoneOverlay } from '../../services';
 import { useFileDropzone, FileDropzoneOverlay } from '../../services';
 import {
 import {
-  getStrFromBol, adjustPasteData,
+  getCurrentLine, adjustPasteData,
   newlineAndIndentContinueMarkdownList,
   newlineAndIndentContinueMarkdownList,
 } from '../../services/list-util/markdown-list-util';
 } from '../../services/list-util/markdown-list-util';
 import { useCodeMirrorEditorIsolated } from '../../stores';
 import { useCodeMirrorEditorIsolated } from '../../stores';
@@ -105,7 +105,7 @@ export const CodeMirrorEditor = (props: Props): JSX.Element => {
 
 
         const textData = event.clipboardData.getData('text/plain');
         const textData = event.clipboardData.getData('text/plain');
 
 
-        const strFromBol = getStrFromBol(editor);
+        const strFromBol = getCurrentLine(editor);
 
 
         const adjusted = adjustPasteData(strFromBol, textData);
         const adjusted = adjustPasteData(strFromBol, textData);
 
 

+ 14 - 5
packages/editor/src/services/list-util/markdown-list-util.ts

@@ -3,15 +3,24 @@ import { EditorView } from '@codemirror/view';
 // https://regex101.com/r/7BN2fR/5
 // https://regex101.com/r/7BN2fR/5
 const indentAndMarkRE = /^(\s*)(>[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/;
 const indentAndMarkRE = /^(\s*)(>[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/;
 
 
-const getBol = (editor: EditorView) => {
+const getLinesAboveCursor = (editor: EditorView) => {
   const curPos = editor.state.selection.main.head;
   const curPos = editor.state.selection.main.head;
-  const aboveLine = editor.state.doc.lineAt(curPos).number;
+  const aboveLine = editor.state.doc.lineAt(curPos).number - 1;
   return editor.state.doc.line(aboveLine).from;
   return editor.state.doc.line(aboveLine).from;
 };
 };
 
 
-export const getStrFromBol = (editor: EditorView): string => {
+const getStrFromAboveLine = (editor: EditorView) => {
   const curPos = editor.state.selection.main.head;
   const curPos = editor.state.selection.main.head;
-  return editor.state.sliceDoc(getBol(editor), curPos);
+  return editor.state.sliceDoc(getLinesAboveCursor(editor), curPos);
+};
+
+export const getCurrentLine = (editor: EditorView): string => {
+  const curPos = editor.state.selection.main.head;
+  const curLineNum = editor.state.doc.lineAt(curPos).number;
+
+  const curLine = editor.state.doc.line(curLineNum).from;
+
+  return editor.state.sliceDoc(curLine, curPos);
 };
 };
 
 
 const insertText = (editor: EditorView, text: string) => {
 const insertText = (editor: EditorView, text: string) => {
@@ -27,7 +36,7 @@ const insertText = (editor: EditorView, text: string) => {
 };
 };
 
 
 export const newlineAndIndentContinueMarkdownList = (editor: EditorView): void => {
 export const newlineAndIndentContinueMarkdownList = (editor: EditorView): void => {
-  const strFromBol = getStrFromBol(editor);
+  const strFromBol = getStrFromAboveLine(editor);
 
 
   const matchResult = strFromBol.match(indentAndMarkRE);
   const matchResult = strFromBol.match(indentAndMarkRE);