Spaces:
Sleeping
Sleeping
Commit
·
ba0d5f8
1
Parent(s):
367abb6
Upd mermaid and pdf parser
Browse files- static/script.js +28 -6
- utils/service/pdf.py +3 -1
static/script.js
CHANGED
|
@@ -764,7 +764,11 @@
|
|
| 764 |
s.async = true;
|
| 765 |
s.dataset.sbMermaid = '1';
|
| 766 |
s.onload = () => {
|
| 767 |
-
try {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 768 |
resolve(true);
|
| 769 |
};
|
| 770 |
document.head.appendChild(s);
|
|
@@ -775,15 +779,33 @@
|
|
| 775 |
const mermaidBlocks = el.querySelectorAll('code.language-mermaid, pre code.language-mermaid');
|
| 776 |
if (!mermaidBlocks.length) return;
|
| 777 |
await ensureMermaidLoaded();
|
| 778 |
-
|
| 779 |
-
|
|
|
|
|
|
|
| 780 |
const wrapper = document.createElement('div');
|
| 781 |
const id = `mermaid-${Date.now()}-${idx}`;
|
| 782 |
wrapper.className = 'mermaid';
|
| 783 |
wrapper.id = id;
|
| 784 |
-
codeBlock.parentElement.
|
| 785 |
-
|
| 786 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 787 |
}
|
| 788 |
|
| 789 |
// Expose markdown-aware appenders for use after refresh (projects.js)
|
|
|
|
| 764 |
s.async = true;
|
| 765 |
s.dataset.sbMermaid = '1';
|
| 766 |
s.onload = () => {
|
| 767 |
+
try {
|
| 768 |
+
if (window.mermaid && window.mermaid.initialize) {
|
| 769 |
+
window.mermaid.initialize({ startOnLoad: false, securityLevel: 'loose', theme: 'default' });
|
| 770 |
+
}
|
| 771 |
+
} catch {}
|
| 772 |
resolve(true);
|
| 773 |
};
|
| 774 |
document.head.appendChild(s);
|
|
|
|
| 779 |
const mermaidBlocks = el.querySelectorAll('code.language-mermaid, pre code.language-mermaid');
|
| 780 |
if (!mermaidBlocks.length) return;
|
| 781 |
await ensureMermaidLoaded();
|
| 782 |
+
const isV10 = !!(window.mermaid && window.mermaid.render && typeof window.mermaid.render === 'function');
|
| 783 |
+
for (let idx = 0; idx < mermaidBlocks.length; idx++) {
|
| 784 |
+
const codeBlock = mermaidBlocks[idx];
|
| 785 |
+
const graph = codeBlock.textContent || '';
|
| 786 |
const wrapper = document.createElement('div');
|
| 787 |
const id = `mermaid-${Date.now()}-${idx}`;
|
| 788 |
wrapper.className = 'mermaid';
|
| 789 |
wrapper.id = id;
|
| 790 |
+
const replaceTarget = codeBlock.parentElement && codeBlock.parentElement.tagName.toLowerCase() === 'pre' ? codeBlock.parentElement : codeBlock;
|
| 791 |
+
replaceTarget.replaceWith(wrapper);
|
| 792 |
+
try {
|
| 793 |
+
if (isV10) {
|
| 794 |
+
const out = await window.mermaid.render(id + '-svg', graph);
|
| 795 |
+
if (out && out.svg) {
|
| 796 |
+
wrapper.innerHTML = out.svg;
|
| 797 |
+
if (out.bindFunctions) { out.bindFunctions(wrapper); }
|
| 798 |
+
}
|
| 799 |
+
} else if (window.mermaid && window.mermaid.init) {
|
| 800 |
+
// Legacy fallback
|
| 801 |
+
wrapper.textContent = graph;
|
| 802 |
+
window.mermaid.init(undefined, wrapper);
|
| 803 |
+
}
|
| 804 |
+
} catch (e) {
|
| 805 |
+
console.warn('Mermaid render failed:', e);
|
| 806 |
+
wrapper.textContent = graph;
|
| 807 |
+
}
|
| 808 |
+
}
|
| 809 |
}
|
| 810 |
|
| 811 |
// Expose markdown-aware appenders for use after refresh (projects.js)
|
utils/service/pdf.py
CHANGED
|
@@ -659,9 +659,11 @@ async def generate_report_pdf(report_content: str, user_id: str, project_id: str
|
|
| 659 |
leading=14
|
| 660 |
)
|
| 661 |
|
|
|
|
|
|
|
| 662 |
code_style = ParagraphStyle(
|
| 663 |
'Code',
|
| 664 |
-
parent=
|
| 665 |
fontSize=9,
|
| 666 |
fontName='Courier',
|
| 667 |
textColor=colors.HexColor('#d4d4d4'),
|
|
|
|
| 659 |
leading=14
|
| 660 |
)
|
| 661 |
|
| 662 |
+
# Some reportlab versions don't include 'Code' in sample styles
|
| 663 |
+
base_code_parent = styles['Code'] if 'Code' in styles.byName else styles['Normal']
|
| 664 |
code_style = ParagraphStyle(
|
| 665 |
'Code',
|
| 666 |
+
parent=base_code_parent,
|
| 667 |
fontSize=9,
|
| 668 |
fontName='Courier',
|
| 669 |
textColor=colors.HexColor('#d4d4d4'),
|