diff --git a/.eslintignore b/.eslintignore index 5b989049c1..cc1083afe6 100644 --- a/.eslintignore +++ b/.eslintignore @@ -382,6 +382,9 @@ packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js.map packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.d.ts packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.test.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.test.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.test.js.map packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.d.ts packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js.map diff --git a/.gitignore b/.gitignore index d12471fea2..c71111597c 100644 --- a/.gitignore +++ b/.gitignore @@ -369,6 +369,9 @@ packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/types.js.map packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.d.ts packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.js.map +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.test.d.ts +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.test.js +packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.test.js.map packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.d.ts packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useEditorSearch.js.map diff --git a/packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.test.ts b/packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.test.ts new file mode 100644 index 0000000000..732df271d2 --- /dev/null +++ b/packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.test.ts @@ -0,0 +1,20 @@ +import { modifyListLines } from './useCursorUtils'; + +describe('useCursorUtils', () => { + + let listWithDashes = `- item1 +- item2 +- item3`; + + let listNoDashes = `item1 +item2 +item3`; + + test('should remove "- " from beggining of each line of input string', () => { + expect(JSON.stringify(modifyListLines(listWithDashes.split('\n'), 0, '- '))).toBe(JSON.stringify(listNoDashes.split('\n'))); + }); + + test('should add "- " at the beggining of each line of the input string', () => { + expect(JSON.stringify(modifyListLines(listNoDashes.split('\n'), 0, '- '))).toBe(JSON.stringify(listWithDashes.split('\n'))); + }); +}); diff --git a/packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.ts b/packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.ts index 26606421c0..ad2c2c8a09 100644 --- a/packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.ts +++ b/packages/app-desktop/gui/NoteEditor/NoteBody/CodeMirror/utils/useCursorUtils.ts @@ -1,6 +1,24 @@ import markdownUtils from '@joplin/lib/markdownUtils'; import Setting from '@joplin/lib/models/Setting'; - +export function modifyListLines(lines: string[],num: number,listSymbol: string) { + for (let j = 0; j < lines.length; j++) { + const line = lines[j]; + if (!line && j === lines.length - 1) continue; + // Only add the list token if it's not already there + // if it is, remove it + if (!line.startsWith(listSymbol)) { + if (num) { + lines[j] = `${num.toString()}. ${line}`; + num++; + } else { + lines[j] = listSymbol + line; + } + } else { + lines[j] = line.substr(listSymbol.length, line.length - listSymbol.length); + } + } + return lines; +} // Helper functions that use the cursor export default function useCursorUtils(CodeMirror: any) { @@ -81,28 +99,12 @@ export default function useCursorUtils(CodeMirror: any) { for (let i = 0; i < selectedStrings.length; i++) { const selected = selectedStrings[i]; - let num = markdownUtils.olLineNumber(string1); + const num = markdownUtils.olLineNumber(string1); const lines = selected.split(/\r?\n/); // Save the newline character to restore it later const newLines = selected.match(/\r?\n/); - - for (let j = 0; j < lines.length; j++) { - const line = lines[j]; - // Only add the list token if it's not already there - // if it is, remove it - if (!line.startsWith(string1)) { - if (num) { - lines[j] = `${num.toString()}. ${line}`; - num++; - } else { - lines[j] = string1 + line; - } - } else { - lines[j] = line.substr(string1.length, line.length - string1.length); - } - } - + modifyListLines(lines,num,string1); const newLine = newLines !== null ? newLines[0] : '\n'; selectedStrings[i] = lines.join(newLine); }