Files
html/api/ambre-mermaid-wire.php
2026-04-22 11:05:01 +02:00

73 lines
3.9 KiB
PHP

<?php
header("Content-Type: application/json");
$path = "/var/www/html/wevia.html";
$c = @file_get_contents($path);
$orig = strlen($c);
// Find the done handler and augment it with mermaid rendering
// The anchor: 'else if (type === \'done\') {' to its closing brace
$anchor = "else if (type === 'done') {
finalFileUrl = data.file_url;";
if (strpos($c, $anchor) === false) {
echo json_encode(["error"=>"done handler anchor not found"]);
exit;
}
// Replace with enhanced version that renders mermaid when detected
$new = "else if (type === 'done') {
finalFileUrl = data.file_url;
// === AMBRE-V5-MERMAID-RENDER wave-263 ===
// If fullResponse contains mermaid code → render SVG inline
try {
var _mcode = null;
if (data.mermaid_code) _mcode = data.mermaid_code;
else if (fullResponse) {
// Detect mermaid patterns at start of response
var _fr = fullResponse.trim();
if (/^(sequenceDiagram|flowchart|graph\s+[A-Z]{1,2}|classDiagram|stateDiagram|erDiagram|gantt|pie|journey|gitGraph|mindmap|timeline)\b/.test(_fr)) {
_mcode = _fr;
} else {
// Search inside for ``` mermaid block
var _m = fullResponse.match(/```mermaid\\s*([\\s\\S]+?)```/);
if (_m) _mcode = _m[1].trim();
else {
// or raw mermaid after 'Schema Mermaid:' label
var _m2 = fullResponse.match(/(?:Schema Mermaid|Diagramme)[^\\n]*\\n([\\s\\S]+)$/i);
if (_m2 && /^(sequenceDiagram|flowchart|graph|classDiagram|stateDiagram)/.test(_m2[1].trim())) _mcode = _m2[1].trim();
}
}
}
if (_mcode && window.mermaid && currentPhaseEl) {
// Sanitize accents for mermaid parser
var _clean = _mcode.normalize ? _mcode.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '') : _mcode;
var _svgId = 'wv-mermaid-' + Date.now() + '-' + Math.floor(Math.random()*999);
var _mContainer = document.createElement('div');
_mContainer.id = _svgId + '-wrap';
_mContainer.style.cssText = 'margin-top:12px;padding:16px;background:#fafafa;border:1px solid #e5e7eb;border-radius:8px;overflow-x:auto';
currentPhaseEl.appendChild(_mContainer);
try {
window.mermaid.render(_svgId, _clean).then(function(r){
_mContainer.innerHTML = r.svg;
}).catch(function(err){
_mContainer.innerHTML = '<pre style=\"color:#b91c1c;font-size:11px\">Mermaid render error: ' + (err.message||err) + '\\n\\n' + _clean.replace(/</g,'&lt;') + '</pre>';
});
} catch(e) {
_mContainer.innerHTML = '<pre style=\"font-size:11px\">' + _clean.replace(/</g,'&lt;') + '</pre>';
}
}
} catch(eMermaid) { console.warn('[V5-MERMAID-RENDER]', eMermaid); }
// === END AMBRE-V5-MERMAID-RENDER ===";
$c = str_replace($anchor, $new, $c);
$backup = "/opt/wevads/vault/wevia.html.GOLD-" . date("Ymd-His") . "-wave263-mermaid";
@copy($path, $backup);
$wrote = @file_put_contents($path, $c);
echo json_encode([
"delta" => strlen($c) - $orig,
"wrote" => $wrote,
"backup" => basename($backup),
]);