thzxx
|
5e1c89d280
|
refactor: v2.0 全量重构 — TypeScript + React + Zustand + IndexedDB
技术栈升级:
- JavaScript → TypeScript 5.6(全量类型安全)
- 原生 DOM → React 18(函数组件 + Hooks)
- 全局变量 → Zustand 5(轻量状态管理)
- localStorage → IndexedDB / Dexie.js 4(大容量、异步、索引)
- marked.js → unified / remark / rehype(插件化渲染管线)
- 无打包 → electron-vite 3(HMR 热更新)
- 纯 CSS → CSS Variables + CSS Modules
新增功能:
- 标签页状态 IndexedDB 持久化(关闭后可恢复)
- 最近打开文件列表
- 大文件虚拟化行号(>2000 行)
- 搜索高亮二分查找优化 O(log N)
- rehype-sanitize HTML 安全过滤
文件结构:
- 7 个源文件 → 51 个模块化文件
- src/main/ 主进程(6 文件)
- src/preload/ 预加载(1 文件)
- src/renderer/ 渲染进程(42 文件:组件/hooks/stores/lib/db/types/styles)
- src/shared/ 共享类型(2 文件)
构建验证:
- TypeScript 检查零错误
- electron-vite build 成功
- 产物:main 15kB + preload 2kB + renderer 1.5MB
|
2026-05-27 20:29:23 +08:00 |
|
thzxx
|
c2cdba546b
|
docs: 添加 TypeScript + React + IndexedDB 重构方案
|
2026-05-27 18:09:31 +08:00 |
|
thzxx
|
03cd491f31
|
fix: 修复打开/切换文件后误标记为已修改的问题
|
2026-05-27 17:40:52 +08:00 |
|
thzxx
|
eb05e9d1b1
|
fix: 搜索高亮跟随滚动同步 + 行号动态行高测量修复 v1.2.1
|
2026-05-27 17:34:30 +08:00 |
|
thzxx
|
2716a7d320
|
release: v1.3.0 版本发布,更新文档与更新日志
|
2026-05-21 13:44:32 +08:00 |
|
thzxx
|
e071a26db6
|
refactor: renderer.js拆分为6个模块(core/tabs/editor/search/sidebar/markdown)
|
2026-05-21 13:34:49 +08:00 |
|
thzxx
|
b185771c41
|
opt: 8项优化——搜索高亮精度/滚动同步/行号同步/本地图片/拖拽提示/MRU标签/侧边栏调宽/toast组件
|
2026-05-21 13:30:11 +08:00 |
|
thzxx
|
d178f5b3f6
|
feat: 侧边栏文件夹目录树添加标题头
|
2026-05-21 13:16:06 +08:00 |
|
thzxx
|
16fa87e7dd
|
chore: 删除重复的formatFileSize函数,统一用formatBytes
|
2026-05-21 13:05:21 +08:00 |
|
thzxx
|
04c904dc20
|
fix: 侧边栏始终可见,不因无文件而隐藏
侧边栏包含「打开文件夹」入口,隐藏会导致用户无法打开文件夹
|
2026-05-21 12:59:53 +08:00 |
|
thzxx
|
2d899cca7e
|
fix: 侧边栏高亮逻辑清理与边界情况修复
- 移除 loadTabState 中冗余的 updateSidebarHighlight 调用(switchToTab/closeTab 已覆盖)
- 无文件夹+无标签时自动隐藏侧边栏(之前会空显示)
- handleSave/handleSaveAs 后刷新侧边栏(文件路径变化时同步更新)
|
2026-05-21 12:59:02 +08:00 |
|
thzxx
|
eff04606bd
|
fix: 侧边栏高亮跟随标签切换同步更新,支持显示独立打开的文件
- 添加 updateSidebarHighlight() 函数,标签切换时只更新高亮状态而非重建整棵树
- 给树节点添加 data-path 属性用于精确定位高亮
- 新增「已打开的文件」区域,显示不在当前文件夹内的独立文件
- 独立文件支持点击切换、修改状态标识、活跃高亮
- 无文件夹打开时自动显示独立文件列表,全部关闭后隐藏侧边栏
|
2026-05-21 12:56:50 +08:00 |
|
thzxx
|
65383defd1
|
fix: 标签栏移入右侧内容区,左侧纯侧边栏
|
2026-05-21 12:06:14 +08:00 |
|
thzxx
|
d25c2ec30d
|
fix: banner移入content-wrapper,标签栏下方直接是两栏布局
|
2026-05-21 12:04:54 +08:00 |
|
thzxx
|
dbbd0f4abb
|
fix: 欢欢迎页移入main-content,侧边栏启动即可见
|
2026-05-21 12:03:02 +08:00 |
|
thzxx
|
9ac07d376b
|
fix: 修复侧边栏布局——sidebar与main-content并排显示
|
2026-05-21 11:59:56 +08:00 |
|
thzxx
|
f6f1c4f717
|
fix: 侧边栏watcher泄漏、目录刷新防抖、清理过时注释
|
2026-05-21 11:43:42 +08:00 |
|
thzxx
|
5d64e4401f
|
fix: 修复渲染进程5个bug(path未定义、editorWrapper未定义、死代码清理)
|
2026-05-21 11:41:23 +08:00 |
|
thzxx
|
2010f9dff5
|
docs: 同步 v1.2.0 文档(搜索替换 + 文件树)
|
2026-05-21 11:39:07 +08:00 |
|
thzxx
|
543af93802
|
feat: v1.2.0 搜索替换 + 文件树侧边栏
|
2026-05-21 11:37:02 +08:00 |
|
thzxx
|
c773a0d8e6
|
chore: 文件大小限制调整为20MB
|
2026-05-18 17:36:41 +08:00 |
|
thzxx
|
21d7b2da9f
|
fix: BOM处理、异步读取、10MB文件限制、滚动同步精度优化
|
2026-05-18 17:33:09 +08:00 |
|
thzxx
|
1a5ec08728
|
fix: marked兼容、保存竞态、关闭死锁、XSS防护、行号虚拟化、CSP加固
|
2026-05-18 17:23:26 +08:00 |
|
thzxx
|
320980030e
|
fix: 代码块预览显示undefined - renderer.code参数应为位置参数而非对象解构
|
2026-05-18 16:16:04 +08:00 |
|
thzxx
|
a85c3604c6
|
fix: 渲染成功后清除错误红色样式残留
|
2026-05-18 16:01:18 +08:00 |
|
thzxx
|
69e2ee0713
|
fix: 清理死代码、错误渲染防XSS、blob URL释放时机修复
|
2026-05-18 15:57:02 +08:00 |
|
thzxx
|
addf8e4dd1
|
fix: save写入失败时恢复文件监听、窗口销毁安全检查、暗色主题跟随系统偏好
|
2026-05-18 15:50:05 +08:00 |
|
thzxx
|
65451b938c
|
fix: 防御性检查补全
- openFileInTab 增加 isDestroyed() 前置检查
- open-file handler 增加 isDestroyed() 检查
- window:forceClose 增加 isDestroyed() 检查
- close handler 使用 isClosing 防止重入
- cancelClose 重置 isClosing 允许再次关闭
|
2026-05-18 15:24:01 +08:00 |
|
thzxx
|
5428beb6db
|
fix: 单实例锁,双击md文件在已有窗口打开
- 添加 requestSingleInstanceLock() 防止重复启动
- second-instance 事件中提取文件路径,转发给已有窗口
- 复用 getFilePathFromArgs() 解析命令行参数
|
2026-05-18 15:10:28 +08:00 |
|
thzxx
|
07989db28e
|
feat: 限制只能打开 md/txt 文件,新建文件仅保存为 md
- 打开对话框移除「所有文件」选项
- 保存对话框移除 .txt 选项
- 拖拽打开增加扩展名过滤
- 浏览器降级路径同步过滤
|
2026-05-18 14:16:34 +08:00 |
|
thzxx
|
9f0b4550d1
|
fix: 启动时不自动创建空标签页,直接显示欢迎页
|
2026-05-18 14:01:43 +08:00 |
|
thzxx
|
5b1caf046c
|
fix: shell.openExternal 添加协议白名单校验
仅允许 http/https 协议,阻止 javascript: 等潜在恶意链接。
|
2026-05-18 13:58:38 +08:00 |
|
thzxx
|
aac6a0b073
|
fix: 预览选择复制、关闭超时、链接跳转、监听器泄漏
1. 预览区无法选择复制 — #preview 添加 user-select: text
2. IPC 监听器重复注册 — 注册前先 removeAllListeners 防止堆叠
3. 关闭确认取消后 5s 超时仍强制关闭 — 新增 cancelClose IPC 清除超时
4. 预览区链接点击离开应用 — 拦截点击,通过 shell.openExternal 打开
5. 预览区链接光标样式 — .markdown-body a 添加 cursor: pointer
|
2026-05-18 13:55:02 +08:00 |
|
thzxx
|
394c88e52f
|
fix: 预览区无法选择复制内容
body 全局 user-select: none 导致预览面板继承了不可选择属性,
给 #preview 添加 user-select: text 和 cursor: text 修复。
|
2026-05-18 13:51:04 +08:00 |
|
thzxx
|
b18a2b7e12
|
版本号升至 1.1.0
|
2026-05-18 13:37:10 +08:00 |
|
thzxx
|
fe478edfde
|
更新 README.md 和 DESIGN.md:多标签页、暗色主题、文件监听等 v1.1.0 功能
|
2026-05-18 13:35:23 +08:00 |
|
thzxx
|
5ff89edd2b
|
清理:移除未使用的 openFiles IPC、优化 setModified 避免每次按键重建标签 DOM
|
2026-05-18 13:31:14 +08:00 |
|
thzxx
|
78f787a2db
|
新增多标签页支持:Ctrl+T 新建、Ctrl+W 关闭、Ctrl+Tab 切换、拖拽多文件打开
|
2026-05-18 13:28:45 +08:00 |
|
thzxx
|
0d82d4ff5e
|
更新 DESIGN.md:反映暗色主题、文件监听、未保存提醒、IPC 完整通道、localStorage 持久化等实际架构
|
2026-05-18 13:20:41 +08:00 |
|
thzxx
|
ffb925c690
|
修复:移除 startWatching 中残留的 isModifiedExternally 引用(运行时 ReferenceError)
|
2026-05-18 13:12:59 +08:00 |
|
thzxx
|
b613384030
|
修复:close超时保护、移除冗余变量、优化文件大小计算、去重formatBytes
|
2026-05-18 13:11:35 +08:00 |
|
thzxx
|
cb29c67f94
|
全面优化:暗色主题、文件监听、未保存提醒、滚动同步、分屏记忆、文件大小显示、删除死代码
|
2026-05-18 13:09:31 +08:00 |
|
thzxx
|
dbbf1efc78
|
DEVSETUP.md: 移除硬编码路径,通用化
|
2026-05-18 13:02:39 +08:00 |
|
thzxx
|
2d41bfd1d7
|
添加开发环境配置指南 DEVSETUP.md
|
2026-05-18 12:59:16 +08:00 |
|
thzxx
|
76e03c721c
|
移除 README 副标题中的 emoji
|
2026-05-18 12:52:26 +08:00 |
|
thzxx
|
bfae531f07
|
Revert: 移除 README 标题中的 emoji
|
2026-05-18 12:50:14 +08:00 |
|
thzxx
|
14619fcf7d
|
README 标题添加 🪶 emoji
|
2026-05-18 12:49:11 +08:00 |
|
thzxx
|
1d76a81ffa
|
移除原生菜单栏
|
2026-05-18 12:41:16 +08:00 |
|
thzxx
|
95eec61054
|
docs: redesign README with detailed Chinese docs and icon
|
2026-05-18 10:54:46 +08:00 |
|
thzxx
|
c573266670
|
fix: resolve did-finish-load race condition, remove unused import
- Move did-finish-load listener before loadFile() to prevent missing the event
- Remove unused nativeImage import
|
2026-05-18 10:51:38 +08:00 |
|
thzxx
|
9891feab68
|
chore: add MIT license
|
2026-05-18 10:48:40 +08:00 |
|
thzxx
|
76e1699ee7
|
fix: resolve critical issues found in code review
- Fix marked.js v12 code highlighting (removed deprecated highlight option, use custom renderer.code)
- Fix open-file race condition (handle file association before window ready)
- Fix Tab key undo history (use execCommand/setRangeText instead of direct value assignment)
- Fix drag-drop file path tracking (use IPC readFile instead of FileReader)
- Fix CSP security (remove unsafe-inline from script-src)
- Improve scroll sync (line-based instead of percentage-based)
- Deduplicate file open dialog logic
- Fix .gitignore duplicate entry
|
2026-05-18 10:46:22 +08:00 |
|
thzxx
|
fda3e5987d
|
Initial commit: MarkLite Markdown Reader
|
2026-05-18 10:40:11 +08:00 |
|