Line breaks in inline diffs
This commit is contained in:
parent
c8f64783bc
commit
0d98fa3a88
@ -760,6 +760,11 @@ angular.module('OpenSlidesApp.motions', [
|
|||||||
oldText = lineNumberingService.insertLineNumbers(oldText, lineLength, null, null, this.line_from);
|
oldText = lineNumberingService.insertLineNumbers(oldText, lineLength, null, null, this.line_from);
|
||||||
var diff = diffService.diff(oldText, this.text);
|
var diff = diffService.diff(oldText, this.text);
|
||||||
|
|
||||||
|
// If an insertion makes the line longer than the line length limit, we need two line breaking runs:
|
||||||
|
// - First, for the official line numbers, ignoring insertions (that's been done some lines before)
|
||||||
|
// - Second, another one to prevent the displayed including insertions to exceed the page width
|
||||||
|
diff = lineNumberingService.insertLineBreaksWithoutNumbers(diff, lineLength, true);
|
||||||
|
|
||||||
if (highlight > 0) {
|
if (highlight > 0) {
|
||||||
diff = lineNumberingService.highlightLine(diff, highlight);
|
diff = lineNumberingService.highlightLine(diff, highlight);
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
this._currentLineNumber = null;
|
this._currentLineNumber = null;
|
||||||
this._prependLineNumberToFirstText = false;
|
this._prependLineNumberToFirstText = false;
|
||||||
this._ignoreNextRegularLineNumber = false;
|
this._ignoreNextRegularLineNumber = false;
|
||||||
|
this._ignoreInsertedText = false;
|
||||||
|
|
||||||
var lineNumberCache = $cacheFactory('linenumbering.service');
|
var lineNumberCache = $cacheFactory('linenumbering.service');
|
||||||
|
|
||||||
@ -46,7 +47,13 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
};
|
};
|
||||||
|
|
||||||
this._isIgnoredByLineNumbering = function (node) {
|
this._isIgnoredByLineNumbering = function (node) {
|
||||||
return (node.nodeName == 'INS');
|
if (node.nodeName === 'INS') {
|
||||||
|
return this._ignoreInsertedText;
|
||||||
|
} else if (this._isOsLineNumberNode(node)) {
|
||||||
|
return true;
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
this._isOsLineBreakNode = function (node) {
|
this._isOsLineBreakNode = function (node) {
|
||||||
@ -142,7 +149,7 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
highlight = -1;
|
highlight = -1;
|
||||||
}
|
}
|
||||||
if (firstTextNode) {
|
if (firstTextNode) {
|
||||||
if (highlight == service._currentLineNumber - 1) {
|
if (highlight === service._currentLineNumber - 1) {
|
||||||
node = document.createElement('span');
|
node = document.createElement('span');
|
||||||
node.setAttribute('class', 'highlight');
|
node.setAttribute('class', 'highlight');
|
||||||
node.innerHTML = text;
|
node.innerHTML = text;
|
||||||
@ -151,7 +158,7 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
}
|
}
|
||||||
firstTextNode = false;
|
firstTextNode = false;
|
||||||
} else {
|
} else {
|
||||||
if (service._currentLineNumber == highlight) {
|
if (service._currentLineNumber === highlight && highlight !== null) {
|
||||||
node = document.createElement('span');
|
node = document.createElement('span');
|
||||||
node.setAttribute('class', 'highlight');
|
node.setAttribute('class', 'highlight');
|
||||||
node.innerHTML = text;
|
node.innerHTML = text;
|
||||||
@ -159,7 +166,9 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
node = document.createTextNode(text);
|
node = document.createTextNode(text);
|
||||||
}
|
}
|
||||||
out.push(service._createLineBreak());
|
out.push(service._createLineBreak());
|
||||||
out.push(service._createLineNumber());
|
if (service._currentLineNumber !== null) {
|
||||||
|
out.push(service._createLineNumber());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
out.push(node);
|
out.push(node);
|
||||||
};
|
};
|
||||||
@ -171,12 +180,14 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
// This happens if a previous inline element exactly stretches to the end of the line
|
// This happens if a previous inline element exactly stretches to the end of the line
|
||||||
if (this._currentInlineOffset >= length) {
|
if (this._currentInlineOffset >= length) {
|
||||||
out.push(service._createLineBreak());
|
out.push(service._createLineBreak());
|
||||||
out.push(service._createLineNumber());
|
if (this._currentLineNumber !== null) {
|
||||||
|
out.push(service._createLineNumber());
|
||||||
|
}
|
||||||
this._currentInlineOffset = 0;
|
this._currentInlineOffset = 0;
|
||||||
} else if (this._prependLineNumberToFirstText) {
|
} else if (this._prependLineNumberToFirstText) {
|
||||||
if (this._ignoreNextRegularLineNumber) {
|
if (this._ignoreNextRegularLineNumber) {
|
||||||
this._ignoreNextRegularLineNumber = false;
|
this._ignoreNextRegularLineNumber = false;
|
||||||
} else {
|
} else if (service._currentLineNumber !== null) {
|
||||||
out.push(service._createLineNumber());
|
out.push(service._createLineNumber());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -270,7 +281,9 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
if (overlength && this._isInlineElement(oldChildren[i])) {
|
if (overlength && this._isInlineElement(oldChildren[i])) {
|
||||||
this._currentInlineOffset = 0;
|
this._currentInlineOffset = 0;
|
||||||
node.appendChild(this._createLineBreak());
|
node.appendChild(this._createLineBreak());
|
||||||
node.appendChild(this._createLineNumber());
|
if (this._currentLineNumber !== null) {
|
||||||
|
node.appendChild(this._createLineNumber());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var changedNode = this._insertLineNumbersToNode(oldChildren[i], length, highlight);
|
var changedNode = this._insertLineNumbersToNode(oldChildren[i], length, highlight);
|
||||||
this._moveLeadingLineBreaksToOuterNode(changedNode, node);
|
this._moveLeadingLineBreaksToOuterNode(changedNode, node);
|
||||||
@ -357,7 +370,9 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
if (overlength && this._isInlineElement(oldChildren[i]) && !this._isIgnoredByLineNumbering(oldChildren[i])) {
|
if (overlength && this._isInlineElement(oldChildren[i]) && !this._isIgnoredByLineNumbering(oldChildren[i])) {
|
||||||
this._currentInlineOffset = 0;
|
this._currentInlineOffset = 0;
|
||||||
node.appendChild(this._createLineBreak());
|
node.appendChild(this._createLineBreak());
|
||||||
node.appendChild(this._createLineNumber());
|
if (this._currentLineNumber !== null) {
|
||||||
|
node.appendChild(this._createLineNumber());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
var changedNode = this._insertLineNumbersToNode(oldChildren[i], length, highlight);
|
var changedNode = this._insertLineNumbersToNode(oldChildren[i], length, highlight);
|
||||||
this._moveLeadingLineBreaksToOuterNode(changedNode, node);
|
this._moveLeadingLineBreaksToOuterNode(changedNode, node);
|
||||||
@ -379,7 +394,7 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
throw 'This method may only be called for ELEMENT-nodes: ' + node.nodeValue;
|
throw 'This method may only be called for ELEMENT-nodes: ' + node.nodeValue;
|
||||||
}
|
}
|
||||||
if (this._isIgnoredByLineNumbering(node)) {
|
if (this._isIgnoredByLineNumbering(node)) {
|
||||||
if (this._currentInlineOffset === 0) {
|
if (this._currentInlineOffset === 0 && this._currentLineNumber !== null) {
|
||||||
var lineNumberNode = this._createLineNumber();
|
var lineNumberNode = this._createLineNumber();
|
||||||
if (lineNumberNode) {
|
if (lineNumberNode) {
|
||||||
node.insertBefore(lineNumberNode, node.firstChild);
|
node.insertBefore(lineNumberNode, node.firstChild);
|
||||||
@ -420,8 +435,8 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
*
|
*
|
||||||
* @param {string} html
|
* @param {string} html
|
||||||
* @param {number} lineLength
|
* @param {number} lineLength
|
||||||
* @param {number} highlight - optional
|
* @param {number|null} highlight - optional
|
||||||
* @param {number} firstLine
|
* @param {number|null} firstLine
|
||||||
*/
|
*/
|
||||||
this.insertLineNumbersNode = function (html, lineLength, highlight, firstLine) {
|
this.insertLineNumbersNode = function (html, lineLength, highlight, firstLine) {
|
||||||
var root = document.createElement('div');
|
var root = document.createElement('div');
|
||||||
@ -429,12 +444,16 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
|
|
||||||
this._currentInlineOffset = 0;
|
this._currentInlineOffset = 0;
|
||||||
if (firstLine) {
|
if (firstLine) {
|
||||||
this._currentLineNumber = firstLine;
|
this._currentLineNumber = parseInt(firstLine);
|
||||||
} else {
|
} else {
|
||||||
this._currentLineNumber = 1;
|
this._currentLineNumber = 1;
|
||||||
}
|
}
|
||||||
|
if (highlight !== null) {
|
||||||
|
highlight = parseInt(highlight);
|
||||||
|
}
|
||||||
this._prependLineNumberToFirstText = true;
|
this._prependLineNumberToFirstText = true;
|
||||||
this._ignoreNextRegularLineNumber = false;
|
this._ignoreNextRegularLineNumber = false;
|
||||||
|
this._ignoreInsertedText = true;
|
||||||
|
|
||||||
return this._insertLineNumbersToNode(root, lineLength, highlight);
|
return this._insertLineNumbersToNode(root, lineLength, highlight);
|
||||||
};
|
};
|
||||||
@ -443,7 +462,7 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
*
|
*
|
||||||
* @param {string} html
|
* @param {string} html
|
||||||
* @param {number} lineLength
|
* @param {number} lineLength
|
||||||
* @param {string} highlight - optional
|
* @param {number|null} highlight - optional
|
||||||
* @param {function} callback
|
* @param {function} callback
|
||||||
* @param {number} firstLine
|
* @param {number} firstLine
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
@ -460,7 +479,7 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
newHtml = lineNumberCache.get(cacheKey);
|
newHtml = lineNumberCache.get(cacheKey);
|
||||||
|
|
||||||
if (angular.isUndefined(newHtml)) {
|
if (angular.isUndefined(newHtml)) {
|
||||||
newRoot = this.insertLineNumbersNode(html, lineLength, highlight, firstLine);
|
newRoot = this.insertLineNumbersNode(html, lineLength, null, firstLine);
|
||||||
newHtml = newRoot.innerHTML;
|
newHtml = newRoot.innerHTML;
|
||||||
lineNumberCache.put(cacheKey, newHtml);
|
lineNumberCache.put(cacheKey, newHtml);
|
||||||
}
|
}
|
||||||
@ -473,6 +492,26 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
return newHtml;
|
return newHtml;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {string} html
|
||||||
|
* @param {number} lineLength
|
||||||
|
* @param {boolean} countInserted
|
||||||
|
*/
|
||||||
|
this.insertLineBreaksWithoutNumbers = function (html, lineLength, countInserted) {
|
||||||
|
var root = document.createElement('div');
|
||||||
|
root.innerHTML = html;
|
||||||
|
|
||||||
|
this._currentInlineOffset = 0;
|
||||||
|
this._currentLineNumber = null;
|
||||||
|
this._prependLineNumberToFirstText = true;
|
||||||
|
this._ignoreNextRegularLineNumber = false;
|
||||||
|
this._ignoreInsertedText = !countInserted;
|
||||||
|
|
||||||
|
var newRoot = this._insertLineNumbersToNode(root, lineLength, null);
|
||||||
|
|
||||||
|
return newRoot.innerHTML;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} html
|
* @param {string} html
|
||||||
* @returns {string}
|
* @returns {string}
|
||||||
@ -538,6 +577,7 @@ angular.module('OpenSlidesApp.motions.lineNumbering', [])
|
|||||||
* @return {string}
|
* @return {string}
|
||||||
*/
|
*/
|
||||||
this.highlightLine = function (html, lineNumber) {
|
this.highlightLine = function (html, lineNumber) {
|
||||||
|
lineNumber = parseInt(lineNumber);
|
||||||
var fragment = this._htmlToFragment(html),
|
var fragment = this._htmlToFragment(html),
|
||||||
lineNumberNode = this._getLineNumberNode(fragment, lineNumber);
|
lineNumberNode = this._getLineNumberNode(fragment, lineNumber);
|
||||||
|
|
||||||
|
@ -111,6 +111,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
||||||
expect(outHtml).toBe(noMarkup(1) + '<span>Test</span>');
|
expect(outHtml).toBe(noMarkup(1) + '<span>Test</span>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('breaks lines in a simple SPAN', function () {
|
it('breaks lines in a simple SPAN', function () {
|
||||||
@ -118,6 +119,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
||||||
expect(outHtml).toBe(noMarkup(1) + '<span>Lorem ' + brMarkup(2) + 'ipsum ' + brMarkup(3) + 'dolor' + brMarkup(4) + 'sit ' + brMarkup(5) + 'amet</span>');
|
expect(outHtml).toBe(noMarkup(1) + '<span>Lorem ' + brMarkup(2) + 'ipsum ' + brMarkup(3) + 'dolor' + brMarkup(4) + 'sit ' + brMarkup(5) + 'amet</span>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('breaks lines in nested inline elements', function () {
|
it('breaks lines in nested inline elements', function () {
|
||||||
@ -125,6 +127,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
||||||
expect(outHtml).toBe(noMarkup(1) + '<span>Lorem ' + brMarkup(2) + '<strong>ipsum ' + brMarkup(3) + 'dolor' + brMarkup(4) + 'sit</strong> ' + brMarkup(5) + 'amet</span>');
|
expect(outHtml).toBe(noMarkup(1) + '<span>Lorem ' + brMarkup(2) + '<strong>ipsum ' + brMarkup(3) + 'dolor' + brMarkup(4) + 'sit</strong> ' + brMarkup(5) + 'amet</span>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('counts within DEL nodes', function () {
|
it('counts within DEL nodes', function () {
|
||||||
@ -132,6 +135,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 10);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 10);
|
||||||
expect(outHtml).toBe(noMarkup(1) + '1234 <del>1234</del> ' + brMarkup(2) + '1234 1234');
|
expect(outHtml).toBe(noMarkup(1) + '1234 <del>1234</del> ' + brMarkup(2) + '1234 1234');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('handles STRIKE-tags', function () {
|
it('handles STRIKE-tags', function () {
|
||||||
@ -139,6 +143,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe('<p>' + noMarkup(1) + 'et accusam et justo duo dolores et ea <span style="color: #ff0000;"><strike>rebum </strike></span><span style="color: #006400;">Inserted Text</span>. Stet clita kasd ' + brMarkup(2) + 'gubergren,</p>');
|
expect(outHtml).toBe('<p>' + noMarkup(1) + 'et accusam et justo duo dolores et ea <span style="color: #ff0000;"><strike>rebum </strike></span><span style="color: #006400;">Inserted Text</span>. Stet clita kasd ' + brMarkup(2) + 'gubergren,</p>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -149,6 +154,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
||||||
expect(outHtml).toBe('<div>' + noMarkup(1) + 'Test</div>');
|
expect(outHtml).toBe('<div>' + noMarkup(1) + 'Test</div>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('breaks a DIV containing only inline elements', function () {
|
it('breaks a DIV containing only inline elements', function () {
|
||||||
@ -156,6 +162,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
||||||
expect(outHtml).toBe('<div>' + noMarkup(1) + 'Test ' + brMarkup(2) + '<span>Test1' + brMarkup(3) + '234</span>56' + brMarkup(4) + '78 ' + brMarkup(5) + 'Test</div>');
|
expect(outHtml).toBe('<div>' + noMarkup(1) + 'Test ' + brMarkup(2) + '<span>Test1' + brMarkup(3) + '234</span>56' + brMarkup(4) + '78 ' + brMarkup(5) + 'Test</div>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('handles a DIV within a DIV correctly', function () {
|
it('handles a DIV within a DIV correctly', function () {
|
||||||
@ -163,6 +170,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 5);
|
||||||
expect(outHtml).toBe('<div>' + noMarkup(1) + 'Te<div>' + noMarkup(2) + 'Te ' + brMarkup(3) + 'Test</div>' + noMarkup(4) + 'Test</div>');
|
expect(outHtml).toBe('<div>' + noMarkup(1) + 'Te<div>' + noMarkup(2) + 'Te ' + brMarkup(3) + 'Test</div>' + noMarkup(4) + 'Test</div>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('ignores white spaces between block element tags', function () {
|
it('ignores white spaces between block element tags', function () {
|
||||||
@ -170,6 +178,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe("<ul>\n<li>" + noMarkup(1) + 'Test</li>\n</ul>');
|
expect(outHtml).toBe("<ul>\n<li>" + noMarkup(1) + 'Test</li>\n</ul>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -186,6 +195,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe(expected);
|
expect(outHtml).toBe(expected);
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('indents BLOCKQUOTE-elements', function () {
|
it('indents BLOCKQUOTE-elements', function () {
|
||||||
@ -199,6 +209,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe(expected);
|
expect(outHtml).toBe(expected);
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('shortens the line for H1-elements by 1/2', function () {
|
it('shortens the line for H1-elements by 1/2', function () {
|
||||||
@ -208,6 +219,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe(expected);
|
expect(outHtml).toBe(expected);
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('shortens the line for H2-elements by 2/3', function () {
|
it('shortens the line for H2-elements by 2/3', function () {
|
||||||
@ -217,6 +229,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe(expected);
|
expect(outHtml).toBe(expected);
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('indents Ps with 30px-padding by 6 characters', function () {
|
it('indents Ps with 30px-padding by 6 characters', function () {
|
||||||
@ -226,6 +239,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe(expected);
|
expect(outHtml).toBe(expected);
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('breaks before an inline element, if the first word of the new inline element is longer than the remaining line (1)', function () {
|
it('breaks before an inline element, if the first word of the new inline element is longer than the remaining line (1)', function () {
|
||||||
@ -233,6 +247,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe('<p>' + noMarkup(1) + 'Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie ' + brMarkup(2) + '<strong>consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan ' + brMarkup(3) + 'et iusto odio</strong>.</p>');
|
expect(outHtml).toBe('<p>' + noMarkup(1) + 'Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie ' + brMarkup(2) + '<strong>consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan ' + brMarkup(3) + 'et iusto odio</strong>.</p>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('breaks before an inline element, if the first word of the new inline element is longer than the remaining line (2)', function () {
|
it('breaks before an inline element, if the first word of the new inline element is longer than the remaining line (2)', function () {
|
||||||
@ -240,6 +255,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe('<p>' + noMarkup(1) + '<span>Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie ' + brMarkup(2) + '<strong>consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan ' + brMarkup(3) + 'et iusto odio</strong>.</span></p>');
|
expect(outHtml).toBe('<p>' + noMarkup(1) + '<span>Duis autem vel eum iriure dolor in hendrerit in vulputate velit esse molestie ' + brMarkup(2) + '<strong>consequat, vel illum dolore eu feugiat nulla facilisis at vero eros et accumsan ' + brMarkup(3) + 'et iusto odio</strong>.</span></p>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not fail in a weird case', function () {
|
it('does not fail in a weird case', function () {
|
||||||
@ -247,6 +263,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe(noMarkup(1) + '<ins>seid Noch</ins><p></p><p>' + noMarkup(2) + '<ins>Test 123</ins></p>');
|
expect(outHtml).toBe(noMarkup(1) + '<ins>seid Noch</ins><p></p><p>' + noMarkup(2) + '<ins>Test 123</ins></p>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
@ -256,6 +273,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 10);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 10);
|
||||||
expect(outHtml).toBe(noMarkup(1) + '1234 <ins>1234</ins> 1234 ' + brMarkup(2) + '1234');
|
expect(outHtml).toBe(noMarkup(1) + '1234 <ins>1234</ins> 1234 ' + brMarkup(2) + '1234');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('does not create a new line for a trailing INS', function () {
|
it('does not create a new line for a trailing INS', function () {
|
||||||
@ -263,6 +281,7 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe('<p>' + noMarkup(1) + 'et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata ' + brMarkup(2) + 'sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur<ins>dsfsdf23</ins></p>');
|
expect(outHtml).toBe('<p>' + noMarkup(1) + 'et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata ' + brMarkup(2) + 'sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur<ins>dsfsdf23</ins></p>');
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('inserts the line number before the INS, if INS is the first element of the paragraph', function() {
|
it('inserts the line number before the INS, if INS is the first element of the paragraph', function() {
|
||||||
@ -270,6 +289,52 @@ describe('linenumbering', function () {
|
|||||||
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
var outHtml = lineNumberingService.insertLineNumbers(inHtml, 80);
|
||||||
expect(outHtml).toBe("<p>" + noMarkup(1) + "<ins>lauthals </ins>'liebe Kinder, ich will hinaus in den Wald, seid auf der Hut vor dem Wolf!' Und " + brMarkup(2) + "noch etwas mehr Text bis zur nächsten Zeile</p>");
|
expect(outHtml).toBe("<p>" + noMarkup(1) + "<ins>lauthals </ins>'liebe Kinder, ich will hinaus in den Wald, seid auf der Hut vor dem Wolf!' Und " + brMarkup(2) + "noch etwas mehr Text bis zur nächsten Zeile</p>");
|
||||||
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('line breaking without adding line numbers', function() {
|
||||||
|
var plainBr = '<br class="os-line-break">';
|
||||||
|
|
||||||
|
it('breaks a DIV containing only inline elements', function () {
|
||||||
|
var inHtml = "<div>Test <span>Test1234</span>5678 Test</div>";
|
||||||
|
var outHtml = lineNumberingService.insertLineBreaksWithoutNumbers(inHtml, 5);
|
||||||
|
expect(outHtml).toBe('<div>Test ' + plainBr + '<span>Test1' + plainBr + '234</span>56' + plainBr + '78 ' + plainBr + 'Test</div>');
|
||||||
|
expect(lineNumberingService.stripLineNumbers(outHtml)).toBe(inHtml);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('indents BLOCKQUOTE-elements', function () {
|
||||||
|
var inHtml = '<div>' + longstr(100) + '<blockquote>' + longstr(100) + '</blockquote>' + longstr(100) + '</div>';
|
||||||
|
var expected = '<div>' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZAB' + plainBr + 'CDEFGHIJKLMNOPQRSTUV' +
|
||||||
|
'<blockquote>' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGH' + plainBr + 'IJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUV' +
|
||||||
|
'</blockquote>' + 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZAB' + plainBr + 'CDEFGHIJKLMNOPQRSTUV</div>';
|
||||||
|
var outHtml = lineNumberingService.insertLineBreaksWithoutNumbers(inHtml, 80);
|
||||||
|
expect(outHtml).toBe(expected);
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('DOES count within INS nodes', function () {
|
||||||
|
var inHtml = "1234 <ins>1234</ins> 1234 1234";
|
||||||
|
var outHtml = lineNumberingService.insertLineBreaksWithoutNumbers(inHtml, 10, true);
|
||||||
|
expect(outHtml).toBe('1234 <ins>1234</ins> ' + plainBr + '1234 1234');
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('does not create a new line for a trailing INS', function () {
|
||||||
|
var inHtml = "<p>et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur<ins>dsfsdf23</ins></p>";
|
||||||
|
var outHtml = lineNumberingService.insertLineBreaksWithoutNumbers(inHtml, 80, true);
|
||||||
|
expect(outHtml).toBe('<p>et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata ' +
|
||||||
|
plainBr + 'sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur' +
|
||||||
|
plainBr + '<ins>dsfsdf23</ins></p>');
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('ignores witespaces by previously added line numbers', function () {
|
||||||
|
var inHtml = "<p>" + noMarkup(1) + longstr(10) + "</p>";
|
||||||
|
var outHtml = lineNumberingService.insertLineBreaksWithoutNumbers(inHtml, 10, true);
|
||||||
|
expect(outHtml).toBe("<p>" + noMarkup(1) + longstr(10) + "</p>");
|
||||||
|
expect(lineNumberingService.insertLineBreaksWithoutNumbers(outHtml, 80)).toBe(outHtml);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user