courrier preview
This commit is contained in:
parent
0813a70184
commit
af8ba0b7b5
@ -213,7 +213,7 @@ export function processHtmlContent(htmlContent: string, textContent?: string): s
|
|||||||
// Use the centralized sanitizeHtml function
|
// Use the centralized sanitizeHtml function
|
||||||
let sanitizedContent = sanitizeHtml(htmlContent);
|
let sanitizedContent = sanitizeHtml(htmlContent);
|
||||||
|
|
||||||
// Fix URL encoding issues
|
// Fix URL encoding issues and clean up content
|
||||||
try {
|
try {
|
||||||
if (typeof window !== 'undefined' && typeof document !== 'undefined') {
|
if (typeof window !== 'undefined' && typeof document !== 'undefined') {
|
||||||
// Temporary element to manipulate the HTML
|
// Temporary element to manipulate the HTML
|
||||||
@ -261,11 +261,45 @@ export function processHtmlContent(htmlContent: string, textContent?: string): s
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Clean up excessive whitespace and empty elements
|
||||||
|
// Find all text nodes and normalize whitespace
|
||||||
|
const walker = document.createTreeWalker(
|
||||||
|
tempDiv,
|
||||||
|
NodeFilter.SHOW_TEXT,
|
||||||
|
null
|
||||||
|
);
|
||||||
|
|
||||||
|
const textNodes = [];
|
||||||
|
while (walker.nextNode()) {
|
||||||
|
textNodes.push(walker.currentNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process text nodes to normalize whitespace
|
||||||
|
textNodes.forEach(node => {
|
||||||
|
if (node.nodeValue) {
|
||||||
|
// Replace sequences of whitespace with a single space
|
||||||
|
node.nodeValue = node.nodeValue.replace(/\s+/g, ' ').trim();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Remove empty paragraphs and divs that contain only whitespace
|
||||||
|
const emptyElements = tempDiv.querySelectorAll('p, div, span');
|
||||||
|
emptyElements.forEach(el => {
|
||||||
|
if (el.innerHTML.trim() === '' || el.innerHTML === ' ') {
|
||||||
|
el.parentNode?.removeChild(el);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Remove excessive consecutive <br> tags (more than 2)
|
||||||
|
let html = tempDiv.innerHTML;
|
||||||
|
html = html.replace(/(<br\s*\/?>\s*){3,}/gi, '<br><br>');
|
||||||
|
tempDiv.innerHTML = html;
|
||||||
|
|
||||||
// Get the fixed HTML
|
// Get the fixed HTML
|
||||||
sanitizedContent = tempDiv.innerHTML;
|
sanitizedContent = tempDiv.innerHTML;
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('Error fixing URLs in content:', e);
|
console.error('Error fixing content:', e);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Fix common email client quirks without breaking cid: URLs
|
// Fix common email client quirks without breaking cid: URLs
|
||||||
@ -277,7 +311,9 @@ export function processHtmlContent(htmlContent: string, textContent?: string): s
|
|||||||
// Fix for base64 images that might be broken across lines
|
// Fix for base64 images that might be broken across lines
|
||||||
.replace(/src="data:image\/[^;]+;base64,\s*([^"]+)\s*"/gi, (match, p1) => {
|
.replace(/src="data:image\/[^;]+;base64,\s*([^"]+)\s*"/gi, (match, p1) => {
|
||||||
return `src="data:image/png;base64,${p1.replace(/\s+/g, '')}"`;
|
return `src="data:image/png;base64,${p1.replace(/\s+/g, '')}"`;
|
||||||
});
|
})
|
||||||
|
// Remove excessive whitespace from the HTML string itself
|
||||||
|
.replace(/>\s+</g, '> <');
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error processing HTML content:', error);
|
console.error('Error processing HTML content:', error);
|
||||||
return htmlContent;
|
return htmlContent;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user