73 lines
3.9 KiB
PHP
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,'<') + '</pre>';
|
|
});
|
|
} catch(e) {
|
|
_mContainer.innerHTML = '<pre style=\"font-size:11px\">' + _clean.replace(/</g,'<') + '</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),
|
|
]);
|