Skip to content

About

尘年往事 · 完全离线的拟物手札日记:双开本翻页、流式分页、旁注批注、事件计时(原生 JS + IndexedDB + C# 启动器)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

尘年往事 · 手札日记

一款完全离线的拟物风格电子日记 / 手札应用。暖纸黄灯、皮革木桌、左右双开本, 翻页有风声、写字有沙沙声——像在一本真正的纸质笔记本上书写。

双开本阅读 · 流式分页 · 富文本 · 内联插图与页脚相册 · 旁注批注 · 公历/事件双计时 · 数据全部存在本地

界面

功能一览

功能 说明
双开本阅读 像真书一样左右摊开,翻页时书页绕书脊卷动,页角有页码
流式分页 一篇写超一页自动流到下一页,跨页段落按行拆分、上一页填满不留空行
日期双模式 公历(自动生成"公元 X 年 X 月 X 日")或事件计时(如"旅行 Day1、Day2…"自动递增)
元信息 天气(预设 + 自由输入)、地点、标题(必填),排布在页眉一行
富文本 加粗/斜体/下划线/删除线/标题/引用/列表/字体/颜色/清除格式,回车即新段落
图片 正文内联插图 + 页脚相册(点击放大)+ 自选图片做心情印章
旁注批注 阅读时选中文字即可添加批注,正文只留高亮与角标,点角标展开批注卡片
检索 / 统计 全文检索(标题/正文/批注/地点),写作统计(篇数、字数、连续天数)
个性化 12 种字体、6 种书写颜色、字号、深夜护眼纸色、书名重命名,偏好自动保存
备份与恢复 一键导出全部数据(日记 + 批注 + 图片 + 设置)为 ZIP;支持从 ZIP 恢复(恢复前自动生成当前数据快照,防误覆盖)
刷新不丢位置 视图路由基于 URL hash,刷新/重开应用回到原视图
离线 无任何网络依赖,数据存 IndexedDB,只属于你

目录结构

├── app/                  # 前端源码(原生 HTML/CSS/JS,无框架、无依赖)
│   ├── index.html
│   ├── css/style.css
│   ├── js/
│   │   ├── main.js       # 入口与路由
│   │   ├── store.js      # IndexedDB 数据层
│   │   ├── pageflow.js   # 分页排版引擎(按行拆分跨页段落、横线基线对齐)
│   │   ├── sanitize.js   # HTML 白名单消毒
│   │   ├── editor…/book…/… # 书写、阅读、检索、统计、设置视图
│   │   └── zip.js        # 零依赖 ZIP 打包(原生 CompressionStream)
│   └── assets/fonts/     # 手写体字体(不入库,见下方「许可与字体」)
├── launcher/             # C# WinForms 启动器
│   ├── Program.cs        # 本地静态服务器 + Edge 应用模式窗口
│   └── Launcher.csproj
├── release/              # 发行目录(exe、使用说明、应用副本;data/ 为运行数据不入库)
├── tools/                # 开发期自动化测试脚本(Node)
└── request.md            # 最初的项目需求文档

下载使用(推荐)

到 Releases 下载最新的 chennian-diary-vX.X.X-win64.zip,解压到任意位置(桌面、U 盘都行,保持 尘年往事.exe 与 app 文件夹在一起),双击 尘年往事.exe 即可书写。

  • 适用 Windows 10/11,无需安装任何运行时(自包含发布)
  • 首次打开如被 SmartScreen 拦截,点「仍要运行」即可(应用未做数字签名)
  • 「手写体」因第三方字体授权未随包附带,会自动回退到系统楷体; 如你已获得字体授权,可将 TTF 放入 app/assets/fonts/ 启用

本地运行 / 开发

只用浏览器(任何平台)

app/ 是纯静态站点,任意静态服务器指向它即可:

cd app
python -m http.server 8080
# 打开 http://localhost:8080

注意:数据存于浏览器 IndexedDB,按"协议 + 域名 + 端口"隔离, 换端口/换浏览器数据不互通。迁移数据用设置里的「导出备份」。

构建启动器 exe

cd launcher
dotnet publish -c Release
# 产物为单文件 exe,与 app/ 文件夹放在一起即可运行

数据与备份

  • 所有日记、批注、图片保存在本机浏览器引擎的 IndexedDB 中,不上传任何服务器; 应用启动时会申请持久存储(navigator.storage.persist),降低被浏览器自动清理的风险。
  • 「设置 → 导出备份为 ZIP」随时导出全量数据(JSON + 原图 + 设置)。
  • 「设置 → 从备份 ZIP 恢复」用备份整体替换本机数据;恢复开始前会自动导出一份 当前数据的快照 ZIP,万一恢复错了还能找回。
  • 启动器模式下数据保存在 release/data/(Edge 用户数据目录),整文件夹拷走即迁移。

发布(Windows)

改动前端代码后运行:

powershell -ExecutionPolicy Bypass -File tools\release.ps1

脚本会自动把 app/ 同步到 release/app/ 并重新打包 release\尘年往事.exe。 运行数据目录 release/data/ 不会被动到。

技术说明

  • 前端零依赖、零构建:原生 ES Modules + IndexedDB + Web Audio(合成音效)+ Canvas 测量。
  • 分页引擎:写入时以不可见节点实测每段行数,按行二分拆分跨页段落; 横线相位用 Canvas 量出字体基线,保证"字坐在线上"。
  • 所有用户 HTML 经白名单消毒后入库,防 XSS。
  • 启动器:.NET 10 单文件 exe,仅 ~5MB,无安装、无注册表、完全离线。

许可与字体

字体不入库:出于第三方字体授权考虑,本仓库不附带任何字体文件 (.ttf 已在 .gitignore 中)。缺少字体时应用正常工作,「手写体」自动回退到 系统楷体;本地使用时把 TTF 放回 app/assets/fonts/ 即可 (文件名见 css/style.css 的 @font-face,约 3.5MB)。克隆本仓库后请自行 准备字体并确认其授权允许你的使用方式。

About

尘年往事 · 完全离线的拟物手札日记:双开本翻页、流式分页、旁注批注、事件计时(原生 JS + IndexedDB + C# 启动器)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages