Merge branch '27978-improve-task-list-ux' into 'master'
Only add a newline in Markdown Editor if the current line is not empty Closes #27978 See merge request !9455
This commit is contained in:
commit
b01a78dc8a
3 changed files with 78 additions and 4 deletions
|
@ -65,9 +65,10 @@ require('vendor/latinise');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
gl.text.insertText = function(textArea, text, tag, blockTag, selected, wrap) {
|
gl.text.insertText = function(textArea, text, tag, blockTag, selected, wrap) {
|
||||||
var insertText, inserted, selectedSplit, startChar, removedLastNewLine, removedFirstNewLine;
|
var insertText, inserted, selectedSplit, startChar, removedLastNewLine, removedFirstNewLine, currentLineEmpty, lastNewLine;
|
||||||
removedLastNewLine = false;
|
removedLastNewLine = false;
|
||||||
removedFirstNewLine = false;
|
removedFirstNewLine = false;
|
||||||
|
currentLineEmpty = false;
|
||||||
|
|
||||||
// Remove the first newline
|
// Remove the first newline
|
||||||
if (selected.indexOf('\n') === 0) {
|
if (selected.indexOf('\n') === 0) {
|
||||||
|
@ -82,7 +83,17 @@ require('vendor/latinise');
|
||||||
}
|
}
|
||||||
|
|
||||||
selectedSplit = selected.split('\n');
|
selectedSplit = selected.split('\n');
|
||||||
startChar = !wrap && textArea.selectionStart > 0 ? '\n' : '';
|
|
||||||
|
if (!wrap) {
|
||||||
|
lastNewLine = textArea.value.substr(0, textArea.selectionStart).lastIndexOf('\n');
|
||||||
|
|
||||||
|
// Check whether the current line is empty or consists only of spaces(=handle as empty)
|
||||||
|
if (/^\s*$/.test(textArea.value.substring(lastNewLine, textArea.selectionStart))) {
|
||||||
|
currentLineEmpty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
startChar = !wrap && !currentLineEmpty && textArea.selectionStart > 0 ? '\n' : '';
|
||||||
|
|
||||||
if (selectedSplit.length > 1 && (!wrap || (blockTag != null))) {
|
if (selectedSplit.length > 1 && (!wrap || (blockTag != null))) {
|
||||||
if (blockTag != null) {
|
if (blockTag != null) {
|
||||||
|
@ -142,9 +153,8 @@ require('vendor/latinise');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
gl.text.updateText = function(textArea, tag, blockTag, wrap) {
|
gl.text.updateText = function(textArea, tag, blockTag, wrap) {
|
||||||
var $textArea, oldVal, selected, text;
|
var $textArea, selected, text;
|
||||||
$textArea = $(textArea);
|
$textArea = $(textArea);
|
||||||
oldVal = $textArea.val();
|
|
||||||
textArea = $textArea.get(0);
|
textArea = $textArea.get(0);
|
||||||
text = $textArea.val();
|
text = $textArea.val();
|
||||||
selected = this.selectedText(text, textArea);
|
selected = this.selectedText(text, textArea);
|
||||||
|
|
4
changelogs/unreleased/27978-improve-task-list-ux.yml
Normal file
4
changelogs/unreleased/27978-improve-task-list-ux.yml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
---
|
||||||
|
title: Only add a newline in the Markdown Editor if the current line is not empty
|
||||||
|
merge_request: 9455
|
||||||
|
author: Jan Christophersen
|
|
@ -46,5 +46,65 @@ require('~/lib/utils/text_utility');
|
||||||
expect(gl.text.highCountTrim(45)).toBe(45);
|
expect(gl.text.highCountTrim(45)).toBe(45);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
describe('gl.text.insertText', () => {
|
||||||
|
let textArea;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
textArea = document.createElement('textarea');
|
||||||
|
document.querySelector('body').appendChild(textArea);
|
||||||
|
});
|
||||||
|
|
||||||
|
afterAll(() => {
|
||||||
|
textArea.parentNode.removeChild(textArea);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('without selection', () => {
|
||||||
|
it('inserts the tag on an empty line', () => {
|
||||||
|
const initialValue = '';
|
||||||
|
|
||||||
|
textArea.value = initialValue;
|
||||||
|
textArea.selectionStart = 0;
|
||||||
|
textArea.selectionEnd = 0;
|
||||||
|
|
||||||
|
gl.text.insertText(textArea, textArea.value, '*', null, '', false);
|
||||||
|
|
||||||
|
expect(textArea.value).toEqual(`${initialValue}* `);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('inserts the tag on a new line if the current one is not empty', () => {
|
||||||
|
const initialValue = 'some text';
|
||||||
|
|
||||||
|
textArea.value = initialValue;
|
||||||
|
textArea.setSelectionRange(initialValue.length, initialValue.length);
|
||||||
|
|
||||||
|
gl.text.insertText(textArea, textArea.value, '*', null, '', false);
|
||||||
|
|
||||||
|
expect(textArea.value).toEqual(`${initialValue}\n* `);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('inserts the tag on the same line if the current line only contains spaces', () => {
|
||||||
|
const initialValue = ' ';
|
||||||
|
|
||||||
|
textArea.value = initialValue;
|
||||||
|
textArea.setSelectionRange(initialValue.length, initialValue.length);
|
||||||
|
|
||||||
|
gl.text.insertText(textArea, textArea.value, '*', null, '', false);
|
||||||
|
|
||||||
|
expect(textArea.value).toEqual(`${initialValue}* `);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('inserts the tag on the same line if the current line only contains tabs', () => {
|
||||||
|
const initialValue = '\t\t\t';
|
||||||
|
|
||||||
|
textArea.value = initialValue;
|
||||||
|
textArea.setSelectionRange(initialValue.length, initialValue.length);
|
||||||
|
|
||||||
|
gl.text.insertText(textArea, textArea.value, '*', null, '', false);
|
||||||
|
|
||||||
|
expect(textArea.value).toEqual(`${initialValue}* `);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
})();
|
})();
|
||||||
|
|
Loading…
Reference in a new issue