mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	fix textarea newline handle (#32966)
- Fix cursor position if input newline on middle of lines - ~Increment number if numbered list~  --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -4,13 +4,24 @@ test('EditorMarkdown', () => { | ||||
|   const textarea = document.createElement('textarea'); | ||||
|   initTextareaMarkdown(textarea); | ||||
|  | ||||
|   const testInput = (value, expected) => { | ||||
|     textarea.value = value; | ||||
|     textarea.setSelectionRange(value.length, value.length); | ||||
|   type ValueWithCursor = string | { | ||||
|     value: string; | ||||
|     pos: number; | ||||
|   } | ||||
|   const testInput = (input: ValueWithCursor, result: ValueWithCursor) => { | ||||
|     const intputValue = typeof input === 'string' ? input : input.value; | ||||
|     const inputPos = typeof input === 'string' ? intputValue.length : input.pos; | ||||
|     textarea.value = intputValue; | ||||
|     textarea.setSelectionRange(inputPos, inputPos); | ||||
|  | ||||
|     const e = new KeyboardEvent('keydown', {key: 'Enter', cancelable: true}); | ||||
|     textarea.dispatchEvent(e); | ||||
|     if (!e.defaultPrevented) textarea.value += '\n'; | ||||
|     expect(textarea.value).toEqual(expected); | ||||
|     if (!e.defaultPrevented) textarea.value += '\n'; // simulate default behavior | ||||
|  | ||||
|     const expectedValue = typeof result === 'string' ? result : result.value; | ||||
|     const expectedPos = typeof result === 'string' ? expectedValue.length : result.pos; | ||||
|     expect(textarea.value).toEqual(expectedValue); | ||||
|     expect(textarea.selectionStart).toEqual(expectedPos); | ||||
|   }; | ||||
|  | ||||
|   testInput('-', '-\n'); | ||||
| @@ -18,8 +29,11 @@ test('EditorMarkdown', () => { | ||||
|  | ||||
|   testInput('- ', ''); | ||||
|   testInput('1. ', ''); | ||||
|   testInput({value: '1. \n2. ', pos: 3}, {value: '\n2. ', pos: 0}); | ||||
|  | ||||
|   testInput('- x', '- x\n- '); | ||||
|   testInput('1. foo', '1. foo\n1. '); | ||||
|   testInput({value: '1. a\n2. b\n3. c', pos: 4}, {value: '1. a\n1. \n2. b\n3. c', pos: 8}); | ||||
|   testInput('- [ ]', '- [ ]\n- '); | ||||
|   testInput('- [ ] foo', '- [ ] foo\n- [ ] '); | ||||
|   testInput('* [x] foo', '* [x] foo\n* [ ] '); | ||||
|   | ||||
| @@ -92,6 +92,7 @@ function handleNewline(textarea: HTMLTextAreaElement, e: Event) { | ||||
|   if (!line) { | ||||
|     // clear current line if we only have i.e. '1. ' and the user presses enter again to finish creating a list | ||||
|     textarea.value = value.slice(0, lineStart) + value.slice(lineEnd); | ||||
|     textarea.setSelectionRange(selStart - prefix.length, selStart - prefix.length); | ||||
|   } else { | ||||
|     // start a new line with the same indention and prefix | ||||
|     let newPrefix = prefix; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user