This commit is contained in:
Vanessa 2022-10-21 11:35:12 +08:00
parent 9fb4d9da2a
commit 4a0a1495db
157 changed files with 11245 additions and 1 deletions

View file

@ -0,0 +1,247 @@
# 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
* 修复替换搜索框跳动问题
* 修复graphvizflowchart显示问题
* 调整行内右侧引用数间距
## 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
* 修复集市页签不居中问题

View file

@ -0,0 +1,3 @@
.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}

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View file

@ -0,0 +1 @@
<!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>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,437 @@
/* 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;
}

View file

@ -0,0 +1,692 @@
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

View file

@ -0,0 +1,19 @@
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

View file

@ -0,0 +1,161 @@
/**
* 行内评论功能
* 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);
}
})();

View file

@ -0,0 +1,101 @@
/**
* 设置属性
* @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
})
}
})
}
}

View file

@ -0,0 +1,216 @@
/*
** 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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 842 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 859 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,022 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 753 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 919 B

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.3 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 940 B

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 631 B

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 844 B

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 781 B

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.5 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 5.9 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.8 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 832 B

View file

@ -0,0 +1 @@
<?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="1648116720004" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="13596" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20"><defs><style type="text/css"></style></defs><path d="M610.88 0l326.84 341.343v563.171c0 65.959-36.384 119.458-102.967 119.458H214.79c-66.582 0.028-128.51-53.47-128.51-119.458V119.486C86.28 53.47 148.207 0 214.79 0h396.09z" fill="#E94848" p-id="13597"></path><path d="M717.481 452.314c2.384 0.624 4.825 1.078 7.152 1.93 7.152 2.725 9.48 8.912 9.31 16.745-0.228 10.842-0.937 21.57-3.86 32.156-5.393 19.583-17.03 32.553-33.86 40.273-11.863 5.393-24.322 7.38-36.895 8.912-8.685 1.05-17.313 2.299-25.97 3.548a11.778 11.778 0 0 0-3.405 1.135c-4.626 2.27-5.818 6.641-2.412 10.53 3.547 4.03 7.464 7.72 11.58 11.011 15.524 12.403 31.474 24.153 46.687 36.953a186.75 186.75 0 0 1 43.764 51.881c11.267 20.15 16.972 42.09 16.234 66.129-0.199 6.357-2.98 10.018-8.742 10.302-8.911 0.454-17.823 0.54-26.763 0.624-11.07 0.114-22.138 0.057-33.207 0.086-11.295 0-22.591 0-33.887 0.056-8.06 0-16.12 0.142-24.21 0.142-2.355 0-4.71-0.085-7.095-0.312-10.047-0.908-13.765-4.995-14.758-16.092-1.476-15.78-3.775-31.248-9.564-45.808a121.416 121.416 0 0 0-45.836-56.82c-17.597-11.976-36.726-19.469-57.501-21.37-20.52-1.874-39.592 2.384-54.918 19.668-9.252 10.473-14.36 23.358-17.909 37.094-1.646 6.216-3.036 12.488-4.824 18.647-2.044 6.982-7.493 8.43-13 8.628-12.033 0.426-24.095 0.426-36.129 0.54-11.068 0.084-22.137 0.113-33.234 0.17-10.217 0.056-20.435 0.226-30.652 0.141a33.774 33.774 0 0 1-7.947-1.334c-3.86-0.965-5.392-3.349-5.194-7.663 1.334-26.196 11.325-47.538 30.425-63.744 15.723-13.34 33.632-21.627 52.42-27.303 17.824-5.393 35.931-9.593 53.868-14.446 5.052-1.362 10.104-2.838 14.929-4.882 7.748-3.292 9.025-8.684 2.895-14.616a138.047 138.047 0 0 0-19.1-15.184c-17.966-12.147-36.5-23.33-52.875-38.145-16.745-15.212-30.822-32.752-38.457-55.798-4.03-12.118-5.705-24.691-5.676-37.633 0-4.967 2.27-8.827 7.35-10.076a89.924 89.924 0 0 1 18.193-2.469c13.765-0.397 27.53-0.227 41.295-0.255l33.234 0.057c8.174 0 16.348-0.114 24.522-0.086 3.775 0 7.521 0.199 11.296 0.284 6.329 0.142 9.082 2.327 10.274 9.224 1.447 8.117 2.412 16.348 3.69 24.522 4.427 29.318 14.985 54.918 36.157 73.876 14.588 13.056 31.56 19.13 50.377 19.98 9.849 0.455 19.583 0.285 29.12-3.235 14.644-5.392 21.768-17.596 20.377-34.483-0.596-7.777-1.107-15.61-1.56-23.415-0.313-5.307 1.277-8.514 6.073-9.479 5.96-1.22 12.147-1.646 18.25-1.731 12.146-0.199 24.294 0.113 36.44 0.17 11.07 0.057 22.138-0.028 33.207 0.057 6.812 0.057 13.538 0.312 20.321 0.51v0.398" fill="#FFFFFF" p-id="13598"></path><path d="M937.72 341.343H737.519c-66.582 0-140.374-58.948-140.374-124.878V0.625l340.577 340.718z" fill-opacity=".255" p-id="13599"></path></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 790 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 967 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 819 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 547 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 307 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 861 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 335 B

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 708 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 974 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 694 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 211 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 919 B

View file

@ -0,0 +1 @@
<?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="1648127973097" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="49830" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20"><defs><style type="text/css"></style></defs><path d="M647.165837 2.332635L78.85493 44.179432C33.04873 48.138835 17.074585 78.005024 17.074585 113.810318v621.148461c0 27.886487 9.966774 51.745305 33.893858 83.625329l133.595729 173.189762c21.947382 27.886487 41.88093 33.859725 83.795993 31.880024l659.957441-39.832963c55.807107-3.959403 71.781251-29.866189 71.781251-73.658555V211.361824c0-22.630038-8.976923-29.1494-35.3957-48.468558a1594.683818 1594.683818 0 0 1-4.505528-3.276748L778.781865 32.198823C734.8871 0.387066 716.967387-3.640603 647.165837 2.332635zM283.310326 199.92734c-53.895671 3.618075-66.115209 4.437262-96.732319-20.377274l-77.822755-61.712079c-7.918807-7.987072-3.925271-17.953846 15.974144-19.933548l546.363525-39.79883c45.840333-3.993536 69.767417 11.946476 87.721263 25.872653l93.728634 67.71945c3.993536 1.979702 13.926177 13.892044 1.979702 13.892044l-564.249106 33.859725-6.963088 0.477859zM220.471864 904.189138V310.961297c0-25.906785 7.952939-37.853261 31.880024-39.867096l648.010965-37.819128c21.981515-1.979702 31.948289 11.946476 31.948289 37.819128v589.268439c0 25.906785-3.993536 47.820035-39.935361 49.799736l-620.090346 35.839427c-35.873559 1.979702-51.813571-9.932641-51.813571-41.812665z m612.171539-561.416084c3.959403 17.919713 0 35.839427-17.987979 37.887394l-29.900321 5.904972v437.991926c-25.940918 13.926177-49.833869 21.879117-69.767417 21.879116-31.914156 0-39.935361-9.966774-63.828313-39.79883l-195.444339-306.580694v296.613921l61.84861 13.96031s0 35.839427-49.902135 35.839426l-137.555132 7.95294c-3.959403-7.987072 0-27.886487 13.994443-31.845891l35.839426-9.932641v-392.185725l-49.833869-4.027669c-3.959403-17.919713 5.973238-43.792366 33.92799-45.772068l147.55604-9.966773 203.397279 310.608363v-274.768937l-51.881837-5.939105c-3.959403-21.947382 11.946476-37.853261 31.914156-39.832962l137.623398-7.987073z" fill="#000000" p-id="49831"></path></svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 756 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 553 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

View file

@ -0,0 +1 @@
<?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>

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 975 B

View file

@ -0,0 +1 @@
<?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="1648126870710" class="icon" viewBox="0 0 1035 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="37755" xmlns:xlink="http://www.w3.org/1999/xlink" width="20.21484375" height="20"><defs><style type="text/css"></style></defs><path d="M456.96 645.12s2.56 0 0 0c0-2.56-2.56 0-2.56 0h2.56z" fill="#FDFDFD" p-id="37756"></path><path d="M8.96 931.84c-10.24-15.36-5.12-30.72-5.12-46.08v-808.96c0-66.56 7.68-74.24 74.24-74.24h890.88c64 0 66.56 2.56 66.56 64 0 227.84-2.56 455.68-2.56 683.52" fill="#FDFDFD" p-id="37757"></path><path d="M884.48 808.96zM372.48 463.36c12.8 12.8 25.6 25.6 38.4 35.84 23.04 15.36 51.2 23.04 76.8 23.04 43.52 2.56 87.04 0 128-12.8 12.8-5.12 28.16-10.24 35.84-20.48 10.24-10.24 15.36-25.6 7.68-38.4" fill="#FDD000" p-id="37758"></path><path d="M746.24 573.44c-92.16 43.52-184.32 33.28-291.84 38.4 0 0 2.56 33.28 2.56 35.84 23.04 10.24 38.4 17.92 51.2 23.04 2.56 0 2.56 0 5.12 2.56 17.92 10.24 33.28 17.92 51.2 25.6 48.64 15.36 43.52 12.8 61.44 23.04 66.56 35.84 135.68 69.12 212.48 76.8h94.72c33.28-15.36 64-33.28 97.28-48.64 0-227.84 2.56-455.68 2.56-683.52 0-61.44-2.56-64-66.56-64h-919.04c-12.8 0-28.16 0-35.84 10.24-5.12 7.68-7.68 17.92-7.68 28.16-5.12 294.4-5.12 591.36 0 885.76 38.4-81.92 61.44-148.48 120.32-199.68 58.88-51.2 166.4-76.8 245.76-81.92-12.8-23.04-48.64-56.32-71.68-71.68" fill="#FDD000" p-id="37759"></path><path d="M884.48 806.4c0 2.56 0 2.56 0 0 2.56 0-2.56-5.12 0 0z" fill="#FDD000" p-id="37760"></path><path d="M428.8 739.84c25.6 33.28 58.88 40.96 81.92 76.8-40.96 12.8-74.24 33.28-112.64 46.08 30.72 35.84 56.32 69.12 84.48 99.84 43.52 15.36 87.04 35.84 130.56 46.08 38.4 10.24 79.36 15.36 120.32 12.8 43.52-2.56 79.36-17.92 117.76-33.28 15.36-5.12 28.16-10.24 43.52-17.92 48.64-25.6 92.16-69.12 117.76-117.76 10.24-20.48 15.36-40.96 15.36-66.56-2.56-2.56-5.12-43.52-2.56-43.52-33.28 15.36-69.12 40.96-104.96 48.64-10.24 2.56-20.48 2.56-30.72 2.56-48.64 0-92.16-2.56-138.24-17.92s-151.04-69.12-194.56-84.48" fill="#E70B00" p-id="37761"></path><path d="M485.12 181.76h2.56c48.64-17.92 104.96-28.16 151.04-5.12 17.92 7.68 30.72 23.04 48.64 30.72 25.6 12.8 56.32 12.8 84.48 10.24 25.6-2.56 51.2-7.68 66.56-28.16 15.36-20.48 12.8-51.2-2.56-74.24-15.36-20.48-38.4-35.84-64-43.52-51.2-20.48-107.52-23.04-161.28-25.6-84.48-2.56-168.96-2.56-248.32 25.6-43.52 15.36-87.04 40.96-115.2 76.8s-38.4 92.16-15.36 133.12c23.04 43.52 71.68 66.56 117.76 81.92 79.36 28.16 163.84 46.08 248.32 53.76 28.16 2.56 61.44 7.68 66.56 35.84 5.12 15.36-5.12 30.72-15.36 40.96-12.8 10.24-28.16 15.36-43.52 17.92-43.52 10.24-89.6 12.8-135.68 5.12-23.04-2.56-48.64-7.68-66.56-23.04-15.36-10.24-25.6-25.6-38.4-38.4-20.48-17.92-46.08-25.6-71.68-25.6-20.48 0-51.2 5.12-66.56 23.04-12.8 12.8-17.92 33.28-15.36 48.64 5.12 23.04 25.6 38.4 43.52 53.76 30.72 25.6 61.44 51.2 94.72 76.8-92.16 2.56-181.76 43.52-245.76 110.08-64 66.56-99.84 158.72-97.28 250.88 0 10.24 2.56 20.48 10.24 25.6 10.24 5.12 23.04-2.56 30.72-7.68 125.44-87.04 296.96-107.52 440.32-48.64-28.16-33.28-53.76-66.56-81.92-102.4 38.4-12.8 76.8-28.16 115.2-40.96l-79.36-79.36c43.52-12.8 81.92-33.28 122.88-46.08-33.28-23.04-71.68-43.52-110.08-58.88 92.16 2.56 189.44 2.56 276.48-25.6 40.96-12.8 81.92-35.84 102.4-74.24 25.6-48.64 10.24-112.64-25.6-153.6s-89.6-64-143.36-74.24-110.08-12.8-163.84-20.48c-30.72-5.12-66.56-17.92-69.12-48.64-5.12-23.04 25.6-43.52 53.76-56.32z" fill="#605E5E" p-id="37762"></path></svg>

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 914 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 870 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 722 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 682 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 902 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,016 B

View file

@ -0,0 +1 @@
<?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="1648127000678" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="38032" xmlns:xlink="http://www.w3.org/1999/xlink" width="20" height="20"><defs><style type="text/css"></style></defs><path d="M0 1006.08c0 15.36 2.56 17.92 17.92 17.92h988.16c15.36 0 17.92-2.56 17.92-17.92V0H0v1006.08z m568.32-107.52c-64 38.4-145.92 17.92-184.32-46.08-7.68-10.24-10.24-12.8-20.48-2.56-46.08 46.08-112.64 43.52-158.72-2.56-40.96-43.52-38.4-115.2 7.68-156.16 46.08-40.96 115.2-35.84 156.16 12.8 2.56 2.56 5.12 7.68 7.68 10.24 15.36-23.04 33.28-40.96 56.32-53.76 69.12-33.28 145.92-7.68 181.76 58.88 38.4 64 15.36 145.92-46.08 179.2z m-225.28-637.44c0 15.36 2.56 20.48 20.48 17.92 25.6-2.56 48.64 5.12 66.56 23.04 30.72 23.04 38.4 56.32 33.28 92.16-2.56 10.24-2.56 12.8 7.68 10.24 69.12-7.68 117.76 40.96 110.08 112.64 0 10.24 0 10.24 7.68 7.68 74.24-15.36 130.56 48.64 115.2 112.64-2.56 10.24 5.12 7.68 10.24 7.68 40.96-2.56 71.68 25.6 74.24 64v10.24c-15.36-12.8-30.72-23.04-46.08-35.84-135.68-112.64-263.68-235.52-378.88-368.64-2.56-2.56-5.12-7.68-7.68-10.24l-2.56-2.56c-30.72-30.72-56.32-66.56-81.92-99.84 35.84-10.24 71.68 20.48 71.68 58.88zM156.16 104.96c202.24 281.6 442.88 522.24 724.48 724.48-71.68 12.8-140.8 15.36-209.92 5.12-12.8-2.56-12.8-5.12-10.24-17.92 15.36-71.68-15.36-140.8-79.36-176.64-61.44-35.84-138.24-28.16-192 20.48-7.68 7.68-12.8 7.68-20.48 0-15.36-12.8-35.84-20.48-56.32-23.04-7.68-2.56-15.36-5.12-20.48-12.8-84.48-99.84-133.12-212.48-145.92-340.48-5.12-56.32-2.56-115.2 10.24-179.2z" fill="#35AC14" p-id="38033"></path><path d="M583.68 798.72h-125.44c-10.24 0-12.8 2.56-10.24 12.8 5.12 33.28 35.84 61.44 71.68 61.44s66.56-25.6 74.24-61.44c0-10.24-2.56-12.8-10.24-12.8z" fill="#36AC15" p-id="38034"></path><path d="M322.56 791.04c-33.28-5.12-69.12-12.8-102.4-17.92-7.68-2.56-7.68 2.56-10.24 7.68-2.56 33.28 28.16 61.44 61.44 61.44 25.6 0 48.64-15.36 56.32-38.4 5.12-7.68 5.12-12.8-5.12-12.8z" fill="#35AC14" p-id="38035"></path><path d="M473.6 760.32c12.8 0 23.04-10.24 23.04-20.48 0-12.8-10.24-20.48-20.48-20.48-12.8 0-23.04 10.24-23.04 20.48s7.68 20.48 20.48 20.48z" fill="#39AB19" p-id="38036"></path><path d="M573.44 721.92c-10.24 0-20.48 7.68-20.48 20.48s7.68 23.04 20.48 20.48c12.8 0 20.48-7.68 20.48-20.48 2.56-7.68-7.68-17.92-20.48-20.48z" fill="#3AAB1B" p-id="38037"></path><path d="M317.44 727.04c-10.24 0-17.92 5.12-17.92 17.92 0 12.8 7.68 17.92 17.92 17.92 10.24 0 17.92-7.68 17.92-17.92 0-10.24-5.12-15.36-17.92-17.92z" fill="#3BAA1C" p-id="38038"></path><path d="M235.52 747.52c10.24 0 12.8-5.12 15.36-15.36 0-10.24-5.12-15.36-15.36-15.36-10.24 0-15.36 5.12-15.36 15.36 0 7.68 5.12 15.36 15.36 15.36z" fill="#39A81B" p-id="38039"></path></svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 639 B

Some files were not shown because too many files have changed in this diff Show more