From a96702b0a866e8a189c59313340b2cbf331bbddc Mon Sep 17 00:00:00 2001 From: Kilian Singer Date: Wed, 20 Aug 2025 18:10:18 +0200 Subject: [PATCH] used DOMParser to convert HTML to plain text --- js/mzta-utils.js | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/js/mzta-utils.js b/js/mzta-utils.js index 732e29b0..a5870971 100644 --- a/js/mzta-utils.js +++ b/js/mzta-utils.js @@ -198,19 +198,24 @@ export function stripHtmlKeepLines(htmlString) { .replace(/<[^>]*>/g, '') // removes any other HTML tags .trim(); // removes leading/trailing whitespace } - -export function htmlBodyToPlainText(html) { - return html - .replace(//gi, '') - .replace(//gi, '\n') - .replace(/<\/p\s*>/gi, '\n') - .replace(//gi, '') - .replace(/<\/(div|section|article|li|ul|ol|table|tr|td|th)>/gi, '\n') // newline for block tags - .replace(/<[^>]*>/g, '') // remove all other tags with no extra spaces - .replace(/[ \t]+\n/g, '\n') - .replace(/\n{2,}/g, '\n') - .replace(/[ \t]+/g, ' ') - .trim(); +function htmlBodyToPlainText(htmlString) { + // Create a new DOMParser instance + const parser = new DOMParser(); + // Parse the HTML string + const doc = parser.parseFromString(htmlString, 'text/html'); + + // remove invisible elements https://stackoverflow.com/questions/39813081/queryselector-where-display-is-not-none + // return doc; + const docsan=doc.querySelectorAll('[style*="visibility:hidden"]').forEach(e => e.remove());//.querySelector('html').children.not(':visible').remove() + // Extract text content + const textContent = doc.body.textContent || ""; + // Trim whitespace + return textContent + .replace(/[ \t]+\n/g, '\n') + .replace(/\n{2,}/g, '\n') + .replace(/[ \t]+/g, ' ') + .replace(/ /gi,"") + .trim(); } export function convertNewlinesToBr(text) {