LiamKhoaLe commited on
Commit
ba0d5f8
·
1 Parent(s): 367abb6

Upd mermaid and pdf parser

Browse files
Files changed (2) hide show
  1. static/script.js +28 -6
  2. 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 { window.mermaid.initialize({ startOnLoad: false, securityLevel: 'loose', theme: 'default' }); } catch {}
 
 
 
 
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
- mermaidBlocks.forEach((codeBlock, idx) => {
779
- const graph = codeBlock.textContent;
 
 
780
  const wrapper = document.createElement('div');
781
  const id = `mermaid-${Date.now()}-${idx}`;
782
  wrapper.className = 'mermaid';
783
  wrapper.id = id;
784
- codeBlock.parentElement.replaceWith(wrapper);
785
- try { window.mermaid.render(id + '-svg', graph, (svg) => { wrapper.innerHTML = svg; }); } catch {}
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=styles['Code'],
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'),