MindMap/frontend/test-enhanced-markdown.html

262 lines
7.4 KiB
HTML

<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>增强Markdown渲染测试</title>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/components/prism-core.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/plugins/autoloader/prism-autoloader.min.js"></script>
<link href="https://cdn.jsdelivr.net/npm/prismjs@1.29.0/themes/prism.min.css" rel="stylesheet">
<style>
body {
font-family: Arial, sans-serif;
margin: 20px;
background-color: #f5f5f5;
}
.test-container {
background: white;
border: 1px solid #ddd;
border-radius: 8px;
padding: 20px;
margin: 20px 0;
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}
.markdown-content {
max-width: 100%;
overflow: hidden;
}
.markdown-content h1,
.markdown-content h2,
.markdown-content h3,
.markdown-content h4,
.markdown-content h5,
.markdown-content h6 {
margin: 4px 0 2px 0;
font-weight: 600;
color: #333;
}
.markdown-content h1 { font-size: 16px; }
.markdown-content h2 { font-size: 15px; }
.markdown-content h3 { font-size: 14px; }
.markdown-content h4 { font-size: 13px; }
.markdown-content h5 { font-size: 12px; }
.markdown-content h6 { font-size: 11px; }
.markdown-content p {
margin: 2px 0;
line-height: 1.3;
color: #666;
}
.markdown-content ul,
.markdown-content ol {
margin: 2px 0;
padding-left: 16px;
}
.markdown-content li {
margin: 1px 0;
line-height: 1.3;
color: #666;
}
.markdown-content strong,
.markdown-content b {
font-weight: 600;
color: #333;
}
.markdown-content em,
.markdown-content i {
font-style: italic;
color: #555;
}
.markdown-content code {
background: #f5f5f5;
padding: 1px 4px;
border-radius: 3px;
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
font-size: 11px;
color: #d63384;
border: 1px solid #e9ecef;
}
.markdown-content pre {
background: #f8f9fa;
border: 1px solid #e9ecef;
border-radius: 4px;
padding: 8px;
margin: 4px 0;
overflow-x: auto;
position: relative;
}
.markdown-content pre code {
background: none;
padding: 0;
color: #333;
font-size: 11px;
border: none;
display: block;
white-space: pre;
}
.markdown-table {
border-collapse: collapse;
width: 100%;
margin: 4px 0;
font-size: 11px;
border: 1px solid #ddd;
}
.markdown-table th,
.markdown-table td {
border: 1px solid #ddd;
padding: 4px 6px;
text-align: left;
vertical-align: top;
}
.markdown-table th {
background-color: #f8f9fa;
font-weight: 600;
color: #333;
}
.markdown-table tr:nth-child(even) {
background-color: #f8f9fa;
}
.markdown-table tr:hover {
background-color: #e9ecef;
}
.markdown-content a {
color: #007bff;
text-decoration: none;
}
.markdown-content a:hover {
text-decoration: underline;
}
.markdown-content blockquote {
border-left: 3px solid #ddd;
margin: 4px 0;
padding-left: 8px;
color: #666;
font-style: italic;
}
</style>
</head>
<body>
<h1>增强Markdown渲染测试</h1>
<div class="test-container">
<h2>测试1: 代码块 + 表格组合</h2>
<div id="test1" class="markdown-content"></div>
</div>
<div class="test-container">
<h2>测试2: 复杂表格</h2>
<div id="test2" class="markdown-content"></div>
</div>
<div class="test-container">
<h2>测试3: 你的测试内容</h2>
<div id="test3" class="markdown-content"></div>
</div>
<script>
// 配置marked
marked.setOptions({
breaks: true,
gfm: true,
tables: true,
sanitize: false,
});
// 后处理函数
function postprocessHTML(html) {
let processedHTML = html
.replace(/<table>/g, '<table class="markdown-table">')
.replace(/<pre><code/g, '<pre class="markdown-code"><code');
// 创建临时DOM元素来处理语法高亮
const tempDiv = document.createElement('div');
tempDiv.innerHTML = processedHTML;
// 为代码块添加语法高亮
const codeBlocks = tempDiv.querySelectorAll('pre code');
codeBlocks.forEach(block => {
const language = block.className.match(/language-(\w+)/);
if (language) {
try {
block.innerHTML = Prism.highlight(block.textContent, Prism.languages[language[1]], language[1]);
} catch (e) {
console.warn('语法高亮失败:', e);
}
}
});
return tempDiv.innerHTML;
}
// 测试1: 代码块 + 表格组合
const test1Markdown = `\`\`\`js
console.log('hello, JavaScript')
\`\`\`
| Products | Price |
|----------|-------|
| Apple | 4 |
| Banana | 2 |`;
document.getElementById('test1').innerHTML = postprocessHTML(marked.parse(test1Markdown));
// 测试2: 复杂表格
const test2Markdown = `| 评估维度 | 权重 | 评分标准 | 计算公式 |
|---------|------|---------|---------|
| 完整性 | 0.3 | 缺失值比例 < 5% | $\\text{完整性} = 1 - \\frac{\\text{缺失值数量}}{\\text{总数据量}}$ |
| 准确性 | 0.3 | 误差率 < 3% | $\\text{准确性} = 1 - \\frac{\\text{错误记录数}}{\\text{总记录数}}$ |`;
document.getElementById('test2').innerHTML = postprocessHTML(marked.parse(test2Markdown));
// 测试3: 你的测试内容
const test3Markdown = `测试标题
这是一个**粗体**和*斜体*的测试。
表格测试
| 产品 | 价格 | 库存 |
|------|------|------|
| 苹果 | 4元 | 100个 |
| 香蕉 | 2元 | 50个 |
代码测试
\`\`\`javascript
function hello() {
console.log('Hello World!');
}
\`\`\`
行内代码:\`const name = 'test'\`
列表测试
- 项目1
- 项目2
- 子项目2.1
- 子项目2.2
- 项目3
链接测试
[GitHub](https://github.com)
[Vue.js](https://vuejs.org)`;
document.getElementById('test3').innerHTML = postprocessHTML(marked.parse(test3Markdown));
</script>
</body>
</html>