Implement removeAloneBRs function to clean up <br> tags and enhance HTML rendering
This commit is contained in:
parent
72428d8ee5
commit
c90ee66fb4
1 changed files with 37 additions and 5 deletions
|
|
@ -338,10 +338,10 @@ class MessagesArea extends HTMLElement {
|
||||||
if(promptData.mailMessageId == -1) { // we are using the reply from the compose window!
|
if(promptData.mailMessageId == -1) { // we are using the reply from the compose window!
|
||||||
promptData.action = "2"; // replace text
|
promptData.action = "2"; // replace text
|
||||||
}
|
}
|
||||||
let finalText = fullTextHTMLAtAssignment;
|
let finalText = removeAloneBRs(fullTextHTMLAtAssignment);
|
||||||
const selectedHTML = this.getCurrentSelectionHTML();
|
const selectedHTML = this.getCurrentSelectionHTML();
|
||||||
if(selectedHTML != "") {
|
if(selectedHTML != "") {
|
||||||
finalText = selectedHTML;
|
finalText = removeAloneBRs(selectedHTML);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch(promptData.action) {
|
switch(promptData.action) {
|
||||||
|
|
@ -522,9 +522,11 @@ class MessagesArea extends HTMLElement {
|
||||||
|
|
||||||
// Convert Markdown to DOM nodes using the markdown-it library
|
// Convert Markdown to DOM nodes using the markdown-it library
|
||||||
const md = window.markdownit();
|
const md = window.markdownit();
|
||||||
const html = md.render(fullText);
|
const html = convertNewlinesToBr(md.render(fullText));
|
||||||
|
|
||||||
this.fullTextHTML += html;
|
this.fullTextHTML += html;
|
||||||
|
|
||||||
|
// console.log(">>>>>>>>>>>>>>>> flushAccumulatingMessage this.fullTextHTML: " + this.fullTextHTML);
|
||||||
|
|
||||||
// Create a new DOM parser
|
// Create a new DOM parser
|
||||||
const parser = new DOMParser();
|
const parser = new DOMParser();
|
||||||
|
|
@ -562,12 +564,42 @@ customElements.define('messages-area', MessagesArea);
|
||||||
|
|
||||||
|
|
||||||
function htmlStringToFragment(htmlString) {
|
function htmlStringToFragment(htmlString) {
|
||||||
console.log(">>>>>>>>>>>>>>>> htmlStringToFragment htmlString: " + htmlString);
|
// console.log(">>>>>>>>>>>>>>>> htmlStringToFragment htmlString: " + htmlString);
|
||||||
const normalizedHtml = htmlString.replace(/\n/g, '<br>');
|
const normalizedHtml = htmlString.replace(/\n/g, '<br>');
|
||||||
console.log(">>>>>>>>>>>>>>>> htmlStringToFragment normalizedHtml: " + normalizedHtml);
|
// console.log(">>>>>>>>>>>>>>>> htmlStringToFragment normalizedHtml: " + normalizedHtml);
|
||||||
const parser = new DOMParser();
|
const parser = new DOMParser();
|
||||||
const doc = parser.parseFromString(normalizedHtml, 'text/html');
|
const doc = parser.parseFromString(normalizedHtml, 'text/html');
|
||||||
const fragment = document.createDocumentFragment();
|
const fragment = document.createDocumentFragment();
|
||||||
Array.from(doc.body.childNodes).forEach(node => fragment.appendChild(node));
|
Array.from(doc.body.childNodes).forEach(node => fragment.appendChild(node));
|
||||||
return fragment;
|
return fragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
function convertNewlinesToBr(text) {
|
||||||
|
return text.replace(/\n/g, '<br>');
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeAloneBRs(htmlString) {
|
||||||
|
const parser = new DOMParser();
|
||||||
|
const doc = parser.parseFromString(htmlString, 'text/html');
|
||||||
|
|
||||||
|
const brElements = Array.from(doc.querySelectorAll('br'));
|
||||||
|
|
||||||
|
brElements.forEach(br => {
|
||||||
|
let current = br;
|
||||||
|
let isInsideP = false;
|
||||||
|
|
||||||
|
while (current.parentElement) {
|
||||||
|
if (current.parentElement.tagName.toLowerCase() === 'p') {
|
||||||
|
isInsideP = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
current = current.parentElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isInsideP) {
|
||||||
|
br.remove();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return doc.body.innerHTML;
|
||||||
}
|
}
|
||||||
Loading…
Reference in a new issue