fix sse error handling if shop api error part 3

This commit is contained in:
team2
2026-04-25 20:49:45 +02:00
parent 2044a465ad
commit d13e5537ed
6 changed files with 112 additions and 12 deletions

View File

@@ -69,8 +69,28 @@ document.addEventListener('DOMContentLoaded', () => {
) !== null;
}
function isWhitespaceTextNode(node) {
return node.nodeType === Node.TEXT_NODE && (node.textContent || '').trim() === '';
}
function isBreakNode(node) {
return node.nodeType === Node.ELEMENT_NODE && node.tagName === 'BR';
}
function trimEdgeBreaks(element) {
while (element.firstChild && (isWhitespaceTextNode(element.firstChild) || isBreakNode(element.firstChild))) {
element.firstChild.remove();
}
while (element.lastChild && (isWhitespaceTextNode(element.lastChild) || isBreakNode(element.lastChild))) {
element.lastChild.remove();
}
}
function cleanupEmptyBlocks(container) {
container.querySelectorAll('p, div, li, blockquote').forEach((el) => {
trimEdgeBreaks(el);
const html = el.innerHTML
.replace(/<br\s*\/?>/gi, '')
.replace(/&nbsp;/gi, '')
@@ -87,6 +107,8 @@ document.addEventListener('DOMContentLoaded', () => {
el.remove();
}
});
trimEdgeBreaks(container);
}
function removeThinkSpansOnly(container) {
@@ -165,6 +187,7 @@ document.addEventListener('DOMContentLoaded', () => {
const thinkSpans = Array.from(container.querySelectorAll('.think'));
if (thinkSpans.length === 0) {
cleanupEmptyBlocks(container);
return;
}
@@ -350,7 +373,8 @@ document.addEventListener('DOMContentLoaded', () => {
firstChunk = false;
}
raw += `\n\n<em>${safeMessage}</em>`;
const formattedMessage = `<em>${safeMessage}</em>`;
raw += raw.trim() === '' ? formattedMessage : `\n\n${formattedMessage}`;
finalizeStream(bubble, raw);
};
@@ -486,7 +510,8 @@ document.addEventListener('DOMContentLoaded', () => {
const userMessage = 'Die Verbindung zum Antwort-Stream wurde unterbrochen. Bitte sende die Anfrage erneut, falls die Antwort unvollständig ist.';
if (raw.trim() !== '') {
raw += `\n\n<em>${userMessage}</em>`;
const formattedMessage = `<em>${userMessage}</em>`;
raw += raw.trim() === '' ? formattedMessage : `\n\n${formattedMessage}`;
renderBubbleContent(bubble, raw);
} else {
bubble.innerHTML = `<em>${userMessage}</em>`;