diff --git a/CHANGELOG.md b/CHANGELOG.md index f97682f1..671e06c1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## [1.63] - 2020-08-12 +## [1.64] - 2020-08-12 * Showcase list of Features in Purchase Screen * Fix: Payment slider being glitchy * Fix: MetaData Settings page crashing diff --git a/lib/widgets/markdown_toolbar.dart b/lib/widgets/markdown_toolbar.dart index 127be37d..cca4002d 100644 --- a/lib/widgets/markdown_toolbar.dart +++ b/lib/widgets/markdown_toolbar.dart @@ -114,9 +114,19 @@ TextEditingValue modifyCurrentLine( // Check if already present if (text.startsWith(char, lineStartPos)) { //print('Removing `$char`'); + var endOffset = cursorPos; + //print("End Offset: $endOffset"); + if (endOffset > lineStartPos) { + endOffset -= char.length; + //print("End Offset min char: $endOffset"); + } + if (endOffset < lineStartPos) { + endOffset = lineStartPos; + //print("End Offset equal LineStartPos: $endOffset"); + } return TextEditingValue( text: text.replaceFirst(char, '', lineStartPos), - selection: TextSelection.collapsed(offset: cursorPos - char.length), + selection: TextSelection.collapsed(offset: endOffset), ); } diff --git a/test/markdown_toolbar_test.dart b/test/markdown_toolbar_test.dart index 21529bb3..47b29903 100644 --- a/test/markdown_toolbar_test.dart +++ b/test/markdown_toolbar_test.dart @@ -4,11 +4,12 @@ import 'package:test/test.dart'; import 'package:gitjournal/widgets/markdown_toolbar.dart'; void main() { - void _testH1({ + void _testLine({ @required String before, @required int beforeOffset, @required String after, @required int afterOffset, + @required String char, }) { var val = TextEditingValue( text: before, @@ -20,8 +21,30 @@ void main() { selection: TextSelection.collapsed(offset: afterOffset), ); - expect(modifyCurrentLine(val, '# '), expectedVal); - expect(modifyCurrentLine(expectedVal, '# '), val); + expect(modifyCurrentLine(val, char), expectedVal); + } + + void _testH1({ + @required String before, + @required int beforeOffset, + @required String after, + @required int afterOffset, + }) { + _testLine( + before: before, + beforeOffset: beforeOffset, + after: after, + afterOffset: afterOffset, + char: '# ', + ); + + _testLine( + before: after, + beforeOffset: afterOffset, + after: before, + afterOffset: beforeOffset, + char: '# ', + ); } test('Adds a header to the first line correctly', () { @@ -60,6 +83,23 @@ void main() { ); }); - // Removes when cursor is at the start of the line - // Removes when cursor is in between '#' and ' ' + test('Removes header when cursor is at the start of the line', () { + _testLine( + before: 'Hi\n# Hello Darkness\nFire', + beforeOffset: 3, + after: 'Hi\nHello Darkness\nFire', + afterOffset: 3, + char: '# ', + ); + }); + + test("Removes header when cursor is in between '#' and ' '", () { + _testLine( + before: 'Hi\n# Hello Darkness\nFire', + beforeOffset: 4, + after: 'Hi\nHello Darkness\nFire', + afterOffset: 3, + char: '# ', + ); + }); }