{"repo": "aiziyou918/cute-markdown", "files": {"js/app-logic.js": {"60f36a2709eb7779d52e5791fcdbd3baa48d1053": {"t": 1785768938.0793848, "n": 31724, "h": "f4eb07794d2bb1f8", "c": "/**\n * CuteMD - Markdown 编辑器\n * 主应用脚本\n */\n\ndocument.addEventListener('DOMContentLoaded', () => {\n // 初始内容\n const initialValue = `# CuteMD - 一款简洁优雅的 Markdown 编辑器\n\n## 欢迎使用!\n\n这是一个基于 Vditor 实现的在线 Markdown 编辑器,旨在提供一个专注、高效且美观的写作环境。\n\n### 主要特性\n\n- **亮/暗**双主题切换\n- 动态文档**大纲**\n- 支持丰富的 Markdown 语法\n- 代码块高亮\n- 数学公式 $E=mc^2$\n- ✨ **AI 智能续写**和**智能摘要**\n- ... 以及更多!\n\n### 如何使用\n\n1. 使用顶部的工具栏进行格式化操作。\n2. 点击 **新建**、**打开** 或 **保存** 来管理您的文件。\n3. 试试点击 **✨ 智能续写** 和 **✨ 智能摘要** 按钮来体验 AI 的魔力!\n\n---\n\n> \"代码和文字一样,都是思想的表达。\"\n\n祝您使用愉快!\n`;\n \n // 初始化 Vditor 编辑器\n const vditor = new Vditor('vditor', {\n height: '100%',\n mode: 'ir',\n theme: 'classic',\n value: initialValue,\n toolbar: [\n 'emoji', 'headings', 'bold', 'italic', 'strike', 'link', '|',\n 'list', 'ordered-list', 'check', 'outdent', 'indent', '|',\n 'quote', 'line', 'code', 'inline-code', 'insert-before', 'insert-after', '|',\n 'table', 'undo', 'redo', '|',\n 'edit-mode', 'content-theme', 'code-theme', 'export',\n {\n name: 'more',\n toolbar: [\n 'fullscreen',\n 'both',\n 'preview',\n 'info',\n 'help',\n ],\n },\n ],\n after: () => {\n updateOutline();\n // 根据系统偏好设置初始主题\n const prefersDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches;\n applyTheme(prefersDark ? 'dark' : 'light');\n \n // 监听全屏事件\n setupFullscreenHandler();\n },\n input: () => {\n updateOutline();\n },\n blur: () => {\n updateOutline();\n }\n });\n \n // DOM 元素引用\n const fileNameEl = document.getElementById('fileName');\n const outlineContent = document.getElementById('outlineContent');\n const themeToggleBtn = document.getElementById('themeToggleBtn');\n const sunIcon = themeToggleBtn.querySelector('.sun-icon');\n const moonIcon = themeToggleBtn.querySelector('.moon-icon');\n const outlineSidebar = document.getElementById('outlineSidebar');\n const outlineToggleBtn = document.getElementById('outlineToggleBtn');\n const outlineCloseBtn = document.getElementById('outlineCloseBtn');\n \n const newFileBtn = document.getElementById('newFileBtn');\n const openFileBtn = document.getElementById('openFileBtn');\n const saveFileBtn = document.getElementById('saveFileBtn');\n const fileInput = document.getElementById('fileInput');\n \n const continueBtn = document.getElementById('continueBtn');\n const summarizeBtn = document.getElementById('summarizeBtn');\n \n const aiModal = document.getElementById('aiModal');\n const aiModalTitle = document.getElementById('aiModalTitle');\n const aiModalContent = document.getElementById('aiModalContent');\n const aiModalCloseBtn = document.getElementById('aiModalCloseBtn');\n \n const aiSettingsBtn = document.getElementById('aiSettingsBtn');\n const aiSettingsModal = document.getElementById('aiSettingsModal');\n const aiSettingsCloseBtn = document.getElementById('aiSettingsCloseBtn');\n const saveAISettings = document.getElementById('saveAISettings');\n const clearAISettings = document.getElementById('clearAISettings');\n\n // 当前文件名(用于标题更新)\n let currentFileName = '未命名.md';\n\n /**\n * 更新浏览器标签页标题\n */\n function updateDocumentTitle(fileName) {\n document.title = `${fileName} - CuteMD`;\n }\n\n /**\n * 设置文件名\n */\n function setFileName(name) {\n currentFileName = name;\n fileNameEl.textContent = name;\n updateDocumentTitle(name);\n }\n\n /**\n * 文件名点击编辑功能\n */\n fileNameEl.addEventListener('click', () => {\n const input = document.createElement('input');\n input.type = 'text';\n input.className = 'file-name-input';\n input.value = currentFileName;\n \n // 替换元素\n fileNameEl.parentNode.replaceChild(input, fileNameEl);\n input.focus();\n input.select();\n \n // 处理输入完成\n const finishEditing = () => {\n let newName = input.value.trim();\n if (!newName) {\n newName = '未命名.md';\n } else if (!newName.endsWith('.md') && !newName.endsWith('.markdown')) {\n newName += '.md';\n }\n \n setFileName(newName);\n input.parentNode.replaceChild(fileNameEl, input);\n };\n \n input.addEventListener('blur', finishEditing);\n input.addEventListener('keydown', (e) => {\n if (e.key === 'Enter') {\n finishEditing();\n } else if (e.key === 'Escape') {\n input.value = currentFileName;\n finishEditing();\n }\n });\n });\n\n /**\n * 更新文档大纲\n */\n function updateOutline() {\n // 获取编辑器的 Markdown 内容\n const content = vditor.getValue();\n if (!content) {\n outlineContent.innerHTML = '