import gradio as gr
import js
async def show_md(filename: str):
"""
根据用户输入的文件名加载远程 Markdown 文件
filename: 用户输入,不带 .md
"""
if not filename.strip():
return "## ⚠️ 输入错误\n\n请输入有效的文件名..."
url = f"https://shuju.rainx3.xyz/p/{filename}.md"
try:
response = await js.fetch(url)
if response.status == 200:
text = await response.text()
return f"# 📄 {filename}.md\n\n---\n\n" + text
else:
return f"## ❌ 文件未找到\n\n```\nHTTP {response.status}: {filename}.md\n```\n\n检查文件名或网络连接状态。"
except Exception as e:
return f"## 🔥 连接失败\n\n```bash\nError: {str(e)}\n```\n\n可能的原因:\n- 网络连接问题\n- 服务器暂时不可用\n- 文件路径错误"
# 创建暗黑主题界面
with gr.Blocks(
title="GRBlog",
theme=gr.themes.Monochrome(),
css_paths=None
) as demo:
with gr.Row():
with gr.Column(scale=1):
filename_input = gr.Textbox(
label="文件名",
placeholder="输入文件名 (不含 .md 扩展名)...",
value="",
lines=1,
elem_classes=["gr-textbox"]
)
submit_btn = gr.Button(
"⚡ 加载文档",
variant="primary",
elem_classes=["gr-button"]
)
with gr.Row():
markdown_output = gr.Markdown(
label="Markdown 内容",
value="""# 🌃 欢迎来到 GRBlog 暗夜模式
---
### 📝 内容展示
```python
# 代码高亮示例
def hello_world():
print("Welcome to GRBlog!")
```
> **提示:** 在上方输入框中输入文件名,体验完整功能。
---
*""",
elem_classes=["gr-markdown"]
)
# 绑定事件
submit_btn.click(
fn=show_md,
inputs=[filename_input],
outputs=[markdown_output]
)
filename_input.submit(
fn=show_md,
inputs=[filename_input],
outputs=[markdown_output]
)
demo.launch()