diff --git a/client/src/app/core/ui-services/linenumbering.service.spec.ts b/client/src/app/core/ui-services/linenumbering.service.spec.ts index 8ac85cf20..6c73938f5 100644 --- a/client/src/app/core/ui-services/linenumbering.service.spec.ts +++ b/client/src/app/core/ui-services/linenumbering.service.spec.ts @@ -774,6 +774,31 @@ describe('LinenumberingService', () => { })); }); + describe('adapting html for pdf generation', () => { + it('splits inline tags', inject([LinenumberingService], (service: LinenumberingService) => { + const inHtml = + '
' + + noMarkup(1) + + 'Line 1' + + brMarkup(2) + + 'Line 2' + + brMarkup(3) + + 'Line 3' + + '
' + + noMarkup(1) + + 'Line 1' + + brMarkup(2) + + 'Line 2' + + brMarkup(3) + + 'Line 3' + + '
' + longstr(100) + '
'; diff --git a/client/src/app/core/ui-services/linenumbering.service.ts b/client/src/app/core/ui-services/linenumbering.service.ts index 4fe81e352..dd1069201 100644 --- a/client/src/app/core/ui-services/linenumbering.service.ts +++ b/client/src/app/core/ui-services/linenumbering.service.ts @@ -1027,4 +1027,68 @@ export class LinenumberingService { return html; } + + /** + * Helper function that does the actual work for `splitInlineElementsAtLineBreaks` + * + * @param {Element} lineNumber + */ + private splitInlineElementsAtLineBreak(lineNumber: Element): void { + const parentIsInline = (el: Element) => this.isInlineElement(el.parentElement); + while (parentIsInline(lineNumber)) { + const parent: Element = lineNumber.parentElement; + const beforeParent: Element =...[linebreak]...
` + * is therefore converted into + * `...[linebreak]...
+ * + * This function is mainly provided for the PDF generation + * + * @param {string} html + * @returns {string} + */ + public splitInlineElementsAtLineBreaks(html: string): string { + const fragment = this.htmlToFragment(html); + const lineNumbers = fragment.querySelectorAll('span.os-line-number'); + lineNumbers.forEach((lineNumber: Element) => { + this.splitInlineElementsAtLineBreak(lineNumber); + }); + + return this.fragmentToHtml(fragment); + } }