File size: 2,805 Bytes
8db8202
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
// Ensure Markmap libraries are loaded from CDN
const { markmap } = window;
const { Markmap, loadCSS, loadJS } = markmap;
const { Transformer } = window.markmap;

// Create Transformer instance
const transformer = new Transformer();

// Initialize Markmap on the SVG element
let mm;
document.addEventListener('DOMContentLoaded', () => {
    mm = Markmap.create('#markmap');
    
    // Initial dummy data to show something beautiful right away
    const initialMarkdown = `
# γƒžγ‚€γƒ³γƒ‰γƒžγƒƒγƒ—θ‡ͺε‹•η”Ÿζˆ
## 使い方
- 左側に文章をε…₯εŠ›γ—γΎγ™
- γ€Œγƒžγƒƒγƒ—γ‚’η”Ÿζˆγ€γƒœγ‚Ώγƒ³γ‚’ζŠΌγ—γΎγ™
## η‰ΉεΎ΄
- AIγŒζ–‡θ„ˆγ‚’η†θ§£γ—γ¦θ‡ͺε‹•γ§ζ§‹ι€ εŒ–
- 専用カスタムAI(edha 1.0 3BοΌ‰γ«γ‚ˆγ‚‹ζƒ…ε ±ζŠ½ε‡Ί
`;
    renderMindMap(initialMarkdown);
});

// Function to render Markdown to MindMap
function renderMindMap(markdownContent) {
    // 1. Transform markdown to Markmap internal format
    const { root, features } = transformer.transform(markdownContent);
    
    // 2. Load necessary assets for features (like Katex or highlight.js) if used
    const { styles, scripts } = transformer.getUsedAssets(features);
    if (styles) loadCSS(styles);
    if (scripts) loadJS(scripts, { getMarkmap: () => markmap });
    
    // 3. Update the Markmap instance with new data
    mm.setData(root);
    mm.fit(); // Automatically fit to screen
}

// Event Listeners
const generateBtn = document.getElementById('generateBtn');
const inputText = document.getElementById('inputText');
const loadingDiv = document.getElementById('loading');

generateBtn.addEventListener('click', async () => {
    const text = inputText.value.trim();
    if (!text) {
        alert("Please enter some text to generate a map.");
        return;
    }

    // Show loading
    generateBtn.disabled = true;
    generateBtn.classList.add('hidden');
    loadingDiv.classList.remove('hidden');

    try {
        // --- PHASE 3: Real API Call ---
        console.log("Sending request to backend...");
        const response = await fetch('/generate', {
            method: 'POST',
            headers: {
                'Content-Type': 'application/json',
            },
            body: JSON.stringify({ text: text })
        });

        if (!response.ok) {
            throw new Error('API error: ' + response.status);
        }

        const data = await response.json();
        console.log("βœ… RAW BACKEND RESPONSE:", data.markdown);
        
        // Render the Markdown returned by the Python backend
        renderMindMap(data.markdown);
        
    } catch (error) {
        alert("Error occurred: " + error.message);
    } finally {
        // Hide loading
        generateBtn.disabled = false;
        generateBtn.classList.remove('hidden');
        loadingDiv.classList.add('hidden');
    }
});