Vanessa 2 лет назад
Родитель
Сommit
ba5d3d47b2
100 измененных файлов с 0 добавлено и 1904 удалено
  1. 0 247
      app/appearance/themes/notion-theme/README.md
  2. 0 3
      app/appearance/themes/notion-theme/calendar/css/app.08a685a0.css
  3. BIN
      app/appearance/themes/notion-theme/calendar/favicon.ico
  4. 0 1
      app/appearance/themes/notion-theme/calendar/index.html
  5. 0 0
      app/appearance/themes/notion-theme/calendar/js/app.796dd5e3.js
  6. 0 0
      app/appearance/themes/notion-theme/calendar/js/app.796dd5e3.js.map
  7. 0 6
      app/appearance/themes/notion-theme/calendar/js/chunk-vendors.5c31667a.js
  8. 0 0
      app/appearance/themes/notion-theme/calendar/js/chunk-vendors.5c31667a.js.map
  9. 0 437
      app/appearance/themes/notion-theme/comment/comment.css
  10. 0 692
      app/appearance/themes/notion-theme/comment/comment.js
  11. 0 19
      app/appearance/themes/notion-theme/comment/config.js
  12. 0 161
      app/appearance/themes/notion-theme/comment/index.js
  13. 0 101
      app/appearance/themes/notion-theme/comment/network.js
  14. 0 216
      app/appearance/themes/notion-theme/comment/utils.js
  15. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/52pojie_cn.png
  16. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/Facebook.svg
  17. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/Twitter.svg
  18. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/aliyundrive_com.png
  19. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/appinn_com.png
  20. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/apple_com_cn.png
  21. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/auth_alipay_com.png
  22. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/baidu_com.png
  23. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/baike_baidu_com.png
  24. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/bbs_hupu_com.png
  25. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/bilibili_com.png
  26. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/blog_csdn_net.png
  27. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/cn_bing_com.png
  28. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/douban_com.png
  29. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/fanyi_baidu_com.png
  30. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/JAVA.svg
  31. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/MP4.svg
  32. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/css.svg
  33. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/excel.svg
  34. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/folder.svg
  35. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/html.svg
  36. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/jpg.svg
  37. 0 0
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/json.svg
  38. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/md.svg
  39. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/mp3.svg
  40. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/pdf.svg
  41. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/ppt.svg
  42. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/txt.svg
  43. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/vscode.svg
  44. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/word.svg
  45. 0 0
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/xmind.svg
  46. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/fold/zip.svg
  47. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/getpocket_com.png
  48. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/ghxi_com.png
  49. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/github_com.png
  50. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/guancha_cn.png
  51. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/haokan_baidu_com.png
  52. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/huaban_com.png
  53. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/huawei_com.png
  54. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/iconfont_cn.png
  55. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/ins.svg
  56. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/instapaper_com.png
  57. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/iplaysoft_com.png
  58. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/iqiyi_com.png
  59. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/ixigua_com.png
  60. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/jianshu_com.png
  61. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/kugou_com.png
  62. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/kuwo_cn.png
  63. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/ld246_com.png
  64. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/link2.svg
  65. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/logseq_com.png
  66. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/mi_com.png
  67. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/mp_weixin_qq_com.png
  68. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/music_163_com.png
  69. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/news_163_com.png
  70. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/news_qq_com.png
  71. 0 0
      app/appearance/themes/notion-theme/icon4Tsundoku/notion.svg
  72. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/obsidian_md.png
  73. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/oppo_com.png
  74. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/oschina_net.png
  75. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/page.svg
  76. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/pan_baidu_com.png
  77. 0 1
      app/appearance/themes/notion-theme/icon4Tsundoku/reddit.svg
  78. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/runoob_com.png
  79. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/samsung_com.png
  80. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/so_com.png
  81. 0 0
      app/appearance/themes/notion-theme/icon4Tsundoku/souhu.svg
  82. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/sspai_com.png
  83. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/t_bilibili_com.png
  84. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/taobao_com.png
  85. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/tianya_cn.png
  86. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/tieba_baidu_com.png
  87. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/topbook_cc.png
  88. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/toutiao_com.png
  89. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/translate_google_cn.png
  90. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/uisdc_com.png
  91. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/v_qq_com.png
  92. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/vivo_com_cn.png
  93. 0 0
      app/appearance/themes/notion-theme/icon4Tsundoku/wandou.svg
  94. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/weibo_com.png
  95. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/weixin_sogou_com.png
  96. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/weread_qq_com.png
  97. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/wiz_cn.png
  98. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/wolai_com.png
  99. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/y_qq_com.png
  100. BIN
      app/appearance/themes/notion-theme/icon4Tsundoku/yandex_com.png

+ 0 - 247
app/appearance/themes/notion-theme/README.md

@@ -1,247 +0,0 @@
-# light dark salt 三合一主题
-
-![image.png](https://tva1.sinaimg.cn/large/8ff342a8gy1h2wjjwfqm7j20u01d9wjq.jpg)
----
-## 2.6.3
-* 修复悬浮大纲面板跳动问题
-## 2.6.2
-* 优化隐藏侧栏动画
-  * 悬浮侧栏动画时间加快
-  * 悬浮侧栏改为平移动画
-  * 悬浮侧栏加大触发区域
-* 默认表格宽度改为编辑器宽度
-## 2.6.1
-* salt主题左侧面板背景色修复
-* 搜索分栏恢复,宽度加宽,微调搜索结果栏
-* 修复dark日历颜色
-* 修复悬浮面板对面包屑影响bug
-* 取消顶栏dark主题按钮,使用dark主题直接用外观模式切换
-* 顶栏标题水平居中
-## 2.6.0
-* 【新特性】左右悬浮面板功能(界面右上角切换)
-* 【新特性】日历可点击创建日记
-* 调整弹出二级菜单间距
-* pdf导出面板错误修复
-* 取消列表内标题间距
-* 修正搜索和替换弹窗跳动
-* 嵌入块列表导线对齐调整
-* 适配2.4.2主题(页签,状态栏)
-## 2.5.4
-* 下架dark和salt主题
-* 菜单动画调整
-* 修复dark主题表格线条颜色
-* 调整dark看板背景色
-* 顶栏改为默认显示,点击隐藏
-* 取消编辑器滚动条overlay
-## 2.5.3
-* 适配siyuan v2.4.1
-* 调整嵌入块样式
-* dark主题字体灰色调整
-* 顶栏标题水平居中
-* 界面线条微调
-* 优化页签样式
-## 2.5.2
-* 修复页签上工具【新增】【更多】重叠bug
-* 顶栏右上角切换器动画同步
-* 顶栏标题垂直居中
-* 修复有序、任务列表混排方形符号消失bug
-* 优化备注样式
-* 修复标题排版间距失效问题
-* 修复dark主题mermaid线条颜色
-* 修复dark主题代码块颜色
-* 历史记录面板宽度调整
-## 2.5.1
-* 引述块样式调整
-* 历史记录界面优化
-* 快捷键界面导线修正
-* 调整导图根目录最小宽度
-## 2.5.0
-* 三款主题合并在一起,右上角按钮切换
-#### 有使用dark salt主题的朋友,请直接换到此主题,其他主题后续会停更
-* 加入顶栏固定按钮,右上角切换
-* 修复日历路径问题,适配各版本的配色
-## 2.4.0
-* 标题折叠后【···】显示bug
-* 导图导线对齐
-* 修改右下角工具展开动画
-* 修正topbar图标显示
-* 调节dock图标大小
-* 调整工具栏样式
-* 调整块标样式
-* 新版反链面板,提及样式适配
-* 修复批注显示问题
-* 表格自动宽度空格bug
-* dark主题代码块行号背景修正
-* 开启notion-light主题日历功能
-## 2.3.7
-* 引入[UFDXD](https://github.com/UFDXD) HBuilderX-Light主题各种功能
-  * 显示文档创建时间
-  * 引用悬浮窗折叠列表自动展开
-  * 折叠列表后方鼠标悬浮预览
-  * 标题、列表鼠标中键文本折叠展开
-  * 最近打开文档
-* 修正导图偏移辅助线
-* 调整集市主题页面
-* 修复动态加载滚动条bug
-* 新建标签的样式调整
-* 修复工具栏激活颜色
-* 修复行内代码块样式
-* 修改顶栏样式
-## 2.3.6
-* 适配2.1.13页签
-## 2.3.5
-* 修复块标不能点击bug
-## 2.3.4
-* 在没有emoji的情况下钉住页签显示全部文档名
-* 修复编辑器滚动条层级
-## 2.3.3
-* 修复callout在list中左侧导线偏移问题
-## 2.3.2
-* 竖向搜索结果跳动偏移修复
-* 侧栏大纲样式修改,减少数字对标题的干扰
-* 底栏按钮与状态统一移到右下角,增大左侧显示面积
-* 修复callout在list中的样式
-## 2.3.1
-* 新增引述块callout样式
-![image.jpg](https://tva1.sinaimg.cn/large/8ff342a8gy1h4tx557jc6j20xc0m8aby.jpg)
-## 2.3.0
-* 引入`Tsundoku`的链接图标
-* 增加表格转换竖表头功能
-* 增加引用悬浮框动画
-* 增加侧栏模块切换动画
-* 增加页签动画
-* 修复编辑器底部显示区域(但隐藏底栏时侧栏会有显示bug)
-* 标题层级圆点符减少透明度
-* 滚动条修改为圆角样式,编辑器内不占位
-* 调整侧栏样式
-* docker栏间距修正
-* 右下角功能图标缩减
-* 修复列表看板模式的引用计数样式
-## 2.2.4
-* 修复引用单行出现滚动条bug
-* 修复隐藏底栏界面跳动bug
-* 聚焦列表小图标显示问题
-## 2.2.3
-* 修复搜索跳转偏移bug
-* 修复dark主题dock栏图标位置
-## 2.2.2
-* 侧栏添加滚动浮出线条
-* 修改动态加载&进度条样式
-* 底栏适配
-  * dock栏图标样式调整
-  * 侧栏下边距调整
-  * 底栏样式调整
-  * 加入状态信息&计数器动画
-* 块标样式调整
-## 2.2.1
-* 增加隐藏顶栏动画
-## 2.2.0
-* 更换`/`菜单分栏方式,修复emoji菜单显示效果
-* 加入n-topbar.css文件
-## 2.1.9
-* 更新预览图&简介图
-* 加入自定义配置css文件
-* 修复H1标题后色块
-## 2.1.8
-* 重构css,使三个主题结构代码一致
-* 清除部分不生效的样式
-* 隐藏顶栏
-* 文档标题间距调整
-* 超级块间距调整
-* 代码块宽度调整
-* 表格宽度调整
-* 正文第一个标题取消上间距
-* PDF目录栏修正
-## 2.1.7
-* 修复替换搜索框跳动问题
-* 修复graphviz,flowchart显示问题
-* 调整行内右侧引用数间距
-## 2.1.6
-* 修复搜索框显示错误问题
-## 2.1.5
-* 列表转表格样式调整
-* 列表里列表转表格辅助线修正
-* 列表转表格、转导图的代码块显示修正
-## 2.1.4
-* 调整面包屑高度遮盖
-* 调整完成任务列表文本颜色
-## 2.1.3
-* 修正大纲层级缩进
-## 2.1.2
-* 调整斜杆菜单分栏宽度
-* 取消引用块分栏
-## 2.1.1
-* 代码块折叠高度调整
-* h1~6标题间距调整
-## 2.1.0
-* 修正代码块间距
-## 2.0.9
-* 修复搜索预览窗口链接输入框宽度
-* 大纲性能优化
-  * 取消圆点遮盖
-  * 取消数字遮盖
-* 修复弹出框顶栏钉住样式
-* 思源2.0.11版本顶栏适配
-* 调整引用计数样式
-## 2.0.8
-* 关闭大纲动画
-* 修正历史与集市页签显示
-* 调整列表转表格的间距
-## 2.0.7
-* 适配2.0.9主题
-  * toolbar图标大小间距
-  * dock图标大小间距
-  * 面板工具栏图标&引用计数大小
-  * 面包屑样式调整
-* 超链接字体样式调整
-* 修正搜索页面包屑过长bug
-## 2.0.6
-* 引入[UserZYF](https://github.com/UserZYF)横版斜杠菜单
-* 引入[langzhou](https://github.com/langzhou/siyuan-note)评论功能
-## 2.0.5
-* 适配2.0.8版本页签
-* 新增大纲&标签展开动画
-## 2.0.4
-* 修复大纲圆点定位
-* 页签样式调整
-* 新增页签钉住样式
-## 2.0.3
-* 加入块标过渡动画
-* 隐藏左右面板与编辑器的分割线
-* 调整面板和页签线条颜色
-* 恢复大纲根目录箭头
-* 历史数据窗口调整
-* 列表转表格样式修正
-* 列表转导图圆点区域修正
-* 列表代码块间距修正
-* 头图选项透明度修正
-* 代码块样式调整
-## 2.0.2
-* 优化菜单列表js
-* dark主题pdf背景色修复
-* dark主题浮窗右上角按钮修复
-* 右上角引用计数样式
-* 嵌入块列表样式调整
-* 搜索结果页面左侧栏优化
-* 超级块里看板样式标题颜色修复
-* 看板标题间距调整
-* 文档移动选择界面优化
-* 采用系统默认图标时位置调整
-* 添加表格取消表头样式功能
-* 修改表格默认样式为自动换行
-* 导图样式宽度限制并自动换行
-* 列表里导图根目录线去除
-* 代码块间距调整
-## 2.0.1
-* 修复js写入自定义属性
-* 引入列表转表格特性
-* 引入列表转看板特性
-* 修复导图混排列表样式
-* 修复表格宽度设定样式
-* 文档树字重取消
-* 修复无序列表混排任务列表样式错误
-* 引入竖排搜索面板特性
-* 修复有序列表折叠后提示样式
----
-## 2.0.0
-* 修复集市页签不居中问题

+ 0 - 3
app/appearance/themes/notion-theme/calendar/css/app.08a685a0.css

@@ -1,3 +0,0 @@
-.notebooksList{width:155px;max-width:200px;padding:10px 20px;background:#ededed;height:278px;overflow:auto;position:fixed;top:49px;left:102px;z-index: 1;border-radius:5px}.notebooksList::-webkit-scrollbar{width:6px;height:6px}.notebooksList::-webkit-scrollbar-thumb{background:#ccc;border-radius:3px}.notebook{min-width:140px;padding:5px 0}.notebook:hover{background:#ccc}
-
-.now-data-myself{width:40%;height:47px;margin-left:60%;position:absolute;display:flex;justify-content:center;align-items:center}.con{position:relative;max-width:280px}.con .wh_content_all{background:transparent!important}.wh_top_changge li{color:#000!important;font-size:16px!important;font-weight:700}.wh_content_item,.wh_content_item_tag{color:#686c6e!important;}.wh_content_item .wh_isToday{background: rgba(46, 170, 220)!important;color:#fff!important;font-weight:700;border-radius:6px!important;}.wh_content_item .wh_chose_day{background:#409eff!important}.wh_item_date:hover{background:#d9ecff!important;border-radius:6px!important;color:#66b1ff!important}.wh_jiantou1[data-v-2ebcbc83]{border-left:2px solid #000!important}.wh_jiantou1[data-v-2ebcbc83],.wh_jiantou2[data-v-2ebcbc83]{border-top:2px solid #000!important;width:5px!important;height:5px!important}.wh_jiantou2[data-v-2ebcbc83]{border-right:2px solid #000!important}.wh_top_tag[data-v-2ebcbc83]{color:#000;font-weight:700;border-top:1px solid hsla(0,0%,89%,.6);padding-top:10px!important;z-index:4;width:30px!important;}.wh_container[data-v-2ebcbc83]{max-width:280px}.wh_top_changge[data-v-2ebcbc83]{display:flex;width:60%}.now-data-myself-time{color:#000;font-size:15px;margin-right:10px;font-family:Helvetica Neue;cursor:pointer}.now-data-myself-week{font-size:15px;}.wh_top_changge .wh_content_li[data-v-2ebcbc83]{font-family:Helvetica}.wh_content_item>.wh_isMark[data-v-2ebcbc83]:after{content:"";width:5px;height:5px;border-radius:50%;background:#eb8383;position:absolute;top:31px;left:17px}body{cursor:pointer}

BIN
app/appearance/themes/notion-theme/calendar/favicon.ico


+ 0 - 1
app/appearance/themes/notion-theme/calendar/index.html

@@ -1 +0,0 @@
-<!DOCTYPE html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="./favicon.ico"><title>calendar</title><link href="./css/app.08a685a0.css" rel="preload" as="style"><link href="./js/app.796dd5e3.js" rel="preload" as="script"><link href="./js/chunk-vendors.5c31667a.js" rel="preload" as="script"><link href="./css/app.08a685a0.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but calendar doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div><script src="./js/chunk-vendors.5c31667a.js"></script><script src="./js/app.796dd5e3.js"></script></body></html>

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/appearance/themes/notion-theme/calendar/js/app.796dd5e3.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/appearance/themes/notion-theme/calendar/js/app.796dd5e3.js.map


Разница между файлами не показана из-за своего большого размера
+ 0 - 6
app/appearance/themes/notion-theme/calendar/js/chunk-vendors.5c31667a.js


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/appearance/themes/notion-theme/calendar/js/chunk-vendors.5c31667a.js.map


+ 0 - 437
app/appearance/themes/notion-theme/comment/comment.css

@@ -1,437 +0,0 @@
-/* Common */
-strong[style="blank"] {
-  background-color: var(--b3-theme-on-background);
-  color: var(--b3-theme-on-background);
-  font-weight: normal;
-  /* border: 1px solid var(--b3-theme-on-background); */
-  border-radius: 1px;
-  transition: all 300ms ease-in-out;
-  /* cursor: pointer; */
-}
-
-strong[style="blank"]:hover {
-  color: var(--b3-theme-on-background);
-  background-color: var(--b3-theme-background);
-  transition: all 300ms ease-in-out;
-}
-
-.lz-overlay,
-.lz-overlay-black {
-  z-index: 999;
-  position: fixed;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-  background-color: transparent;
-  transition: opacity 150ms linear;
-  display: none;
-  opacity: 1;
-}
-
-.lz-overlay-black {
-  background-color: rgba(0, 0, 0, 0.2);
-}
-
-/* flex card layout */
-.protyle-wysiwyg.card {
-  display: flex;
-  flex-wrap: wrap;
-  /* background-color: var(--b3-theme-surface); */
-}
-
-.protyle-wysiwyg.card div[data-node-id] {
-  /* box-shadow: 0 0 2px rgba(0, 0, 0, 0.3); */
-  margin: 5px;
-  padding: 10px;
-  border-radius: 3px;
-  flex-basis: 200px;
-  background-color: var(--b3-theme-surface);
-}
-
-
-/* Inline comment */
-strong[style*="quote"],
-span[data-type~=strong][style*="quote"] {
-  border-bottom:  2px solid rgb(255, 212, 0)!important;
-  background-color: rgba(255,212,0,0.16) !important;
-  /*padding-bottom: 1px;*/
-  font-weight: normal !important;
-}
-
-strong[style*="quote"]:hover,
-span[data-type~=strong][style*="quote"]:hover {
-  cursor: pointer;
-  /* background-color: rgb(255, 212, 0); */
-}
-
-
-#lz-comment-box {
-  font-size: 15px;
-  display: none;
-  position: fixed;
-  z-index: 1000;
-  left: 800px;
-  top: 200px;
-  width: 480px;
-  border: 1px solid var(--b3-border-color);
-  box-shadow: var(--b3-dialog-shadow);
-  background-color: var(--b3-theme-background);
-  border-radius: 3px;
-  padding: 10px 0;
-}
-
-#lz-comment-box a {
-  border-bottom: 1px solid var(--b3-theme-primary);
-}
-
-#lz-comment-box a:hover {
-  text-decoration: none;
-}
-
-#lz-comment-box .list {
-  width: 100%;
-  max-height: 370px;
-  overflow-y: scroll;
-}
-
-#lz-comment-box .list::-webkit-scrollbar {
-  width: 3px;
-  border-radius: 5px;
-}
-
-#lz-comment-box .list .quote {
-  border-left: 3px solid #F9DE6D;
-  padding: 2px 0 2px 8px;
-  margin: 10px 15px;
-  color: var(--b3-theme-on-surface);
-}
-
-#lz-comment-box .quote .delete-quote {
-  color: #f56c6c;
-  font-size: 0.8em;
-  margin-left: 5px;
-  opacity: 0;
-}
-
-#lz-comment-box .quote:hover .delete-quote {
-  opacity: 1;
-  cursor: pointer;
-}
-
-#lz-comment-box .list-item {
-  /* width: calc(100% - 30px); */
-  padding: 0px 15px 5px 15px;
-  border-bottom: 1px solid var(--b3-border-color);
-}
-
-#lz-comment-box .list-item:last-child {
-  border-bottom: none;
-}
-
-#lz-comment-box .list-item .header {
-  margin-top: 12px;
-  display: flex;
-  justify-content: space-between;
-  align-items: center;
-}
-
-#lz-comment-box .list-item .date {
-  color: #999;
-  font-size: 0.9em;
-}
-
-#lz-comment-box .list-item .actions {
-  display: flex;
-}
-
-#lz-comment-box .list-item .delete-comment {
-  color: #f56c6c;
-  font-size: 0.8em;
-  opacity: 0;
-  margin-left: 8px;
-}
-
-#lz-comment-box .list-item .actions a {
-  border: none;
-}
-
-#lz-comment-box .list-item:hover .delete-comment {
-  opacity: 1;
-  cursor: pointer;
-}
-
-#lz-comment-box .list-item .comment {
-  margin: 5px 0;
-  padding: 0;
-  color: var(--b3-theme-on-background);
-}
-
-#lz-comment-box .add {
-  display: flex;
-  padding: 0 15px;
-}
-
-#lz-comment-box .add .input {
-  min-height: 30px;
-  background-color: var(--b3-theme-surface);
-  padding: 4px 5px;
-  line-height: 30px;
-  color: var(--b3-theme-on-background);
-  border-radius: 3px;
-  outline: none;
-  flex-grow: 1;
-}
-
-#lz-comment-box .input:empty:before {
-  content: attr(placeholder);
-  /* content: 'hello'; */
-  color: var(--b3-theme-on-surface);
-  opacity: 0.4;
-}
-
-#lz-comment-box .add .btn {
-  flex-shrink: 0;
-  height: 30px;
-  line-height: 30px;
-  text-align: center;
-  padding: 4px 10px;
-  background-color: var(--b3-theme-primary);
-  color: var(--b3-theme-on-primary);
-  border-radius: 3px;
-  margin-left: 8px;
-  cursor: pointer;
-}
-
-
-/* Toolbar */
-#lz-toolbar {
-  font-size: 15px;
-  position: fixed;
-  right: 60px;
-  bottom: 25px;
-  background-color: #fefefe;
-  background-color: var(--b3-theme-background);
-  box-shadow: var(--b3-point-shadow);
-  /* box-shadow: 0 2px 10px rgba(0, 0, 0, 0.14); */
-  /* border: 1px solid #efefef; */
-  border-radius: 20px;
-  padding: 5px 10px;
-  z-index: 99;
-}
-
-#lz-toolbar.close i:not(.closeBtn) {
-  display: none;
-}
-
-#lz-toolbar .toolbar-btn {
-  display: inline-block;
-  font-size: 20px;
-  padding: 5px;
-  margin: 0 5px;
-  cursor: pointer;
-}
-
-#lz-toolbar .toolbar-btn:hover,
-#lz-toolbar .toolbar-btn.show {
-  color: var(--b3-theme-primary);
-  /* background-color: #efefef; */
-}
-
-#lz-toolbar .menu,
-#lz-toolbar .submenu {
-  position: fixed;
-  padding: 10px 0px;
-  border-radius: 4px;
-  background-color: white;
-  background-color: var(--b3-theme-background);
-  /* box-shadow: 0 0px 2px rgba(0, 0, 0, 0.14); */
-  box-shadow: var(--b3-point-shadow);
-  z-index: 99;
-  min-width: 100px;
-  max-width: 150px;
-  display: none;
-}
-
-#lz-toolbar .menu {
-  bottom: 70px;
-}
-
-#lz-toolbar .submenu {
-  right: -999px;
-  /* position: absolute; */
-
-}
-
-#lz-toolbar .menu.show,
-#lz-toolbar .submenu.show {
-  display: block;
-}
-
-.menu-mask {
-  z-index: 98;
-  position: fixed;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-  background-color: transparent;
-  display: none;
-}
-
-.menu-item {
-  cursor: pointer;
-  padding: 5px 20px;
-  white-space: nowrap;
-  overflow: hidden;
-  text-overflow: ellipsis;
-}
-
-.menu-item:hover {
-  background-color: var(--b3-list-hover);
-  color: var(--b3-theme-primary);
-}
-
-#snackbar {
-  visibility: hidden;
-  min-width: 120px;
-  margin-left: -125px;
-  background-color: #666;
-  color: #fff;
-  text-align: center;
-  border-radius: 6px;
-  padding: 10px;
-  position: fixed;
-  z-index: 10000;
-  left: 50%;
-  top: 30px;
-  font-size: 14px;
-}
-
-#snackbar.info {
-  background-color: #444;
-}
-
-#snackbar.success {
-  background-color: #67c23a;
-}
-
-#snackbar.danger {
-  background-color: #f56c6c;
-}
-
-#snackbar.warning {
-  background-color: #e6a23c;
-}
-
-#snackbar.show {
-  visibility: visible;
-  -webkit-animation: fadein 0.5s, fadeout 0.5s 2.5s;
-  animation: fadein 0.5s, fadeout 0.5s 2.5s;
-}
-
-@-webkit-keyframes fadein {
-  from {
-    top: 0;
-    opacity: 0;
-  }
-
-  to {
-    top: 30px;
-    opacity: 1;
-  }
-}
-
-@keyframes fadein {
-  from {
-    top: 0;
-    opacity: 0;
-  }
-
-  to {
-    top: 30px;
-    opacity: 1;
-  }
-}
-
-@-webkit-keyframes fadeout {
-  from {
-    top: 30px;
-    opacity: 1;
-  }
-
-  to {
-    top: 0;
-    opacity: 0;
-  }
-}
-
-@keyframes fadeout {
-  from {
-    top: 30px;
-    opacity: 1;
-  }
-
-  to {
-    top: 0;
-    opacity: 0;
-  }
-}
-
-
-#popup {
-  min-width: 120px;
-  max-height: 150px;
-  overflow-y: scroll;
-  position: absolute;
-  padding: 5px 0;
-  box-shadow: var(--b3-dialog-shadow);
-  background-color: var(--b3-menu-background);
-  color: var(--b3-theme-on-surface);
-  border-radius: 3px;
-  display: none;
-  z-index: 99;
-}
-
-#popup::-webkit-scrollbar {
-  width: 0px;
-  border-radius: 5px;
-}
-
-.popup-item {
-  font-size: 15px;
-  padding: 5px 10px;
-}
-
-.popup-item:hover,
-.popup-item.on {
-  background-color: var(--b3-border-color);
-  cursor: pointer;
-}
-
-
-.popup-mask {
-  position: fixed;
-  left: 0;
-  right: 0;
-  top: 0;
-  bottom: 0;
-  z-index: 98;
-  display: none;
-}
-
-.popup-success {
-  background-color: #67c23a23;
-  transition: all ease-in-out 500ms;
-}
-
-.popup-error {
-  background-color: #f56c6c23;
-  transition: all ease-in-out 500ms;
-}
-
-/* 评论显示评论时间 */
-.protyle-wysiwyg [data-node-id][custom-quote-type="container"] [data-node-id][custom-quote-time]::before {
-  content: attr(custom-quote-time);
-  font-size: 12px;
-}

+ 0 - 692
app/appearance/themes/notion-theme/comment/comment.js

@@ -1,692 +0,0 @@
-import config from './config.js'
-import {
-  snackbar,
-  computeBoxPosition,
-  createBlockId,
-  saveViaTransaction,
-  formatSYDate,
-  dateFormat,
-  compareVersion,
-} from './utils.js'
-import {
-  querySQL,
-  insertBlock,
-  appendBlock,
-  deleteBlock,
-  setBlockAttrs,
-} from './network.js'
-
-const VERSION_LE_2_1_14 = compareVersion(
-  window.siyuan.config.system.kernelVersion,
-  '2.1.14',
-) <= 0; // 当前版本号 <= v2.1.14
-
-class Comment {
-
-  constructor() {
-    this.icons = config.icons
-    this.isShow = false //是否弹出评论框
-    setTimeout(() => this.appendToolbarBtn(), 1000) //添加 toolbar 评论按钮
-    // setTimeout(()=>this.resolveCommentNodes(),1000) //等待文章内容加载完整后解析评论span todo
-  }
-
-  async handleKeyDown(e) {
-    // 监听组合快捷键(暂时没用)
-    // if(e.shiftKey && e.altKey && e.code =='KeyC'){
-    //   e.preventDefault()
-    //   e.stopPropagation()
-    //   this.showBox(e)
-    // }
-
-    // 回车键提交评论
-    if (this.isShow && e.key == 'Enter') {
-      e.preventDefault()
-      e.stopPropagation()
-      await this.submitComment()
-    }
-
-    // esc 关闭 box
-    if (this.isShow && e.key == 'Escape') {
-      this.hiddenBox()
-    }
-  }
-
-  /**
-   * 渲染弹出框内的评论列表
-   * @param {*} node
-   * @param {*} from 点击来源位置
-   */
-  async renderCommentsHtml(node, from) {
-
-    let html = ''
-
-    switch (from) {
-      case 'toolbar':
-        html = `<div class="quote">${this.range.toString()}</div>`
-        this.list.innerHTML = html
-        break
-      case 'attr':
-        let item = node
-        this.list.innerHTML = '//Todo: fetch all comments in the block'
-        break
-      case 'block':
-        let quoteId = node.getAttribute('style');
-        if (quoteId && quoteId.indexOf('quote') > -1) {
-          quoteId = quoteId.replace("quote-", "")  //移除 style 属性中用于表示的“quote”,获得原始 id
-          let sql = `select * from blocks as b left join attributes as a on b.id = a.block_id where a.name = 'custom-quote-id' and a.value = '${quoteId}' and b.type = 'p' order by b.created`,
-            res = await querySQL(sql),
-            quote = node.innerText,
-            comments = res.data
-          html += `<div class="quote">${quote}<span class="delete-quote" data-quote-id="${quoteId}">移除引文</span></div>`
-
-          if (res.data.length > 0) {
-            for (let key in comments) {
-              html += `
-              <div class="list-item">
-                <div class="header">
-                  <div class="date">${formatSYDate(comments[key]['created'])}</div>
-                  <div class="actions">
-                    <div class="delete-comment" data-quote-id="${quoteId}" data-comment-id="${comments[key]['block_id']}">移除评论</div>
-                    <div class="delete-comment" data-quote-id="${quoteId}" data-comment-id="${comments[key]['block_id']}"><a href="siyuan://blocks/${comments[key]['block_id']}">跳转到评论</a></div>
-                  </div>
-                </div>
-                <div class="comment">${comments[key]['content']}</div>
-              </div>
-            `
-            }
-          } else {
-            html += `<div class="list-item"><div class="header"><div class="date">暂无评论</div></div></div>`
-          }
-
-          this.input.setAttribute('data-quote-id', quoteId)
-          this.list.innerHTML = html
-        }
-
-        break
-
-      default:
-        break
-    }
-  }
-
-  /**
-   * 提交评论
-   * @returns
-   */
-  async submitComment() {
-    // 输入框内容为空
-    if (!this.input.innerText) {
-      this.hiddenBox()
-      console.log('未填写评论内容');
-      return
-    }
-    // 如果已有 quoteid,则是追加,否则是新增
-    let quoteId = this.input.dataset.quoteId
-    if (quoteId) {
-      //追加评论
-      let blockId = document.querySelector(`.protyle-wysiwyg [custom-${quoteId}]`).dataset.nodeId //comment 所在 block
-      let quoteText = document.querySelector(`strong[style*="quote-${quoteId}"]`)?.innerText
-        ?? document.querySelector(`span[data-type~=strong][style*="quote-${quoteId}"]`)?.innerText
-      this.appendBlocks(quoteText, blockId, quoteId)
-      let selection = getSelection()
-      selection.removeAllRanges()
-      selection.addRange(this.range) // 使得 protyle 获得光标
-      this.hiddenBox()
-
-    } else {
-      //全新评论
-      let selection = getSelection()
-      let range = this.range
-      let start = range.startContainer
-      while (start != null && (start.dataset == null || start.dataset.nodeId == null)) {
-        start = start.parentElement
-      }
-      if (start == null) {
-        return
-      }
-      let block = start //由于没有一炮三响了,所以列表项上无法在属性弹框中看到存储的评论内容
-      let txt = range.toString() //引用的内容
-      range.deleteContents()
-
-      /* 兼容 <= 2.1.14 版本 */
-      let strongNode = VERSION_LE_2_1_14
-        ? document.createElement('strong')
-        : document.createElement('span')
-      if (!VERSION_LE_2_1_14) strongNode.setAttribute('data-type', 'strong')
-
-      strongNode.innerText = txt
-      quoteId = createBlockId()
-      this.appendBlocks(txt, block.dataset.nodeId, quoteId)
-      strongNode.setAttribute('style', 'quote-' + quoteId)
-
-      let attr = { key: `custom-${quoteId}`, value: "true" }
-      block.setAttribute(attr.key, attr.value)
-      // 使用 API 设置块属性
-      await setBlockAttrs({
-        id: block.dataset.nodeId,
-        attrs: {
-          [attr.key]: attr.value,
-        },
-      })
-      range.insertNode(strongNode)
-      range.setStartAfter(strongNode)
-      range.collapse(true) //取消文本选择状态
-      selection.removeAllRanges()
-      selection.addRange(range)
-      this.hiddenBox()
-    }
-
-    saveViaTransaction()
-
-  }
-
-  /**
-   * 将评论内容以内容块的形式插入到文章尾部
-   * @param {*} quoteText 引文内容
-   * @param {*} blockId 引文所在 blockid
-   * @param {*} quoteId 引文 id
-   */
-  async appendBlocks(quoteText, blockId, quoteId) {
-    let activeEditor = document.querySelector('.layout__center [data-type="wnd"].layout__wnd--active') || document.querySelector('.layout__center [data-type="wnd"]') || document.getElementById('editor') //获得当前光标所在页面
-    let background = activeEditor.querySelector('div.protyle:not(.fn__none) .protyle-background') || activeEditor.querySelector('.protyle-background') // 获得桌面端当前编辑的文章
-    let docId = background.dataset.nodeId //获得当前编辑的文章 id
-
-    // 评论 h1 标题
-    // let headerHtml = `<div data-subtype="h4" data-node-id="${createBlockId()}" data-type="NodeHeading" class="h4" style="comment-header" updated="${createBlockId(false)}"><div contenteditable="true" spellcheck="false">评论</div><div class="protyle-attr" contenteditable="false"></div></div>`
-    let headerMd = `
-# 评论
-{: custom-quote-type="${config.attrs.type.heading}"}
-`
-
-    // 评论内容块
-    // let commentHtml = `<div data-node-id="${createBlockId()}" custom-quote-id="${quoteId}" data-type="NodeParagraph" class="p" updated="${createBlockId(false)}" data-eof="true"><div contenteditable="true" spellcheck="false">${this.input.innerHTML}</div><div class="protyle-attr"></div></div>`
-    let commentMd = `
-${this.input.innerHTML}
-{: custom-quote-id="${quoteId}" custom-quote-type="${config.attrs.type.comment}" custom-quote-time="${dateFormat("YYYY-mm-dd HH:MM:SS", new Date())}"}
-`
-
-    // 引文内容块
-    // let quoteHtml = `<div data-node-id="${createBlockId()}"  data-type="NodeBlockquote" class="bq" updated="${quoteId}" data-eof="true" custom-quote-id="${quoteId}"><div data-node-id="${createBlockId()}" data-type="NodeParagraph" class="p" updated="${createBlockId()}"><div contenteditable="true" spellcheck="false"><span data-type="a" data-href="siyuan://blocks/${blockId}">${quoteText}</span></div><div class="protyle-attr" contenteditable="false"></div></div><div class="protyle-attr" contenteditable="false"></div></div>`
-    let quoteMd = `
-> [${quoteText}](siyuan://blocks/${blockId})
-{: custom-quote-id="${quoteId}" custom-quote-type="${config.attrs.type.quote}"}
-`
-
-    // 分割线
-    // let hrHtml = `<div data-node-id="${createBlockId()}" data-type="NodeThematicBreak" class="hr" ></div>`
-    // 先判断是否存在「评论」header,没有则添加,然后依次插入 block(虽然可以一次性批量添加,但不建议,因为可能导致不会及时更新到页面)
-    // let header = activeEditor.querySelector('.fn__flex-1.protyle:not(.fn__none) div[style*="comment-header"]')
-    let res = await querySQL(`
-      select
-        *
-      from
-        attributes as a
-      where
-        a.root_id = '${docId}'
-        and a.name = 'custom-quote-type'
-        and a.value = '${config.attrs.type.heading}'
-    `)
-    // console.log(res)
-    if (res && res.code == 0 && res.data.length == 0) {
-      // 没有评论标题块,则添加
-      await this.appendBlockMd(headerMd, docId)
-    }
-
-    res = await querySQL(`
-      select
-        b.id
-      from
-        blocks as b
-      inner join
-        attributes as a
-      on
-        a.block_id = b.id
-      where
-        a.root_id = '${docId}'
-        and a.name = 'custom-quote-id'
-        and a.value = '${quoteId}'
-        and b.type = 's'
-    `)
-    // console.log(res)
-    if (res && res.code == 0) {
-      if (res.data.length == 0) {
-        // 没有关联当前评论的超级块(容器块),则添加
-        let containerMd = `
-{{{row
-${quoteMd}
-
-${commentMd}
-}}}
-{: custom-quote-id="${quoteId}" custom-quote-type="${config.attrs.type.container}"}
-`
-        await this.appendBlockMd(containerMd, docId)
-      }
-      else if (res.data.length == 1) {
-        let containerId = res.data[0].id
-        await this.appendBlockMd(commentMd, containerId)
-      }
-    }
-
-    // 如果已经存在之前的引文评论,则直接在其下方插入新评论
-    // let existQuote = activeEditor.querySelector(`.fn__flex-1.protyle:not(.fn__none) .bq[custom-quote-id*="${quoteId}"]`)
-    // if(existQuote){
-    //   await this.insertBlockDom(commentHtml, existQuote.dataset.nodeId)
-    // }else{
-    //   await this.appendBlockDom(quoteHtml, docId)
-    //   await this.appendBlockDom(commentHtml, docId)
-    // }
-
-  }
-
-  /* 评论列表事件,主要是移除评论和引文 */
-  async handleListEvents(e) {
-    e.stopPropagation()
-    let target = e.target
-    // 删除评论
-    if (target.className == 'delete-comment') {
-      // 移除评论按钮
-      let quoteId = target.dataset.quoteId
-      let commentId = target.dataset.commentId
-      let block = document.querySelector(`.protyle-wysiwyg [custom-${quoteId}]`)
-      deleteBlock(commentId)
-      target.parentNode.parentNode.parentNode.remove()
-      return
-    }
-
-    if (target.className == 'delete-quote') {
-      // 移除引文按钮, 移除评论块与原文块中的评论 ID 属性
-      let quoteId = target.dataset.quoteId,
-        quoteNode = VERSION_LE_2_1_14
-          ? document.querySelector(`strong[style*="quote-${quoteId}"]`)
-          : document.querySelector(`span[data-type~=strong][style*="quote-${quoteId}"]`),
-        block = document.querySelector(`.protyle-wysiwyg [data-node-id][custom-${quoteId}]`)
-
-      if (block) {
-        // 移除 block 中的属性
-        let attr_key = `custom-${quoteId}`
-        block.removeAttribute(attr_key)
-        // 使用 API 移除块属性
-        await setBlockAttrs({
-          id: block.dataset.nodeId,
-          attrs: {
-            [attr_key]: '',
-          },
-        })
-      }
-      if (quoteNode) {
-        // 移除 strong 标签
-        let selection = getSelection(),
-          range = document.createRange(),
-          text = document.createTextNode(quoteNode.innerText)
-        range.setStart(quoteNode.firstChild, 0)
-        range.setEnd(quoteNode.firstChild, quoteNode.firstChild.length)
-        selection.removeAllRanges()
-        selection.addRange(range)
-        quoteNode.remove()
-        range.deleteContents()
-        range.insertNode(text)
-        range.setStartAfter(text)
-        saveViaTransaction()
-      }
-
-      // 移除文章末尾评论内容
-      // let nodes = document.querySelectorAll(`div[custom-quote-id="${quoteId}"]`)
-      // if(nodes){
-      //   for(var node of nodes) {
-      //     let blockId = node.dataset.nodeId
-      //     if(blockId){
-      //       deleteBlock(blockId)
-      //     }
-      //   }
-      // }
-      let res = await querySQL(`
-        select
-          b.id
-        from
-          blocks as b
-        inner join
-          attributes as a
-        on
-          a.block_id = b.id
-        where
-          a.name = 'custom-quote-id'
-          and a.value = '${quoteId}'
-          and b.type = 's'
-      `)
-      // console.log(res)
-      if (res && res.code == 0) {
-        if (res.data.length == 1) {
-          await deleteBlock(res.data[0].id)
-        }
-      }
-    }
-    this.hiddenBox()
-  }
-
-  /**
-   * 插入新块
-   * @param {*} html
-   * @param {*} previousId 前一个块的位置
-   * @returns
-   */
-  insertBlockDom(html, previousId) {
-    return insertBlock({
-      "data": html,
-      "dataType": "dom",
-      "previousID": previousId
-    })
-  }
-
-  /**
-   * 以 markdown 的形式插入新块
-   * @param {*} html
-   * @param {*} previousId 前一个块的位置
-   * @returns
-   */
-  insertBlockMd(md, previousId) {
-    return insertBlock({
-      "data": md,
-      "dataType": "markdown",
-      "previousID": previousId
-    })
-  }
-
-  /**
-   * 以 dom 的形式插入后置子块
-   * @param {string} html
-   * @param {string} parentId
-   * @returns
-   */
-  appendBlockDom(html, parentId) {
-    return appendBlock({
-      "data": html,
-      "dataType": "dom",
-      "parentID": parentId
-    })
-  }
-
-  /**
-   * 以 markdown 的形式插入后置子块
-   * @param {string} md
-   * @param {string} parentId
-   * @returns
-   */
-  appendBlockMd(md, parentId) {
-    return appendBlock({
-      "data": md,
-      "dataType": "markdown",
-      "parentID": parentId
-    })
-  }
-
-  /**
-   * TODO: 评论输入框支持粘贴内容块链接
-   * @param {*} e
-   */
-  handlePaste(e) {
-    e.stopPropagation()
-    const clipdata = e.clipboardData || window.clipboardData;
-    const data = clipdata.getData("text/plain")
-    let selection = getSelection()
-    if (data && selection.toString()) {
-      let reg1 = /.*\(\((\d{14}-.*)\)\).*/              //匹配格式:((20210815214330-btqo1b2))
-      let reg2 = /.*siyuan:\/\/blocks\/(\d{14}-\S{7})/  //匹配格式:siyuan://blocks/20210815214330-btqo1b2
-      let result = data.match(reg1) || data.match(reg2)
-      if (result) {
-        e.preventDefault()
-        let link = document.createElement('a')
-        link.setAttribute('href', 'siyuan://blocks/' + result[1])
-        link.innerText = selection.toString()
-        let range = selection.getRangeAt(0)
-        range.deleteContents()
-        range.insertNode(link)
-        range.setStartAfter(link)
-      }
-    }
-  }
-
-  /**
-   * 响应文本选择事件
-   * @param {event} e
-   */
-  handleSelectionEvent(e) {
-    let node = e.target, inProtyle = false
-    // 判断事件是否发生在 protyle 中
-    while (node != document) {
-      if (node.classList.contains('protyle-wysiwyg')) {
-        inProtyle = true
-        break
-      }
-      node = node.parentNode
-    }
-
-    if (inProtyle) {
-      let selection = getSelection()
-      // 获得文本选择事件的坐标,用于确定弹出 comment box 的位置
-      if (selection.rangeCount > 0 && selection.getRangeAt(0).toString()) {
-        this.selectionX = e.clientX
-        this.selectionY = e.clientY
-      } else {
-        this.selectionX = null
-        this.selectionY = null
-      }
-    }
-  }
-
-  /**
-   *  解析文章中的 comment 元素
-   */
-  resolveCommentNodes() {
-    let elements = VERSION_LE_2_1_14
-      ? document.querySelectorAll('strong[style*="quote"]')
-      : document.querySelector('span[data-type~=strong][style*="quote"]')
-    if (elements) {
-      elements.forEach((item, index, node) => {
-        // 在内容块右侧添加图标
-        this.createBlockIcon(item.parentElement)
-      })
-    }
-  }
-
-  /**
-   * 在内容块右侧添加图标
-   * @param {*} contentBlock
-   */
-  createBlockIcon(contentBlock) {
-    let sibling = contentBlock.nextSibling
-    if (sibling && !sibling.querySelector('.protyle-attr--comment')) {
-      let div = document.createElement('div')
-      div.className = 'protyle-attr--comment'
-      div.innerHTML = this.icons.comment
-      div.addEventListener('click', (e) => this.showBox(e))
-      contentBlock.nextSibling.appendChild(div)
-    }
-  }
-
-  /**
-     * 弹出 box
-     * @param {*} e
-     */
-  showBox(e) {
-    let show = false, //用来决定是否弹出 box
-      from = '',   //判断弹出 box 点击来源
-      x = e.clientX, //事件坐标,用于计算弹框位置
-      y = e.clientY,
-      target = e.target,
-      parent = target.parentNode || target,
-      grandParent = parent.parentNode || target, //可能会点击到按钮中的svg、path 元素,所以需要获取父级元素
-      style = target.getAttribute('style') //获取 strong 的 style 属性
-
-    // 如果之前不存在box,则创建
-    if (!this.box) { this.createBox() }
-
-    // 首先根据点击事件来源决定哪些情况下要弹出 box
-    if (target != null && target.dataset != null && target.dataset.type == 'comment'
-      || parent != null && parent.dataset != null && parent.dataset.type == 'comment'
-      || grandParent != null && grandParent.dataset != null && grandParent.dataset.type == 'comment') {
-      // 1)点击 toolbar 图标触发
-      e.stopPropagation()
-      let selection = getSelection(),
-        range = selection.getRangeAt(0)
-      if (range) {
-        // 需要进一步判断选取是否是在 strong 标签里面
-        let start = range.startContainer, end = range.endContainer
-        if ((start.parentElement.localName == 'strong' || end.parentElement.localName == 'strong')
-          || (start.parentElement.localName == 'span' || end.parentElement.localName == 'span')
-        ) {
-          snackbar('请不要在行内元素中评论', 'warning')
-        } else if (!range.toString()) {
-          snackbar('没有选中内容', 'danger')
-        } else {
-          this.range = range // 因为弹出 box 后,选区会消失,所以提前存储 range
-          show = true
-          from = 'toolbar'
-        }
-      }
-
-    } else
-      if (style && style.indexOf('quote') > -1 && getSelection().toString() == '') {
-        // 2)点击 block 引文触发
-        e.stopPropagation()
-        show = true
-        from = 'block'
-        this.range = getSelection().getRangeAt(0)
-      } else if (target.classList && target.classList.contains('protyle-attr--comment')
-        || parent.classList && parent.classList.contains('protyle-attr--comment')
-        || grandParent.classList && grandParent.classList.contains('protyle-attr--comment')) {
-        // 3)点击内容块右侧图标触发
-        e.stopPropagation()
-        show = true
-        from = 'attr'
-      }
-
-    if (show) {
-      this.isShow = true
-      this.box.style.display = 'block'
-      this.overlay.style.display = 'block'
-      if (from == 'attr') {
-        this.add.style.display = 'none' //点击attr区图标时不展示输入框
-      } else {
-        this.add.style.display = 'flex'
-        this.input.focus()
-      }
-
-      this.renderCommentsHtml(target, from) //获取评论列表
-
-      // 如果是从 toolbar 触发,box 的坐标不参照事件坐标,而是参照文本选区坐标
-      if (from == 'toolbar') {
-        x = this.selectionX || x
-        y = this.selectionY || y
-      }
-      let p = computeBoxPosition(this.box, x, y)
-      this.box.style.left = p.x + 'px'
-      this.box.style.top = p.y + 'px'
-    }
-  }
-
-  /**
-   * 创建评论框
-   */
-  createBox() {
-    let fragment = document.createDocumentFragment()
-    this.box = document.createElement('div')
-    this.box.id = 'lz-comment-box'
-    this.list = document.createElement('div')
-    this.list.className = 'list'
-    this.list.addEventListener('click', async e => this.handleListEvents(e))
-
-    this.add = document.createElement('div')
-    this.add.className = 'add'
-    this.input = document.createElement('div')
-    this.input.setAttribute('contenteditable', true)
-    this.input.className = 'input'
-    this.input.setAttribute('placeholder', '说点啥呗 ..')
-    this.input.setAttribute('spellcheck', false)
-    this.input.setAttribute('data-quote-id', '')
-    this.input.addEventListener('paste', e => this.handlePaste(e))
-
-    this.btn = document.createElement('div')
-    this.btn.className = 'btn'
-    this.btn.innerText = '评论'
-    this.btn.addEventListener('click', async () => this.submitComment())
-    this.add.appendChild(this.input)
-    this.add.appendChild(this.btn)
-
-    //遮罩层,用于实现点击空白处关闭评论框
-    this.overlay = document.createElement('div')
-    this.overlay.className = 'lz-overlay'
-    this.overlay.addEventListener('click', () => this.hiddenBox())
-
-    this.box.appendChild(this.list)
-    this.box.appendChild(this.add)
-
-    fragment.appendChild(this.box)
-    fragment.appendChild(this.overlay)
-    document.body.appendChild(fragment)
-  }
-
-  /**
-   * 关闭评论框
-   */
-  hiddenBox() {
-    if (this.box) {
-      this.box.style.display = 'none'
-      this.overlay.style.display = 'none'
-      this.input.innerText = ''
-      this.input.setAttribute('data-quote-id', '')
-      this.isShow = false
-    }
-  }
-
-  /**
-   * 往 toolbar 中添加按钮
-   * @param {node} protyle 需要添加功能按钮的 protyle editor
-   */
-  appendToolbarBtn(protyle) {
-    if (protyle) {
-      // 处理新增的 protyle
-      let icon = protyle.querySelector('[data-type="comment"]')
-      if (!icon) {
-        let toolbar = protyle.querySelector('.protyle-toolbar')
-        let fragment = this.createToolbarBtn()
-        toolbar.appendChild(fragment)
-      }
-    } else {
-      // 初始化时找到所有 protyle-toolbar
-      let toolbars = document.querySelectorAll('.protyle-toolbar')
-      if (toolbars) {
-        toolbars.forEach((item, index, node) => {
-          if (!item.querySelector('[data-type="comment"]')) {
-            let fragment = this.createToolbarBtn()
-            item.appendChild(fragment)
-          }
-        })
-      }
-    }
-  }
-
-  /**
-   * 创建 toolbar 功能按钮
-   * @returns
-   */
-  createToolbarBtn() {
-    let fragment = document.createDocumentFragment()
-    let divider = document.createElement('div')
-    divider.className = 'protyle-toolbar__divider'
-    let btn = document.createElement('button')
-    btn.className = 'protyle-toolbar__item b3-tooltips b3-tooltips__n'
-    btn.setAttribute('data-type', 'comment')
-    btn.setAttribute('aria-label', '评论')
-    btn.innerHTML = this.icons.comment
-    btn.addEventListener('click', (e) => {
-      btn.parentElement.classList.add('fn__none') //关闭 toolbar
-      this.showBox(e)
-    })
-    fragment.appendChild(divider)
-    fragment.appendChild(btn)
-    return fragment
-  }
-
-}
-
-export default Comment

+ 0 - 19
app/appearance/themes/notion-theme/comment/config.js

@@ -1,19 +0,0 @@
-const config = {
-  api_token: "", //在 设置 - 关于 里查看 API token
-  icons: {
-    comment: '<svg viewBox="0 0 32 32"  style="width: 16px; height: 14px; display: block; flex-shrink: 0; backface-visibility: hidden;"> <path d="M9.143 31.2c0.8 0 1.371-0.343 2.4-1.257l4.914-4.343h8.686c4.343 0 6.743-2.514 6.743-6.743v-11.314c0-4.343-2.4-6.743-6.743-6.743h-18.4c-4.343 0-6.743 2.514-6.743 6.743v11.2c0 4.343 2.514 6.743 6.743 6.743h0.571v3.543c0 1.371 0.686 2.171 1.829 2.171zM9.829 28v-4.114c0-0.8-0.343-1.143-1.143-1.143h-1.829c-2.743 0-4-1.371-4-4v-11.086c0-2.629 1.257-4 4-4h18.286c2.743 0 4 1.371 4 4v11.086c0 2.629-1.371 4-4 4h-8.8c-0.914 0-1.257 0.114-1.943 0.8l-4.571 4.457zM8.686 9.371h14.514c0.457 0 0.914-0.457 0.914-0.914s-0.457-0.914-0.914-0.914h-14.514c-0.571 0-0.914 0.457-0.914 0.914 0 0.571 0.343 0.914 0.914 0.914zM8.686 13.943h14.514c0.457 0 0.914-0.457 0.914-0.914s-0.457-0.914-0.914-0.914h-14.514c-0.457 0-0.914 0.457-0.914 0.914 0 0.571 0.343 0.914 0.914 0.914zM8.686 18.629h9.486c0.457 0 0.914-0.457 0.914-0.914s-0.343-0.914-0.914-0.914h-9.486c-0.457 0-0.914 0.343-0.914 0.914 0 0.457 0.343 0.914 0.914 0.914z"></path></svg>',
-    brush: '<svg t="1628848791142" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3646" width="32" height="32"><path d="M768 448a64 64 0 0 1-64 64h-640A64 64 0 0 1 0 448v-298.666667A64 64 0 0 1 64 85.333333h640A64 64 0 0 1 768 149.333333V256h192a64 64 0 0 1 63.701333 57.856L1024 320v260.736a64 64 0 0 1-49.92 62.421333l-5.888 1.066667L512 703.104V981.333333a42.666667 42.666667 0 0 1-37.674667 42.368L469.333333 1024a42.666667 42.666667 0 0 1-42.368-37.674667L426.666667 981.333333v-296.96a64 64 0 0 1 49.92-62.464l5.888-1.024L938.666667 561.962667V341.333333h-170.666667zM682.666667 170.666667H85.333333v256h597.333334V170.666667z" p-id="3647"></path></svg>',
-  },
-  attrs: {
-    // 块属性
-    type: {
-      // 块属性类型值
-      heading: "heading", // 标题
-      quote: "quote", // 原文引用
-      comment: "comment", // 评论
-      container: "container", // 容器
-    },
-  },
-}
-
-export default config

+ 0 - 161
app/appearance/themes/notion-theme/comment/index.js

@@ -1,161 +0,0 @@
-/**
- * 行内评论功能
- * REF: [siyuan-note/siyuan-comment at main · langzhou/siyuan-note · GitHub](https://github.com/langzhou/siyuan-note/tree/main/siyuan-comment)
- */
-
-import Comment from './comment.js'
-
-class SiyuanUtil{
-  constructor(){
-    this.themeName = this.getThemeName()
-    if(this.themeName){
-      this.appendStyleSheet()
-      this.comment = new Comment()
-      this.domWatcher()
-      this.handleEvents()
-    }
-						   
-								
-					 
-							
-					   
-  }
-
-  /* 事件委托 */
-  handleEvents() {
-    // 按键按下事件
-    window.addEventListener('keydown', e => {
-      // this.shortcutKey(e)
-      if (this.comment) this.comment.handleKeyDown(e)
-    })
-
-    // 输入防抖
-    // window.addEventListener('keyup',lodash.debounce(e =>{
-    //   if(this.searchBox) this.searchBox.handleInput(e)
-    // },800))
-
-    // 按键弹起事件
-    // window.addEventListener('keyup',e =>{
-    //   if(this.searchBox) this.searchBox.actionTrigger(e)
-    // })
-
-    // 鼠标单击事件
-    window.addEventListener('click', e => {
-      if (this.comment) this.comment.showBox(e)
-    })
-
-    // 鼠标松开事件
-    window.addEventListener('mouseup', e => {
-      if (this.comment) this.comment.handleSelectionEvent(e)
-    })
-  }
-
-  // 获取当前主题名称
-  getThemeName(){
-    let themeStyle = document.querySelector('#themeStyle')
-    if(themeStyle){
-      let url = themeStyle.getAttribute('href').split('/')
-      return url[url.length - 2]
-    }else{
-      setTimeout(()=>this.getThemeName(),500)
-    }
-  }
-
-  /* 检测 dom 变动,用于动态插入元素 */
-  domWatcher() {
-    var targetNode = document.querySelector('.layout__center.fn__flex.fn__flex-1');
-    if (!targetNode) {
-      setTimeout(() => { this.domWatcher() }, 500);
-    } else {
-      const config = { attributes: false, childList: true, subtree: true };
-      const callback = (mutationsList, observer) => {
-        for (let mutation of mutationsList) {
-          if (mutation.type === 'childList') {
-            this.childListChangedHook(mutation)
-          }
-          else if (mutation.type === 'attributes') {
-            console.log('The ' + mutation.attributeName + ' attribute was modified.');
-          }
-        }
-      };
-      const observer = new MutationObserver(callback);
-      observer.observe(targetNode, config);
-      // observer.disconnect();
-    }
-  }
-
-  /* 处理观察对象节点变动事件 */
-  childListChangedHook(mutation) {
-    // 监听 node added 事件
-    if (mutation.addedNodes.length > 0) {
-      let node = mutation.addedNodes.item(0)
-      // 新增 protyle 节点,即判断为打开了新文档
-      if (node && node.className == 'fn__flex-1 protyle') {
-        // 因为 dom 树可能没有完全加载,需要延迟处理
-        setTimeout(() => {
-          if (this.comment) {
-            this.comment.appendToolbarBtn()
-            // this.comment.resolveCommentNodes() //todo
-          }
-        }, 1000)
-      }
-    }
-  }
-
-
-  /* 检测子窗口 dom 变动,用于动态插入元素 */
-  popoverDomWatcher() {
-    const config = { childList: true };
-    const callback = (mutationsList, observer) => {
-      for (let mutation of mutationsList) {
-        // console.log(mutation)
-        this.popoverChildListChangedHook(mutation)
-      }
-    };
-    const observer = new MutationObserver(callback);
-    observer.observe(document.body, config);
-    // observer.disconnect();
-  }
-
-
-  /* 处理观察对象节点变动事件 */
-  popoverChildListChangedHook(mutation) {
-    // 监听 node added 事件
-    if (mutation.addedNodes.length > 0) {
-      let node = mutation.addedNodes.item(0)
-      // 新增 protyle 节点,即判断为打开了新文档
-      if (node && node.classList.contains('block__popover')) {
-        // 因为 dom 树可能没有完全加载,需要延迟处理
-        this.comment.appendToolbarBtn(node.querySelector('.protyle'))
-      }
-    }
-  }
-
-  /* 插入样式表 */
-  appendStyleSheet() {
-    let node = document.querySelector('#protyleHljsStyle')
-    if (!node) {
-      setTimeout(() => {
-        this.appendStyleSheet()
-      }, 500);
-    } else {
-      let fragment = document.createDocumentFragment()
-      let css = document.createElement('link')
-      css.setAttribute('type', 'text/css')
-      css.setAttribute('rel', 'stylesheet')
-      css.setAttribute('href','./appearance/themes/'+ this.themeName + '/comment/comment.css')
-      fragment.appendChild(css)
-      document.head.insertBefore(fragment, node)
-    }
-  }
-}
-
-(() => {
-  try {
-    if (true) {
-      new SiyuanUtil()
-    }
-  } catch (err) {
-    console.error(err);
-  }
-})();

+ 0 - 101
app/appearance/themes/notion-theme/comment/network.js

@@ -1,101 +0,0 @@
-/**
- * 设置属性
- * @param {object} data 
- * @returns 
- */
-export function setBlockAttrs(data) {
-  return request("/api/attr/setBlockAttrs", data)
-}
-
-export function insertBlock(data) {
-  return request("/api/block/insertBlock", data)
-}
-
-export function prependBlock(data) {
-  return request("/api/block/prependBlock", data)
-}
-
-export function appendBlock(data) {
-  return request("/api/block/appendBlock", data)
-}
-
-export function updateBlock(data) {
-  return request("/api/block/updateBlock", data)
-}
-
-export function deleteBlock(id) {
-  return request("/api/block/deleteBlock", { "id": id })
-}
-
-export function querySQL(sql) {
-  return request("/api/query/sql", { "stmt": sql })
-}
-
-/**
- * 网络请求
- * @param {*} url 请求地址
- * @param {object} data 
- * @param {*} method 请求方法 get post
- * @returns 
- */
-export function request(url, data, method = 'POST') {
-  return new Promise((resolve, reject) => {
-    if (method.toUpperCase() == 'POST') {
-      fetch(url, {
-        method: 'POST',
-        headers: {
-          'Content-Type': 'application/json'
-        },
-        body: JSON.stringify(data)
-        // body:data
-      }).then(handleResponse)
-        .then(data => resolve(data))
-        .then(error => reject(error))
-
-    } else {
-      fetch(url)
-        .then(handleResponse)
-        .then(data => resolve(data))
-        .then(error => reject(error))
-    }
-  })
-
-  function handleResponse(response) {
-    let contentType = response.headers.get('content-type')
-    if (contentType.includes('application/json')) {
-      return handleJSONResponse(response)
-    } else if (contentType.includes('text/html')) {
-      return handleTextResponse(response)
-    } else {
-      throw new Error(`Sorry, content-type ${contentType} not supported`)
-    }
-  }
-
-  function handleJSONResponse(response) {
-    return response.json()
-      .then(json => {
-        if (response.ok) {
-          return json
-        } else {
-          return Promise.reject(Object.assign({}, json, {
-            status: response.status,
-            statusText: response.statusText
-          }))
-        }
-      })
-  }
-  function handleTextResponse(response) {
-    return response.text()
-      .then(text => {
-        if (response.ok) {
-          return text
-        } else {
-          return Promise.reject({
-            status: response.status,
-            statusText: response.statusText,
-            err: text
-          })
-        }
-      })
-  }
-}

+ 0 - 216
app/appearance/themes/notion-theme/comment/utils.js

@@ -1,216 +0,0 @@
-/*
-** randomWord 产生任意长度随机字母数字组合
-** randomFlag-是否任意长度 min-任意长度最小位[固定位数] max-任意长度最大位
-** xuanfeng 2014-08-28
-*/
-
-function randomWord(randomFlag, min, max) {
-  var str = "",
-    range = min,
-    arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'];
-
-  // 随机产生
-  if (randomFlag) {
-    range = Math.round(Math.random() * (max - min)) + min;
-  }
-  for (var i = 0; i < range; i++) {
-    let pos = Math.round(Math.random() * (arr.length - 1));
-    str += arr[pos];
-  }
-  return str;
-}
-
-export function dateFormat(fmt, date) {
-  let ret;
-  const opt = {
-    "Y+": date.getFullYear().toString(),        // 年
-    "m+": (date.getMonth() + 1).toString(),     // 月
-    "d+": date.getDate().toString(),            // 日
-    "H+": date.getHours().toString(),           // 时
-    "M+": date.getMinutes().toString(),         // 分
-    "S+": date.getSeconds().toString(),
-    "s+": date.getMilliseconds().toString()     // 毫秒
-    // 有其他格式化字符需求可以继续添加,必须转化成字符串
-  };
-  for (let k in opt) {
-    ret = new RegExp("(" + k + ")").exec(fmt);
-    if (ret) {
-      fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
-    };
-  };
-  return fmt;
-}
-
-/**
- * 构建符合规范的 blockid
- * @param {bool} suffix 是否添加 7 为字母数字组合的后缀,默认为不添加,仅通过日期构建 id
- * @returns blockid
- */
-export function createBlockId(suffix = true) {
-  let id = dateFormat("YYYYmmddHHMMSS", new Date())
-  if (suffix) {
-    id += "-" + randomWord(true, 7, 7)
-  }
-  return id
-}
-
-/**
- * 创建弹框遮罩
- * @param {*} obj 对象句柄
- * @param {*} type 弹框样式: black 半透明遮罩;default 透明遮罩
- * @returns 
- */
-export function createOverlay(obj = this, type) {
-  let className = ''
-  if (type == 'black') {
-    className = 'lz-overlay-black'
-  } else {
-    className = 'lz-overlay'
-  }
-  let overlay = document.querySelector(`.${className}`)
-  if (overlay) {
-    obj.overlay = overlay
-  } else {
-    obj.overlay = document.createElement('div')
-    obj.overlay.className = className
-  }
-  return obj.overlay
-}
-
-
-/**
- * 通过触发 protyle input 事件来保存 block 内容,需要确保 protyle 获得焦点
- */
-export function saveViaTransaction() {
-  let protyle = document.querySelector('.fn__flex-1.protyle:not(.fn__none) .protyle-wysiwyg.protyle-wysiwyg--attr') //需要获取到当前正在编辑的 protyle
-  let e = document.createEvent('HTMLEvents')
-  e.initEvent('input', true, false)
-  protyle.dispatchEvent(e)
-}
-
-/**
- * 消息提示 toast 
- * @param text 提示文案
- * @param type 样式,取值:info / success / danger / warning
- **/
-export function snackbar(text, type = 'info') {
-  let snackbar = document.querySelector('#snackbar')
-  if (!snackbar) {
-    snackbar = document.createElement('div')
-    snackbar.id = 'snackbar'
-    document.body.appendChild(snackbar)
-  }
-  snackbar.classList.add('show', type)
-  snackbar.innerText = text
-  setTimeout(function () { snackbar.classList.remove("show", type); }, 3000);
-}
-
-/**
- * 计算弹出框的坐标位置,使得 box 不会超出页面范围
- * @param box 元素 node
- * @param x 事件 Event x 坐标
- * @param y 事件 Event y 坐标
- * @param offsetX x 偏移量
- * @param offsetY y 偏移量
- * @param offsetPostion 设置 box 相对于点击坐标的位置
- */
-export function computeBoxPosition(box, x, y, offsetX = 10, offsetY = 20, offsetPostion = 'center') {
-  let boxWidth = box.clientWidth,
-    boxHeight = box.clientHeight,
-    docWidth = document.body.clientWidth,
-    docHeight = document.body.clientHeight,
-    top = y + offsetY,
-    left = 0
-
-  switch (offsetPostion) {
-    case 'left':
-      left = x - boxWidth - offsetX
-      break
-    case 'right':
-      left = x + offsetX
-      break
-    default:
-      left = x - boxWidth / 2 - offsetX
-      break
-  }
-
-  // box右侧超出页面
-  if (left + boxWidth > docWidth) left = docWidth - boxWidth - offsetX
-  // box下侧抽出页面
-  if (top + boxHeight > docHeight) top = docHeight - boxHeight - offsetY
-  // box遮挡了点击位置
-  if (y > top && y < top + boxHeight) top = y - boxHeight - offsetY
-  top = top < 0 ? offsetY : top
-  left = left < 0 ? offsetX : left
-  return { x: left, y: top }
-}
-
-/**
- * 格式化思源笔记字符串日期
- * @param {*} value 
- * @param {*} from 可选值:date | blockid
- * @returns 
- */
-export function formatSYDate(value, from = "date") {
-
-  let str = ''
-  if (from == "blockid") {
-    let arr = value.split('-')
-    str = arr[0]
-  } else {
-    str = value
-  }
-
-  let year = str.substring(0, 4),
-    month = str.substring(4, 6),
-    day = str.substring(6, 8),
-    hour = str.substring(8, 10),
-    min = str.substring(10, 12),
-    second = str.substring(12, 14)
-
-  return year + '-' + month + '-' + day + ' ' + hour + ':' + min + ':' + second
-}
-
-/**
- * 比较版本号
- * @params {string} version1: 版本号1
- * @params {string} version2: 版本号2
- * @return {number}: 1: v1 > v2; -1: v1 < v2; 0: v1 = v2
- */
-export function compareVersion(version1, version2) {
-  let v1_arr = version1.split('.');
-  let v2_arr = version2.split('.');
-  for (let i = 0; i < v1_arr.length; i++) {
-    let v1, v2;
-    if (!isNaN(v1_arr[i]) && !isNaN(v2_arr[i])) { // 两者都为数字
-      v1 = parseInt(v1_arr[i]);
-      v2 = parseInt(v2_arr[i]);
-    }
-    else if (!isNaN(v1_arr[i]) || !isNaN(v2_arr[i])) { // 其中一者为数字
-      v1 = v1_arr[i];
-      v2 = v2_arr[i];
-      if (v1 == undefined || v2 == undefined) // 其中一者没有更细分的版本号
-        return 0;
-      else if (!isNaN(v1) && isNaN(v2)) // v1 是发行版 | v2 是内测(x-alphaX)/公测版(x-devX)
-        return 1;
-      else if (isNaN(v1) && !isNaN(v2)) // v2 是发行版 | v1 是内测(x-alphaX)/公测版(x-devX)
-        return -1;
-      else // 意外的情况
-        return 0;
-    }
-    else { // 都不为数字, 比较字符串, 内测版(alpha)比公测版(dev)版本号小
-      v1 = v1_arr[i];
-      v2 = v2_arr[i];
-    }
-    switch (true) {
-      case v1 > v2:
-        return 1;
-      case v1 < v2:
-        return -1;
-      case v1 === v2:
-      default:
-        break;
-    }
-  }
-  return 0;
-}

BIN
app/appearance/themes/notion-theme/icon4Tsundoku/52pojie_cn.png


+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/Facebook.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1648127855792" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="49135" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20"><defs><style type="text/css"></style></defs><path d="M967.601349 1024c31.076808 0 56.398651-25.321843 56.398651-56.398651V56.398651c0-31.076808-25.321843-56.398651-56.398651-56.398651H56.398651C25.321843 0 0 25.321843 0 56.398651v910.819034c0 31.076808 25.321843 56.398651 56.398651 56.398651h911.202698z" fill="#3C5A99" p-id="49136"></path><path d="M706.709629 1024V627.29112h133.13151l19.950543-154.61671h-153.082053V374.072686c0-44.888722 12.277257-75.198202 76.732859-75.198201h81.720494v-138.119146c-14.195579-1.918321-62.920944-6.138629-119.319595-6.138629-118.168602 0-198.738104 72.128887-198.738104 204.109405v113.948295h-133.515174v154.61671h133.515174v396.70888h159.604346z" fill="#FFFFFF" p-id="49137"></path></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/Twitter.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1648127689842" class="icon" viewBox="0 0 1260 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="47668" xmlns:xlink="http://www.w3.org/1999/xlink" width="24.609375" height="20"><defs><style type="text/css"></style></defs><path d="M1259.846921 121.148242c-46.524504 20.728739-96.273478 34.547899-148.325646 40.536201 53.434084-31.784067 94.430924-82.454319 113.777747-142.797982-50.209613 29.480874-105.486251 51.13089-164.447999 62.646857A257.584528 257.584528 0 0 0 872.449815 0.000276c-142.797982 0-258.418284 115.620302-258.418284 258.418284 0 20.268101 2.303193 40.075563 6.909579 58.961748C405.82286 306.32498 215.579097 203.602561 87.98219 47.446058c-22.110655 38.233008-35.008538 82.454319-35.008538 129.900099 0 89.824537 45.603227 168.593747 115.159663 215.118251-42.378756-1.381916-81.99368-12.897882-117.002217-32.244706v3.224471c0 125.293713 88.90326 229.398049 207.287393 253.351259-21.650017 5.988302-44.681949 9.212773-68.17452 9.212773-16.582991 0-32.705344-1.842555-48.827697-4.606387 32.705344 102.722419 128.518184 177.345881 241.374653 179.649074-88.442621 69.095798-199.917175 110.553277-321.06514 110.553277-20.728739 0-41.457479-1.381916-61.72558-3.685109 114.238386 73.241546 250.126788 116.08094 396.149241 116.08094 475.379089 0 735.179289-393.846048 735.179289-735.179289 0-11.055328-0.460639-22.571294-0.921277-33.626621 51.13089-36.851092 94.891562-82.454319 129.439461-134.045848z" fill="#55ACEE" p-id="47669"></path></svg>

BIN
app/appearance/themes/notion-theme/icon4Tsundoku/aliyundrive_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/appinn_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/apple_com_cn.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/auth_alipay_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/baidu_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/baike_baidu_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/bbs_hupu_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/bilibili_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/blog_csdn_net.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/cn_bing_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/douban_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/fanyi_baidu_com.png


+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/JAVA.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="20.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M594.944 0l335.124 341.32v563.2c0 65.996-52.5 119.48-117.294 119.48H209.546c-64.793 0-117.299-53.53-117.299-119.48V119.48C92.252 53.484 144.757 0 209.551 0h385.393z" fill="#424242" /><path d="M930.068 341.32H718.152c-64.748 0-123.208-59.49-123.208-125.492V0l335.124 341.32z" fill="#FFFFFF" fill-opacity=".4" /><path d="M504.458 580.608c49.526 0 90.343 40.868 90.343 92.022 0 50.452-40.817 92.068-90.343 92.068a86.108 86.108 0 0 1-51.574-16.384c-6.051-4.096-7.352-12.944-3.348-19.088a13.542 13.542 0 0 1 18.755-3.394c10.705 7.444 23.413 11.586 36.167 11.586 34.816 0 63.58-29.322 63.58-64.788 0-35.472-28.764-64.794-63.58-64.794-32.768 0-60.185 25.974-63.303 58.65l-0.323 6.144c0 50.452-40.822 92.068-90.348 92.068-49.525 0-90.388-41.616-90.388-92.068 0-50.458 40.863-92.022 90.388-92.022 17.408 0 34.12 4.746 48.876 14.285 6.047 4.096 8.003 12.288 3.999 19.087a13.594 13.594 0 0 1-18.755 4.096 60.877 60.877 0 0 0-34.12-10.24c-34.816 0-63.58 29.322-63.58 64.794 0 35.466 28.764 64.788 63.58 64.788s63.58-29.322 63.58-64.788c0-50.458 40.822-92.022 90.394-92.022z" fill="#FFFFFF" /></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/MP4.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="20.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M594.944 0l335.124 341.32v563.2c0 65.996-52.5 119.48-117.294 119.48H209.546c-64.793 0-117.299-53.53-117.299-119.48V119.48C92.252 53.484 144.757 0 209.551 0h385.393z" fill="#627CFE" /><path d="M930.068 341.32H718.152c-64.748 0-123.208-59.49-123.208-125.492V0l335.124 341.32z" fill="#FFFFFF" fill-opacity=".4" /><path d="M519.68 606.628v66.422l120.832 73.4V533.407z" fill="#FFFFFF" opacity=".99" /><path d="M534.528 512.138H282.25a22.482 22.482 0 0 0-22.297 22.62v210.53c0 12.38 9.917 22.666 22.251 22.666h252.508a22.482 22.482 0 0 0 22.252-22.666V534.574a22.62 22.62 0 0 0-22.436-22.436zM356.25 719.36V560.548l127.078 79.4L356.25 719.36z" fill="#FFFFFF" opacity=".99" /></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/css.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="20.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M88.064 27.648l77.824 871.424L512 996.352l346.112-97.28 77.824-871.424z" fill="#2196F3" /><path d="M771.072 312.32l-10.24 109.568-29.696 328.704L512 811.008l-220.16-60.416-14.336-172.032h107.52l7.168 89.088L512 700.416l119.808-32.768 16.384-148.48-375.808 1.024-11.264-101.376 395.264-4.096 8.192-108.544-413.696 1.024-7.168-101.376h536.576z" fill="#FAFAFA" /></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/excel.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="20.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M116.91 0H668.97l262.774 257.705V995.43c0 15.77-13.2 28.57-29.46 28.57H116.91c-16.261 0-29.455-12.8-29.455-28.57V28.57C87.45 12.8 100.649 0 116.91 0z" fill="#00C090" /><path d="M668.969 0v229.135c0 15.79 13.2 28.57 29.46 28.57h233.314L668.969 0z" fill="#68DBBF" /><path d="M703.744 370.601l-447.54 435.2a39.148 39.148 0 0 0 0.748 55.905c15.857 15.345 41.447 15.606 57.636 0.589l447.519-435.2c10.818-10.035 15.18-24.965 11.402-39.014-3.773-14.045-15.104-25.001-29.593-28.631-14.49-3.63-29.876 0.64-40.192 11.151h0.015z" fill="#FFFFFF" /><path d="M256.205 425.969l447.539 435.18c16.19 15.016 41.78 14.755 57.636-0.59a39.148 39.148 0 0 0 0.747-55.9L314.61 369.46c-16.19-15.017-41.78-14.756-57.641 0.589a39.148 39.148 0 0 0-0.748 55.9l-0.015 0.02z" fill="#FFFFFF" /></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/folder.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="16.88px" viewBox="0 0 1213 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M1190.43586 169.1941a59.684993 59.684993 0 0 0-42.253995-18.131998H554.027935l-132.929984-132.929984a63.070993 63.070993 0 0 0-19.082998-13.084999A64.577992 64.577992 0 0 0 378.835956 0.00012H60.393993a58.031993 58.031993 0 0 0-42.261995 18.139998A63.940993 63.940993 0 0 0 0 60.386113V412.890072h1208.575858V211.456095a57.709993 57.709993 0 0 0-18.139998-42.261995z" fill="#FFD766" /><path d="M1148.415865 1016.752001H60.393993A60.634993 60.634993 0 0 1 0 956.357008V311.823083h1208.575858v644.533925a60.634993 60.634993 0 0 1-60.393993 60.394993h0.234z" fill="#FFAC33" /></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/html.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="20.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M89.088 59.392l62.464 803.84c1.024 12.288 9.216 22.528 20.48 25.6L502.784 993.28c6.144 2.048 12.288 2.048 18.432 0l330.752-104.448c11.264-4.096 19.456-14.336 20.48-25.6l62.464-803.84c1.024-17.408-12.288-31.744-29.696-31.744H118.784c-17.408 0-31.744 14.336-29.696 31.744z" fill="#FC490B" /><path d="M774.144 309.248h-409.6l12.288 113.664h388.096l-25.6 325.632-227.328 71.68-227.328-71.68-13.312-169.984h118.784v82.944l124.928 33.792 123.904-33.792 10.24-132.096H267.264L241.664 204.8h540.672z" fill="#FFFFFF" /></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/jpg.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="20.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M137.902164 0.00045a48.572979 48.572979 0 0 0-35.588984 15.293993 53.964976 53.964976 0 0 0-15.272993 35.639985v917.411596a48.706979 48.706979 0 0 0 15.272993 35.639985 49.970978 49.970978 0 0 0 35.589984 15.292993h746.335672a48.639979 48.639979 0 0 0 35.589985-15.292993 50.369978 50.369978 0 0 0 15.272993-35.639985V288.717323L646.727941 0.00045H137.902164z" fill="#FF5562" /><path d="M935.101814 288.717323H697.655918c-27.821988-0.666-50.226978-23.07599-50.927977-50.933977V0.00045l288.373873 288.716873z" fill="#FFBBC0" /><path d="M772.289886 715.070136L666.049932 550.303208a16.593993 16.593993 0 0 0-14.411993-7.649996 18.851992 18.851992 0 0 0-14.407994 7.649996l-56.836975 88.299961L453.171026 432.47026a16.526993 16.526993 0 0 0-14.406994-7.643997 18.851992 18.851992 0 0 0-14.412993 7.649997L249.657115 715.263136a15.446993 15.446993 0 0 0 0 16.957992 15.666993 15.666993 0 0 0 14.406994 8.508996h493.547783a18.851992 18.851992 0 0 0 15.272993-8.509996 16.977993 16.977993 0 0 0-0.793999-16.956992l0.2-0.2zM628.069949 403.149273a42.489981 42.489981 0 0 0 26.142989 39.305983 42.387981 42.387981 0 0 0 46.264979-9.169996 42.531981 42.531981 0 0 0 9.225996-46.30998A42.429981 42.429981 0 0 0 670.49993 360.730291c-23.40899 0-42.393981 18.979992-42.434981 42.418982z" fill="#FFFFFF" /></svg>

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/appearance/themes/notion-theme/icon4Tsundoku/fold/json.svg


+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/md.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1648117428772" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="23971" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20"><defs><style type="text/css"></style></defs><path d="M936.228571 299.885714l-292.571428-292.571428S629.028571 0 621.714286 0h-438.857143C124.342857 0 73.142857 51.2 73.142857 109.714286v804.571428c0 58.514286 51.2 109.714286 109.714286 109.714286h658.285714c58.514286 0 109.714286-51.2 109.714286-109.714286v-585.142857c0-7.314286-7.314286-21.942857-14.628572-29.257143zM658.285714 124.342857L826.514286 292.571429H694.857143c-21.942857 0-36.571429-14.628571-36.571429-36.571429V124.342857z m219.428572 789.942857c0 21.942857-14.628571 36.571429-36.571429 36.571429h-658.285714c-21.942857 0-36.571429-14.628571-36.571429-36.571429v-804.571428c0-21.942857 14.628571-36.571429 36.571429-36.571429H585.142857v182.857143C585.142857 314.514286 636.342857 365.714286 694.857143 365.714286H877.714286v548.571428z" p-id="23972"></path><path d="M650.971429 526.628571l-7.314286-7.314285h-7.314286-7.314286-7.314285-7.314286-7.314286-7.314285s-7.314286 0-7.314286 7.314285l-7.314286 7.314286-73.142857 131.657143-80.457143-138.971429-7.314286-7.314285-7.314285-7.314286h-7.314286-7.314286-7.314285-7.314286-7.314286-7.314286S365.714286 512 365.714286 519.314286l-7.314286 7.314285-95.085714 190.171429c-7.314286 14.628571-7.314286 36.571429 14.628571 51.2s36.571429 7.314286 51.2-14.628571l80.457143-131.657143 80.457143 131.657143 7.314286 7.314285h29.257142l7.314286-7.314285 80.457143-131.657143 80.457143 131.657143c7.314286 14.628571 29.257143 21.942857 51.2 14.628571s21.942857-29.257143 14.628571-51.2L650.971429 526.628571z" p-id="23973"></path></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/mp3.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="20.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M137.902164 0.00045a48.572979 48.572979 0 0 0-35.588984 15.293993 53.964976 53.964976 0 0 0-15.272993 35.639985v917.411596a48.706979 48.706979 0 0 0 15.272993 35.639985 49.970978 49.970978 0 0 0 35.589984 15.292993h746.335672a48.639979 48.639979 0 0 0 35.589985-15.292993 50.369978 50.369978 0 0 0 15.272993-35.639985V288.717323L646.727941 0.00045H137.902164z" fill="#FF5562" /><path d="M935.101814 288.717323H697.655918c-27.821988-0.666-50.226978-23.07599-50.927977-50.933977V0.00045l288.373873 288.716873z" fill="#FFBBC0" /><path d="M678.133927 487.465236c0.42-2.200999 0.42-4.453998 0-6.649997V358.532292a18.099992 18.099992 0 0 0-5.908997-12.763994 15.922993 15.922993 0 0 0-13.613994-3.393998l-265.599884 74.740967a15.420993 15.420993 0 0 0-12.681994 15.293993v292.105872a90.39396 90.39396 0 0 0-34.794985-6.655997 106.192953 106.192953 0 0 0-27.954988 3.394998c-43.289981 11.903995-70.379969 45.87998-61.951972 77.331966 6.644997 24.601989 32.275986 39.894982 64.475971 39.894983a161.209929 161.209929 0 0 0 28.020988-3.389999c38.978983-11.037995 64.409972-39.095983 63.544972-67.09197a12.457995 12.457995 0 0 0 0.865-5.984998V571.776199l233.266897-65.361972v144.358937a90.65496 90.65496 0 0 0-34.794985-6.650997 106.096953 106.096953 0 0 0-28.021987 3.393998c-43.227981 11.899995-70.384969 45.87498-61.885973 77.260966 6.640997 24.672989 32.204986 39.899982 64.470972 39.899983a105.901953 105.901953 0 0 0 27.955987-3.393999c38.179983-10.239996 63.609972-38.230983 63.609972-66.49397a12.170995 12.170995 0 0 0 0.866-5.912998l0.133-201.409911z m-265.599883 50.933977v-56.852975l233.394897-65.094971v56.918975l-233.394897 65.023971z" fill="#FFFFFF" /></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/pdf.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="20.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M116.91 0H668.97l262.774 257.705V995.43c0 15.77-13.2 28.57-29.46 28.57H116.91c-16.261 0-29.455-12.8-29.455-28.57V28.57C87.45 12.8 100.649 0 116.91 0z" fill="#FF4867" /><path d="M668.969 0v229.135c0 15.79 13.2 28.57 29.46 28.57h233.314L668.969 0z" fill="#FF97A9" /><path d="M721.306 854.871c-52.317 0-99.246-87.091-123.92-143.703-41.523-16.809-87.316-32.512-131.778-42.665-38.912 24.899-105.124 62.172-155.981 62.172-31.55 0-54.267-15.396-62.607-42.189-6.39-22.051-0.989-37.273 5.877-45.516 13.41-17.767 41.037-26.793 82.407-26.793 33.52 0 76.016 5.698 123.443 16.793a785.05 785.05 0 0 0 89.262-71.373c-12.262-56.458-25.672-147.968 8.346-190.156 16.834-20.142 42.496-26.798 73.548-17.767 34.018 9.523 46.935 29.66 50.857 45.517 14.393 55.04-50.857 129.26-94.827 172.882 9.815 37.734 22.733 77.553 38.43 114.022 63.1 27.29 138.138 68.045 146.653 112.471 3.43 15.36-1.485 29.645-14.398 42.174-11.12 8.873-22.876 14.11-35.318 14.11v0.021z m-47.038-96.02c11.505 24.852 22.487 36.577 28.278 36.577 0.88 0 2.145-0.379 3.922-1.895 2.15-2.288 2.15-3.809 1.792-5.207-1.193-6.517-10.906-17.239-33.997-29.475z m-332.19-100.573c-18.407 0-23.476 4.317-25.007 6.334-0.44 0.645-1.76 2.59-0.44 7.608 1.09 4.321 4.173 8.93 13.706 8.93 11.95 0 29.246-6.554 49.342-18.264-14.377-3.087-27.044-4.608-37.602-4.608z m180.188-22.185c10.997 2.97 22.4 6.81 32.993 10.752a280.934 280.934 0 0 1-9.59-29.696 722.857 722.857 0 0 1-23.398 18.944z m77.721-214.374a11.715 11.715 0 0 0-9.113 4.009c-7.281 8.893-8.09 31.299-2.458 59.991 21.325-22.205 32.922-42.598 30.034-53.504-0.405-1.608-1.638-6.487-11.597-9.303a24.018 24.018 0 0 0-6.86-1.193z" fill="#FFFFFF" /></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/ppt.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="20.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M116.91 0H668.97l262.774 257.705V995.43c0 15.77-13.2 28.57-29.46 28.57H116.91c-16.261 0-29.455-12.8-29.455-28.57V28.57C87.45 12.8 100.649 0 116.91 0z" fill="#FF7861" /><path d="M668.969 0v229.135c0 15.79 13.2 28.57 29.46 28.57h233.314L668.969 0z" fill="#FFB0A4" /><path d="M695.593 473.257c9.185 9.098 14.029 22.19 14.029 41.595 0 19.42-4.844 32.512-14.029 41.605-9.8 9.728-26.394 16.947-50.908 20.685H280.704c-22.784 0-41.252 17.91-41.252 40.007v179.42c0 14.296 7.86 27.505 20.624 34.653a42.358 42.358 0 0 0 41.246 0c12.764-7.148 20.629-20.357 20.624-34.652V657.137h325.821c1.935 0 3.891-0.123 5.821-0.395 88.11-12.2 138.522-62.223 138.522-141.89 0-79.652-50.411-129.674-138.522-141.875a42.045 42.045 0 0 0-5.821-0.41H280.699c-22.784 0-41.247 17.91-41.247 40.003 0 22.092 18.468 40.002 41.247 40.002h363.986c24.514 3.738 41.108 10.957 50.908 20.67v0.015z" fill="#FFFFFF" /></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/txt.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1648116983679" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="15329" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20"><defs><style type="text/css"></style></defs><path d="M204.8 0h477.866667l273.066666 273.066667v614.4c0 75.093333-61.44 136.533333-136.533333 136.533333H204.8c-75.093333 0-136.533333-61.44-136.533333-136.533333V136.533333C68.266667 61.44 129.706667 0 204.8 0z m341.333333 512h136.533334c20.48 0 34.133333-13.653333 34.133333-34.133333s-13.653333-34.133333-34.133333-34.133334H341.333333c-20.48 0-34.133333 13.653333-34.133333 34.133334s13.653333 34.133333 34.133333 34.133333h136.533334V819.2c0 20.48 13.653333 34.133333 34.133333 34.133333s34.133333-13.653333 34.133333-34.133333V512z" fill="#777777" p-id="15330"></path><path d="M682.666667 0l273.066666 273.066667h-204.8c-40.96 0-68.266667-27.306667-68.266666-68.266667V0z" fill="#E0E0E0" opacity=".619" p-id="15331"></path></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/vscode.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1648116753323" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="14447" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20"><defs><style type="text/css"></style></defs><path d="M123.648 399.9232s-12.4928-12.288-11.264-19.968c1.024-7.7824 5.632-11.9296 5.632-11.9296l72.5504-61.7472s5.0176-2.4576 10.4448-1.8432c5.4272 0.6144 11.6736 4.608 11.6736 4.608l504.576 382.976 1.8944 200.6016-19.4048 13.1584-13.7728-2.7136L123.648 399.9232z" fill="#008BD1" p-id="14448"></path><path d="M227.072 698.9312l-15.0016 11.6736s-5.632 4.4032-12.7488 4.608c-7.0656 0.2048-13.312-5.632-13.312-5.632l-67.7888-62.5664s-2.304-3.7376-1.024-9.3696c1.2288-5.632 2.7136-7.3216 2.7136-7.3216l553.5744-502.9376 6.2464-3.7376 28.5696-5.8368 42.5472 65.8944 3.7376 115.712-527.5136 399.5136z" fill="#0079BF" p-id="14449"></path><path d="M673.4848 127.3856s31.488-10.5984 38.6048 21.504l0.2048 723.3024s-3.9936 15.4624-12.9536 21.0944c-8.96 5.632-22.9376 1.8432-22.9376 1.8432s11.264 13.7728 23.9616 13.312c6.2976 0 16.0768-6.8608 16.0768-6.8608l176.1792-86.9376s10.4448-7.4752 14.3872-14.592c3.9936-6.8608 4.608-12.4928 4.608-12.4928V235.008s1.8944-11.4688-5.632-19.6096-10.8544-9.3696-10.8544-9.3696L709.632 117.1968s-3.9936-1.4848-12.1344-1.024c-8.2944 0.1536-23.9616 11.264-23.9616 11.264z" fill="#009BD9" p-id="14450"></path></svg>

+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/word.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="20.00px" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M116.91 0H668.97l262.774 257.705V995.43c0 15.77-13.2 28.57-29.46 28.57H116.91c-16.261 0-29.455-12.8-29.455-28.57V28.57C87.45 12.8 100.649 0 116.91 0z" fill="#4A8DFF" /><path d="M668.969 0v229.135c0 15.79 13.2 28.57 29.46 28.57h233.314L668.969 0z" fill="#E5F0FF" /><path d="M722.765 823.537c25.395 26.962 71.705 9.554 71.705-26.967V371.44h-82.514v321.977L547.994 519.235c-7.814-8.3-18.873-13.03-30.464-13.03-11.587 0-22.641 4.73-30.46 13.03L323.109 693.417V371.42H240.63v425.15c0 36.52 46.315 53.929 71.71 26.967l205.21-217.995 205.21 217.995z" fill="#FFFFFF" /></svg>

Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/appearance/themes/notion-theme/icon4Tsundoku/fold/xmind.svg


+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/fold/zip.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg class="icon" width="20px" height="17.96px" viewBox="0 0 1140 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"><path d="M1079.049 1022.302H56.746C25.56 1022.302 0 1000.524 0 974.078v-292.54h1135.575v292.39c0 26.451-25.566 48.23-56.746 48.23l0.22 0.144z" fill="#5ACC9B" /><path d="M56.746 0H1079.05c31.187 0 56.746 21.786 56.746 48.224v292.541H0.22V48.382C0.22 21.923 25.786 0.152 56.973 0.152L56.746 0z" fill="#6CCBFF" /><path d="M0.22 340.84h1135.423v340.622H0.22z" fill="#FFD766" /><path d="M378.694 0.22H757.17v1021.863H378.694z" fill="#FF5562" /><path d="M487.445 56.973h75.714v56.815h-75.714V56.966zM563.159 0.213h75.707v56.76h-75.707V0.22z m0 113.568h75.707v56.595h-75.707V113.78z m-75.714 56.595h75.714v56.746h-75.714v-56.746z m75.714 56.746h75.707v56.822h-75.707v-56.822z m-75.714 56.822h75.714v56.814h-75.714v-56.814z m75.714 56.746h75.707v56.746h-75.707V340.69z m-75.714 56.746h75.714v56.815h-75.714v-56.815z m75.714 56.815h75.707v56.897h-75.707V454.25z m-75.714 56.897h75.714v56.746h-75.714v-56.746z m75.714 56.746h75.707v56.815h-75.707v-56.815z m-75.714 56.815h75.714v56.821h-75.714V624.71z m75.714 56.746h75.707V738.2h-75.707v-56.746zM487.445 738.2h75.714v56.822h-75.714V738.2z m75.714 56.822h75.707v56.89h-75.707v-56.89z m-75.714 56.89h75.714v56.746h-75.714v-56.746z m0 113.568h75.714v56.815h-75.714V965.48z m75.714-56.822h75.707v56.822h-75.707v-56.822z" fill="#FFFFFF" /></svg>

BIN
app/appearance/themes/notion-theme/icon4Tsundoku/getpocket_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/ghxi_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/github_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/guancha_cn.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/haokan_baidu_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/huaban_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/huawei_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/iconfont_cn.png


+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/ins.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1648127539840" class="icon" viewBox="0 0 1031 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="46858" xmlns:xlink="http://www.w3.org/1999/xlink" width="20.13671875" height="20"><defs><style type="text/css"></style></defs><path d="M0 0z m790.037 519.76c0 149.27-121.04 270.277-270.276 270.277-149.269 0-270.276-121.007-270.276-270.276a266.31 266.31 0 0 1 5.1-51.976H72.767v359.252c0 77.12 62.468 139.718 139.718 139.718h614.552c77.12 0 139.718-62.533 139.718-139.718V467.785H785.001a271.41 271.41 0 0 1 5.036 51.976z m37-446.993H212.485c-77.185 0-139.718 62.566-139.718 139.718v151.348h226.29c48.923-69.129 129.518-114.348 220.704-114.348s171.78 45.22 220.703 114.348h226.291V212.485c0-77.12-62.566-139.718-139.718-139.718z m68.349 172.56c0 13.774-11.24 24.949-24.949 24.949h-74.78c-13.71 0-24.95-11.24-24.95-24.949v-74.845c0-13.774 11.273-24.949 24.95-24.949h74.78c13.774 0 24.949 11.24 24.949 24.949v74.845zM686.084 519.761c0-91.9-74.488-166.324-166.323-166.324s-166.324 74.424-166.324 166.324 74.489 166.323 166.324 166.323 166.323-74.423 166.323-166.323z" fill="#CF2F79" p-id="46859"></path></svg>

BIN
app/appearance/themes/notion-theme/icon4Tsundoku/instapaper_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/iplaysoft_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/iqiyi_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/ixigua_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/jianshu_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/kugou_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/kuwo_cn.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/ld246_com.png


+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/link2.svg

@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg width="20" height="20" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect width="48" height="48" fill="white" fill-opacity="0.01"/><rect width="48" height="48" fill="white" fill-opacity="0.01"/><path d="M44 6H4V36H13V41L23 36H44V6Z" fill="#fff" stroke="#000" stroke-width="3" stroke-linecap="square" stroke-linejoin="round"/><path d="M14 19.5V22.5" stroke="#000" stroke-width="3" stroke-linecap="square" stroke-linejoin="round"/><path d="M24 19.5V22.5" stroke="#000" stroke-width="3" stroke-linecap="square" stroke-linejoin="round"/><path d="M34 19.5V22.5" stroke="#000" stroke-width="3" stroke-linecap="square" stroke-linejoin="round"/></svg>

BIN
app/appearance/themes/notion-theme/icon4Tsundoku/logseq_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/mi_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/mp_weixin_qq_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/music_163_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/news_163_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/news_qq_com.png


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/appearance/themes/notion-theme/icon4Tsundoku/notion.svg


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/obsidian_md.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/oppo_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/oschina_net.png


+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/page.svg

@@ -1 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?><svg width="16" height="16" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg"><rect x="8" y="4" width="32" height="40" rx="2" stroke="#000" stroke-width="3" stroke-linecap="square" stroke-linejoin="round"/><path d="M16 4H25V20L20.5 16L16 20V4Z" fill="#cf5659" stroke="#000" stroke-width="3" stroke-linecap="square" stroke-linejoin="round"/><path d="M16 28H26" stroke="#000" stroke-width="3" stroke-linecap="square"/><path d="M16 34H32" stroke="#000" stroke-width="3" stroke-linecap="square"/></svg>

BIN
app/appearance/themes/notion-theme/icon4Tsundoku/pan_baidu_com.png


+ 0 - 1
app/appearance/themes/notion-theme/icon4Tsundoku/reddit.svg

@@ -1 +0,0 @@
-<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1648127401415" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="25740" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20"><defs><style type="text/css"></style></defs><path d="M512 938.666667C276.352 938.666667 85.333333 747.648 85.333333 512S276.352 85.333333 512 85.333333s426.666667 191.018667 426.666667 426.666667-191.018667 426.666667-426.666667 426.666667z m284.586667-426.666667a62.293333 62.293333 0 0 0-105.386667-42.666667 303.786667 303.786667 0 0 0-164.266667-52.48L554.666667 283.733333l91.306666 19.2a42.666667 42.666667 0 1 0 5.546667-26.026666L546.986667 256a13.226667 13.226667 0 0 0-15.786667 10.24l-31.573333 148.053333a304.64 304.64 0 0 0-166.4 52.48 62.293333 62.293333 0 1 0-68.693334 101.973334 122.453333 122.453333 0 0 0 0 18.773333c0 95.573333 111.36 173.226667 248.746667 173.226667s248.746667-77.653333 248.746667-173.226667a122.453333 122.453333 0 0 0 0-18.773333 62.293333 62.293333 0 0 0 34.56-56.746667z m-426.666667 42.666667a42.666667 42.666667 0 1 1 85.333333 0 42.666667 42.666667 0 0 1-85.333333 0z m247.893333 117.333333a163.84 163.84 0 0 1-105.386666 32.853333 163.84 163.84 0 0 1-105.386667-32.853333 11.52 11.52 0 0 1 16.213333-16.213333A139.52 139.52 0 0 0 512 682.666667a139.946667 139.946667 0 0 0 89.173333-26.026667 11.946667 11.946667 0 1 1 16.64 17.066667v-1.706667z m-7.68-72.96a42.666667 42.666667 0 1 1 42.666667-42.666667 42.666667 42.666667 0 0 1-43.093333 44.373334l0.426666-1.706667z" p-id="25741" fill="#ff4500"></path></svg>

BIN
app/appearance/themes/notion-theme/icon4Tsundoku/runoob_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/samsung_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/so_com.png


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/appearance/themes/notion-theme/icon4Tsundoku/souhu.svg


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/sspai_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/t_bilibili_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/taobao_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/tianya_cn.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/tieba_baidu_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/topbook_cc.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/toutiao_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/translate_google_cn.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/uisdc_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/v_qq_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/vivo_com_cn.png


Разница между файлами не показана из-за своего большого размера
+ 0 - 0
app/appearance/themes/notion-theme/icon4Tsundoku/wandou.svg


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/weibo_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/weixin_sogou_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/weread_qq_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/wiz_cn.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/wolai_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/y_qq_com.png


BIN
app/appearance/themes/notion-theme/icon4Tsundoku/yandex_com.png


Некоторые файлы не были показаны из-за большого количества измененных файлов