Review-Nachrichten: konsistentes Styling in History, Chat und Shared-Links

- renderMarkdown: [Review: Agent], [Review-Feedback ...], [APPROVED] Tags parsen
  → styled HTML-Header bzw. ausgeblendet (zentral für alle Views)
- history.js: Review-Messages als .review-bubble rendern statt .assistant/.user
  Review-Messages vom Merging ausgenommen
- shared-page.js: Review-Messages erkennen → .review-bubble Klasse
  Merge-Logik schützt Review-Messages vor Zusammenführung
- addReviewBubbleStatic(): Neue Funktion für History-Rendering mit allen
  Buttons (Reply, Delete, Mark, Share)
- chat.css: .review-inline-header, .review-inline-feedback Styles
This commit is contained in:
Meleki committed 2026-03-06 17:31:30 +01:00
1 parent 5fe3f8ac87
commit 6369f7f09c
4 files changed
+94 -14

No files matched your search

+33 -1
View File
@@ -167,7 +167,20 @@ function renderMarkdown(text) {
return '%%CODE' + (codeBlocks.length - 1) + '%%';
});
// 4) [Krea: dateiname.png] → Inline-Thumbnail mit Klick für Vollbild
// 4a) [Review: AgentName] prefix → Review-Header
html = html.replace(/\[Review:\s*([^\]]+)\]\s*/g, function(match, agentName) {
return '<span class="review-inline-header"><i class="fa fa-check-circle-o"></i> <strong>' + esc(agentName.trim()) + '</strong></span> ';
});
// 4b) [Review-Feedback von AgentName (Runde X/Y)]: → Review-Feedback-Header
html = html.replace(/\[Review-Feedback von\s+([^\(]+)\(Runde\s+(\d+)\/(\d+)\)\]:\s*/g, function(match, agentName, round, maxRounds) {
return '<div class="review-inline-feedback"><i class="fa fa-repeat"></i> <strong>Feedback von ' + esc(agentName.trim()) + '</strong> <span class="review-round">Runde ' + esc(round) + '/' + esc(maxRounds) + '</span></div>';
});
// 4c) [APPROVED] ausblenden
html = html.replace(/\[APPROVED\]/g, '');
// 4d) [Krea: dateiname.png] → Inline-Thumbnail mit Klick für Vollbild
html = html.replace(/\[Krea:\s*([^\]]+)\]/g, function(match, filename) {
var fn = filename.trim();
var safeFn = esc(fn);
@@ -640,6 +653,25 @@ function addWarningBubble(text, streamed = false) {
// ── Review Bubbles ──
function addReviewBubbleStatic(text, timestamp, messageId, isMarked, deletedOn) {
const div = document.createElement('div');
div.className = 'msg review-bubble markdown' + (isMarked ? ' marked' : '');
if (deletedOn) div.classList.add(isDeletedVisible() ? 'msg-deleted' : 'msg-deleted-hidden');
div.dataset.role = 'assistant';
div.dataset.timestamp = timestamp || '';
if (messageId) div.dataset.messageId = messageId;
div.innerHTML = renderMarkdown(text);
parseFluentEmojis(div);
_addTimestamp(div, timestamp);
_addReplyButton(div);
_addDeleteButton(div, messageId, deletedOn);
_addMarkButton(div, messageId, isMarked);
_addShareButton(div, messageId);
chatEl().appendChild(div);
scrollDown();
return div;
}
let _reviewBubble = null;
let _reviewTextEl = null;
let _reviewText = '';