diff --git a/openslides/motions/static/js/motions/linenumbering.js b/openslides/motions/static/js/motions/linenumbering.js index 2b7d91c03..f8c35d98e 100644 --- a/openslides/motions/static/js/motions/linenumbering.js +++ b/openslides/motions/static/js/motions/linenumbering.js @@ -302,6 +302,15 @@ angular.module('OpenSlidesApp.motions.lineNumbering', []) for (i = 0; i < oldChildren.length; i++) { if (oldChildren[i].nodeType == TEXT_NODE) { + if (!oldChildren[i].nodeValue.match(/\S/)) { + // White space nodes between block elements should be ignored + var prevIsBlock = (i > 0 && !this._isInlineElement(oldChildren[i - 1])); + var nextIsBlock = (i < oldChildren.length - 1 && !this._isInlineElement(oldChildren[i + 1])); + if ((prevIsBlock && nextIsBlock) || (i === 0 && nextIsBlock) || (i === oldChildren.length - 1 && prevIsBlock)) { + node.appendChild(oldChildren[i]); + continue; + } + } var ret = this._textNodeToLines(oldChildren[i], length, highlight); for (var j = 0; j < ret.length; j++) { node.appendChild(ret[j]); diff --git a/tests/karma/motions/linenumbering.service.test.js b/tests/karma/motions/linenumbering.service.test.js index bfa747577..5b89ee212 100644 --- a/tests/karma/motions/linenumbering.service.test.js +++ b/tests/karma/motions/linenumbering.service.test.js @@ -251,4 +251,18 @@ describe('linenumbering', function () { expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml); }); }); + + describe('behavior regarding ckeditor', function() { + it('does not count empty lines, case 1', function () { + var inHtml = "

Line 1

\n\n

Line 2

"; + var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80); + expect(outHtml).toBe('

' + noMarkup(1) + 'Line 1

' + "\n\n" + '

' + noMarkup(2) + 'Line 2

'); + }); + + it('does not count empty lines, case 2', function () { + var inHtml = ""; + var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80); + expect(outHtml).toBe(""); + }); + }); });