File size: 4,545 Bytes
454f1d5
9bdc593
454f1d5
9bdc593
 
 
 
454f1d5
 
9bdc593
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
454f1d5
9bdc593
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
454f1d5
9bdc593
 
 
 
 
 
 
 
 
 
 
cc826a1
9bdc593
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
454f1d5
 
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>文档合并拆分</title>
  <link rel="stylesheet" href="/static/plugin-ui.css">
</head>
<body>
  <main class="plugin-shell">
    <header class="plugin-header">
      <div>
        <h1 class="plugin-title">文档合并拆分</h1>
        <p class="plugin-subtitle">合并多个 Markdown/文本文件,或按章节拆分单个文档。</p>
      </div>
      <span id="statusPill" class="plugin-status">检查中</span>
    </header>

    <div id="message" class="plugin-message"></div>
    <section class="plugin-grid equal">
      <div class="plugin-panel">
        <h2 class="plugin-panel-title">文档合并</h2>
        <div class="plugin-stack">
          <div class="plugin-field">
            <label class="plugin-label" for="mergeFiles">文件列表</label>
            <input id="mergeFiles" type="file" accept=".md,.txt" multiple>
          </div>
          <div class="plugin-field">
            <label class="plugin-label" for="mergeFormat">输出格式</label>
            <select id="mergeFormat">
              <option value="md">Markdown</option>
              <option value="txt">纯文本</option>
            </select>
          </div>
          <button class="plugin-button" onclick="mergeDocuments()">合并并下载</button>
        </div>
      </div>

      <div class="plugin-panel">
        <h2 class="plugin-panel-title">文档拆分</h2>
        <div class="plugin-stack">
          <div class="plugin-field">
            <label class="plugin-label" for="splitFile">单个文档</label>
            <input id="splitFile" type="file" accept=".md,.txt">
          </div>
          <div class="plugin-field">
            <label class="plugin-label" for="splitFormat">输出格式</label>
            <select id="splitFormat">
              <option value="md">Markdown</option>
              <option value="txt">纯文本</option>
            </select>
          </div>
          <button class="plugin-button" onclick="splitDocument()">拆分并下载 ZIP</button>
          <p class="plugin-muted">拆分规则:识别“第X章”格式的章节标题。</p>
        </div>
      </div>
    </section>

    <section class="plugin-panel">
      <h2 class="plugin-panel-title">状态</h2>
      <pre id="output" class="plugin-output">等待操作。</pre>
    </section>
  </main>

  <script src="/static/plugin-ui.js"></script>
  <script>
    const API = "/plugins/doc/api";

    async function loadStatus() {
      try {
        const data = await PluginUI.request(`${API}/status`);
        PluginUI.setJson("output", data);
        const pill = document.getElementById("statusPill");
        pill.textContent = data.enabled === false ? "插件未启用" : "可用";
        pill.className = `plugin-status ${data.enabled === false ? "warn" : "ok"}`;
      } catch {
        document.getElementById("statusPill").textContent = "状态未知";
      }
    }

    async function mergeDocuments() {
      try {
        const input = document.getElementById("mergeFiles");
        if (!input.files.length) throw new Error("请选择至少一个文件");
        const form = new FormData();
        Array.from(input.files).forEach((file) => form.append("files", file));
        form.append("output_format", document.getElementById("mergeFormat").value);
        const blob = await PluginUI.requestBlob(`${API}/merge`, { method: "POST", body: form });
        PluginUI.downloadBlob(blob, `merged_document.${document.getElementById("mergeFormat").value}`);
        PluginUI.showMessage("message", "合并完成,文件已下载");
      } catch (error) {
        PluginUI.showMessage("message", error.message, "error");
      }
    }

    async function splitDocument() {
      try {
        const input = document.getElementById("splitFile");
        if (!input.files.length) throw new Error("请选择要拆分的文件");
        const form = new FormData();
        form.append("file", input.files[0]);
        form.append("output_format", document.getElementById("splitFormat").value);
        const blob = await PluginUI.requestBlob(`${API}/split`, { method: "POST", body: form });
        PluginUI.downloadBlob(blob, "split_documents.zip");
        PluginUI.showMessage("message", "拆分完成,ZIP 已下载");
      } catch (error) {
        PluginUI.showMessage("message", error.message, "error");
      }
    }

    loadStatus();
  </script>
</body>
</html>