mirror of
https://github.com/siyuan-note/siyuan.git
synced 2025-12-19 16:10:12 +01:00
Merge branch 'dev' into feat/doctree
This commit is contained in:
commit
5d2793f6b4
237 changed files with 30219 additions and 12881 deletions
8
.github/CONTRIBUTING.md
vendored
8
.github/CONTRIBUTING.md
vendored
|
|
@ -7,17 +7,17 @@
|
||||||
|
|
||||||
## NPM dependencies
|
## NPM dependencies
|
||||||
|
|
||||||
Install pnpm: `npm install -g pnpm@10.15.1`
|
Install pnpm: `npm install -g pnpm@10.18.3`
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>For China mainland</summary>
|
<summary>For China mainland</summary>
|
||||||
|
|
||||||
Set the Electron mirror environment variable and install Electron:
|
Set the Electron mirror environment variable and install Electron:
|
||||||
|
|
||||||
* macOS/Linux: `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@37.4.0 -D`
|
* macOS/Linux: `ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@37.7.0 -D`
|
||||||
* Windows:
|
* Windows:
|
||||||
* `SET ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/`
|
* `SET ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/`
|
||||||
* `pnpm install electron@37.4.0 -D`
|
* `pnpm install electron@37.7.0 -D`
|
||||||
|
|
||||||
NPM mirror:
|
NPM mirror:
|
||||||
|
|
||||||
|
|
@ -27,7 +27,7 @@ NPM mirror:
|
||||||
|
|
||||||
Enter the app folder and execute:
|
Enter the app folder and execute:
|
||||||
|
|
||||||
* `pnpm install electron@37.4.0 -D`
|
* `pnpm install electron@37.7.0 -D`
|
||||||
* `pnpm run dev`
|
* `pnpm run dev`
|
||||||
* `pnpm run start`
|
* `pnpm run start`
|
||||||
|
|
||||||
|
|
|
||||||
8
.github/CONTRIBUTING_zh_CN.md
vendored
8
.github/CONTRIBUTING_zh_CN.md
vendored
|
|
@ -7,17 +7,17 @@
|
||||||
|
|
||||||
## NPM 依赖
|
## NPM 依赖
|
||||||
|
|
||||||
安装 pnpm:`npm install -g pnpm@10.15.1`
|
安装 pnpm:`npm install -g pnpm@10.18.3`
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>适用于中国大陆</summary>
|
<summary>适用于中国大陆</summary>
|
||||||
|
|
||||||
设置 Electron 镜像环境变量并安装 Electron:
|
设置 Electron 镜像环境变量并安装 Electron:
|
||||||
|
|
||||||
* macOS/Linux:`ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@37.4.0 -D`
|
* macOS/Linux:`ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ pnpm install electron@37.7.0 -D`
|
||||||
* Windows:
|
* Windows:
|
||||||
* `SET ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/`
|
* `SET ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/`
|
||||||
* `pnpm install electron@37.4.0 -D`
|
* `pnpm install electron@37.7.0 -D`
|
||||||
|
|
||||||
NPM 镜像:
|
NPM 镜像:
|
||||||
|
|
||||||
|
|
@ -27,7 +27,7 @@ NPM 镜像:
|
||||||
|
|
||||||
进入 app 文件夹执行:
|
进入 app 文件夹执行:
|
||||||
|
|
||||||
* `pnpm install electron@37.4.0 -D`
|
* `pnpm install electron@37.7.0 -D`
|
||||||
* `pnpm run dev`
|
* `pnpm run dev`
|
||||||
* `pnpm run start`
|
* `pnpm run start`
|
||||||
|
|
||||||
|
|
|
||||||
82
Dockerfile
82
Dockerfile
|
|
@ -1,52 +1,60 @@
|
||||||
FROM node:21 AS NODE_BUILD
|
FROM --platform=$BUILDPLATFORM node:21 AS node-build
|
||||||
|
|
||||||
WORKDIR /go/src/github.com/siyuan-note/siyuan/
|
ARG NPM_REGISTRY=
|
||||||
ADD . /go/src/github.com/siyuan-note/siyuan/
|
|
||||||
RUN apt-get update && \
|
WORKDIR /app
|
||||||
apt-get install -y jq
|
ADD app/package.json app/pnpm* app/.npmrc .
|
||||||
RUN cd app && \
|
|
||||||
packageManager=$(jq -r '.packageManager' package.json) && \
|
RUN <<EORUN
|
||||||
if [ -n "$packageManager" ]; then \
|
#!/bin/bash -e
|
||||||
npm install -g $packageManager; \
|
corepack enable
|
||||||
else \
|
corepack install --global $(node -e 'console.log(require("./package.json").packageManager)')
|
||||||
echo "No packageManager field found in package.json"; \
|
npm config set registry ${NPM_REGISTRY}
|
||||||
npm install -g pnpm; \
|
pnpm install --silent
|
||||||
fi && \
|
EORUN
|
||||||
pnpm install --registry=http://registry.npmjs.org/ --silent && \
|
|
||||||
|
ADD app/ .
|
||||||
|
RUN <<EORUN
|
||||||
|
#!/bin/bash -e
|
||||||
pnpm run build
|
pnpm run build
|
||||||
RUN apt-get purge -y jq
|
mkdir /artifacts
|
||||||
RUN apt-get autoremove -y
|
mv appearance stage guide changelogs /artifacts/
|
||||||
RUN rm -rf /var/lib/apt/lists/*
|
EORUN
|
||||||
|
|
||||||
FROM golang:1.24-alpine AS GO_BUILD
|
FROM golang:1.24-alpine AS go-build
|
||||||
WORKDIR /go/src/github.com/siyuan-note/siyuan/
|
|
||||||
COPY --from=NODE_BUILD /go/src/github.com/siyuan-note/siyuan/ /go/src/github.com/siyuan-note/siyuan/
|
ARG GOPROXY=
|
||||||
ENV GO111MODULE=on
|
|
||||||
ENV CGO_ENABLED=1
|
RUN <<EORUN
|
||||||
RUN apk add --no-cache gcc musl-dev && \
|
#!/bin/sh -e
|
||||||
cd kernel && go build --tags fts5 -v -ldflags "-s -w" && \
|
apk add --no-cache gcc musl-dev
|
||||||
mkdir /opt/siyuan/ && \
|
go env -w GO111MODULE=on
|
||||||
mv /go/src/github.com/siyuan-note/siyuan/app/appearance/ /opt/siyuan/ && \
|
go env -w GOPROXY=${GOPROXY}
|
||||||
mv /go/src/github.com/siyuan-note/siyuan/app/stage/ /opt/siyuan/ && \
|
go env -w CGO_ENABLED=1
|
||||||
mv /go/src/github.com/siyuan-note/siyuan/app/guide/ /opt/siyuan/ && \
|
EORUN
|
||||||
mv /go/src/github.com/siyuan-note/siyuan/app/changelogs/ /opt/siyuan/ && \
|
|
||||||
mv /go/src/github.com/siyuan-note/siyuan/kernel/kernel /opt/siyuan/ && \
|
WORKDIR /kernel
|
||||||
mv /go/src/github.com/siyuan-note/siyuan/kernel/entrypoint.sh /opt/siyuan/entrypoint.sh && \
|
ADD kernel/go.* .
|
||||||
find /opt/siyuan/ -name .git | xargs rm -rf
|
RUN --mount=type=cache,target=/root/.cache/go-build --mount=type=cache,target=/go/pkg \
|
||||||
|
go mod download
|
||||||
|
|
||||||
|
ADD kernel/ .
|
||||||
|
RUN --mount=type=cache,target=/root/.cache/go-build --mount=type=cache,target=/go/pkg \
|
||||||
|
go build --tags fts5 -v -ldflags "-s -w"
|
||||||
|
|
||||||
FROM alpine:latest
|
FROM alpine:latest
|
||||||
LABEL maintainer="Liang Ding<845765@qq.com>"
|
LABEL maintainer="Liang Ding<845765@qq.com>"
|
||||||
|
|
||||||
WORKDIR /opt/siyuan/
|
RUN apk add --no-cache ca-certificates tzdata su-exec
|
||||||
COPY --from=GO_BUILD /opt/siyuan/ /opt/siyuan/
|
|
||||||
|
|
||||||
RUN apk add --no-cache ca-certificates tzdata su-exec && \
|
|
||||||
chmod +x /opt/siyuan/entrypoint.sh
|
|
||||||
|
|
||||||
ENV TZ=Asia/Shanghai
|
ENV TZ=Asia/Shanghai
|
||||||
ENV HOME=/home/siyuan
|
ENV HOME=/home/siyuan
|
||||||
ENV RUN_IN_CONTAINER=true
|
ENV RUN_IN_CONTAINER=true
|
||||||
EXPOSE 6806
|
EXPOSE 6806
|
||||||
|
|
||||||
|
WORKDIR /opt/siyuan/
|
||||||
|
COPY --from=go-build --chmod=755 /kernel/kernel /kernel/entrypoint.sh .
|
||||||
|
COPY --from=node-build /artifacts .
|
||||||
|
|
||||||
ENTRYPOINT ["/opt/siyuan/entrypoint.sh"]
|
ENTRYPOINT ["/opt/siyuan/entrypoint.sh"]
|
||||||
CMD ["/opt/siyuan/kernel"]
|
CMD ["/opt/siyuan/kernel"]
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,7 @@
|
||||||
* [Unraid 部署](#unraid-部署)
|
* [Unraid 部署](#unraid-部署)
|
||||||
* [宝塔面板 部署](#宝塔面板部署)
|
* [宝塔面板 部署](#宝塔面板部署)
|
||||||
* [小皮面板 部署](#小皮面板部署)
|
* [小皮面板 部署](#小皮面板部署)
|
||||||
|
* [1Panel面板 部署](#1Panel面板部署)
|
||||||
* [内部预览版](#内部预览版)
|
* [内部预览版](#内部预览版)
|
||||||
* [🏘️ 社区](#️-社区)
|
* [🏘️ 社区](#️-社区)
|
||||||
* [🛠️ 开发指南](#️-开发指南)
|
* [🛠️ 开发指南](#️-开发指南)
|
||||||
|
|
@ -361,6 +362,42 @@ Publish parameters: --accessAuthCode=******(访问授权码)
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
|
### 1Panel面板部署
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>1Panel面板 部署文档</summary>
|
||||||
|
|
||||||
|
#### 前提
|
||||||
|
|
||||||
|
- 仅适用于1Panel面板v1.10.32-lts及以上版本
|
||||||
|
- 安装1Panel面板,前往[1Panel](https://1panel.cn/)官网,选择正式版安装脚本下载安装
|
||||||
|
|
||||||
|
#### 部署
|
||||||
|
|
||||||
|
1. 登录1Panel面板,在左侧菜单栏中点击 `应用商店`
|
||||||
|
2. 在 `应用商店-实用工具` 中找到 `思源笔记`,点击`安装`,也可以在搜索框直接搜索
|
||||||
|
3. 配置访问授权码等基本信息,点击 `确定`
|
||||||
|
|
||||||
|
- 名称:应用名称,默认 `siyuan`
|
||||||
|
- 版本:默认最新发行版
|
||||||
|
- 端口:默认 `6806`
|
||||||
|
- 访问授权码:访问笔记时需要使用的`访问密码`
|
||||||
|
- 端口外部访问:如你需通过 `IP+Port` 直接访问,请勾选,同时会开放服务器防火墙端口
|
||||||
|
- CPU限制:默认为0,不限制,可根据实际需要设置
|
||||||
|
- 内存限制:默认为0,不限制,可根据实际需要设置
|
||||||
|
4. 提交后面板会自动进行应用安装启动,应用状态会变为`安装中`,大概需要`1-3`分钟,耐心等待安装完成
|
||||||
|
5. 当应用状态变为`已启动`后,点击左侧的网站,首次使用需要安装`OpenResty`,点击`安装`
|
||||||
|
6. 安装完成后,点击`网站`菜单栏左上角`创建`,在弹出的页面中选择`反向代理`
|
||||||
|
7. 在`主域名`填入你的域名,网站代号会自动生成,代理选择`http`,代理地址填写`127.0.0.1:6806`,点击`确定`
|
||||||
|
8. (可选) 配置你创建的网站,可根据需要配置`https`访问增强访问安全性
|
||||||
|
|
||||||
|
#### 访问思源笔记
|
||||||
|
|
||||||
|
- 如果你通过`OpenResty`反向代理反代了网站,并且填写了域名,请在浏览器输入`域名`访问
|
||||||
|
- 如你选择了 `端口外部访问`,请在浏览器地输入 `http://<1Panel面板IP>:6806` 访问
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
### 内部预览版
|
### 内部预览版
|
||||||
|
|
||||||
我们会在有重大更新前发布内部预览版,请访问 [https://github.com/siyuan-note/insider](https://github.com/siyuan-note/insider)。
|
我们会在有重大更新前发布内部预览版,请访问 [https://github.com/siyuan-note/insider](https://github.com/siyuan-note/insider)。
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
document.body.insertAdjacentHTML('afterbegin', `<svg id="iconsAnt" style="position: absolute; width: 0; height: 0; overflow: hidden;" xmlns="http://www.w3.org/2000/svg">
|
document.body.insertAdjacentHTML('afterbegin', `<svg id="iconsAnt" style="position: absolute; width: 0; height: 0; overflow: hidden;" xmlns="http://www.w3.org/2000/svg">
|
||||||
<defs>
|
<defs>
|
||||||
|
<symbol id="iconInclude" viewBox="0 0 32 32">
|
||||||
|
<path d="M22.091 2.435v7.747h7.582v13.65h-2.637v-11.013h-4.945v9.156h-9.436v5.11h11.036v2.637h-13.674v-7.747h-7.582v-13.65h2.637v11.013h4.945v-9.156h9.436l0-5.11h-11.036v-2.637h13.674zM19.454 12.82h-6.799v6.518l6.799 0v-6.518z"></path>
|
||||||
|
<path d="M1 1h5.604v5.604h-5.604zM25.396 1h5.604v5.604h-5.604zM25.396 25.396h5.604v5.604h-5.604zM1 25.396h5.604v5.604h-5.604z"></path>
|
||||||
|
</symbol>
|
||||||
<symbol id="iconGroups" viewBox="0 0 32 32">
|
<symbol id="iconGroups" viewBox="0 0 32 32">
|
||||||
<path d="M3.074 1c-0.646 0-1.17 0.524-1.17 1.17s0.524 1.17 1.17 1.17h25.851c0.646 0 1.17-0.524 1.17-1.17s-0.524-1.17-1.17-1.17v0zM3.074 17.526c-0.646 0-1.17 0.524-1.17 1.17s0.524 1.17 1.17 1.17h25.851c0.646 0 1.17-0.524 1.17-1.17s-0.524-1.17-1.17-1.17v0zM1.904 8.517c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM4.245 8.73v3.404h3.404v-3.404zM14.085 6.389c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM14.298 12.134v-3.404h3.404v3.404zM22.011 8.517c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM24.351 8.73v3.404h3.404v-3.404zM4.032 22.915c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM4.245 28.66v-3.404h3.404v3.404zM11.957 25.043c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM14.298 25.255v3.404h3.404v-3.404zM24.138 22.915c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM24.351 28.66v-3.404h3.404v3.404z"></path>
|
<path d="M3.074 1c-0.646 0-1.17 0.524-1.17 1.17s0.524 1.17 1.17 1.17h25.851c0.646 0 1.17-0.524 1.17-1.17s-0.524-1.17-1.17-1.17v0zM3.074 17.526c-0.646 0-1.17 0.524-1.17 1.17s0.524 1.17 1.17 1.17h25.851c0.646 0 1.17-0.524 1.17-1.17s-0.524-1.17-1.17-1.17v0zM1.904 8.517c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM4.245 8.73v3.404h3.404v-3.404zM14.085 6.389c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM14.298 12.134v-3.404h3.404v3.404zM22.011 8.517c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM24.351 8.73v3.404h3.404v-3.404zM4.032 22.915c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM4.245 28.66v-3.404h3.404v3.404zM11.957 25.043c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM14.298 25.255v3.404h3.404v-3.404zM24.138 22.915c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM24.351 28.66v-3.404h3.404v3.404z"></path>
|
||||||
</symbol>
|
</symbol>
|
||||||
|
|
|
||||||
|
|
@ -2,5 +2,5 @@
|
||||||
"name": "ant",
|
"name": "ant",
|
||||||
"author": "Vanessa",
|
"author": "Vanessa",
|
||||||
"url": "https://github.com/Vanessa219",
|
"url": "https://github.com/Vanessa219",
|
||||||
"version": "1.34.0"
|
"version": "1.35.0"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -28,6 +28,12 @@
|
||||||
<body>
|
<body>
|
||||||
<h2>SiYuan</h2>
|
<h2>SiYuan</h2>
|
||||||
<div class="fn__clear">
|
<div class="fn__clear">
|
||||||
|
<div>
|
||||||
|
<svg>
|
||||||
|
<use xlink:href="#iconInclude"></use>
|
||||||
|
</svg>
|
||||||
|
iconGroups
|
||||||
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<svg>
|
<svg>
|
||||||
<use xlink:href="#iconGroups"></use>
|
<use xlink:href="#iconGroups"></use>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
document.body.insertAdjacentHTML('afterbegin', `<svg id="iconsMaterial" style="position: absolute; width: 0; height: 0; overflow: hidden;" xmlns="http://www.w3.org/2000/svg">
|
document.body.insertAdjacentHTML('afterbegin', `<svg id="iconsMaterial" style="position: absolute; width: 0; height: 0; overflow: hidden;" xmlns="http://www.w3.org/2000/svg">
|
||||||
<defs>
|
<defs>
|
||||||
|
<symbol id="iconInclude" viewBox="0 0 32 32">
|
||||||
|
<path d="M22.091 2.435v7.747h7.582v13.65h-2.637v-11.013h-4.945v9.156h-9.436v5.11h11.036v2.637h-13.674v-7.747h-7.582v-13.65h2.637v11.013h4.945v-9.156h9.436l0-5.11h-11.036v-2.637h13.674zM19.454 12.82h-6.799v6.518l6.799 0v-6.518z"></path>
|
||||||
|
<path d="M1 1h5.604v5.604h-5.604zM25.396 1h5.604v5.604h-5.604zM25.396 25.396h5.604v5.604h-5.604zM1 25.396h5.604v5.604h-5.604z"></path>
|
||||||
|
</symbol>
|
||||||
<symbol id="iconGroups" viewBox="0 0 32 32">
|
<symbol id="iconGroups" viewBox="0 0 32 32">
|
||||||
<path d="M3.074 1c-0.646 0-1.17 0.524-1.17 1.17s0.524 1.17 1.17 1.17h25.851c0.646 0 1.17-0.524 1.17-1.17s-0.524-1.17-1.17-1.17v0zM3.074 17.526c-0.646 0-1.17 0.524-1.17 1.17s0.524 1.17 1.17 1.17h25.851c0.646 0 1.17-0.524 1.17-1.17s-0.524-1.17-1.17-1.17v0zM1.904 8.517c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM4.245 8.73v3.404h3.404v-3.404zM14.085 6.389c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM14.298 12.134v-3.404h3.404v3.404zM22.011 8.517c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM24.351 8.73v3.404h3.404v-3.404zM4.032 22.915c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM4.245 28.66v-3.404h3.404v3.404zM11.957 25.043c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM14.298 25.255v3.404h3.404v-3.404zM24.138 22.915c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM24.351 28.66v-3.404h3.404v3.404z"></path>
|
<path d="M3.074 1c-0.646 0-1.17 0.524-1.17 1.17s0.524 1.17 1.17 1.17h25.851c0.646 0 1.17-0.524 1.17-1.17s-0.524-1.17-1.17-1.17v0zM3.074 17.526c-0.646 0-1.17 0.524-1.17 1.17s0.524 1.17 1.17 1.17h25.851c0.646 0 1.17-0.524 1.17-1.17s-0.524-1.17-1.17-1.17v0zM1.904 8.517c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM4.245 8.73v3.404h3.404v-3.404zM14.085 6.389c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM14.298 12.134v-3.404h3.404v3.404zM22.011 8.517c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM24.351 8.73v3.404h3.404v-3.404zM4.032 22.915c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM4.245 28.66v-3.404h3.404v3.404zM11.957 25.043c0-1.175 0.953-2.128 2.128-2.128v0h3.83c1.175 0 2.128 0.953 2.128 2.128v0 3.83c0 1.175-0.953 2.128-2.128 2.128v0h-3.83c-1.175 0-2.128-0.953-2.128-2.128v0zM14.298 25.255v3.404h3.404v-3.404zM24.138 22.915c-1.175 0-2.128 0.953-2.128 2.128v0 3.83c0 1.175 0.953 2.128 2.128 2.128v0h3.83c1.175 0 2.128-0.953 2.128-2.128v0-3.83c0-1.175-0.953-2.128-2.128-2.128v0zM24.351 28.66v-3.404h3.404v3.404z"></path>
|
||||||
</symbol>
|
</symbol>
|
||||||
|
|
|
||||||
|
|
@ -2,5 +2,5 @@
|
||||||
"name": "material",
|
"name": "material",
|
||||||
"author": "Vanessa",
|
"author": "Vanessa",
|
||||||
"url": "https://github.com/Vanessa219",
|
"url": "https://github.com/Vanessa219",
|
||||||
"version": "1.34.0"
|
"version": "1.35.0"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "طباعة",
|
||||||
|
"clickArrow": "انقر على السهم",
|
||||||
|
"foldAll": "طي الكل",
|
||||||
|
"expandSameLevelHeading": "توسيع العناوين من نفس المستوى",
|
||||||
|
"foldSameLevelHeading": "طي العناوين من نفس المستوى",
|
||||||
|
"expandChildHeading": "توسيع العناوين الفرعية",
|
||||||
|
"foldChildHeading": "طي العناوين الفرعية",
|
||||||
|
"addChildHeading": "إضافة عنوان فرعي",
|
||||||
|
"insertSameLevelHeadingBefore": "إدراج عنوان من نفس المستوى قبل",
|
||||||
|
"insertSameLevelHeadingAfter": "إدراج عنوان من نفس المستوى بعد",
|
||||||
|
"upgrade": "ترقية",
|
||||||
|
"downgrade": "خفض المستوى",
|
||||||
|
"clipboardPermissionDenied": "تم رفض إذن الحافظة. يرجى السماح بالوصول إلى الحافظة من شريط عنوان المتصفح ثم المحاولة مرة أخرى.",
|
||||||
|
"jumpTo": "انتقل إلى",
|
||||||
"vacuumDataIndex": "تحسين الفهرس",
|
"vacuumDataIndex": "تحسين الفهرس",
|
||||||
"vacuumDataIndexTip": "تحقق من فهرس البيانات، وحرر مساحة التخزين وحسّن أداء الفهرس",
|
"vacuumDataIndexTip": "تحقق من فهرس البيانات، وحرر مساحة التخزين وحسّن أداء الفهرس",
|
||||||
"rebuildDataIndex": "إعادة بناء الفهرس",
|
"rebuildDataIndex": "إعادة بناء الفهرس",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "عرض أيقونات المدخلات",
|
"showAllEntriesIcons": "عرض أيقونات المدخلات",
|
||||||
"wrapAllFields": "التفاف الحقول تلقائيًا",
|
"wrapAllFields": "التفاف الحقول تلقائيًا",
|
||||||
"gallery": "بطاقة",
|
"gallery": "بطاقة",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "علامة جديدة",
|
"newTag": "علامة جديدة",
|
||||||
"pleaseWait": "يرجى الانتظار...",
|
"pleaseWait": "يرجى الانتظار...",
|
||||||
"reconnectPrompt": "بعد تبديل التطبيقات، سيستغرق الأمر بعض الوقت لاستعادة تشغيل نواة SiYuan. يرجى الانتظار بضع ثوانٍ أو النقر فوق الزر \"إعادة المحاولة\"",
|
"reconnectPrompt": "بعد تبديل التطبيقات، سيستغرق الأمر بعض الوقت لاستعادة تشغيل نواة SiYuan. يرجى الانتظار بضع ثوانٍ أو النقر فوق الزر \"إعادة المحاولة\"",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "فك ربط الكتلة",
|
"unbindBlock": "فك ربط الكتلة",
|
||||||
"showTitle": "عرض عنوان قاعدة البيانات",
|
"showTitle": "عرض عنوان قاعدة البيانات",
|
||||||
"fillCreated": "ملء وقت الإنشاء افتراضياً",
|
"fillCreated": "ملء وقت الإنشاء افتراضياً",
|
||||||
|
"fillSpecificTime": "ملء الوقت المحدد افتراضيًا",
|
||||||
"removeCard": "إزالة بطاقة تعليمية",
|
"removeCard": "إزالة بطاقة تعليمية",
|
||||||
"updateLayout": "تحديث التصميم",
|
"updateLayout": "تحديث التصميم",
|
||||||
"dndFolderTip": "يرجى ملاحظة أن ${x} يقوم فقط بإدراج رابط file:// ولا يقوم بنسخ الملف",
|
"dndFolderTip": "يرجى ملاحظة أن ${x} يقوم فقط بإدراج رابط file:// ولا يقوم بنسخ الملف",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "سيؤدي تطهير التخزين السحابي إلى حذف جميع اللقطات غير المرجعية وعناصر البيانات ذات الصلة. <ul class='fn__list'><li>الرجاء التأكد من أن الأجهزة الأخرى توقفت عن المزامنة قبل التنفيذ</li><li>عملية التطهير تستغرق وقتاً طويلاً جداً، الرجاء التأكد من أن الشبكة مستقرة</li></ul>هل أنت متأكد من تنفيذها الآن؟",
|
"cloudStoragePurgeConfirm": "سيؤدي تطهير التخزين السحابي إلى حذف جميع اللقطات غير المرجعية وعناصر البيانات ذات الصلة. <ul class='fn__list'><li>الرجاء التأكد من أن الأجهزة الأخرى توقفت عن المزامنة قبل التنفيذ</li><li>عملية التطهير تستغرق وقتاً طويلاً جداً، الرجاء التأكد من أن الشبكة مستقرة</li></ul>هل أنت متأكد من تنفيذها الآن؟",
|
||||||
"dragFill": "اسحب عمودياً لملء القيمة",
|
"dragFill": "اسحب عمودياً لملء القيمة",
|
||||||
"switchReadonly": "تبديل وضع القراءة فقط",
|
"switchReadonly": "تبديل وضع القراءة فقط",
|
||||||
"original": "القيمة الأصلية",
|
"original": "عرض القيمة الأصلية",
|
||||||
|
"uniqueValues": "عرض القيم الفريدة",
|
||||||
"selectRelation": "الرجاء تحديد الحقل ذي الصلة أولاً",
|
"selectRelation": "الرجاء تحديد الحقل ذي الصلة أولاً",
|
||||||
"backRelation": "ثنائي الاتجاه",
|
"backRelation": "ثنائي الاتجاه",
|
||||||
"thisDatabase": "قاعدة البيانات هذه",
|
"thisDatabase": "قاعدة البيانات هذه",
|
||||||
"relatedTo": "الربط بـ",
|
"relatedTo": "الربط بـ",
|
||||||
"relation": "ربط",
|
"relation": "ربط",
|
||||||
|
"relatedItems": "العناصر المرتبطة",
|
||||||
"rollup": "القيمة المحتسبة",
|
"rollup": "القيمة المحتسبة",
|
||||||
"rollupProperty": "الخاصية",
|
"rollupProperty": "الخاصية",
|
||||||
"rollupCalc": "الحساب بـ",
|
"rollupCalc": "الحساب بـ",
|
||||||
|
|
@ -187,7 +205,7 @@
|
||||||
"imgSrc": "رابط الصورة",
|
"imgSrc": "رابط الصورة",
|
||||||
"aText": "نص مرساة الرابط",
|
"aText": "نص مرساة الرابط",
|
||||||
"aTitle": "عنوان الرابط",
|
"aTitle": "عنوان الرابط",
|
||||||
"aHref": "نص الرابط",
|
"aHref": "عنوان URL",
|
||||||
"code": "شفرة داخل السطر",
|
"code": "شفرة داخل السطر",
|
||||||
"em": "خط مائل",
|
"em": "خط مائل",
|
||||||
"strong": "خط غامق",
|
"strong": "خط غامق",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "كتلة الصيغة",
|
"mathBlock": "كتلة الصيغة",
|
||||||
"htmlBlock": "كتلة HTML"
|
"htmlBlock": "كتلة HTML"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "نسخ عنوان URL للرابط",
|
||||||
"selected": "محدد",
|
"selected": "محدد",
|
||||||
"loadMore": "عرض المزيد",
|
"loadMore": "عرض المزيد",
|
||||||
"tempUnlock": "فتح القفل مؤقتاً",
|
"tempUnlock": "فتح القفل مؤقتاً",
|
||||||
"cancelTempUnlock": "إلغاء القفل المؤقت",
|
"cancelTempUnlock": "إلغاء القفل المؤقت",
|
||||||
"addFilter": "إضافة عامل تصفية",
|
"addFilter": "إضافة عامل تصفية",
|
||||||
"removeFilters": "مسح عامل تصفية",
|
"removeFilters": "مسح عامل تصفية",
|
||||||
|
"addSort": "إضافة ترتيب",
|
||||||
|
"removeSorts": "مسح الترتيب",
|
||||||
"checked": "مكتمل",
|
"checked": "مكتمل",
|
||||||
"unchecked": "غير مكتمل",
|
"unchecked": "غير مكتمل",
|
||||||
"percentChecked": "نسبة المكتمل",
|
"percentChecked": "نسبة المكتمل",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "اكتمل الاستيراد",
|
"imported": "اكتمل الاستيراد",
|
||||||
"mirrorTip": "مرآة قاعدة بيانات، حيث جميع تحديثات البيانات سيتم مزامنتها مع جميع المرايا الأخرى",
|
"mirrorTip": "مرآة قاعدة بيانات، حيث جميع تحديثات البيانات سيتم مزامنتها مع جميع المرايا الأخرى",
|
||||||
"includeTime": "إدراج الوقت",
|
"includeTime": "إدراج الوقت",
|
||||||
"accountSupport1": "منذ إصدار SiYuan العام الأول في 31 أغسطس 2020، تم إصداره 776 مرة، وتم حل متطلبات وتعليقات المستخدمين 13840 مرة، وتم تنفيذ 17637 عملية إيداع للكود. لا يمكننا تحقيق كل هذا بدون دعمكم وتعليقاتكم.",
|
"accountSupport1": "منذ إصدار SiYuan العام الأول في 31 أغسطس 2020، تم إصداره أكثر من 830 مرة، وتم حل متطلبات وتعليقات المستخدمين أكثر من 15000 مرة، وتم تنفيذ أكثر من 19800 عملية إيداع للكود. لا يمكننا تحقيق كل هذا بدون دعمكم وتعليقاتكم.",
|
||||||
"accountSupport2": "سيسمح دعمكم وتعليقاتكم لـ SiYuan بالتطور والتحسن بشكل أفضل. سنبقى دائماً أصدقاء مع المستخدمين، ونعمل بجد لتحسين منتجاتنا، ونقدم لكم تجربة أفضل في إدارة المعرفة. شكراً جزيلاً لدعمكم!",
|
"accountSupport2": "سيسمح دعمكم وتعليقاتكم لـ SiYuan بالتطور والتحسن بشكل أفضل. سنبقى دائماً أصدقاء مع المستخدمين، ونعمل بجد لتحسين منتجاتنا، ونقدم لكم تجربة أفضل في إدارة المعرفة. شكراً جزيلاً لدعمكم!",
|
||||||
"goToTab1": "الذهاب إلى علامة التبويب #1",
|
"goToTab1": "الذهاب إلى علامة التبويب #1",
|
||||||
"goToTab2": "الذهاب إلى علامة التبويب #2",
|
"goToTab2": "الذهاب إلى علامة التبويب #2",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "بعد التمكين، تم عرض شريط التنقل في الكتل المضمنة؛ تم مجاهلة هذا الخيار عند شريط التنقل للكتل المضمنة في الكتل الخارقة ولا يظهر أبداً",
|
"embedBlockBreadcrumbTip": "بعد التمكين، تم عرض شريط التنقل في الكتل المضمنة؛ تم مجاهلة هذا الخيار عند شريط التنقل للكتل المضمنة في الكتل الخارقة ولا يظهر أبداً",
|
||||||
"appearanceMode": "وضع المظهر",
|
"appearanceMode": "وضع المظهر",
|
||||||
"editReadonly": "وضع القراءة فقط",
|
"editReadonly": "وضع القراءة فقط",
|
||||||
"editReadonlyTip": "عند التمكين، سيكون المستند للقراءة فقط افتراضيًا",
|
"editReadonlyTip": "عند التمكين، سيكون محرر المستندات للقراءة فقط افتراضيًا. لا يزال بإمكانك البحث واستبدال النص، وتعديل المحتوى عبر API",
|
||||||
"generateConflictDoc": "توليد مستندات التعارض عند ظهور تضاربات المزامنة",
|
"generateConflictDoc": "توليد مستندات التعارض عند ظهور تضاربات المزامنة",
|
||||||
"generateConflictDocTip": "بعد التمكين، سيتم إنشاء مستندات التعارض عند حدوث تضاربات المزامنة، بحيث يمكن فتحها وعرضها مباشرة. سيتم تسجيل مستندات التعارض في [تاريخ البيانات] سواء تمكين هذا الخيار أو عدم تمكينه",
|
"generateConflictDocTip": "بعد التمكين، سيتم إنشاء مستندات التعارض عند حدوث تضاربات المزامنة، بحيث يمكن فتحها وعرضها مباشرة. سيتم تسجيل مستندات التعارض في [تاريخ البيانات] سواء تمكين هذا الخيار أو عدم تمكينه",
|
||||||
"deleteOpConfirm": "⚠️ تأكيد عملية حذف",
|
"deleteOpConfirm": "⚠️ تأكيد عملية حذف",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "\u202Bالرجاء استخدام تنسيق كائن JSON (<code class='fn__code'>{}</code>) لإختلاف تعاريف ماكرو، على سبيل المثال \u202A<code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>\u202C\u202C",
|
"katexMacrosTip": "\u202Bالرجاء استخدام تنسيق كائن JSON (<code class='fn__code'>{}</code>) لإختلاف تعاريف ماكرو، على سبيل المثال \u202A<code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>\u202C\u202C",
|
||||||
"systemLogTip": "يتم حفظ سجلات تشغيل البرنامج في سجل النظام. من خلال تصدير سجل النظام وإرساله إلى المطورين، يمكن أن تساعد المطورين بشكل أفضل على تشخيص مشاكل البرنامج",
|
"systemLogTip": "يتم حفظ سجلات تشغيل البرنامج في سجل النظام. من خلال تصدير سجل النظام وإرساله إلى المطورين، يمكن أن تساعد المطورين بشكل أفضل على تشخيص مشاكل البرنامج",
|
||||||
"systemLog": "سجل النظام",
|
"systemLog": "سجل النظام",
|
||||||
"syncConfGuide1": "تهيئة مفتاح المزامنة",
|
"syncConfGuide1": "تهيئة مفتاح مستودع البيانات",
|
||||||
"syncConfGuide2": "يتم استخدام هذا المفتاح لتشفير مزامنة البيانات من النهاية إلى النهاية<br>يتم إنشاء المفتاح استناداً إلى كلمة المرور التي أدخلتها، يرجى تذكرها",
|
"syncConfGuide2": "يتم استخدام هذا المفتاح لتشفير مزامنة البيانات من النهاية إلى النهاية<br>يتم إنشاء المفتاح استناداً إلى كلمة المرور التي أدخلتها، يرجى تذكرها",
|
||||||
"syncConfGuide3": "يتم استخدام دليل المزامنة السحابية لتخزين البيانات المشفرة المقابلة لمساحة العمل الحالية. الاسم الافتراضي هو <code>main</code>. إذا كان لديك مساحة عمل واحدة فقط للمزامنة، استخدم <code>main</code> مباشرة",
|
"syncConfGuide3": "يتم استخدام دليل المزامنة السحابية لتخزين البيانات المشفرة المقابلة لمساحة العمل الحالية. الاسم الافتراضي هو <code>main</code>. إذا كان لديك مساحة عمل واحدة فقط للمزامنة، استخدم <code>main</code> مباشرة",
|
||||||
"syncConfGuide4": "مزامنة الآن؟",
|
"syncConfGuide4": "مزامنة الآن؟",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "نص المرساة الديناميكي",
|
"turnToDynamic": "نص المرساة الديناميكي",
|
||||||
"sizeLimit": "الحد الأقصى",
|
"sizeLimit": "الحد الأقصى",
|
||||||
"trafficStat": "إحصاءات حركة المرور",
|
"trafficStat": "إحصاءات حركة المرور",
|
||||||
"hideHeadingBelowBlocks": "إخفاء الكتل تحت العنوان",
|
"headingEmbedMode": "إعدادات تضمين كتلة العنوان",
|
||||||
|
"headingEmbedModeTip": "تعيين نمط عرض كتلة العنوان في الكتلة المضمنة",
|
||||||
|
"showHeadingWithBlocks": "إظهار العنوان مع الكتل أدناه",
|
||||||
|
"showHeadingOnlyTitle": "إظهار العنوان فقط",
|
||||||
|
"showHeadingOnlyBlocks": "إظهار الكتل تحت العنوان فقط",
|
||||||
"matchDiacritics": "مطابقة علامات التشكيل",
|
"matchDiacritics": "مطابقة علامات التشكيل",
|
||||||
"copyHPath": "نسخ المسار المقروء",
|
"copyHPath": "نسخ المسار المقروء",
|
||||||
"justify": "محاذاة من الجانبين",
|
"justify": "محاذاة من الجانبين",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "عنوان 4",
|
"heading4": "عنوان 4",
|
||||||
"heading5": "عنوان 5",
|
"heading5": "عنوان 5",
|
||||||
"heading6": "عنوان 6",
|
"heading6": "عنوان 6",
|
||||||
|
"outlineExpandLevel": "مستوى التوسيع",
|
||||||
|
"expandAll": "توسيع الكل",
|
||||||
|
"outlineKeepCurrentExpand": "الحفاظ على التوسيع الحالي",
|
||||||
"general": "عام",
|
"general": "عام",
|
||||||
"insertBefore": "إدراج كتلة فارغة قبل الكتلة حيث يكون المؤشر",
|
|
||||||
"insertAfter": "إدراج كتلة فارغة بعد الكتلة حيث يوجد المؤشر",
|
|
||||||
"list1": "قائمة",
|
"list1": "قائمة",
|
||||||
"element": "عناصر",
|
"element": "عناصر",
|
||||||
"closeTab": "إغلاق علامة التبويب الحالية",
|
"closeTab": "إغلاق علامة التبويب الحالية",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "المسافة البادئة",
|
"indent": "المسافة البادئة",
|
||||||
"info": "المعلومات",
|
"info": "المعلومات",
|
||||||
"inline-code": "كود داخل السطر",
|
"inline-code": "كود داخل السطر",
|
||||||
"insert-after": "إدراج كتلة بعد هذه الكتلة",
|
"insertAfter": "إدراج كتلة بالأسفل",
|
||||||
"insert-before": "إدراج كتلة قبل هذه الكتلة",
|
"insertBefore": "إدراج كتلة بالأعلى",
|
||||||
"insertColumnLeft": "إدراج عمود واحد على اليسار",
|
"insertColumnLeft": "إدراج عمود واحد على اليسار",
|
||||||
"insertColumnRight": "إدراج عمود واحد على اليمين",
|
"insertColumnRight": "إدراج عمود واحد على اليمين",
|
||||||
"insertRowAbove": "إدراج صف واحد بالأعلى",
|
"insertRowAbove": "إدراج صف واحد بالأعلى",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "جدول",
|
"table": "جدول",
|
||||||
"gallery": "بطاقة",
|
"gallery": "بطاقة",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "المفتاح الرئيسي",
|
"key": "المفتاح الرئيسي",
|
||||||
"select": "تحديد"
|
"select": "تحديد"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "تمت إضافة هذا المقطع بالفعل إلى قاعدة البيانات [%s]",
|
"269": "تمت إضافة هذا المقطع بالفعل إلى قاعدة البيانات [%s]",
|
||||||
"270": "يتم تحسين فهرس البيانات، يرجى الانتظار...",
|
"270": "يتم تحسين فهرس البيانات، يرجى الانتظار...",
|
||||||
"271": "اكتملت عملية تحسين فهرس البيانات، تم تحرير [%s] من مساحة القرص",
|
"271": "اكتملت عملية تحسين فهرس البيانات، تم تحرير [%s] من مساحة القرص",
|
||||||
"272": "حقل غير مسمى"
|
"272": "حقل غير مسمى",
|
||||||
|
"273": "لا تقم بإنشاء مساحة العمل في مسار جذر القسم، يرجى إنشاء مجلد جديد كمساحة عمل",
|
||||||
|
"274": "يحتوي هذا المجلد على ملفات أخرى، يرجى إنشاء مجلد جديد كمساحة عمل"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "Drucken",
|
||||||
|
"clickArrow": "Klicken Sie auf den Pfeil",
|
||||||
|
"foldAll": "Alle einklappen",
|
||||||
|
"expandSameLevelHeading": "Überschriften auf gleicher Ebene ausklappen",
|
||||||
|
"foldSameLevelHeading": "Überschriften auf gleicher Ebene einklappen",
|
||||||
|
"expandChildHeading": "Unterüberschriften ausklappen",
|
||||||
|
"foldChildHeading": "Unterüberschriften einklappen",
|
||||||
|
"addChildHeading": "Unterüberschrift hinzufügen",
|
||||||
|
"insertSameLevelHeadingBefore": "Überschrift auf gleicher Ebene davor einfügen",
|
||||||
|
"insertSameLevelHeadingAfter": "Überschrift auf gleicher Ebene danach einfügen",
|
||||||
|
"upgrade": "Aktualisieren",
|
||||||
|
"downgrade": "Herabstufen",
|
||||||
|
"clipboardPermissionDenied": "Zwischenablage-Berechtigung verweigert. Bitte erlauben Sie den Zugriff auf die Zwischenablage in der Adressleiste des Browsers und versuchen Sie es erneut.",
|
||||||
|
"jumpTo": "Springe zu",
|
||||||
"vacuumDataIndex": "Index optimieren",
|
"vacuumDataIndex": "Index optimieren",
|
||||||
"vacuumDataIndexTip": "Datenindex prüfen, Speicherplatz freigeben und Indexleistung verbessern",
|
"vacuumDataIndexTip": "Datenindex prüfen, Speicherplatz freigeben und Indexleistung verbessern",
|
||||||
"rebuildDataIndex": "Index neu erstellen",
|
"rebuildDataIndex": "Index neu erstellen",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "Eintragssymbole anzeigen",
|
"showAllEntriesIcons": "Eintragssymbole anzeigen",
|
||||||
"wrapAllFields": "Felder automatisch umbrechen",
|
"wrapAllFields": "Felder automatisch umbrechen",
|
||||||
"gallery": "Karte",
|
"gallery": "Karte",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Neuer Tag",
|
"newTag": "Neuer Tag",
|
||||||
"pleaseWait": "Bitte warten...",
|
"pleaseWait": "Bitte warten...",
|
||||||
"reconnectPrompt": "Nach dem Wechseln der Anwendungen dauert es einige Zeit, bis der Betrieb des SiYuan-Kernels wiederhergestellt ist. Bitte warten Sie einige Sekunden oder klicken Sie auf die Schaltfläche „Erneut versuchen“",
|
"reconnectPrompt": "Nach dem Wechseln der Anwendungen dauert es einige Zeit, bis der Betrieb des SiYuan-Kernels wiederhergestellt ist. Bitte warten Sie einige Sekunden oder klicken Sie auf die Schaltfläche „Erneut versuchen“",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "Block entkoppeln",
|
"unbindBlock": "Block entkoppeln",
|
||||||
"showTitle": "Datenbanktitel anzeigen",
|
"showTitle": "Datenbanktitel anzeigen",
|
||||||
"fillCreated": "Standardfüllzeit erstellen",
|
"fillCreated": "Standardfüllzeit erstellen",
|
||||||
|
"fillSpecificTime": "Standardmäßig bestimmte Zeit ausfüllen",
|
||||||
"removeCard": "Karte entfernen",
|
"removeCard": "Karte entfernen",
|
||||||
"updateLayout": "Layout aktualisieren",
|
"updateLayout": "Layout aktualisieren",
|
||||||
"dndFolderTip": "Bitte beachten Sie, dass ${x} nur den file:// Hyperlink einfügt und die Datei nicht kopiert.",
|
"dndFolderTip": "Bitte beachten Sie, dass ${x} nur den file:// Hyperlink einfügt und die Datei nicht kopiert.",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "Das Bereinigen des Cloud-Speichers löscht alle nicht referenzierten Schnappschüsse und zugehörigen Datenobjekte vollständig. <ul class='fn__list'><li>Bitte stellen Sie sicher, dass andere Geräte die Synchronisation pausiert haben, bevor Sie fortfahren</li><li>Der Bereinigungsvorgang kann sehr zeitaufwendig sein, bitte stellen Sie sicher, dass das Netzwerk stabil ist</li></ul>Sind Sie sicher, dass Sie es jetzt ausführen möchten?",
|
"cloudStoragePurgeConfirm": "Das Bereinigen des Cloud-Speichers löscht alle nicht referenzierten Schnappschüsse und zugehörigen Datenobjekte vollständig. <ul class='fn__list'><li>Bitte stellen Sie sicher, dass andere Geräte die Synchronisation pausiert haben, bevor Sie fortfahren</li><li>Der Bereinigungsvorgang kann sehr zeitaufwendig sein, bitte stellen Sie sicher, dass das Netzwerk stabil ist</li></ul>Sind Sie sicher, dass Sie es jetzt ausführen möchten?",
|
||||||
"dragFill": "Vertikal ziehen, um Werte zu füllen",
|
"dragFill": "Vertikal ziehen, um Werte zu füllen",
|
||||||
"switchReadonly": "In den Nur-Lesen-Modus wechseln",
|
"switchReadonly": "In den Nur-Lesen-Modus wechseln",
|
||||||
"original": "Original",
|
"original": "Originalwert anzeigen",
|
||||||
|
"uniqueValues": "Eindeutige Werte anzeigen",
|
||||||
"selectRelation": "Bitte wählen Sie zuerst die zugehörige Spalte aus",
|
"selectRelation": "Bitte wählen Sie zuerst die zugehörige Spalte aus",
|
||||||
"backRelation": "Bidirektional",
|
"backRelation": "Bidirektional",
|
||||||
"thisDatabase": "Diese Datenbank",
|
"thisDatabase": "Diese Datenbank",
|
||||||
"relatedTo": "Verbindung zu",
|
"relatedTo": "Verbindung zu",
|
||||||
"relation": "Beziehung",
|
"relation": "Beziehung",
|
||||||
|
"relatedItems": "Verknüpfte Einträge",
|
||||||
"rollup": "Rollup",
|
"rollup": "Rollup",
|
||||||
"rollupProperty": "Eigenschaft",
|
"rollupProperty": "Eigenschaft",
|
||||||
"rollupCalc": "Berechnen",
|
"rollupCalc": "Berechnen",
|
||||||
|
|
@ -187,7 +205,7 @@
|
||||||
"imgSrc": "Bildlink",
|
"imgSrc": "Bildlink",
|
||||||
"aText": "Link-Ankertext",
|
"aText": "Link-Ankertext",
|
||||||
"aTitle": "Linktitel",
|
"aTitle": "Linktitel",
|
||||||
"aHref": "Linklink",
|
"aHref": "Link-URL",
|
||||||
"code": "Inline-Code",
|
"code": "Inline-Code",
|
||||||
"em": "Kursiv",
|
"em": "Kursiv",
|
||||||
"strong": "Fett",
|
"strong": "Fett",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "Formelblock",
|
"mathBlock": "Formelblock",
|
||||||
"htmlBlock": "HTML-Block"
|
"htmlBlock": "HTML-Block"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "Link-URL kopieren",
|
||||||
"selected": "Ausgewählt",
|
"selected": "Ausgewählt",
|
||||||
"loadMore": "Mehr laden",
|
"loadMore": "Mehr laden",
|
||||||
"tempUnlock": "Temporär entsperren",
|
"tempUnlock": "Temporär entsperren",
|
||||||
"cancelTempUnlock": "Temporäres Entsperren abbrechen",
|
"cancelTempUnlock": "Temporäres Entsperren abbrechen",
|
||||||
"addFilter": "Filter hinzufügen",
|
"addFilter": "Filter hinzufügen",
|
||||||
"removeFilters": "Filter zurücksetzen",
|
"removeFilters": "Filter zurücksetzen",
|
||||||
|
"addSort": "Sortierung hinzufügen",
|
||||||
|
"removeSorts": "Sortierung zurücksetzen",
|
||||||
"checked": "Überprüft",
|
"checked": "Überprüft",
|
||||||
"unchecked": "Nicht überprüft",
|
"unchecked": "Nicht überprüft",
|
||||||
"percentChecked": "Prozent geprüft",
|
"percentChecked": "Prozent geprüft",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "Import abgeschlossen",
|
"imported": "Import abgeschlossen",
|
||||||
"mirrorTip": "Datenbank spiegeln, alle Datenaktualisierungen werden mit allen anderen Spiegeln synchronisiert",
|
"mirrorTip": "Datenbank spiegeln, alle Datenaktualisierungen werden mit allen anderen Spiegeln synchronisiert",
|
||||||
"includeTime": "Zeit einbeziehen",
|
"includeTime": "Zeit einbeziehen",
|
||||||
"accountSupport1": "Seit seiner ersten öffentlichen Veröffentlichung am 31. August 2020 wurde SiYuan insgesamt 776 Mal veröffentlicht, 13840 Benutzeranforderungen und -rückmeldungen bearbeitet und insgesamt 17637 Codezeilen geschrieben. Ohne Ihre Unterstützung und Rückmeldungen könnten wir das nicht erreichen.",
|
"accountSupport1": "Seit seiner ersten öffentlichen Veröffentlichung am 31. August 2020 wurde SiYuan mehr als 830 Mal veröffentlicht, mehr als 15000 Benutzeranforderungen und -rückmeldungen bearbeitet und mehr als 19800 Codezeilen geschrieben. Ohne Ihre Unterstützung und Rückmeldungen könnten wir das nicht erreichen.",
|
||||||
"accountSupport2": "Ihre Unterstützung und Rückmeldungen ermöglichen es SiYuan, sich besser zu entwickeln. Wir werden immer Freunde der Benutzer sein, hart daran arbeiten, die Produkte zu verbessern, und Ihnen eine bessere Erfahrung im Wissensmanagement bieten. Vielen Dank für Ihre Unterstützung!",
|
"accountSupport2": "Ihre Unterstützung und Rückmeldungen ermöglichen es SiYuan, sich besser zu entwickeln. Wir werden immer Freunde der Benutzer sein, hart daran arbeiten, die Produkte zu verbessern, und Ihnen eine bessere Erfahrung im Wissensmanagement bieten. Vielen Dank für Ihre Unterstützung!",
|
||||||
"goToTab1": "Gehe zu Tab #1",
|
"goToTab1": "Gehe zu Tab #1",
|
||||||
"goToTab2": "Gehe zu Tab #2",
|
"goToTab2": "Gehe zu Tab #2",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "Nach der Aktivierung zeigen eingebettete Blöcke Breadcrumbs an, eingebettete Blöcke in Superblöcken ignorieren diese Option und zeigen niemals Breadcrumbs.",
|
"embedBlockBreadcrumbTip": "Nach der Aktivierung zeigen eingebettete Blöcke Breadcrumbs an, eingebettete Blöcke in Superblöcken ignorieren diese Option und zeigen niemals Breadcrumbs.",
|
||||||
"appearanceMode": "Darstellungsmodus",
|
"appearanceMode": "Darstellungsmodus",
|
||||||
"editReadonly": "Schreibgeschützter Modus",
|
"editReadonly": "Schreibgeschützter Modus",
|
||||||
"editReadonlyTip": "Nach der Aktivierung ist das Dokument standardmäßig schreibgeschützt.",
|
"editReadonlyTip": "Nach der Aktivierung ist der Dokumenteditor standardmäßig schreibgeschützt. Textsuche und -ersetzung sowie API-Änderungen sind weiterhin möglich.",
|
||||||
"generateConflictDoc": "Konfliktdokument generieren, wenn Synchronisationskonflikte auftreten.",
|
"generateConflictDoc": "Konfliktdokument generieren, wenn Synchronisationskonflikte auftreten.",
|
||||||
"generateConflictDocTip": "Nach der Aktivierung wird ein Konfliktdokument generiert, wenn ein Synchronisationskonflikt auftritt, sodass es direkt geöffnet und angezeigt werden kann. Egal ob aktiviert oder nicht, die [Datenhistorie] wird das Konfliktdokument aufzeichnen.",
|
"generateConflictDocTip": "Nach der Aktivierung wird ein Konfliktdokument generiert, wenn ein Synchronisationskonflikt auftritt, sodass es direkt geöffnet und angezeigt werden kann. Egal ob aktiviert oder nicht, die [Datenhistorie] wird das Konfliktdokument aufzeichnen.",
|
||||||
"deleteOpConfirm": "⚠️ Bestätigung der Löschoperation",
|
"deleteOpConfirm": "⚠️ Bestätigung der Löschoperation",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "Bitte verwenden Sie das JSON-Objektformat (<code class='fn__code'>{}</code>), um Makrodefinitionen einzufassen, z.B. <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
"katexMacrosTip": "Bitte verwenden Sie das JSON-Objektformat (<code class='fn__code'>{}</code>), um Makrodefinitionen einzufassen, z.B. <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
||||||
"systemLogTip": "Programmlaufzeithistorien sind im Systemprotokoll gespeichert. Durch den Export des Systemprotokolls und das Senden an Entwickler können Probleme besser diagnostiziert werden.",
|
"systemLogTip": "Programmlaufzeithistorien sind im Systemprotokoll gespeichert. Durch den Export des Systemprotokolls und das Senden an Entwickler können Probleme besser diagnostiziert werden.",
|
||||||
"systemLog": "Systemprotokoll",
|
"systemLog": "Systemprotokoll",
|
||||||
"syncConfGuide1": "Initialisieren Sie den Synchronisierungsschlüssel",
|
"syncConfGuide1": "Daten-Repo-Schlüssel initialisieren",
|
||||||
"syncConfGuide2": "Dieser Schlüssel wird für die End-to-End-Verschlüsselung der Daten-Synchronisation verwendet<br>Der Schlüssel wird basierend auf dem von Ihnen eingegebenen Passwort generiert, bitte merken Sie sich das Passwort.",
|
"syncConfGuide2": "Dieser Schlüssel wird für die End-to-End-Verschlüsselung der Daten-Synchronisation verwendet<br>Der Schlüssel wird basierend auf dem von Ihnen eingegebenen Passwort generiert, bitte merken Sie sich das Passwort.",
|
||||||
"syncConfGuide3": "Das Cloud-Synchronisationsverzeichnis wird verwendet, um die verschlüsselten Daten zu speichern, die mit dem aktuellen Arbeitsbereich übereinstimmen. Der Standardname ist <code>main</code>. Wenn Sie nur einen Arbeitsbereich haben, um ihn zu synchronisieren, verwenden Sie einfach <code>main</code>.",
|
"syncConfGuide3": "Das Cloud-Synchronisationsverzeichnis wird verwendet, um die verschlüsselten Daten zu speichern, die mit dem aktuellen Arbeitsbereich übereinstimmen. Der Standardname ist <code>main</code>. Wenn Sie nur einen Arbeitsbereich haben, um ihn zu synchronisieren, verwenden Sie einfach <code>main</code>.",
|
||||||
"syncConfGuide4": "Jetzt synchronisieren?",
|
"syncConfGuide4": "Jetzt synchronisieren?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "Dynamischer Ankertext",
|
"turnToDynamic": "Dynamischer Ankertext",
|
||||||
"sizeLimit": "Limit",
|
"sizeLimit": "Limit",
|
||||||
"trafficStat": "Verkehrsstatistiken",
|
"trafficStat": "Verkehrsstatistiken",
|
||||||
"hideHeadingBelowBlocks": "Blöcke unter der Überschrift ausblenden",
|
"headingEmbedMode": "Überschrift-Block-Einbettungseinstellungen",
|
||||||
|
"headingEmbedModeTip": "Stellen Sie den Anzeigestil von Überschrift-Blöcken in eingebetteten Blöcken ein",
|
||||||
|
"showHeadingWithBlocks": "Überschrift mit Blöcken darunter anzeigen",
|
||||||
|
"showHeadingOnlyTitle": "Nur Überschrift anzeigen",
|
||||||
|
"showHeadingOnlyBlocks": "Nur Blöcke unter der Überschrift anzeigen",
|
||||||
"matchDiacritics": "Diakritika abgleichen",
|
"matchDiacritics": "Diakritika abgleichen",
|
||||||
"copyHPath": "Lesbaren Pfad kopieren",
|
"copyHPath": "Lesbaren Pfad kopieren",
|
||||||
"justify": "Rechtsfertigen",
|
"justify": "Rechtsfertigen",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "Überschrift 4",
|
"heading4": "Überschrift 4",
|
||||||
"heading5": "Überschrift 5",
|
"heading5": "Überschrift 5",
|
||||||
"heading6": "Überschrift 6",
|
"heading6": "Überschrift 6",
|
||||||
|
"outlineExpandLevel": "Expansionsebene",
|
||||||
|
"expandAll": "Alle erweitern",
|
||||||
|
"outlineKeepCurrentExpand": "Aktuelle Erweiterung beibehalten",
|
||||||
"general": "Allgemein",
|
"general": "Allgemein",
|
||||||
"insertBefore": "Fügen Sie einen leeren Block vor dem Block ein, an dem sich der Cursor befindet",
|
|
||||||
"insertAfter": "Fügen Sie einen leeren Block nach dem Block ein, an dem sich der Cursor befindet",
|
|
||||||
"list1": "Liste",
|
"list1": "Liste",
|
||||||
"element": "Element",
|
"element": "Element",
|
||||||
"closeTab": "Aktuellen Tab schließen",
|
"closeTab": "Aktuellen Tab schließen",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "Einrücken",
|
"indent": "Einrücken",
|
||||||
"info": "Info",
|
"info": "Info",
|
||||||
"inline-code": "Inline-Code",
|
"inline-code": "Inline-Code",
|
||||||
"insert-after": "Block nachfügen",
|
"insertAfter": "Block unten einfügen",
|
||||||
"insert-before": "Block davor einfügen",
|
"insertBefore": "Block oben einfügen",
|
||||||
"insertColumnLeft": "1 links einfügen",
|
"insertColumnLeft": "1 links einfügen",
|
||||||
"insertColumnRight": "1 rechts einfügen",
|
"insertColumnRight": "1 rechts einfügen",
|
||||||
"insertRowAbove": "1 oben einfügen",
|
"insertRowAbove": "1 oben einfügen",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tabelle",
|
"table": "Tabelle",
|
||||||
"gallery": "Karte",
|
"gallery": "Karte",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Primärschlüssel",
|
"key": "Primärschlüssel",
|
||||||
"select": "Auswählen"
|
"select": "Auswählen"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "Dieser Block wurde bereits zur Datenbank [%s] hinzugefügt",
|
"269": "Dieser Block wurde bereits zur Datenbank [%s] hinzugefügt",
|
||||||
"270": "Datenindex wird optimiert, bitte warten...",
|
"270": "Datenindex wird optimiert, bitte warten...",
|
||||||
"271": "Datenindex-Optimierung abgeschlossen, [%s] Speicherplatz freigegeben",
|
"271": "Datenindex-Optimierung abgeschlossen, [%s] Speicherplatz freigegeben",
|
||||||
"272": "Unbenanntes Feld"
|
"272": "Unbenanntes Feld",
|
||||||
|
"273": "Erstellen Sie den Arbeitsbereich nicht im Stammverzeichnis der Partition, erstellen Sie bitte einen neuen Ordner als Arbeitsbereich",
|
||||||
|
"274": "Dieser Ordner enthält andere Dateien, erstellen Sie bitte einen neuen Ordner als Arbeitsbereich"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "Print",
|
||||||
|
"clickArrow": "Click arrow",
|
||||||
|
"foldAll": "Fold all",
|
||||||
|
"expandSameLevelHeading": "Expand same level heading",
|
||||||
|
"foldSameLevelHeading": "Fold same level heading",
|
||||||
|
"expandChildHeading": "Expand child heading",
|
||||||
|
"foldChildHeading": "Fold child heading",
|
||||||
|
"addChildHeading": "Add child heading",
|
||||||
|
"insertSameLevelHeadingBefore": "Insert same level heading before",
|
||||||
|
"insertSameLevelHeadingAfter": "Insert same level heading after",
|
||||||
|
"upgrade": "Upgrade",
|
||||||
|
"downgrade": "Downgrade",
|
||||||
|
"clipboardPermissionDenied": "Clipboard permission denied. Please allow clipboard access in the browser address bar and try again.",
|
||||||
|
"jumpTo": "Jump to",
|
||||||
"vacuumDataIndex": "Optimize Index",
|
"vacuumDataIndex": "Optimize Index",
|
||||||
"vacuumDataIndexTip": "Check data index, free up storage, and improve index performance",
|
"vacuumDataIndexTip": "Check data index, free up storage, and improve index performance",
|
||||||
"rebuildDataIndex": "Rebuild Index",
|
"rebuildDataIndex": "Rebuild Index",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "Show entry icons",
|
"showAllEntriesIcons": "Show entry icons",
|
||||||
"wrapAllFields": "Auto-wrap fields",
|
"wrapAllFields": "Auto-wrap fields",
|
||||||
"gallery": "Card",
|
"gallery": "Card",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "New tag",
|
"newTag": "New tag",
|
||||||
"pleaseWait": "Please wait...",
|
"pleaseWait": "Please wait...",
|
||||||
"reconnectPrompt": "After switching applications, it will take some time to restore the SiYuan kernel operation. Please wait a few seconds or click the \"Retry\" button",
|
"reconnectPrompt": "After switching applications, it will take some time to restore the SiYuan kernel operation. Please wait a few seconds or click the \"Retry\" button",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "Unbind block",
|
"unbindBlock": "Unbind block",
|
||||||
"showTitle": "Show database title",
|
"showTitle": "Show database title",
|
||||||
"fillCreated": "Default fill created time",
|
"fillCreated": "Default fill created time",
|
||||||
|
"fillSpecificTime": "Default fill specific time",
|
||||||
"removeCard": "Remove flashcard",
|
"removeCard": "Remove flashcard",
|
||||||
"updateLayout": "Update layout",
|
"updateLayout": "Update layout",
|
||||||
"dndFolderTip": "Please note that ${x} only inserts the file:// hyperlink and does not copy the file",
|
"dndFolderTip": "Please note that ${x} only inserts the file:// hyperlink and does not copy the file",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "Purging the cloud storage will completely delete all unreferenced snapshots and related data objects. <ul class='fn__list'><li>Please ensure that other devices have paused sync before execution</li><li>The purge operation is very time-consuming, please ensure that the network is stable</li></ul>Are you sure to execute it now?",
|
"cloudStoragePurgeConfirm": "Purging the cloud storage will completely delete all unreferenced snapshots and related data objects. <ul class='fn__list'><li>Please ensure that other devices have paused sync before execution</li><li>The purge operation is very time-consuming, please ensure that the network is stable</li></ul>Are you sure to execute it now?",
|
||||||
"dragFill": "Drag vertically to fill value",
|
"dragFill": "Drag vertically to fill value",
|
||||||
"switchReadonly": "Switch read-only mode",
|
"switchReadonly": "Switch read-only mode",
|
||||||
"original": "Original",
|
"original": "Show original values",
|
||||||
|
"uniqueValues": "Show unique values",
|
||||||
"selectRelation": "Please select the related field first",
|
"selectRelation": "Please select the related field first",
|
||||||
"backRelation": "Bidirectional",
|
"backRelation": "Bidirectional",
|
||||||
"thisDatabase": "This database",
|
"thisDatabase": "This database",
|
||||||
"relatedTo": "Relation to",
|
"relatedTo": "Relation to",
|
||||||
"relation": "Relation",
|
"relation": "Relation",
|
||||||
|
"relatedItems": "Related Items",
|
||||||
"rollup": "Rollup",
|
"rollup": "Rollup",
|
||||||
"rollupProperty": "Property",
|
"rollupProperty": "Property",
|
||||||
"rollupCalc": "Calculate",
|
"rollupCalc": "Calculate",
|
||||||
|
|
@ -187,7 +205,7 @@
|
||||||
"imgSrc": "Image link",
|
"imgSrc": "Image link",
|
||||||
"aText": "Link anchor text",
|
"aText": "Link anchor text",
|
||||||
"aTitle": "Link title",
|
"aTitle": "Link title",
|
||||||
"aHref": "Link link",
|
"aHref": "Link URL",
|
||||||
"code": "inline code",
|
"code": "inline code",
|
||||||
"em": "Italic",
|
"em": "Italic",
|
||||||
"strong": "Bold",
|
"strong": "Bold",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "Formula block",
|
"mathBlock": "Formula block",
|
||||||
"htmlBlock": "HTML block"
|
"htmlBlock": "HTML block"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "Copy link URL",
|
||||||
"selected": "Selected",
|
"selected": "Selected",
|
||||||
"loadMore": "Load more",
|
"loadMore": "Load more",
|
||||||
"tempUnlock": "Temporarily unlock",
|
"tempUnlock": "Temporarily unlock",
|
||||||
"cancelTempUnlock": "Cancel temporary unlock",
|
"cancelTempUnlock": "Cancel temporary unlock",
|
||||||
"addFilter": "Add filter",
|
"addFilter": "Add filter",
|
||||||
"removeFilters": "Clear filter",
|
"removeFilters": "Clear filter",
|
||||||
|
"addSort": "Add sort",
|
||||||
|
"removeSorts": "Clear sort",
|
||||||
"checked": "Checked",
|
"checked": "Checked",
|
||||||
"unchecked": "Unchecked",
|
"unchecked": "Unchecked",
|
||||||
"percentChecked": "Percent checked",
|
"percentChecked": "Percent checked",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "Import completed",
|
"imported": "Import completed",
|
||||||
"mirrorTip": "Mirror database, all data updates will be synchronized to all other mirrors",
|
"mirrorTip": "Mirror database, all data updates will be synchronized to all other mirrors",
|
||||||
"includeTime": "Include time",
|
"includeTime": "Include time",
|
||||||
"accountSupport1": "Since its first public release on August 31, 2020, SiYuan has been released a total of 776 times, solved user requirements and feedback 13840 times, and committed code 17637 times. We couldn't have achieved this without your support and feedback.",
|
"accountSupport1": "Since its first public release on August 31, 2020, SiYuan has been released more than 830 times, solved user requirements and feedback more than 15000 times, and committed code more than 19800 times. We couldn't have achieved this without your support and feedback.",
|
||||||
"accountSupport2": "Your support and feedback will make SiYuan better. We will always be friends with users, work hard to make products better, and provide you with a better knowledge management experience. Thank you very much for your support!",
|
"accountSupport2": "Your support and feedback will make SiYuan better. We will always be friends with users, work hard to make products better, and provide you with a better knowledge management experience. Thank you very much for your support!",
|
||||||
"goToTab1": "Go to tab #1",
|
"goToTab1": "Go to tab #1",
|
||||||
"goToTab2": "Go to tab #2",
|
"goToTab2": "Go to tab #2",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "When enabled, embed blocks will display breadcrumbs, embed blocks in super blocks ignore this option and never show breadcrumbs",
|
"embedBlockBreadcrumbTip": "When enabled, embed blocks will display breadcrumbs, embed blocks in super blocks ignore this option and never show breadcrumbs",
|
||||||
"appearanceMode": "Appearance Mode",
|
"appearanceMode": "Appearance Mode",
|
||||||
"editReadonly": "Read-only mode",
|
"editReadonly": "Read-only mode",
|
||||||
"editReadonlyTip": "When enabled, the document will be read-only by default",
|
"editReadonlyTip": "When enabled, the document editor will be read-only by default. You can still search and replace text, modify content via API",
|
||||||
"generateConflictDoc": "Generate conflict documentation when syncing conflicts",
|
"generateConflictDoc": "Generate conflict documentation when syncing conflicts",
|
||||||
"generateConflictDocTip": "When enabled, a conflict document will be generated when a synchronization conflict occurs, so that it can be opened and viewed directly. Whether enabled or not, the [Data History] will record the conflict document",
|
"generateConflictDocTip": "When enabled, a conflict document will be generated when a synchronization conflict occurs, so that it can be opened and viewed directly. Whether enabled or not, the [Data History] will record the conflict document",
|
||||||
"deleteOpConfirm": "⚠️ Delete operation confirmation",
|
"deleteOpConfirm": "⚠️ Delete operation confirmation",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "Please use JSON object format (<code class='fn__code'>{}</code>) to wrap macro definitions, eg <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
"katexMacrosTip": "Please use JSON object format (<code class='fn__code'>{}</code>) to wrap macro definitions, eg <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
||||||
"systemLogTip": "Program running records are saved in the system log. By exporting the system log and sending it to developers, it can better help developers diagnose program problems",
|
"systemLogTip": "Program running records are saved in the system log. By exporting the system log and sending it to developers, it can better help developers diagnose program problems",
|
||||||
"systemLog": "System log",
|
"systemLog": "System log",
|
||||||
"syncConfGuide1": "Initialize sync key",
|
"syncConfGuide1": "Initialize data repo key",
|
||||||
"syncConfGuide2": "This key is used for data sync end-to-end encryption<br>The key is generated based on the password you enter, please remember the password",
|
"syncConfGuide2": "This key is used for data sync end-to-end encryption<br>The key is generated based on the password you enter, please remember the password",
|
||||||
"syncConfGuide3": "The cloud sync directory is used to store the encrypted data corresponding to the current workspace. The default name is <code>main</code>. If you only have one workspace to sync, use <code>main</code> directly",
|
"syncConfGuide3": "The cloud sync directory is used to store the encrypted data corresponding to the current workspace. The default name is <code>main</code>. If you only have one workspace to sync, use <code>main</code> directly",
|
||||||
"syncConfGuide4": "Sync now?",
|
"syncConfGuide4": "Sync now?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "Dynamic anchor text",
|
"turnToDynamic": "Dynamic anchor text",
|
||||||
"sizeLimit": "Limit",
|
"sizeLimit": "Limit",
|
||||||
"trafficStat": "Traffic statistics",
|
"trafficStat": "Traffic statistics",
|
||||||
"hideHeadingBelowBlocks": "Hide blocks below heading",
|
"headingEmbedMode": "Heading block embed settings",
|
||||||
|
"showHeadingWithBlocks": "Show heading with blocks below",
|
||||||
|
"showHeadingOnlyTitle": "Show heading only",
|
||||||
|
"showHeadingOnlyBlocks": "Show only blocks below heading",
|
||||||
|
"headingEmbedModeTip": "Set the display style of heading blocks in embed blocks",
|
||||||
"matchDiacritics": "Match Diacritics",
|
"matchDiacritics": "Match Diacritics",
|
||||||
"copyHPath": "Copy readable path",
|
"copyHPath": "Copy readable path",
|
||||||
"justify": "Justify",
|
"justify": "Justify",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "Heading 4",
|
"heading4": "Heading 4",
|
||||||
"heading5": "Heading 5",
|
"heading5": "Heading 5",
|
||||||
"heading6": "Heading 6",
|
"heading6": "Heading 6",
|
||||||
|
"outlineExpandLevel": "Expand level",
|
||||||
|
"expandAll": "Expand all",
|
||||||
|
"outlineKeepCurrentExpand": "Keep current expand",
|
||||||
"general": "General",
|
"general": "General",
|
||||||
"insertBefore": "Insert an empty block before the block where the cursor is",
|
|
||||||
"insertAfter": "Insert an empty block after the block where the cursor is located",
|
|
||||||
"list1": "List",
|
"list1": "List",
|
||||||
"element": "Element",
|
"element": "Element",
|
||||||
"closeTab": "Close current Tab",
|
"closeTab": "Close current Tab",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "Indent",
|
"indent": "Indent",
|
||||||
"info": "Info",
|
"info": "Info",
|
||||||
"inline-code": "Inline Code",
|
"inline-code": "Inline Code",
|
||||||
"insert-after": "Insert block after",
|
"insertAfter": "Insert block below",
|
||||||
"insert-before": "Insert block Before",
|
"insertBefore": "Insert block above",
|
||||||
"insertColumnLeft": "Insert 1 left",
|
"insertColumnLeft": "Insert 1 left",
|
||||||
"insertColumnRight": "Insert 1 right",
|
"insertColumnRight": "Insert 1 right",
|
||||||
"insertRowAbove": "Insert 1 above",
|
"insertRowAbove": "Insert 1 above",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Table",
|
"table": "Table",
|
||||||
"gallery": "Card",
|
"gallery": "Card",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Primary Key",
|
"key": "Primary Key",
|
||||||
"select": "Select"
|
"select": "Select"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "This block has already been added to the database [%s]",
|
"269": "This block has already been added to the database [%s]",
|
||||||
"270": "Optimizing data index, please wait...",
|
"270": "Optimizing data index, please wait...",
|
||||||
"271": "Data index optimization completed, [%s] disk space freed",
|
"271": "Data index optimization completed, [%s] disk space freed",
|
||||||
"272": "Unnamed field"
|
"272": "Unnamed field",
|
||||||
|
"273": "Do not create the workspace in the partition root path, please create a new folder as the workspace",
|
||||||
|
"274": "This folder contains other files, please create a new folder as the workspace"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "Imprimir",
|
||||||
|
"clickArrow": "Haz clic en la flecha",
|
||||||
|
"foldAll": "Colapsar todo",
|
||||||
|
"expandSameLevelHeading": "Expandir títulos del mismo nivel",
|
||||||
|
"foldSameLevelHeading": "Colapsar títulos del mismo nivel",
|
||||||
|
"expandChildHeading": "Expandir subtítulos",
|
||||||
|
"foldChildHeading": "Colapsar subtítulos",
|
||||||
|
"addChildHeading": "Agregar subtítulo",
|
||||||
|
"insertSameLevelHeadingBefore": "Insertar título del mismo nivel antes",
|
||||||
|
"insertSameLevelHeadingAfter": "Insertar título del mismo nivel después",
|
||||||
|
"upgrade": "Actualizar",
|
||||||
|
"downgrade": "Degradar",
|
||||||
|
"clipboardPermissionDenied": "Permiso del portapapeles denegado. Permite el acceso al portapapeles en la barra de direcciones del navegador y vuelve a intentarlo.",
|
||||||
|
"jumpTo": "Ir a",
|
||||||
"vacuumDataIndex": "Optimizar índice",
|
"vacuumDataIndex": "Optimizar índice",
|
||||||
"vacuumDataIndexTip": "Verifique el índice de datos, libere espacio y mejore el rendimiento del índice",
|
"vacuumDataIndexTip": "Verifique el índice de datos, libere espacio y mejore el rendimiento del índice",
|
||||||
"rebuildDataIndex": "Reconstruir índice",
|
"rebuildDataIndex": "Reconstruir índice",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "Mostrar íconos de entradas",
|
"showAllEntriesIcons": "Mostrar íconos de entradas",
|
||||||
"wrapAllFields": "Ajuste automático de campos",
|
"wrapAllFields": "Ajuste automático de campos",
|
||||||
"gallery": "Tarjeta",
|
"gallery": "Tarjeta",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Nueva etiqueta",
|
"newTag": "Nueva etiqueta",
|
||||||
"pleaseWait": "Por favor, espere...",
|
"pleaseWait": "Por favor, espere...",
|
||||||
"reconnectPrompt": "Después de cambiar de aplicación, tomará algún tiempo restaurar el funcionamiento del núcleo de SiYuan. Espere unos segundos o haga clic en el botón \"Reintentar\"",
|
"reconnectPrompt": "Después de cambiar de aplicación, tomará algún tiempo restaurar el funcionamiento del núcleo de SiYuan. Espere unos segundos o haga clic en el botón \"Reintentar\"",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "Desvincular bloque",
|
"unbindBlock": "Desvincular bloque",
|
||||||
"showTitle": "Mostrar título de la base de datos",
|
"showTitle": "Mostrar título de la base de datos",
|
||||||
"fillCreated": "Hora de creación del relleno predeterminado",
|
"fillCreated": "Hora de creación del relleno predeterminado",
|
||||||
|
"fillSpecificTime": "Rellenar hora específica por defecto",
|
||||||
"removeCard": "Eliminar tarjeta flash",
|
"removeCard": "Eliminar tarjeta flash",
|
||||||
"updateLayout": "Actualizar diseño",
|
"updateLayout": "Actualizar diseño",
|
||||||
"dndFolderTip": "Tenga en cuenta que ${x} solo inserta el hipervínculo file:// y no copia el archivo",
|
"dndFolderTip": "Tenga en cuenta que ${x} solo inserta el hipervínculo file:// y no copia el archivo",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "Al purgar el almacenamiento en la nube se eliminarán por completo todas las instantáneas sin referencia y los objetos de datos relacionados.<ul class='fn__list'><li>Asegúrese de que otros dispositivos hayan pausado la sincronización antes de la ejecución</li><li>La operación de purga requiere mucho tiempo; asegúrese de que la red esté estable</li></ul>¿Está seguro de ejecutarla ahora?",
|
"cloudStoragePurgeConfirm": "Al purgar el almacenamiento en la nube se eliminarán por completo todas las instantáneas sin referencia y los objetos de datos relacionados.<ul class='fn__list'><li>Asegúrese de que otros dispositivos hayan pausado la sincronización antes de la ejecución</li><li>La operación de purga requiere mucho tiempo; asegúrese de que la red esté estable</li></ul>¿Está seguro de ejecutarla ahora?",
|
||||||
"dragFill": "Arrastra verticalmente para llenar valores",
|
"dragFill": "Arrastra verticalmente para llenar valores",
|
||||||
"switchReadonly": "Cambiar modo de sólo lectura",
|
"switchReadonly": "Cambiar modo de sólo lectura",
|
||||||
"original": "Original",
|
"original": "Mostrar valor original",
|
||||||
|
"uniqueValues": "Mostrar valores únicos",
|
||||||
"selectRelation": "Seleccione primero la columna relacionada",
|
"selectRelation": "Seleccione primero la columna relacionada",
|
||||||
"backRelation": "Bidireccional",
|
"backRelation": "Bidireccional",
|
||||||
"thisDatabase": "Esta base de datos",
|
"thisDatabase": "Esta base de datos",
|
||||||
"relatedTo": "Relación con",
|
"relatedTo": "Relación con",
|
||||||
"relation": "Relación",
|
"relation": "Relación",
|
||||||
|
"relatedItems": "Elementos relacionados",
|
||||||
"rollup": "Acumular",
|
"rollup": "Acumular",
|
||||||
"rollupProperty": "Propiedad",
|
"rollupProperty": "Propiedad",
|
||||||
"rollupCalc": "Calcular",
|
"rollupCalc": "Calcular",
|
||||||
|
|
@ -187,7 +205,7 @@
|
||||||
"imgSrc": "Enlace de imagen",
|
"imgSrc": "Enlace de imagen",
|
||||||
"aText": "Texto ancla del enlace",
|
"aText": "Texto ancla del enlace",
|
||||||
"aTitle": "Título del enlace",
|
"aTitle": "Título del enlace",
|
||||||
"aHref": "Enlace enlace",
|
"aHref": "URL del enlace",
|
||||||
"code": "código en línea",
|
"code": "código en línea",
|
||||||
"em": "Cursiva",
|
"em": "Cursiva",
|
||||||
"strong": "negrita",
|
"strong": "negrita",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "Bloque de fórmulas",
|
"mathBlock": "Bloque de fórmulas",
|
||||||
"htmlBlock": "bloque HTML"
|
"htmlBlock": "bloque HTML"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "Copiar URL del enlace",
|
||||||
"selected": "Seleccionado",
|
"selected": "Seleccionado",
|
||||||
"loadMore": "Cargar más",
|
"loadMore": "Cargar más",
|
||||||
"tempUnlock": "Desbloquear temporalmente",
|
"tempUnlock": "Desbloquear temporalmente",
|
||||||
"cancelTempUnlock": "Cancelar desbloqueo temporal",
|
"cancelTempUnlock": "Cancelar desbloqueo temporal",
|
||||||
"addFilter": "Agregar filtro",
|
"addFilter": "Agregar filtro",
|
||||||
"removeFilters": "Borrar filtro",
|
"removeFilters": "Borrar filtro",
|
||||||
|
"addSort": "Agregar ordenación",
|
||||||
|
"removeSorts": "Borrar ordenación",
|
||||||
"checked": "marcado",
|
"checked": "marcado",
|
||||||
"unchecked": "desmarcado",
|
"unchecked": "desmarcado",
|
||||||
"percentChecked": "Porcentaje comprobado",
|
"percentChecked": "Porcentaje comprobado",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "Importación completada",
|
"imported": "Importación completada",
|
||||||
"mirrorTip": "Base de datos espejo, todas las actualizaciones de datos se sincronizarán con todos los demás espejos",
|
"mirrorTip": "Base de datos espejo, todas las actualizaciones de datos se sincronizarán con todos los demás espejos",
|
||||||
"includeTime": "Incluir tiempo",
|
"includeTime": "Incluir tiempo",
|
||||||
"accountSupport1": "Desde su primer lanzamiento público el 31 de agosto de 2020, SiYuan se ha publicado un total de 776 veces, ha resuelto los requisitos y comentarios de los usuarios 13840 veces y ha enviado código 17637 veces. No podemos prescindir de su apoyo y comentarios.",
|
"accountSupport1": "Desde su primer lanzamiento público el 31 de agosto de 2020, SiYuan se ha publicado más de 830 veces, ha resuelto los requisitos y comentarios de los usuarios más de 15000 veces y ha enviado código más de 19800 veces. No podemos prescindir de su apoyo y comentarios.",
|
||||||
"accountSupport2": "Su apoyo y comentarios permitirán a SiYuan desarrollarse y desarrollarse mejor. Siempre seremos amigos de los usuarios, trabajaremos duro para mejorar los productos y brindarle una mejor experiencia de gestión del conocimiento. ¡Muchas gracias por tu apoyo!",
|
"accountSupport2": "Su apoyo y comentarios permitirán a SiYuan desarrollarse y desarrollarse mejor. Siempre seremos amigos de los usuarios, trabajaremos duro para mejorar los productos y brindarle una mejor experiencia de gestión del conocimiento. ¡Muchas gracias por tu apoyo!",
|
||||||
"goToTab1": "Ir a la pestaña #1",
|
"goToTab1": "Ir a la pestaña #1",
|
||||||
"goToTab2": "Ir a la pestaña #2",
|
"goToTab2": "Ir a la pestaña #2",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "Después de habilitar los bloques incrustados, se mostrarán migas de pan, incrustar bloques en superbloques ignora esta opción y nunca muestra migas de pan",
|
"embedBlockBreadcrumbTip": "Después de habilitar los bloques incrustados, se mostrarán migas de pan, incrustar bloques en superbloques ignora esta opción y nunca muestra migas de pan",
|
||||||
"appearanceMode": "Modo de apariencia",
|
"appearanceMode": "Modo de apariencia",
|
||||||
"editReadonly": "Modo de solo lectura",
|
"editReadonly": "Modo de solo lectura",
|
||||||
"editReadonlyTip": "Después de habilitarlo, el documento será de solo lectura por defecto",
|
"editReadonlyTip": "Después de habilitarlo, el editor de documentos será de solo lectura por defecto. Aún puedes buscar y reemplazar texto, modificar contenido a través de la API",
|
||||||
"generateConflictDoc": "Generar documentación de conflicto al sincronizar conflictos",
|
"generateConflictDoc": "Generar documentación de conflicto al sincronizar conflictos",
|
||||||
"generateConflictDocTip": "Después de habilitarlo, se generará un documento de conflicto cuando ocurra un conflicto de sincronización, para que pueda abrirse y verse directamente. Ya sea que esté habilitado o no, el [Historial de datos] registrará el documento de conflicto",
|
"generateConflictDocTip": "Después de habilitarlo, se generará un documento de conflicto cuando ocurra un conflicto de sincronización, para que pueda abrirse y verse directamente. Ya sea que esté habilitado o no, el [Historial de datos] registrará el documento de conflicto",
|
||||||
"deleteOpConfirm": "⚠️ Confirmación de operación de eliminación",
|
"deleteOpConfirm": "⚠️ Confirmación de operación de eliminación",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "Utilice el formato de objeto JSON (<code class='fn__code'>{}</code>) para envolver definiciones de macro, por ejemplo, <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
"katexMacrosTip": "Utilice el formato de objeto JSON (<code class='fn__code'>{}</code>) para envolver definiciones de macro, por ejemplo, <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
||||||
"systemLogTip": "Los registros de ejecución del programa se guardan en el registro del sistema. Al exportar el registro del sistema y enviarlo a los desarrolladores, puede ayudarlos a diagnosticar mejor los problemas del programa",
|
"systemLogTip": "Los registros de ejecución del programa se guardan en el registro del sistema. Al exportar el registro del sistema y enviarlo a los desarrolladores, puede ayudarlos a diagnosticar mejor los problemas del programa",
|
||||||
"systemLog": "Registro del sistema",
|
"systemLog": "Registro del sistema",
|
||||||
"syncConfGuide1": "Inicializar clave de sincronización",
|
"syncConfGuide1": "Inicializar clave del repositorio de datos",
|
||||||
"syncConfGuide2": "Esta clave se utiliza para el cifrado de extremo a extremo de sincronización de datos<br>La clave se genera en función de la contraseña que ingresa, recuerde la contraseña",
|
"syncConfGuide2": "Esta clave se utiliza para el cifrado de extremo a extremo de sincronización de datos<br>La clave se genera en función de la contraseña que ingresa, recuerde la contraseña",
|
||||||
"syncConfGuide3": "El directorio de sincronización en la nube se utiliza para almacenar los datos cifrados correspondientes al espacio de trabajo actual. El nombre predeterminado es <code>main</code>. Si solo tiene un espacio de trabajo para sincronizar, agregue y use <code>main</code> directamente.",
|
"syncConfGuide3": "El directorio de sincronización en la nube se utiliza para almacenar los datos cifrados correspondientes al espacio de trabajo actual. El nombre predeterminado es <code>main</code>. Si solo tiene un espacio de trabajo para sincronizar, agregue y use <code>main</code> directamente.",
|
||||||
"syncConfGuide4": "¿Sincronizar ahora?",
|
"syncConfGuide4": "¿Sincronizar ahora?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "Texto de anclaje dinámico",
|
"turnToDynamic": "Texto de anclaje dinámico",
|
||||||
"sizeLimit": "Límite",
|
"sizeLimit": "Límite",
|
||||||
"trafficStat": "Estadísticas de tráfico",
|
"trafficStat": "Estadísticas de tráfico",
|
||||||
"hideHeadingBelowBlocks": "Ocultar bloques por debajo del encabezamiento",
|
"headingEmbedMode": "Configuración de incrustación de bloque de encabezado",
|
||||||
|
"headingEmbedModeTip": "Establecer el estilo de visualización de los bloques de encabezado en los bloques incrustados",
|
||||||
|
"showHeadingWithBlocks": "Mostrar encabezado con bloques debajo",
|
||||||
|
"showHeadingOnlyTitle": "Mostrar solo el encabezado",
|
||||||
|
"showHeadingOnlyBlocks": "Mostrar solo bloques debajo del encabezado",
|
||||||
"matchDiacritics": " Hacer coincidir los diacríticos",
|
"matchDiacritics": " Hacer coincidir los diacríticos",
|
||||||
"copyHPath": "Copiar ruta legible",
|
"copyHPath": "Copiar ruta legible",
|
||||||
"justify": "Justificar",
|
"justify": "Justificar",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "Encabezado 4",
|
"heading4": "Encabezado 4",
|
||||||
"heading5": "Encabezado 5",
|
"heading5": "Encabezado 5",
|
||||||
"heading6": "Encabezado 6",
|
"heading6": "Encabezado 6",
|
||||||
|
"outlineExpandLevel": "Nivel de expansión",
|
||||||
|
"expandAll": "Expandir todo",
|
||||||
|
"outlineKeepCurrentExpand": "Mantener la expansión actual",
|
||||||
"general": "General",
|
"general": "General",
|
||||||
"insertBefore": "Inserta un bloque vacío antes del bloque donde está el cursor",
|
|
||||||
"insertAfter": "Inserta un bloque vacío después del bloque donde se encuentra el cursor",
|
|
||||||
"list1": "Lista",
|
"list1": "Lista",
|
||||||
"element": "elemento",
|
"element": "elemento",
|
||||||
"closeTab": "Cerrar pestaña actual",
|
"closeTab": "Cerrar pestaña actual",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "sangría",
|
"indent": "sangría",
|
||||||
"info": "Información",
|
"info": "Información",
|
||||||
"inline-code": "Código Inline",
|
"inline-code": "Código Inline",
|
||||||
"insert-after": "Insertar bloque después",
|
"insertAfter": "Insertar bloque debajo",
|
||||||
"insert-before": "Insertar bloque antes",
|
"insertBefore": "Insertar bloque arriba",
|
||||||
"insertColumnLeft": "Insertar 1 a la izquierda",
|
"insertColumnLeft": "Insertar 1 a la izquierda",
|
||||||
"insertColumnRight": "Insertar 1 derecha",
|
"insertColumnRight": "Insertar 1 derecha",
|
||||||
"insertRowAbove": "Insertar 1 arriba",
|
"insertRowAbove": "Insertar 1 arriba",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tabla",
|
"table": "Tabla",
|
||||||
"gallery": "Tarjeta",
|
"gallery": "Tarjeta",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Clave principal",
|
"key": "Clave principal",
|
||||||
"select": "Selección"
|
"select": "Selección"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "Este bloque ya ha sido añadido a la base de datos [%s]",
|
"269": "Este bloque ya ha sido añadido a la base de datos [%s]",
|
||||||
"270": "Optimizando el índice de datos, por favor espere...",
|
"270": "Optimizando el índice de datos, por favor espere...",
|
||||||
"271": "Optimización del índice de datos completada, se liberaron [%s] de espacio en disco",
|
"271": "Optimización del índice de datos completada, se liberaron [%s] de espacio en disco",
|
||||||
"272": "Campo sin nombre"
|
"272": "Campo sin nombre",
|
||||||
|
"273": "No cree el espacio de trabajo en la ruta raíz de la partición, cree una nueva carpeta como espacio de trabajo",
|
||||||
|
"274": "Esta carpeta contiene otros archivos, cree una nueva carpeta como espacio de trabajo"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "Imprimer",
|
||||||
|
"clickArrow": "Cliquez sur la flèche",
|
||||||
|
"foldAll": "Tout replier",
|
||||||
|
"expandSameLevelHeading": "Développer les titres du même niveau",
|
||||||
|
"foldSameLevelHeading": "Replier les titres du même niveau",
|
||||||
|
"expandChildHeading": "Développer les sous-titres",
|
||||||
|
"foldChildHeading": "Replier les sous-titres",
|
||||||
|
"addChildHeading": "Ajouter un sous-titre",
|
||||||
|
"insertSameLevelHeadingBefore": "Insérer un titre du même niveau avant",
|
||||||
|
"insertSameLevelHeadingAfter": "Insérer un titre du même niveau après",
|
||||||
|
"upgrade": "Mettre à niveau",
|
||||||
|
"downgrade": "Rétrograder",
|
||||||
|
"clipboardPermissionDenied": "Permission du presse-papiers refusée. Veuillez autoriser l'accès au presse-papiers dans la barre d'adresse du navigateur, puis réessayez.",
|
||||||
|
"jumpTo": "Aller à",
|
||||||
"vacuumDataIndex": "Optimiser l'index",
|
"vacuumDataIndex": "Optimiser l'index",
|
||||||
"vacuumDataIndexTip": "Vérifiez l'index des données, libérez de l'espace et améliorez les performances de l'index",
|
"vacuumDataIndexTip": "Vérifiez l'index des données, libérez de l'espace et améliorez les performances de l'index",
|
||||||
"rebuildDataIndex": "Reconstruire l'index",
|
"rebuildDataIndex": "Reconstruire l'index",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "Afficher les icônes des entrées",
|
"showAllEntriesIcons": "Afficher les icônes des entrées",
|
||||||
"wrapAllFields": "Retour automatique des champs",
|
"wrapAllFields": "Retour automatique des champs",
|
||||||
"gallery": "Carte",
|
"gallery": "Carte",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Nouvelle étiquette",
|
"newTag": "Nouvelle étiquette",
|
||||||
"pleaseWait": "Veuillez patienter...",
|
"pleaseWait": "Veuillez patienter...",
|
||||||
"reconnectPrompt": "Après avoir changé d'application, il faudra un certain temps pour rétablir le fonctionnement du noyau SiYuan. Veuillez patienter quelques secondes ou cliquer sur le bouton « Réessayer »",
|
"reconnectPrompt": "Après avoir changé d'application, il faudra un certain temps pour rétablir le fonctionnement du noyau SiYuan. Veuillez patienter quelques secondes ou cliquer sur le bouton « Réessayer »",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "Dissocier le bloc",
|
"unbindBlock": "Dissocier le bloc",
|
||||||
"showTitle": "Afficher le titre de la base de données",
|
"showTitle": "Afficher le titre de la base de données",
|
||||||
"fillCreated": "Heure de création de remplissage par défaut",
|
"fillCreated": "Heure de création de remplissage par défaut",
|
||||||
|
"fillSpecificTime": "Remplir l'heure spécifique par défaut",
|
||||||
"removeCard": "Supprimer la flashcard",
|
"removeCard": "Supprimer la flashcard",
|
||||||
"updateLayout": "Mettre à jour la mise en page",
|
"updateLayout": "Mettre à jour la mise en page",
|
||||||
"dndFolderTip": "Veuillez noter que ${x} insère uniquement le lien hypertexte file:// et ne copie pas le fichier",
|
"dndFolderTip": "Veuillez noter que ${x} insère uniquement le lien hypertexte file:// et ne copie pas le fichier",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "La purge du stockage cloud supprimera complètement tous les instantanés non référencés et les objets de données associés. <ul class='fn__list'><li>Veuillez vous assurer que la synchronisation des autres appareils a été suspendue avant l'exécution</li><li>L'opération de purge prend beaucoup de temps, veuillez vous assurer que le réseau est stable</li></ul>Êtes-vous sûr de l'exécuter maintenant ?",
|
"cloudStoragePurgeConfirm": "La purge du stockage cloud supprimera complètement tous les instantanés non référencés et les objets de données associés. <ul class='fn__list'><li>Veuillez vous assurer que la synchronisation des autres appareils a été suspendue avant l'exécution</li><li>L'opération de purge prend beaucoup de temps, veuillez vous assurer que le réseau est stable</li></ul>Êtes-vous sûr de l'exécuter maintenant ?",
|
||||||
"dragFill": "Faites glisser verticalement pour remplir les valeurs",
|
"dragFill": "Faites glisser verticalement pour remplir les valeurs",
|
||||||
"switchReadonly": "Changer de mode lecture seule",
|
"switchReadonly": "Changer de mode lecture seule",
|
||||||
"original": "Originale",
|
"original": "Afficher la valeur d'origine",
|
||||||
|
"uniqueValues": "Afficher les valeurs uniques",
|
||||||
"selectRelation": "Veuillez d'abord sélectionner la colonne associée",
|
"selectRelation": "Veuillez d'abord sélectionner la colonne associée",
|
||||||
"backRelation": "Bidirectionnel",
|
"backRelation": "Bidirectionnel",
|
||||||
"thisDatabase": "Cette base de données",
|
"thisDatabase": "Cette base de données",
|
||||||
"relatedTo": " Relation avec ",
|
"relatedTo": " Relation avec ",
|
||||||
"relation": "Relation",
|
"relation": "Relation",
|
||||||
|
"relatedItems": "Éléments liés",
|
||||||
"rollup": "Rollup",
|
"rollup": "Rollup",
|
||||||
"rollupProperty": "Propriété",
|
"rollupProperty": "Propriété",
|
||||||
"rollupCalc": "Calculer",
|
"rollupCalc": "Calculer",
|
||||||
|
|
@ -187,7 +205,7 @@
|
||||||
"imgSrc": "Lien image",
|
"imgSrc": "Lien image",
|
||||||
"aText": "Texte d'ancrage du lien",
|
"aText": "Texte d'ancrage du lien",
|
||||||
"aTitle": "Titre du lien",
|
"aTitle": "Titre du lien",
|
||||||
"aHref": "Lien lien",
|
"aHref": "URL du lien",
|
||||||
"code": "code en ligne",
|
"code": "code en ligne",
|
||||||
"em": "Italique",
|
"em": "Italique",
|
||||||
"strong": "Audacieux",
|
"strong": "Audacieux",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "Bloc de formule",
|
"mathBlock": "Bloc de formule",
|
||||||
"htmlBlock": "Bloc HTML"
|
"htmlBlock": "Bloc HTML"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "Copier l'URL du lien",
|
||||||
"selected": "Sélectionné",
|
"selected": "Sélectionné",
|
||||||
"loadMore": "Charger plus",
|
"loadMore": "Charger plus",
|
||||||
"tempUnlock": "Déverrouiller temporairement",
|
"tempUnlock": "Déverrouiller temporairement",
|
||||||
"cancelTempUnlock": "Annuler le déverrouillage temporaire",
|
"cancelTempUnlock": "Annuler le déverrouillage temporaire",
|
||||||
"addFilter": "Ajouter un filtre",
|
"addFilter": "Ajouter un filtre",
|
||||||
"removeFilters": "Effacer le filtre",
|
"removeFilters": "Effacer le filtre",
|
||||||
|
"addSort": "Ajouter un tri",
|
||||||
|
"removeSorts": "Effacer le tri",
|
||||||
"checked": "Coché",
|
"checked": "Coché",
|
||||||
"unchecked": "Décoché",
|
"unchecked": "Décoché",
|
||||||
"percentChecked": "Pourcentage vérifié",
|
"percentChecked": "Pourcentage vérifié",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "Importation terminée",
|
"imported": "Importation terminée",
|
||||||
"mirrorTip": "Base de données miroir, toutes les mises à jour des données seront synchronisées avec tous les autres miroirs",
|
"mirrorTip": "Base de données miroir, toutes les mises à jour des données seront synchronisées avec tous les autres miroirs",
|
||||||
"includeTime": "Inclure l'heure",
|
"includeTime": "Inclure l'heure",
|
||||||
"accountSupport1": "Depuis sa première version publique le 31 août 2020, SiYuan a été publié 776 fois au total, a répondu aux exigences et aux commentaires des utilisateurs 13840 fois et a soumis du code 17637 fois. Nous ne pouvons pas nous passer de votre soutien et de vos commentaires.",
|
"accountSupport1": "Depuis sa première version publique le 31 août 2020, SiYuan a été publié plus de 830 fois au total, a répondu aux exigences et aux commentaires des utilisateurs plus de 15000 fois et a soumis du code plus de 19800 fois. Nous ne pouvons pas nous passer de votre soutien et de vos commentaires.",
|
||||||
"accountSupport2": "Votre soutien et vos retours permettront à SiYuan de se développer et de mieux se développer. Nous serons toujours amis avec les utilisateurs, travaillerons dur pour améliorer les produits et vous offrirons une meilleure expérience de gestion des connaissances. Merci beaucoup pour votre soutient!",
|
"accountSupport2": "Votre soutien et vos retours permettront à SiYuan de se développer et de mieux se développer. Nous serons toujours amis avec les utilisateurs, travaillerons dur pour améliorer les produits et vous offrirons une meilleure expérience de gestion des connaissances. Merci beaucoup pour votre soutient!",
|
||||||
"goToTab1": "Aller à l'onglet #1",
|
"goToTab1": "Aller à l'onglet #1",
|
||||||
"goToTab2": "Aller à l'onglet #2",
|
"goToTab2": "Aller à l'onglet #2",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "Après avoir activé l'intégration, les blocs afficheront le fil d'Ariane, intégrer des blocs dans des super blocs ignorent cette option et n'affichent jamais le fil d'Ariane",
|
"embedBlockBreadcrumbTip": "Après avoir activé l'intégration, les blocs afficheront le fil d'Ariane, intégrer des blocs dans des super blocs ignorent cette option et n'affichent jamais le fil d'Ariane",
|
||||||
"appearanceMode": "Mode d'apparence",
|
"appearanceMode": "Mode d'apparence",
|
||||||
"editReadonly": "Mode lecture seule",
|
"editReadonly": "Mode lecture seule",
|
||||||
"editReadonlyTip": "Lorsqu'il est activé, le document sera en lecture seule par défaut",
|
"editReadonlyTip": "Lorsqu'il est activé, l'éditeur de document sera en lecture seule par défaut. Vous pouvez toujours rechercher et remplacer du texte, modifier le contenu via l'API",
|
||||||
"generateConflictDoc": "Générer une documentation sur les conflits lors de la synchronisation des conflits",
|
"generateConflictDoc": "Générer une documentation sur les conflits lors de la synchronisation des conflits",
|
||||||
"generateConflictDocTip": "Lorsqu'il est activé, un document de conflit sera généré lorsqu'un conflit de synchronisation se produit, afin qu'il puisse être ouvert et visualisé directement. Qu'il soit activé ou non, l'historique des données enregistrera le document de conflit",
|
"generateConflictDocTip": "Lorsqu'il est activé, un document de conflit sera généré lorsqu'un conflit de synchronisation se produit, afin qu'il puisse être ouvert et visualisé directement. Qu'il soit activé ou non, l'historique des données enregistrera le document de conflit",
|
||||||
"deleteOpConfirm": "⚠️ Supprimer la confirmation de l'opération",
|
"deleteOpConfirm": "⚠️ Supprimer la confirmation de l'opération",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "Veuillez utiliser le format d'objet JSON (<code class='fn__code'>{}</code>) pour envelopper les définitions de macro, par exemple <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
"katexMacrosTip": "Veuillez utiliser le format d'objet JSON (<code class='fn__code'>{}</code>) pour envelopper les définitions de macro, par exemple <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
||||||
"systemLogTip": "Les enregistrements en cours d'exécution du programme sont enregistrés dans le journal système. En exportant le journal système et en l'envoyant aux développeurs, cela peut mieux aider les développeurs à diagnostiquer les problèmes du programme",
|
"systemLogTip": "Les enregistrements en cours d'exécution du programme sont enregistrés dans le journal système. En exportant le journal système et en l'envoyant aux développeurs, cela peut mieux aider les développeurs à diagnostiquer les problèmes du programme",
|
||||||
"systemLog": "Journal du système",
|
"systemLog": "Journal du système",
|
||||||
"syncConfGuide1": "Initialiser la clé de synchronisation",
|
"syncConfGuide1": "Initialiser la clé de référentiel de données",
|
||||||
"syncConfGuide2": "Cette clé est utilisée pour le chiffrement de bout en bout de la synchronisation des données<br> La clé est générée en fonction du mot de passe que vous saisissez, veuillez vous souvenir du mot de passe",
|
"syncConfGuide2": "Cette clé est utilisée pour le chiffrement de bout en bout de la synchronisation des données<br> La clé est générée en fonction du mot de passe que vous saisissez, veuillez vous souvenir du mot de passe",
|
||||||
"syncConfGuide3": "Le répertoire de synchronisation cloud est utilisé pour stocker les données chiffrées correspondant à l'espace de travail actuel. Le nom par défaut est <code>main</code>. Si vous n'avez qu'un seul espace de travail à synchroniser, ajoutez et utilisez <code>main</code> directement",
|
"syncConfGuide3": "Le répertoire de synchronisation cloud est utilisé pour stocker les données chiffrées correspondant à l'espace de travail actuel. Le nom par défaut est <code>main</code>. Si vous n'avez qu'un seul espace de travail à synchroniser, ajoutez et utilisez <code>main</code> directement",
|
||||||
"syncConfGuide4": "Synchroniser maintenant ?",
|
"syncConfGuide4": "Synchroniser maintenant ?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "Texte d'ancrage dynamique",
|
"turnToDynamic": "Texte d'ancrage dynamique",
|
||||||
"sizeLimit": "Limite",
|
"sizeLimit": "Limite",
|
||||||
"trafficStat": "Statistiques de trafic",
|
"trafficStat": "Statistiques de trafic",
|
||||||
"hideHeadingBelowBlocks": "Masquer les blocs sous l'en-tête",
|
"headingEmbedMode": "Paramètres d'intégration de bloc de titre",
|
||||||
|
"showHeadingWithBlocks": "Afficher l'en-tête avec les blocs en dessous",
|
||||||
|
"showHeadingOnlyTitle": "Afficher uniquement l'en-tête",
|
||||||
|
"showHeadingOnlyBlocks": "Afficher uniquement les blocs sous l'en-tête",
|
||||||
|
"headingEmbedModeTip": "Définir le style d'affichage des blocs de titre dans les blocs intégrés",
|
||||||
"matchDiacritics": "Respecter les accents et diacritiques",
|
"matchDiacritics": "Respecter les accents et diacritiques",
|
||||||
"copyHPath": "Copier le chemin lisible",
|
"copyHPath": "Copier le chemin lisible",
|
||||||
"justify": "Justifier",
|
"justify": "Justifier",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "Titre 4",
|
"heading4": "Titre 4",
|
||||||
"heading5": "Titre 5",
|
"heading5": "Titre 5",
|
||||||
"heading6": "Titre 6",
|
"heading6": "Titre 6",
|
||||||
|
"outlineExpandLevel": "Niveau d'expansion",
|
||||||
|
"expandAll": "Tout développer",
|
||||||
|
"outlineKeepCurrentExpand": "Maintenir le titre actuel développé",
|
||||||
"general": "Général",
|
"general": "Général",
|
||||||
"insertBefore": "Insérer un bloc vide devant le bloc où se trouve le curseur",
|
|
||||||
"insertAfter": "Insérer un bloc vide après le bloc où se trouve le curseur",
|
|
||||||
"list1": "Liste",
|
"list1": "Liste",
|
||||||
"element": "élément",
|
"element": "élément",
|
||||||
"closeTab": "Fermer l'onglet actuel",
|
"closeTab": "Fermer l'onglet actuel",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "Retrait de liste",
|
"indent": "Retrait de liste",
|
||||||
"info": "Info",
|
"info": "Info",
|
||||||
"inline-code": "Inline Code",
|
"inline-code": "Inline Code",
|
||||||
"insert-after": "Insérer un bloc après",
|
"insertAfter": "Insérer un bloc en dessous",
|
||||||
"insert-before": "Insérer un bloc avant",
|
"insertBefore": "Insérer un bloc au-dessus",
|
||||||
"insertColumnLeft": "Insérer 1 gauche",
|
"insertColumnLeft": "Insérer 1 gauche",
|
||||||
"insertColumnRight": "Insérer 1 droite",
|
"insertColumnRight": "Insérer 1 droite",
|
||||||
"insertRowAbove": "Insérer 1 ci-dessus",
|
"insertRowAbove": "Insérer 1 ci-dessus",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tableau",
|
"table": "Tableau",
|
||||||
"gallery": "Carte",
|
"gallery": "Carte",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Clé primaire",
|
"key": "Clé primaire",
|
||||||
"select": "Sélectionner"
|
"select": "Sélectionner"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "Ce bloc a déjà été ajouté à la base de données [%s]",
|
"269": "Ce bloc a déjà été ajouté à la base de données [%s]",
|
||||||
"270": "Optimisation de l'index des données en cours, veuillez patienter...",
|
"270": "Optimisation de l'index des données en cours, veuillez patienter...",
|
||||||
"271": "Optimisation de l'index des données terminée, [%s] d'espace disque libéré",
|
"271": "Optimisation de l'index des données terminée, [%s] d'espace disque libéré",
|
||||||
"272": "Champ sans nom"
|
"272": "Champ sans nom",
|
||||||
|
"273": "Ne créez pas l’espace de travail à la racine de la partition, créez un nouveau dossier comme espace de travail",
|
||||||
|
"274": "Ce dossier contient d’autres fichiers, créez un nouveau dossier comme espace de travail"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "הדפס",
|
||||||
|
"clickArrow": "לחץ על החץ",
|
||||||
|
"foldAll": "קפל הכל",
|
||||||
|
"expandSameLevelHeading": "הרחב כותרות באותו רמה",
|
||||||
|
"foldSameLevelHeading": "קפל כותרות באותו רמה",
|
||||||
|
"expandChildHeading": "הרחב כותרות משנה",
|
||||||
|
"foldChildHeading": "קפל כותרות משנה",
|
||||||
|
"addChildHeading": "הוסף כותרת משנה",
|
||||||
|
"insertSameLevelHeadingBefore": "הוסף כותרת באותו רמה לפני",
|
||||||
|
"insertSameLevelHeadingAfter": "הוסף כותרת באותו רמה אחרי",
|
||||||
|
"upgrade": "שדרג",
|
||||||
|
"downgrade": "הורד רמה",
|
||||||
|
"clipboardPermissionDenied": "ההרשאה ללוח נדחתה. אפשר גישה ללוח משורת הכתובת בדפדפן ונסה שוב.",
|
||||||
|
"jumpTo": "קפוץ אל",
|
||||||
"vacuumDataIndex": "אופטימיזציית אינדקס",
|
"vacuumDataIndex": "אופטימיזציית אינדקס",
|
||||||
"vacuumDataIndexTip": "בדוק את אינדקס הנתונים, שחרר שטח אחסון ושפר את ביצועי האינדקס",
|
"vacuumDataIndexTip": "בדוק את אינדקס הנתונים, שחרר שטח אחסון ושפר את ביצועי האינדקס",
|
||||||
"rebuildDataIndex": "בנה מחדש את האינדקס",
|
"rebuildDataIndex": "בנה מחדש את האינדקס",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "הצג סמלי כניסות",
|
"showAllEntriesIcons": "הצג סמלי כניסות",
|
||||||
"wrapAllFields": "עטיפת שדות אוטומטית",
|
"wrapAllFields": "עטיפת שדות אוטומטית",
|
||||||
"gallery": "כרטיס",
|
"gallery": "כרטיס",
|
||||||
|
"kanban": "קאנבן",
|
||||||
"newTag": "תג חדש",
|
"newTag": "תג חדש",
|
||||||
"pleaseWait": "אנא המתן...",
|
"pleaseWait": "אנא המתן...",
|
||||||
"reconnectPrompt": "לאחר מעבר בין יישומים, יידרש זמן מה כדי לשחזר את פעולת ליבת SiYuan. אנא המתן מספר שניות או לחץ על כפתור \"נסה שוב\"",
|
"reconnectPrompt": "לאחר מעבר בין יישומים, יידרש זמן מה כדי לשחזר את פעולת ליבת SiYuan. אנא המתן מספר שניות או לחץ על כפתור \"נסה שוב\"",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "שחרר בלוק",
|
"unbindBlock": "שחרר בלוק",
|
||||||
"showTitle": "הצג כותרת מסד נתונים",
|
"showTitle": "הצג כותרת מסד נתונים",
|
||||||
"fillCreated": "מלא את זמן היצירה ברירת מחדל",
|
"fillCreated": "מלא את זמן היצירה ברירת מחדל",
|
||||||
|
"fillSpecificTime": "מילוי זמן מסוים כברירת מחדל",
|
||||||
"removeCard": "הסר כרטיסון",
|
"removeCard": "הסר כרטיסון",
|
||||||
"updateLayout": "עדכן עימוד",
|
"updateLayout": "עדכן עימוד",
|
||||||
"dndFolderTip": "שים לב כי ${x} ניחש את ה-hyperlink file:// ואינו מעתיק את הקובץ",
|
"dndFolderTip": "שים לב כי ${x} ניחש את ה-hyperlink file:// ואינו מעתיק את הקובץ",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "ניקוי האחסון בענן ימחוק לחלוטין את כל הצילומים הלא מתייחסים וכל האובייקטים הנתונים הקשורים. <ul class='fn__list'><li>אנא ודא שהמכשירים האחרים הפסיקו סנכרון לפני הביצוע</li><li>הניקוי מאוד לוקח זמן, אנא ודא שהרשת יציבה</li></ul>האם אתה בטוח לבצע את זה עכשיו?",
|
"cloudStoragePurgeConfirm": "ניקוי האחסון בענן ימחוק לחלוטין את כל הצילומים הלא מתייחסים וכל האובייקטים הנתונים הקשורים. <ul class='fn__list'><li>אנא ודא שהמכשירים האחרים הפסיקו סנכרון לפני הביצוע</li><li>הניקוי מאוד לוקח זמן, אנא ודא שהרשת יציבה</li></ul>האם אתה בטוח לבצע את זה עכשיו?",
|
||||||
"dragFill": "גרור אנכית כדי למלא ערכים",
|
"dragFill": "גרור אנכית כדי למלא ערכים",
|
||||||
"switchReadonly": "עבר למצב קריאה בלבד",
|
"switchReadonly": "עבר למצב קריאה בלבד",
|
||||||
"original": "מקורי",
|
"original": "הצג ערך מקורי",
|
||||||
|
"uniqueValues": "הצג ערכים ייחודיים",
|
||||||
"selectRelation": "אנא בחר קודם את העמודה הקשורה",
|
"selectRelation": "אנא בחר קודם את העמודה הקשורה",
|
||||||
"backRelation": "דו-כיווני",
|
"backRelation": "דו-כיווני",
|
||||||
"thisDatabase": "בסיס הנתונים הזה",
|
"thisDatabase": "בסיס הנתונים הזה",
|
||||||
"relatedTo": "קשר ל",
|
"relatedTo": "קשר ל",
|
||||||
"relation": "קשר",
|
"relation": "קשר",
|
||||||
|
"relatedItems": "פריטים קשורים",
|
||||||
"rollup": "סיכום",
|
"rollup": "סיכום",
|
||||||
"rollupProperty": "מאפיין",
|
"rollupProperty": "מאפיין",
|
||||||
"rollupCalc": "חישוב",
|
"rollupCalc": "חישוב",
|
||||||
|
|
@ -187,7 +205,7 @@
|
||||||
"imgSrc": "קישור לתמונה",
|
"imgSrc": "קישור לתמונה",
|
||||||
"aText": "טקסט עוגן לייב",
|
"aText": "טקסט עוגן לייב",
|
||||||
"aTitle": "כותרת הקישור",
|
"aTitle": "כותרת הקישור",
|
||||||
"aHref": "קישור",
|
"aHref": "כתובת URL",
|
||||||
"code": "קוד פנימי",
|
"code": "קוד פנימי",
|
||||||
"em": "מוטה",
|
"em": "מוטה",
|
||||||
"strong": "מודגש",
|
"strong": "מודגש",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "בלוק מתמטיקה",
|
"mathBlock": "בלוק מתמטיקה",
|
||||||
"htmlBlock": "בלוק HTML"
|
"htmlBlock": "בלוק HTML"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "העתק כתובת URL של קישור",
|
||||||
"selected": "נבחר",
|
"selected": "נבחר",
|
||||||
"loadMore": "טען עוד",
|
"loadMore": "טען עוד",
|
||||||
"tempUnlock": "שחרור זמני",
|
"tempUnlock": "שחרור זמני",
|
||||||
"cancelTempUnlock": "בטל שחרור זמני",
|
"cancelTempUnlock": "בטל שחרור זמני",
|
||||||
"addFilter": "הוסף מסנן",
|
"addFilter": "הוסף מסנן",
|
||||||
"removeFilters": "נקה מסננים",
|
"removeFilters": "נקה מסננים",
|
||||||
|
"addSort": "הוסף מיון",
|
||||||
|
"removeSorts": "נקה מיון",
|
||||||
"checked": "נבדק",
|
"checked": "נבדק",
|
||||||
"unchecked": "לא נבדק",
|
"unchecked": "לא נבדק",
|
||||||
"percentChecked": "אחוז נבדק",
|
"percentChecked": "אחוז נבדק",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "ייבוא הושלם",
|
"imported": "ייבוא הושלם",
|
||||||
"mirrorTip": "מסד נתונים מראה, כל עדכון נתונים יסונכרן עם כל שאר המראות",
|
"mirrorTip": "מסד נתונים מראה, כל עדכון נתונים יסונכרן עם כל שאר המראות",
|
||||||
"includeTime": "כולל זמן",
|
"includeTime": "כולל זמן",
|
||||||
"accountSupport1": "מאז השחרור הראשון לציבור ב-31 באוגוסט 2020, סִייוּן שוחרר סך של 776 פעמים, פתר דרישות משתמשים ופידבקים 13840 פעמים, ומחויב בדיקות 17637 פעמים. אנו לא יכולים לעשות זאת ללא התמיכה והפידבקים שלך.",
|
"accountSupport1": "מאז השחרור הראשון לציבור ב-31 באוגוסט 2020, סִייוּן שוחרר יותר מ-830 פעמים, פתר דרישות משתמשים ופידבקים יותר מ-15000 פעמים, ומחויב בדיקות יותר מ-19800 פעמים. אנו לא יכולים לעשות זאת ללא התמיכה והפידבקים שלך.",
|
||||||
"accountSupport2": "התמיכה והפידבקים שלך יאפשרו לסִייוּן להתפתח ולפתח טוב יותר. אנו תמיד נהיה חברים של המשתמשים, נעבוד קשה כדי לשפר את המוצרים, ונעניק לך ניסיון טוב יותר בניהול ידע. תודה רבה על התמיכה שלך!",
|
"accountSupport2": "התמיכה והפידבקים שלך יאפשרו לסִייוּן להתפתח ולפתח טוב יותר. אנו תמיד נהיה חברים של המשתמשים, נעבוד קשה כדי לשפר את המוצרים, ונעניק לך ניסיון טוב יותר בניהול ידע. תודה רבה על התמיכה שלך!",
|
||||||
"goToTab1": "עבר לכרטיסיה #1",
|
"goToTab1": "עבר לכרטיסיה #1",
|
||||||
"goToTab2": "עבר לכרטיסיה #2",
|
"goToTab2": "עבר לכרטיסיה #2",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "לאחר הפעולה, בלוקים מוטמעים יראו נתיב, בלוקים מוטמעים בבלוקים עליוניים מתעלמים מהאפשרות הזו ולא יראו נתיבים",
|
"embedBlockBreadcrumbTip": "לאחר הפעולה, בלוקים מוטמעים יראו נתיב, בלוקים מוטמעים בבלוקים עליוניים מתעלמים מהאפשרות הזו ולא יראו נתיבים",
|
||||||
"appearanceMode": "מצב מראה",
|
"appearanceMode": "מצב מראה",
|
||||||
"editReadonly": "מצב קריאה בלבד",
|
"editReadonly": "מצב קריאה בלבד",
|
||||||
"editReadonlyTip": "כאשר מופעל, המסמך יהיה לקריאה בלבד כברירת מחדל",
|
"editReadonlyTip": "כאשר מופעל, עורך המסמכים יהיה לקריאה בלבד כברירת מחדל. עדיין ניתן לחפש ולהחליף טקסט, לשנות תוכן דרך API",
|
||||||
"generateConflictDoc": "צור תיעוד שהוקסם כאשר נוצרו סכסוכים",
|
"generateConflictDoc": "צור תיעוד שהוקסם כאשר נוצרו סכסוכים",
|
||||||
"generateConflictDocTip": "לאחר ההפעלה, תיעוד סכסוך ייווצר כאשר מתהווה סכסוך סנכרון, כך שהוא יכול להיפתח ולהיות נצפה ישירות. בין אם מופעל ובין אם לא, היסטוריית הנתונים תקלוט את תיעוד הסכסוך",
|
"generateConflictDocTip": "לאחר ההפעלה, תיעוד סכסוך ייווצר כאשר מתהווה סכסוך סנכרון, כך שהוא יכול להיפתח ולהיות נצפה ישירות. בין אם מופעל ובין אם לא, היסטוריית הנתונים תקלוט את תיעוד הסכסוך",
|
||||||
"deleteOpConfirm": "⚠️ אישור פעולה מחיקה",
|
"deleteOpConfirm": "⚠️ אישור פעולה מחיקה",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "נא השתמש בפורמט אובייקט JSON (<code class='fn__code'>{}</code>) כדי לעטוף הגדרות מאקרו, לדוגמה <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
"katexMacrosTip": "נא השתמש בפורמט אובייקט JSON (<code class='fn__code'>{}</code>) כדי לעטוף הגדרות מאקרו, לדוגמה <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
||||||
"systemLogTip": "יומני ריצה של תוכנה נשמרים ביומן המערכת. על ידי ייצוא היומן ולשלח אותו למתכנתי תכניות, זה יכול לעזור במידה רבה לצוות המתכנתים לאבחן בעיות בתכנה",
|
"systemLogTip": "יומני ריצה של תוכנה נשמרים ביומן המערכת. על ידי ייצוא היומן ולשלח אותו למתכנתי תכניות, זה יכול לעזור במידה רבה לצוות המתכנתים לאבחן בעיות בתכנה",
|
||||||
"systemLog": "יומן מערכת",
|
"systemLog": "יומן מערכת",
|
||||||
"syncConfGuide1": "אתחל את מפתח הסנכרון",
|
"syncConfGuide1": "אתחל את מפתח מאגר נתונים",
|
||||||
"syncConfGuide2": "מפתח זה משמש להצפנת הנתונים בקצה לקצה<br>המפתח נוצר על בסיס הסיסמה שאתה מזין, אנא זכור את הסיסמה",
|
"syncConfGuide2": "מפתח זה משמש להצפנת הנתונים בקצה לקצה<br>המפתח נוצר על בסיס הסיסמה שאתה מזין, אנא זכור את הסיסמה",
|
||||||
"syncConfGuide3": "התיקיה של הסנכרון בענן משמשת לאחסון 데이터를 המוצפנים המיועדים למקום העבודה הנוכחי. השם ברירת המחדל הוא <code>main</code>. אם יש לך רק מקום עבודה יחיד לסנכרן, השתמש פשטות ב<code>main</code>",
|
"syncConfGuide3": "התיקיה של הסנכרון בענן משמשת לאחסון 데이터를 המוצפנים המיועדים למקום העבודה הנוכחי. השם ברירת המחדל הוא <code>main</code>. אם יש לך רק מקום עבודה יחיד לסנכרן, השתמש פשטות ב<code>main</code>",
|
||||||
"syncConfGuide4": "האם לייסד עכשיו?",
|
"syncConfGuide4": "האם לייסד עכשיו?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "טקסט עוגן דינמי",
|
"turnToDynamic": "טקסט עוגן דינמי",
|
||||||
"sizeLimit": "מגבלה",
|
"sizeLimit": "מגבלה",
|
||||||
"trafficStat": "סטטיסטיקות תעבורה",
|
"trafficStat": "סטטיסטיקות תעבורה",
|
||||||
"hideHeadingBelowBlocks": "החבא בלוקים מתחת לכותרת",
|
"headingEmbedMode": "הגדרות הטמעת בלוק כותרת",
|
||||||
|
"headingEmbedModeTip": "הגדר את סגנון התצוגה של בלוקי כותרת בבלוקים מוטמעים",
|
||||||
|
"showHeadingWithBlocks": "הצג כותרת עם בלוקים מתחתיה",
|
||||||
|
"showHeadingOnlyTitle": "הצג כותרת בלבד",
|
||||||
|
"showHeadingOnlyBlocks": "הצג רק בלוקים מתחת לכותרת",
|
||||||
"matchDiacritics": "התאם טעמים",
|
"matchDiacritics": "התאם טעמים",
|
||||||
"copyHPath": "העתק נתיב קריא",
|
"copyHPath": "העתק נתיב קריא",
|
||||||
"justify": "התאם",
|
"justify": "התאם",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "כותרת 4",
|
"heading4": "כותרת 4",
|
||||||
"heading5": "כותרת 5",
|
"heading5": "כותרת 5",
|
||||||
"heading6": "כותרת 6",
|
"heading6": "כותרת 6",
|
||||||
|
"outlineExpandLevel": "רמת הרחבה",
|
||||||
|
"expandAll": "הרחב הכל",
|
||||||
|
"outlineKeepCurrentExpand": "שמור כותרת נוכחית מורחבת",
|
||||||
"general": "כללי",
|
"general": "כללי",
|
||||||
"insertBefore": "הכנס בלוק ריק לפני הבלוק שבו נמצא הסמן",
|
|
||||||
"insertAfter": "הכנס בלוק ריק אחרי הבלוק שבו נמצא הסמן",
|
|
||||||
"list1": "רשימה",
|
"list1": "רשימה",
|
||||||
"element": "אלמנט",
|
"element": "אלמנט",
|
||||||
"closeTab": "סגור טאב נוכחי",
|
"closeTab": "סגור טאב נוכחי",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "הזחה",
|
"indent": "הזחה",
|
||||||
"info": "מידע",
|
"info": "מידע",
|
||||||
"inline-code": "קוד פנימי",
|
"inline-code": "קוד פנימי",
|
||||||
"insert-after": "הכנס בלוק לאחר",
|
"insertAfter": "הוסף בלוק למטה",
|
||||||
"insert-before": "הכנס בלוק לפני",
|
"insertBefore": "הוסף בלוק למעלה",
|
||||||
"insertColumnLeft": "הכנס 1 שמאלה",
|
"insertColumnLeft": "הכנס 1 שמאלה",
|
||||||
"insertColumnRight": "הכנס 1 ימינה",
|
"insertColumnRight": "הכנס 1 ימינה",
|
||||||
"insertRowAbove": "הכנס 1 מעל",
|
"insertRowAbove": "הכנס 1 מעל",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "טבלה",
|
"table": "טבלה",
|
||||||
"gallery": "כרטיס",
|
"gallery": "כרטיס",
|
||||||
|
"kanban": "קאנבן",
|
||||||
"key": "מפתח ראשי",
|
"key": "מפתח ראשי",
|
||||||
"select": "בחר"
|
"select": "בחר"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "הבלוק נוסף כבר למסד הנתונים [%s]",
|
"269": "הבלוק נוסף כבר למסד הנתונים [%s]",
|
||||||
"270": "מתבצעת אופטימיזציה של אינדקס הנתונים, נא להמתין...",
|
"270": "מתבצעת אופטימיזציה של אינדקס הנתונים, נא להמתין...",
|
||||||
"271": "אופטימיזציית אינדקס הנתונים הושלמה, שוחררו [%s] שטח דיסק",
|
"271": "אופטימיזציית אינדקס הנתונים הושלמה, שוחררו [%s] שטח דיסק",
|
||||||
"272": "שדה ללא שם"
|
"272": "שדה ללא שם",
|
||||||
|
"273": "אל תיצור סביבת עבודה בנתיב השורש של המחיצה, צור תיקיה חדשה כסביבת עבודה",
|
||||||
|
"274": "התיקיה הזו מכילה קבצים נוספים, צור תיקיה חדשה כסביבת עבודה"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "Stampa",
|
||||||
|
"clickArrow": "Clicca sulla freccia",
|
||||||
|
"foldAll": "Comprimi tutto",
|
||||||
|
"expandSameLevelHeading": "Espandi intestazioni dello stesso livello",
|
||||||
|
"foldSameLevelHeading": "Comprimi intestazioni dello stesso livello",
|
||||||
|
"expandChildHeading": "Espandi sottotitoli",
|
||||||
|
"foldChildHeading": "Comprimi sottotitoli",
|
||||||
|
"addChildHeading": "Aggiungi sottotitolo",
|
||||||
|
"insertSameLevelHeadingBefore": "Inserisci intestazione dello stesso livello prima",
|
||||||
|
"insertSameLevelHeadingAfter": "Inserisci intestazione dello stesso livello dopo",
|
||||||
|
"upgrade": "Aggiorna",
|
||||||
|
"downgrade": "Retrocedi",
|
||||||
|
"clipboardPermissionDenied": "Autorizzazione agli appunti negata. Consenti l'accesso agli appunti dalla barra degli indirizzi del browser e riprova.",
|
||||||
|
"jumpTo": "Vai a",
|
||||||
"vacuumDataIndex": "Ottimizza indice",
|
"vacuumDataIndex": "Ottimizza indice",
|
||||||
"vacuumDataIndexTip": "Verifica l'indice dei dati, libera spazio e migliora le prestazioni dell'indice",
|
"vacuumDataIndexTip": "Verifica l'indice dei dati, libera spazio e migliora le prestazioni dell'indice",
|
||||||
"rebuildDataIndex": "Ricostruisci indice",
|
"rebuildDataIndex": "Ricostruisci indice",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "Mostra icone delle voci",
|
"showAllEntriesIcons": "Mostra icone delle voci",
|
||||||
"wrapAllFields": "Avvolgi automaticamente i campi",
|
"wrapAllFields": "Avvolgi automaticamente i campi",
|
||||||
"gallery": "Scheda",
|
"gallery": "Scheda",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Nuova etichetta",
|
"newTag": "Nuova etichetta",
|
||||||
"pleaseWait": "Attendere prego...",
|
"pleaseWait": "Attendere prego...",
|
||||||
"reconnectPrompt": "Dopo aver cambiato applicazione, ci vorrà un po' di tempo per ripristinare il funzionamento del kernel SiYuan. Attendere qualche secondo o fare clic sul pulsante \"Riprova\"",
|
"reconnectPrompt": "Dopo aver cambiato applicazione, ci vorrà un po' di tempo per ripristinare il funzionamento del kernel SiYuan. Attendere qualche secondo o fare clic sul pulsante \"Riprova\"",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "Scollega blocco",
|
"unbindBlock": "Scollega blocco",
|
||||||
"showTitle": "Mostra titolo del database",
|
"showTitle": "Mostra titolo del database",
|
||||||
"fillCreated": "Compilazione automatica del tempo di creazione",
|
"fillCreated": "Compilazione automatica del tempo di creazione",
|
||||||
|
"fillSpecificTime": "Compila l'orario specifico di default",
|
||||||
"removeCard": "Rimuovi flashcard",
|
"removeCard": "Rimuovi flashcard",
|
||||||
"updateLayout": "Aggiorna layout",
|
"updateLayout": "Aggiorna layout",
|
||||||
"dndFolderTip": "Nota che ${x} inserisce solo il collegamento file:// e non copia il file",
|
"dndFolderTip": "Nota che ${x} inserisce solo il collegamento file:// e non copia il file",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "La pulizia dello storage cloud eliminerà completamente tutti gli snapshot non referenziati e gli oggetti dati correlati. <ul class='fn__list'><li>Assicurati che gli altri dispositivi abbiano sospeso la sincronizzazione prima dell'esecuzione</li><li>L'operazione di pulizia è molto lunga, assicurati che la rete sia stabile</li></ul>Sei sicuro di voler eseguire ora?",
|
"cloudStoragePurgeConfirm": "La pulizia dello storage cloud eliminerà completamente tutti gli snapshot non referenziati e gli oggetti dati correlati. <ul class='fn__list'><li>Assicurati che gli altri dispositivi abbiano sospeso la sincronizzazione prima dell'esecuzione</li><li>L'operazione di pulizia è molto lunga, assicurati che la rete sia stabile</li></ul>Sei sicuro di voler eseguire ora?",
|
||||||
"dragFill": "Trascina verticalmente per riempire i valori",
|
"dragFill": "Trascina verticalmente per riempire i valori",
|
||||||
"switchReadonly": "Passa alla modalità di sola lettura",
|
"switchReadonly": "Passa alla modalità di sola lettura",
|
||||||
"original": "Originale",
|
"original": "Mostra valore originale",
|
||||||
|
"uniqueValues": "Mostra valori unici",
|
||||||
"selectRelation": "Seleziona prima il campo correlato",
|
"selectRelation": "Seleziona prima il campo correlato",
|
||||||
"backRelation": "Bidirezionale",
|
"backRelation": "Bidirezionale",
|
||||||
"thisDatabase": "Questo database",
|
"thisDatabase": "Questo database",
|
||||||
"relatedTo": "Relazionato a",
|
"relatedTo": "Relazionato a",
|
||||||
"relation": "Relazione",
|
"relation": "Relazione",
|
||||||
|
"relatedItems": "Elementi correlati",
|
||||||
"rollup": "Rollup",
|
"rollup": "Rollup",
|
||||||
"rollupProperty": "Proprietà",
|
"rollupProperty": "Proprietà",
|
||||||
"rollupCalc": "Calcola",
|
"rollupCalc": "Calcola",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "Blocco di formule",
|
"mathBlock": "Blocco di formule",
|
||||||
"htmlBlock": "Blocco HTML"
|
"htmlBlock": "Blocco HTML"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "Copia URL del collegamento",
|
||||||
"selected": "Selezionato",
|
"selected": "Selezionato",
|
||||||
"loadMore": "Carica di più",
|
"loadMore": "Carica di più",
|
||||||
"tempUnlock": "Sblocca temporaneamente",
|
"tempUnlock": "Sblocca temporaneamente",
|
||||||
"cancelTempUnlock": "Annulla sblocco temporaneo",
|
"cancelTempUnlock": "Annulla sblocco temporaneo",
|
||||||
"addFilter": "Aggiungi filtro",
|
"addFilter": "Aggiungi filtro",
|
||||||
"removeFilters": "Pulisci filtro",
|
"removeFilters": "Pulisci filtro",
|
||||||
|
"addSort": "Aggiungi ordinamento",
|
||||||
|
"removeSorts": "Pulisci ordinamento",
|
||||||
"checked": "Selezionato",
|
"checked": "Selezionato",
|
||||||
"unchecked": "Deselezionato",
|
"unchecked": "Deselezionato",
|
||||||
"percentChecked": "Percentuale selezionata",
|
"percentChecked": "Percentuale selezionata",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "Importazione completata",
|
"imported": "Importazione completata",
|
||||||
"mirrorTip": "Database specchio, tutti gli aggiornamenti dei dati verranno sincronizzati su tutti gli altri specchi",
|
"mirrorTip": "Database specchio, tutti gli aggiornamenti dei dati verranno sincronizzati su tutti gli altri specchi",
|
||||||
"includeTime": "Includi tempo",
|
"includeTime": "Includi tempo",
|
||||||
"accountSupport1": "Dalla sua prima versione pubblica il 31 agosto 2020, SiYuan è stato rilasciato 776 volte, ha risolto 13840 richieste e feedback degli utenti, e ha effettuato 17637 commit di codice. Non possiamo fare a meno del vostro supporto e feedback.",
|
"accountSupport1": "Dalla sua prima versione pubblica il 31 agosto 2020, SiYuan è stato rilasciato più di 830 volte, ha risolto più di 15000 richieste e feedback degli utenti, e ha effettuato più di 19800 commit di codice. Non possiamo fare a meno del vostro supporto e feedback.",
|
||||||
"accountSupport2": "Il vostro supporto e feedback consentiranno a SiYuan di svilupparsi meglio. Saremo sempre amici degli utenti, lavoreremo duramente per migliorare il prodotto e offrirvi una migliore esperienza di gestione della conoscenza. Grazie mille per il vostro supporto!",
|
"accountSupport2": "Il vostro supporto e feedback consentiranno a SiYuan di svilupparsi meglio. Saremo sempre amici degli utenti, lavoreremo duramente per migliorare il prodotto e offrirvi una migliore esperienza di gestione della conoscenza. Grazie mille per il vostro supporto!",
|
||||||
"goToTab1": "Vai alla scheda #1",
|
"goToTab1": "Vai alla scheda #1",
|
||||||
"goToTab2": "Vai alla scheda #2",
|
"goToTab2": "Vai alla scheda #2",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "Dopo l'abilitazione, i blocchi incorporati mostreranno i breadcrumb. I blocchi incorporati nei super blocchi ignorano questa opzione e non mostreranno mai breadcrumb",
|
"embedBlockBreadcrumbTip": "Dopo l'abilitazione, i blocchi incorporati mostreranno i breadcrumb. I blocchi incorporati nei super blocchi ignorano questa opzione e non mostreranno mai breadcrumb",
|
||||||
"appearanceMode": "Modalità aspetto",
|
"appearanceMode": "Modalità aspetto",
|
||||||
"editReadonly": "Modalità di sola lettura",
|
"editReadonly": "Modalità di sola lettura",
|
||||||
"editReadonlyTip": "Quando abilitato, il documento sarà in sola lettura per impostazione predefinita",
|
"editReadonlyTip": "Quando abilitato, l'editor di documenti sarà in sola lettura per impostazione predefinita. Puoi ancora cercare e sostituire testo, modificare contenuti tramite API",
|
||||||
"generateConflictDoc": "Genera documento di conflitto quando si verificano conflitti di sincronizzazione",
|
"generateConflictDoc": "Genera documento di conflitto quando si verificano conflitti di sincronizzazione",
|
||||||
"generateConflictDocTip": "Dopo l'abilitazione, verrà generato un documento di conflitto quando si verifica un conflitto di sincronizzazione, in modo che possa essere aperto e visualizzato direttamente. Sia che sia abilitato o meno, la [Cronologia dati] registrerà il documento di conflitto",
|
"generateConflictDocTip": "Dopo l'abilitazione, verrà generato un documento di conflitto quando si verifica un conflitto di sincronizzazione, in modo che possa essere aperto e visualizzato direttamente. Sia che sia abilitato o meno, la [Cronologia dati] registrerà il documento di conflitto",
|
||||||
"deleteOpConfirm": "⚠️ Conferma operazione di eliminazione",
|
"deleteOpConfirm": "⚠️ Conferma operazione di eliminazione",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "Si prega di utilizzare il formato oggetto JSON (<code class='fn__code'>{}</code>) per racchiudere le definizioni delle macro, ad esempio <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
"katexMacrosTip": "Si prega di utilizzare il formato oggetto JSON (<code class='fn__code'>{}</code>) per racchiudere le definizioni delle macro, ad esempio <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
||||||
"systemLogTip": "I registri di esecuzione del programma sono salvati nel registro di sistema. Esportando il registro di sistema e inviandolo agli sviluppatori, è possibile aiutarli meglio a diagnosticare i problemi del programma",
|
"systemLogTip": "I registri di esecuzione del programma sono salvati nel registro di sistema. Esportando il registro di sistema e inviandolo agli sviluppatori, è possibile aiutarli meglio a diagnosticare i problemi del programma",
|
||||||
"systemLog": "Registro di sistema",
|
"systemLog": "Registro di sistema",
|
||||||
"syncConfGuide1": "Inizializza chiave di sincronizzazione",
|
"syncConfGuide1": "Inizializza chiave del repository dati",
|
||||||
"syncConfGuide2": "Questa chiave è utilizzata per la crittografia end-to-end dei dati di sincronizzazione<br>La chiave è generata in base alla password che inserisci, ricordati la password",
|
"syncConfGuide2": "Questa chiave è utilizzata per la crittografia end-to-end dei dati di sincronizzazione<br>La chiave è generata in base alla password che inserisci, ricordati la password",
|
||||||
"syncConfGuide3": "La directory di sincronizzazione cloud è utilizzata per memorizzare i dati crittografati corrispondenti all'attuale area di lavoro. Il nome predefinito è <code>main</code>. Se hai solo un'area di lavoro da sincronizzare, usa direttamente <code>main</code>",
|
"syncConfGuide3": "La directory di sincronizzazione cloud è utilizzata per memorizzare i dati crittografati corrispondenti all'attuale area di lavoro. Il nome predefinito è <code>main</code>. Se hai solo un'area di lavoro da sincronizzare, usa direttamente <code>main</code>",
|
||||||
"syncConfGuide4": "Sincronizzare ora?",
|
"syncConfGuide4": "Sincronizzare ora?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "Testo ancora dinamico",
|
"turnToDynamic": "Testo ancora dinamico",
|
||||||
"sizeLimit": "Limite",
|
"sizeLimit": "Limite",
|
||||||
"trafficStat": "Statistiche traffico",
|
"trafficStat": "Statistiche traffico",
|
||||||
"hideHeadingBelowBlocks": "Nascondi blocchi sotto l'intestazione",
|
"headingEmbedMode": "Impostazioni incorporamento blocco intestazione",
|
||||||
|
"headingEmbedModeTip": "Imposta lo stile di visualizzazione dei blocchi di intestazione nei blocchi incorporati",
|
||||||
|
"showHeadingWithBlocks": "Mostra intestazione con blocchi sottostanti",
|
||||||
|
"showHeadingOnlyTitle": "Mostra solo intestazione",
|
||||||
|
"showHeadingOnlyBlocks": "Mostra solo blocchi sotto l'intestazione",
|
||||||
"matchDiacritics": "Corrispondenza con diacritici",
|
"matchDiacritics": "Corrispondenza con diacritici",
|
||||||
"copyHPath": "Copia percorso leggibile",
|
"copyHPath": "Copia percorso leggibile",
|
||||||
"justify": "Giustifica",
|
"justify": "Giustifica",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "Titolo 4",
|
"heading4": "Titolo 4",
|
||||||
"heading5": "Titolo 5",
|
"heading5": "Titolo 5",
|
||||||
"heading6": "Titolo 6",
|
"heading6": "Titolo 6",
|
||||||
|
"outlineExpandLevel": "Livello di espansione",
|
||||||
|
"expandAll": "Espandi tutto",
|
||||||
|
"outlineKeepCurrentExpand": "Mantieni espanso l'intestazione corrente",
|
||||||
"general": "Generale",
|
"general": "Generale",
|
||||||
"insertBefore": "Inserisci un blocco vuoto prima del blocco corrente",
|
|
||||||
"insertAfter": "Inserisci un blocco vuoto dopo il blocco corrente",
|
|
||||||
"list1": "Lista",
|
"list1": "Lista",
|
||||||
"element": "elemento",
|
"element": "elemento",
|
||||||
"closeTab": "Chiudi scheda corrente",
|
"closeTab": "Chiudi scheda corrente",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "Indenta",
|
"indent": "Indenta",
|
||||||
"info": "Info",
|
"info": "Info",
|
||||||
"inline-code": "Codice in linea",
|
"inline-code": "Codice in linea",
|
||||||
"insert-after": "Inserisci blocco dopo",
|
"insertAfter": "Inserisci blocco sotto",
|
||||||
"insert-before": "Inserisci blocco prima",
|
"insertBefore": "Inserisci blocco sopra",
|
||||||
"insertColumnLeft": "Inserisci 1 a sinistra",
|
"insertColumnLeft": "Inserisci 1 a sinistra",
|
||||||
"insertColumnRight": "Inserisci 1 a destra",
|
"insertColumnRight": "Inserisci 1 a destra",
|
||||||
"insertRowAbove": "Inserisci 1 sopra",
|
"insertRowAbove": "Inserisci 1 sopra",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tabella",
|
"table": "Tabella",
|
||||||
"gallery": "Scheda",
|
"gallery": "Scheda",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Chiave primaria",
|
"key": "Chiave primaria",
|
||||||
"select": "Seleziona"
|
"select": "Seleziona"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "Questo blocco è già stato aggiunto al database [%s]",
|
"269": "Questo blocco è già stato aggiunto al database [%s]",
|
||||||
"270": "Ottimizzazione dell'indice dei dati in corso, attendere prego...",
|
"270": "Ottimizzazione dell'indice dei dati in corso, attendere prego...",
|
||||||
"271": "Ottimizzazione dell'indice dei dati completata, liberati [%s] di spazio su disco",
|
"271": "Ottimizzazione dell'indice dei dati completata, liberati [%s] di spazio su disco",
|
||||||
"272": "Campo senza nome"
|
"272": "Campo senza nome",
|
||||||
|
"273": "Non creare lo spazio di lavoro nella directory radice della partizione, crea una nuova cartella come spazio di lavoro",
|
||||||
|
"274": "Questa cartella contiene altri file, crea una nuova cartella come spazio di lavoro"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "印刷",
|
||||||
|
"clickArrow": "矢印をクリック",
|
||||||
|
"foldAll": "すべて折りたたむ",
|
||||||
|
"expandSameLevelHeading": "同じレベルの見出しを展開",
|
||||||
|
"foldSameLevelHeading": "同じレベルの見出しを折りたたむ",
|
||||||
|
"expandChildHeading": "子見出しを展開",
|
||||||
|
"foldChildHeading": "子見出しを折りたたむ",
|
||||||
|
"addChildHeading": "子見出しを追加",
|
||||||
|
"insertSameLevelHeadingBefore": "前に同じレベルの見出しを挿入",
|
||||||
|
"insertSameLevelHeadingAfter": "後に同じレベルの見出しを挿入",
|
||||||
|
"upgrade": "アップグレード",
|
||||||
|
"downgrade": "ダウングレード",
|
||||||
|
"clipboardPermissionDenied": "クリップボードの権限が拒否されました。ブラウザのアドレスバーでクリップボードへのアクセスを許可してから再試行してください。",
|
||||||
|
"jumpTo": "ジャンプ先",
|
||||||
"vacuumDataIndex": "インデックスの最適化",
|
"vacuumDataIndex": "インデックスの最適化",
|
||||||
"vacuumDataIndexTip": "データインデックスを検証し、ストレージを解放してインデックス性能を向上させます",
|
"vacuumDataIndexTip": "データインデックスを検証し、ストレージを解放してインデックス性能を向上させます",
|
||||||
"rebuildDataIndex": "インデックスの再構築",
|
"rebuildDataIndex": "インデックスの再構築",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "エントリアイコンを表示",
|
"showAllEntriesIcons": "エントリアイコンを表示",
|
||||||
"wrapAllFields": "フィールドを自動折り返し",
|
"wrapAllFields": "フィールドを自動折り返し",
|
||||||
"gallery": "カード",
|
"gallery": "カード",
|
||||||
|
"kanban": "カンバン",
|
||||||
"newTag": "新しいタグ",
|
"newTag": "新しいタグ",
|
||||||
"pleaseWait": "しばらくお待ちください...",
|
"pleaseWait": "しばらくお待ちください...",
|
||||||
"reconnectPrompt": "アプリを切り替えた後、思源カーネルの実行を再開するには少し時間がかかります。数秒待つか、「再試行」ボタンをクリックしてください",
|
"reconnectPrompt": "アプリを切り替えた後、思源カーネルの実行を再開するには少し時間がかかります。数秒待つか、「再試行」ボタンをクリックしてください",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "ブロックのバインドを解除",
|
"unbindBlock": "ブロックのバインドを解除",
|
||||||
"showTitle": "データベースのタイトルを表示",
|
"showTitle": "データベースのタイトルを表示",
|
||||||
"fillCreated": "デフォルトで作成時間を入力",
|
"fillCreated": "デフォルトで作成時間を入力",
|
||||||
|
"fillSpecificTime": "デフォルトで具体的な時間を入力",
|
||||||
"removeCard": "フラッシュカードを削除",
|
"removeCard": "フラッシュカードを削除",
|
||||||
"updateLayout": "レイアウトを更新",
|
"updateLayout": "レイアウトを更新",
|
||||||
"dndFolderTip": "${x} は file:// 形式のハイパーリンクを挿入するだけでファイルはコピーされないので注意してください",
|
"dndFolderTip": "${x} は file:// 形式のハイパーリンクを挿入するだけでファイルはコピーされないので注意してください",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "クラウドストレージを消去すると、参照されていないスナップショットと関連データオブジェクトが完全に削除されます。<ul class='fn__list'><li>実行前に他のデバイスが同期を一時停止していることを確認してください</li><li>消去操作は非常に時間がかかるため、ネットワークが安定していることを確認してください</li></ul>今すぐ実行してもよろしいですか?",
|
"cloudStoragePurgeConfirm": "クラウドストレージを消去すると、参照されていないスナップショットと関連データオブジェクトが完全に削除されます。<ul class='fn__list'><li>実行前に他のデバイスが同期を一時停止していることを確認してください</li><li>消去操作は非常に時間がかかるため、ネットワークが安定していることを確認してください</li></ul>今すぐ実行してもよろしいですか?",
|
||||||
"dragFill": "値を埋めるために垂直にドラッグ",
|
"dragFill": "値を埋めるために垂直にドラッグ",
|
||||||
"switchReadonly": "読み取り専用モードの切り替え",
|
"switchReadonly": "読み取り専用モードの切り替え",
|
||||||
"original": "元の値",
|
"original": "元の値を表示",
|
||||||
|
"uniqueValues": "一意の値を表示",
|
||||||
"selectRelation": "最初に関連する列を選択してください",
|
"selectRelation": "最初に関連する列を選択してください",
|
||||||
"backRelation": "双方向の関連付け",
|
"backRelation": "双方向の関連付け",
|
||||||
"thisDatabase": "現在のデータベース",
|
"thisDatabase": "現在のデータベース",
|
||||||
"relatedTo": "関連付け",
|
"relatedTo": "関連付け",
|
||||||
"relation": "関連",
|
"relation": "関連",
|
||||||
|
"relatedItems": "関連項目",
|
||||||
"rollup": "集計",
|
"rollup": "集計",
|
||||||
"rollupProperty": "属性",
|
"rollupProperty": "属性",
|
||||||
"rollupCalc": "計算方法",
|
"rollupCalc": "計算方法",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "数式ブロック",
|
"mathBlock": "数式ブロック",
|
||||||
"htmlBlock": "HTMLブロック"
|
"htmlBlock": "HTMLブロック"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "リンクの URL をコピー",
|
||||||
"selected": "選択済み",
|
"selected": "選択済み",
|
||||||
"loadMore": "さらに読み込む",
|
"loadMore": "さらに読み込む",
|
||||||
"tempUnlock": "一時的にロック解除",
|
"tempUnlock": "一時的にロック解除",
|
||||||
"cancelTempUnlock": "一時的なロック解除をキャンセル",
|
"cancelTempUnlock": "一時的なロック解除をキャンセル",
|
||||||
"addFilter": "フィルタを追加",
|
"addFilter": "フィルタを追加",
|
||||||
"removeFilters": "フィルタを削除",
|
"removeFilters": "フィルタを削除",
|
||||||
|
"addSort": "ソートを追加",
|
||||||
|
"removeSorts": "ソートを削除",
|
||||||
"checked": "チェック済み",
|
"checked": "チェック済み",
|
||||||
"unchecked": "未チェック",
|
"unchecked": "未チェック",
|
||||||
"percentChecked": "チェック済みの割合",
|
"percentChecked": "チェック済みの割合",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "インポートが完了しました",
|
"imported": "インポートが完了しました",
|
||||||
"mirrorTip": "ミラーデータベース: すべてのデータ更新は他のすべてのミラーに同期されます",
|
"mirrorTip": "ミラーデータベース: すべてのデータ更新は他のすべてのミラーに同期されます",
|
||||||
"includeTime": "時間を含める",
|
"includeTime": "時間を含める",
|
||||||
"accountSupport1": "SiYuan は 2020 年 8 月 31 日の最初の公開以来、合計 776 回のリリースを行い、ユーザーからの要求とフィードバックを 13840 回解決し、コードを 17637 回コミットしました。",
|
"accountSupport1": "SiYuan は 2020 年 8 月 31 日の最初の公開以来、合計 830 回を超えるリリースを行い、ユーザーからの要求とフィードバックを 15000 回以上解決し、コードを 19800 回以上コミットしました。",
|
||||||
"accountSupport2": "皆様のサポートとフィードバックによって、SiYuan はさらに発展します。私たちは常にユーザーのよき理解者であり、製品の向上に努め、より良い知識管理体験を提供して参ります。ご支援いただき誠にありがとうございます。",
|
"accountSupport2": "皆様のサポートとフィードバックによって、SiYuan はさらに発展します。私たちは常にユーザーのよき理解者であり、製品の向上に努め、より良い知識管理体験を提供して参ります。ご支援いただき誠にありがとうございます。",
|
||||||
"goToTab1": "最初のタブへ移動",
|
"goToTab1": "最初のタブへ移動",
|
||||||
"goToTab2": "2 番目のタブへ移動",
|
"goToTab2": "2 番目のタブへ移動",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "埋め込みブロックにパンくずリストを表示します<br>この設定にかかわらずスーパーブロック内の埋め込みブロックは常にパンくずリストが表示されません",
|
"embedBlockBreadcrumbTip": "埋め込みブロックにパンくずリストを表示します<br>この設定にかかわらずスーパーブロック内の埋め込みブロックは常にパンくずリストが表示されません",
|
||||||
"appearanceMode": "表示モード",
|
"appearanceMode": "表示モード",
|
||||||
"editReadonly": "読み取り専用モード",
|
"editReadonly": "読み取り専用モード",
|
||||||
"editReadonlyTip": "有効にすると、ドキュメントはデフォルトで読み取り専用になります",
|
"editReadonlyTip": "有効にすると、ドキュメントエディターはデフォルトで読み取り専用になります。テキストの検索・置換や API による内容の変更は可能です",
|
||||||
"generateConflictDoc": "同期の競合時に競合ドキュメントを生成する",
|
"generateConflictDoc": "同期の競合時に競合ドキュメントを生成する",
|
||||||
"generateConflictDocTip": "同期の競合が発生した場合は競合ドキュメントが生成され、直接開いて表示できます。この設定に関わらず [データ履歴] には競合ドキュメントが記録されます",
|
"generateConflictDocTip": "同期の競合が発生した場合は競合ドキュメントが生成され、直接開いて表示できます。この設定に関わらず [データ履歴] には競合ドキュメントが記録されます",
|
||||||
"deleteOpConfirm": "⚠️ 削除操作の確認",
|
"deleteOpConfirm": "⚠️ 削除操作の確認",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "JSON オブジェクト形式 (<code class='fn__code'>{}</code>) を使用してマクロ定義を囲んでください (例: <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>)",
|
"katexMacrosTip": "JSON オブジェクト形式 (<code class='fn__code'>{}</code>) を使用してマクロ定義を囲んでください (例: <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>)",
|
||||||
"systemLogTip": "プログラムの実行記録はシステムログに保存されます。システムログをエクスポートして開発者に送信することで開発者がプログラムの問題を診断するのに役立ちます",
|
"systemLogTip": "プログラムの実行記録はシステムログに保存されます。システムログをエクスポートして開発者に送信することで開発者がプログラムの問題を診断するのに役立ちます",
|
||||||
"systemLog": "システムログ",
|
"systemLog": "システムログ",
|
||||||
"syncConfGuide1": "同期キーの初期化",
|
"syncConfGuide1": "データリポジトリキーの初期化",
|
||||||
"syncConfGuide2": "このキーはデータ同期のためのエンドツーエンドの暗号化に使用されます<br>キーは入力されたパスワードに基づいて生成されるためパスワードを忘れないでください",
|
"syncConfGuide2": "このキーはデータ同期のためのエンドツーエンドの暗号化に使用されます<br>キーは入力されたパスワードに基づいて生成されるためパスワードを忘れないでください",
|
||||||
"syncConfGuide3": "クラウド同期ディレクトリは現在のワークスペースに対応する暗号化されたデータを保存するために使用されます。デフォルト名は <code>main</code> です。同期するワークスペースがひとつしかない場合は <code>main</code> を使用してください",
|
"syncConfGuide3": "クラウド同期ディレクトリは現在のワークスペースに対応する暗号化されたデータを保存するために使用されます。デフォルト名は <code>main</code> です。同期するワークスペースがひとつしかない場合は <code>main</code> を使用してください",
|
||||||
"syncConfGuide4": "今すぐ同期しますか?",
|
"syncConfGuide4": "今すぐ同期しますか?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "動的アンカーテキスト",
|
"turnToDynamic": "動的アンカーテキスト",
|
||||||
"sizeLimit": "制限",
|
"sizeLimit": "制限",
|
||||||
"trafficStat": "トラフィック統計",
|
"trafficStat": "トラフィック統計",
|
||||||
"hideHeadingBelowBlocks": "見出し以下のブロックを非表示にする",
|
"headingEmbedMode": "見出しブロック埋め込み設定",
|
||||||
|
"headingEmbedModeTip": "見出しブロックの埋め込みブロック内での表示スタイルを設定",
|
||||||
|
"showHeadingWithBlocks": "見出しと下のブロックを表示",
|
||||||
|
"showHeadingOnlyTitle": "見出しのみ表示",
|
||||||
|
"showHeadingOnlyBlocks": "見出し下のブロックのみ表示",
|
||||||
"matchDiacritics": "ダイアクリティカルマークを一致させる",
|
"matchDiacritics": "ダイアクリティカルマークを一致させる",
|
||||||
"copyHPath": "パスをコピー",
|
"copyHPath": "パスをコピー",
|
||||||
"justify": "両端揃え",
|
"justify": "両端揃え",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "見出し4",
|
"heading4": "見出し4",
|
||||||
"heading5": "見出し5",
|
"heading5": "見出し5",
|
||||||
"heading6": "見出し6",
|
"heading6": "見出し6",
|
||||||
|
"outlineExpandLevel": "展開レベル",
|
||||||
|
"expandAll": "すべて展開",
|
||||||
|
"outlineKeepCurrentExpand": "現在の見出しを展開し続ける",
|
||||||
"general": "一般",
|
"general": "一般",
|
||||||
"insertBefore": "前にブロックを挿入",
|
|
||||||
"insertAfter": "後にブロックを挿入",
|
|
||||||
"list1": "リスト",
|
"list1": "リスト",
|
||||||
"element": "要素",
|
"element": "要素",
|
||||||
"closeTab": "現在のタブを閉じる",
|
"closeTab": "現在のタブを閉じる",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "インデント",
|
"indent": "インデント",
|
||||||
"info": "情報",
|
"info": "情報",
|
||||||
"inline-code": "インラインコード",
|
"inline-code": "インラインコード",
|
||||||
"insert-after": "後にブロックを挿入",
|
"insertAfter": "下にブロックを挿入",
|
||||||
"insert-before": "前にブロックを挿入",
|
"insertBefore": "上にブロックを挿入",
|
||||||
"insertColumnLeft": "左に1列挿入",
|
"insertColumnLeft": "左に1列挿入",
|
||||||
"insertColumnRight": "右に1列挿入",
|
"insertColumnRight": "右に1列挿入",
|
||||||
"insertRowAbove": "上に1行挿入",
|
"insertRowAbove": "上に1行挿入",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "テーブル",
|
"table": "テーブル",
|
||||||
"gallery": "カード",
|
"gallery": "カード",
|
||||||
|
"kanban": "カンバン",
|
||||||
"key": "プライマリキー",
|
"key": "プライマリキー",
|
||||||
"select": "選択"
|
"select": "選択"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "このブロックはすでにデータベース [%s] に追加されています",
|
"269": "このブロックはすでにデータベース [%s] に追加されています",
|
||||||
"270": "データインデックスを最適化しています。しばらくお待ちください...",
|
"270": "データインデックスを最適化しています。しばらくお待ちください...",
|
||||||
"271": "データインデックスの最適化が完了しました。合計 [%s] のディスク容量が解放されました",
|
"271": "データインデックスの最適化が完了しました。合計 [%s] のディスク容量が解放されました",
|
||||||
"272": "未命名フィールド"
|
"272": "未命名フィールド",
|
||||||
|
"273": "パーティションのルートパスにワークスペースを作成しないでください。新しいフォルダーをワークスペースとして作成してください",
|
||||||
|
"274": "このフォルダーには他のファイルが含まれています。新しいフォルダーをワークスペースとして作成してください"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "Drukuj",
|
||||||
|
"clickArrow": "Kliknij strzałkę",
|
||||||
|
"foldAll": "Zwiń wszystko",
|
||||||
|
"expandSameLevelHeading": "Rozwiń nagłówki na tym samym poziomie",
|
||||||
|
"foldSameLevelHeading": "Zwiń nagłówki na tym samym poziomie",
|
||||||
|
"expandChildHeading": "Rozwiń nagłówki podrzędne",
|
||||||
|
"foldChildHeading": "Zwiń nagłówki podrzędne",
|
||||||
|
"addChildHeading": "Dodaj nagłówek podrzędny",
|
||||||
|
"insertSameLevelHeadingBefore": "Wstaw nagłówek na tym samym poziomie przed",
|
||||||
|
"insertSameLevelHeadingAfter": "Wstaw nagłówek na tym samym poziomie po",
|
||||||
|
"upgrade": "Aktualizuj",
|
||||||
|
"downgrade": "Degraduj",
|
||||||
|
"clipboardPermissionDenied": "Odmowa dostępu do schowka. Zezwól na dostęp do schowka w pasku adresu przeglądarki, a następnie spróbuj ponownie.",
|
||||||
|
"jumpTo": "Przejdź do",
|
||||||
"vacuumDataIndex": "Optymalizuj indeks",
|
"vacuumDataIndex": "Optymalizuj indeks",
|
||||||
"vacuumDataIndexTip": "Sprawdź indeks danych, zwolnij miejsce i popraw wydajność indeksu",
|
"vacuumDataIndexTip": "Sprawdź indeks danych, zwolnij miejsce i popraw wydajność indeksu",
|
||||||
"rebuildDataIndex": "Odbuduj indeks",
|
"rebuildDataIndex": "Odbuduj indeks",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "Pokaż ikony wpisów",
|
"showAllEntriesIcons": "Pokaż ikony wpisów",
|
||||||
"wrapAllFields": "Automatyczne zawijanie pól",
|
"wrapAllFields": "Automatyczne zawijanie pól",
|
||||||
"gallery": "Karta",
|
"gallery": "Karta",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Nowy tag",
|
"newTag": "Nowy tag",
|
||||||
"pleaseWait": "Proszę czekać...",
|
"pleaseWait": "Proszę czekać...",
|
||||||
"reconnectPrompt": "Po przełączeniu aplikacji ponowne uruchomienie jądra SiYuan może zająć trochę czasu. Proszę poczekać kilka sekund lub kliknąć przycisk „Ponów próbę”",
|
"reconnectPrompt": "Po przełączeniu aplikacji ponowne uruchomienie jądra SiYuan może zająć trochę czasu. Proszę poczekać kilka sekund lub kliknąć przycisk „Ponów próbę”",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "Odłącz blok",
|
"unbindBlock": "Odłącz blok",
|
||||||
"showTitle": "Pokaż tytuł bazy danych",
|
"showTitle": "Pokaż tytuł bazy danych",
|
||||||
"fillCreated": "Domyślnie wypełnij czas utworzenia",
|
"fillCreated": "Domyślnie wypełnij czas utworzenia",
|
||||||
|
"fillSpecificTime": "Domyślnie wypełnij konkretny czas",
|
||||||
"removeCard": "Usuń fiszkę",
|
"removeCard": "Usuń fiszkę",
|
||||||
"updateLayout": "Zaktualizuj układ",
|
"updateLayout": "Zaktualizuj układ",
|
||||||
"dndFolderTip": "Proszę pamiętać, że ${x} tylko wstawia link file:// i nie kopiuje pliku",
|
"dndFolderTip": "Proszę pamiętać, że ${x} tylko wstawia link file:// i nie kopiuje pliku",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "Oczyszczenie pamięci w chmurze całkowicie usunie wszystkie nieodwołane zrzuty i powiązane obiekty danych. <ul class='fn__list'><li>Proszę upewnić się, że inne urządzenia wstrzymały synchronizację przed aktem</li><li>Operacja oczyszczania jest czasochłonna, proszę upewnić się, że sieć jest stabilna</li></ul>Czy na pewno chcesz to wykonać teraz?",
|
"cloudStoragePurgeConfirm": "Oczyszczenie pamięci w chmurze całkowicie usunie wszystkie nieodwołane zrzuty i powiązane obiekty danych. <ul class='fn__list'><li>Proszę upewnić się, że inne urządzenia wstrzymały synchronizację przed aktem</li><li>Operacja oczyszczania jest czasochłonna, proszę upewnić się, że sieć jest stabilna</li></ul>Czy na pewno chcesz to wykonać teraz?",
|
||||||
"dragFill": "Przeciągnij w pionie, aby wypełnić wartości",
|
"dragFill": "Przeciągnij w pionie, aby wypełnić wartości",
|
||||||
"switchReadonly": "Przełącz tryb tylko do odczytu",
|
"switchReadonly": "Przełącz tryb tylko do odczytu",
|
||||||
"original": "Oryginalny",
|
"original": "Pokaż wartość oryginalną",
|
||||||
|
"uniqueValues": "Pokaż unikalne wartości",
|
||||||
"selectRelation": "Proszę najpierw wybrać powiązaną kolumnę",
|
"selectRelation": "Proszę najpierw wybrać powiązaną kolumnę",
|
||||||
"backRelation": "Dwukierunkowa",
|
"backRelation": "Dwukierunkowa",
|
||||||
"thisDatabase": "Ta baza danych",
|
"thisDatabase": "Ta baza danych",
|
||||||
"relatedTo": "Powiązane z",
|
"relatedTo": "Powiązane z",
|
||||||
"relation": "Relacja",
|
"relation": "Relacja",
|
||||||
|
"relatedItems": "Powiązane elementy",
|
||||||
"rollup": "Skumuluje",
|
"rollup": "Skumuluje",
|
||||||
"rollupProperty": "Właściwość",
|
"rollupProperty": "Właściwość",
|
||||||
"rollupCalc": "Oblicz",
|
"rollupCalc": "Oblicz",
|
||||||
|
|
@ -187,7 +205,7 @@
|
||||||
"imgSrc": "Link do obrazu",
|
"imgSrc": "Link do obrazu",
|
||||||
"aText": "Tekst zakotwiczenia linku",
|
"aText": "Tekst zakotwiczenia linku",
|
||||||
"aTitle": "Tytuł linku",
|
"aTitle": "Tytuł linku",
|
||||||
"aHref": "Link do linku",
|
"aHref": "URL linku",
|
||||||
"code": "Kod inline",
|
"code": "Kod inline",
|
||||||
"em": "Kursywa",
|
"em": "Kursywa",
|
||||||
"strong": "Pogrubienie",
|
"strong": "Pogrubienie",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "Blok formuły",
|
"mathBlock": "Blok formuły",
|
||||||
"htmlBlock": "Blok HTML"
|
"htmlBlock": "Blok HTML"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "Kopiuj URL linku",
|
||||||
"selected": "Wybrano",
|
"selected": "Wybrano",
|
||||||
"loadMore": "Załaduj więcej",
|
"loadMore": "Załaduj więcej",
|
||||||
"tempUnlock": "Tymczasowe odblokowanie",
|
"tempUnlock": "Tymczasowe odblokowanie",
|
||||||
"cancelTempUnlock": "Anuluj tymczasowe odblokowanie",
|
"cancelTempUnlock": "Anuluj tymczasowe odblokowanie",
|
||||||
"addFilter": "Dodaj filtr",
|
"addFilter": "Dodaj filtr",
|
||||||
"removeFilters": "Wyczyść filtr",
|
"removeFilters": "Wyczyść filtr",
|
||||||
|
"addSort": "Dodaj sortowanie",
|
||||||
|
"removeSorts": "Wyczyść sortowanie",
|
||||||
"checked": "Zaznaczone",
|
"checked": "Zaznaczone",
|
||||||
"unchecked": "Nie zaznaczone",
|
"unchecked": "Nie zaznaczone",
|
||||||
"percentChecked": "Procent zaznaczonych",
|
"percentChecked": "Procent zaznaczonych",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "Import zakończony",
|
"imported": "Import zakończony",
|
||||||
"mirrorTip": "Lustro bazy danych, wszystkie aktualizacje danych będą synchronizowane z wszystkimi innymi lustrami",
|
"mirrorTip": "Lustro bazy danych, wszystkie aktualizacje danych będą synchronizowane z wszystkimi innymi lustrami",
|
||||||
"includeTime": "Uwzględnij czas",
|
"includeTime": "Uwzględnij czas",
|
||||||
"accountSupport1": "Od pierwszego publicznego wydania 31 sierpnia 2020 r. SiYuan został wydany łącznie 776 razy, rozwiązano wymagania użytkowników i opinie 13840 razy oraz przesłano kod 17637 razy. Nie możemy się obejść bez twojego wsparcia i opinii.",
|
"accountSupport1": "Od pierwszego publicznego wydania 31 sierpnia 2020 r. SiYuan został wydany ponad 830 razy, rozwiązano wymagania użytkowników i opinie ponad 15000 razy oraz przesłano kod ponad 19800 razy. Nie możemy się obejść bez twojego wsparcia i opinii.",
|
||||||
"accountSupport2": "Twoje wsparcie i opinie umożliwią SiYuanowi dalszy rozwój. Zawsze będziemy przyjaciółmi użytkowników, ciężko pracując, aby poprawić produkty i zapewnić lepsze wrażenia w zarządzaniu wiedzą. Bardzo dziękujemy za twoje wsparcie!",
|
"accountSupport2": "Twoje wsparcie i opinie umożliwią SiYuanowi dalszy rozwój. Zawsze będziemy przyjaciółmi użytkowników, ciężko pracując, aby poprawić produkty i zapewnić lepsze wrażenia w zarządzaniu wiedzą. Bardzo dziękujemy za twoje wsparcie!",
|
||||||
"goToTab1": "Przejdź do zakładki #1",
|
"goToTab1": "Przejdź do zakładki #1",
|
||||||
"goToTab2": "Przejdź do zakładki #2",
|
"goToTab2": "Przejdź do zakładki #2",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "Po włączeniu wbudowane bloki będą wyświetlać okruszki, wbudowane bloki w super blokach ignorują tę opcję i nigdy nie pokazują okruszków",
|
"embedBlockBreadcrumbTip": "Po włączeniu wbudowane bloki będą wyświetlać okruszki, wbudowane bloki w super blokach ignorują tę opcję i nigdy nie pokazują okruszków",
|
||||||
"appearanceMode": "Tryb wyglądu",
|
"appearanceMode": "Tryb wyglądu",
|
||||||
"editReadonly": "Tryb tylko do odczytu",
|
"editReadonly": "Tryb tylko do odczytu",
|
||||||
"editReadonlyTip": "Po włączeniu dokument będzie domyślnie tylko do odczytu",
|
"editReadonlyTip": "Po włączeniu edytor dokumentów będzie domyślnie tylko do odczytu. Nadal można wyszukiwać i zastępować tekst, modyfikować zawartość przez API",
|
||||||
"generateConflictDoc": "Generuj dokument konfliktowy podczas synchronizacji konfliktów",
|
"generateConflictDoc": "Generuj dokument konfliktowy podczas synchronizacji konfliktów",
|
||||||
"generateConflictDocTip": "Po włączeniu, dokument konfliktowy zostanie wygenerowany, gdy wystąpi konflikt synchronizacji, aby można go było otworzyć i przeglądać bezpośrednio. Niezależnie od tego, czy włączone, [Historia danych] zarejestruje dokument konfliktowy",
|
"generateConflictDocTip": "Po włączeniu, dokument konfliktowy zostanie wygenerowany, gdy wystąpi konflikt synchronizacji, aby można go było otworzyć i przeglądać bezpośrednio. Niezależnie od tego, czy włączone, [Historia danych] zarejestruje dokument konfliktowy",
|
||||||
"deleteOpConfirm": "⚠️ Potwierdzenie operacji usunięcia",
|
"deleteOpConfirm": "⚠️ Potwierdzenie operacji usunięcia",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "Proszę używać formatu obiektu JSON (<code class='fn__code'>{}</code>) do opakowania definicji makr, np. <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
"katexMacrosTip": "Proszę używać formatu obiektu JSON (<code class='fn__code'>{}</code>) do opakowania definicji makr, np. <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
||||||
"systemLogTip": "Rekordy działania programu są zapisywane w dzienniku systemowym. Eksportując dziennik systemowy i przesyłając go programistom, można lepiej pomóc w diagnozowaniu problemów z programem",
|
"systemLogTip": "Rekordy działania programu są zapisywane w dzienniku systemowym. Eksportując dziennik systemowy i przesyłając go programistom, można lepiej pomóc w diagnozowaniu problemów z programem",
|
||||||
"systemLog": "Dziennik systemowy",
|
"systemLog": "Dziennik systemowy",
|
||||||
"syncConfGuide1": "Zainicjować klucz synchronizacji",
|
"syncConfGuide1": "Zainicjować klucz repozytorium danych",
|
||||||
"syncConfGuide2": "Ten klucz jest używany do szyfrowania end-to-end synchronizacji danych<br>Klucz jest generowany na podstawie hasła, które wprowadzasz, proszę zapamiętać hasło",
|
"syncConfGuide2": "Ten klucz jest używany do szyfrowania end-to-end synchronizacji danych<br>Klucz jest generowany na podstawie hasła, które wprowadzasz, proszę zapamiętać hasło",
|
||||||
"syncConfGuide3": "Katalog synchronizacji w chmurze jest używany do przechowywania zaszyfrowanych danych odpowiadających bieżącemu obszarowi roboczemu. Domyślna nazwa to <code>main</code>. Jeśli masz tylko jeden obszar roboczy do synchronizacji, użyj <code>main</code> bezpośrednio",
|
"syncConfGuide3": "Katalog synchronizacji w chmurze jest używany do przechowywania zaszyfrowanych danych odpowiadających bieżącemu obszarowi roboczemu. Domyślna nazwa to <code>main</code>. Jeśli masz tylko jeden obszar roboczy do synchronizacji, użyj <code>main</code> bezpośrednio",
|
||||||
"syncConfGuide4": "Synchronizować teraz?",
|
"syncConfGuide4": "Synchronizować teraz?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "Dynamiczny tekst zakotwiczenia",
|
"turnToDynamic": "Dynamiczny tekst zakotwiczenia",
|
||||||
"sizeLimit": "Limit",
|
"sizeLimit": "Limit",
|
||||||
"trafficStat": "Statystyki ruchu",
|
"trafficStat": "Statystyki ruchu",
|
||||||
"hideHeadingBelowBlocks": "Ukryj bloki poniżej nagłówka",
|
"headingEmbedMode": "Ustawienia osadzania bloku nagłówka",
|
||||||
|
"headingEmbedModeTip": "Ustaw styl wyświetlania bloków nagłówkowych w blokach osadzonych",
|
||||||
|
"showHeadingWithBlocks": "Pokaż nagłówek z blokami poniżej",
|
||||||
|
"showHeadingOnlyTitle": "Pokaż tylko nagłówek",
|
||||||
|
"showHeadingOnlyBlocks": "Pokaż tylko bloki poniżej nagłówka",
|
||||||
"matchDiacritics": "Dopasuj diakrytyki",
|
"matchDiacritics": "Dopasuj diakrytyki",
|
||||||
"copyHPath": "Kopiuj czytelną ścieżkę",
|
"copyHPath": "Kopiuj czytelną ścieżkę",
|
||||||
"justify": "Wyrównanie",
|
"justify": "Wyrównanie",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "Nagłówek 4",
|
"heading4": "Nagłówek 4",
|
||||||
"heading5": "Nagłówek 5",
|
"heading5": "Nagłówek 5",
|
||||||
"heading6": "Nagłówek 6",
|
"heading6": "Nagłówek 6",
|
||||||
|
"outlineExpandLevel": "Poziom rozwinięcia",
|
||||||
|
"expandAll": "Rozwiń wszystko",
|
||||||
|
"outlineKeepCurrentExpand": "Utrzymuj bieżący tytuł rozwinięty",
|
||||||
"general": "Ogólne",
|
"general": "Ogólne",
|
||||||
"insertBefore": "Wstaw pusty blok przed blokiem, w którym znajduje się kursor",
|
|
||||||
"insertAfter": "Wstaw pusty blok po bloku, w którym znajduje się kursor",
|
|
||||||
"list1": "Lista",
|
"list1": "Lista",
|
||||||
"element": "element",
|
"element": "element",
|
||||||
"closeTab": "Zamknij bieżący zakładkę",
|
"closeTab": "Zamknij bieżący zakładkę",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "Wcięcie",
|
"indent": "Wcięcie",
|
||||||
"info": "Informacje",
|
"info": "Informacje",
|
||||||
"inline-code": "Kod w linii",
|
"inline-code": "Kod w linii",
|
||||||
"insert-after": "Wstaw blok po",
|
"insertAfter": "Wstaw blok poniżej",
|
||||||
"insert-before": "Wstaw blok przed",
|
"insertBefore": "Wstaw blok powyżej",
|
||||||
"insertColumnLeft": "Wstaw 1 w lewo",
|
"insertColumnLeft": "Wstaw 1 w lewo",
|
||||||
"insertColumnRight": "Wstaw 1 w prawo",
|
"insertColumnRight": "Wstaw 1 w prawo",
|
||||||
"insertRowAbove": "Wstaw 1 powyżej",
|
"insertRowAbove": "Wstaw 1 powyżej",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tabela",
|
"table": "Tabela",
|
||||||
"gallery": "Karta",
|
"gallery": "Karta",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Klucz główny",
|
"key": "Klucz główny",
|
||||||
"select": "Wybierz"
|
"select": "Wybierz"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "Ten blok został już dodany do bazy danych [%s]",
|
"269": "Ten blok został już dodany do bazy danych [%s]",
|
||||||
"270": "Optymalizacja indeksu danych, proszę czekać...",
|
"270": "Optymalizacja indeksu danych, proszę czekać...",
|
||||||
"271": "Optymalizacja indeksu danych zakończona, zwolniono [%s] miejsca na dysku",
|
"271": "Optymalizacja indeksu danych zakończona, zwolniono [%s] miejsca na dysku",
|
||||||
"272": "Nienazwane pole"
|
"272": "Nienazwane pole",
|
||||||
|
"273": "Nie twórz przestrzeni roboczej w katalogu głównym partycji, utwórz nowy folder jako przestrzeń roboczą",
|
||||||
|
"274": "Ten folder zawiera inne pliki, utwórz nowy folder jako przestrzeń roboczą"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "Imprimir",
|
||||||
|
"clickArrow": "Clique na seta",
|
||||||
|
"foldAll": "Recolher tudo",
|
||||||
|
"expandSameLevelHeading": "Expandir títulos do mesmo nível",
|
||||||
|
"foldSameLevelHeading": "Recolher títulos do mesmo nível",
|
||||||
|
"expandChildHeading": "Expandir subtítulos",
|
||||||
|
"foldChildHeading": "Recolher subtítulos",
|
||||||
|
"addChildHeading": "Adicionar subtítulo",
|
||||||
|
"insertSameLevelHeadingBefore": "Inserir título do mesmo nível antes",
|
||||||
|
"insertSameLevelHeadingAfter": "Inserir título do mesmo nível depois",
|
||||||
|
"upgrade": "Atualizar",
|
||||||
|
"downgrade": "Rebaixar",
|
||||||
|
"clipboardPermissionDenied": "Permissão da área de transferência negada. Permita o acesso à área de transferência na barra de endereço do navegador e tente novamente.",
|
||||||
|
"jumpTo": "Ir para",
|
||||||
"vacuumDataIndex": "Otimizar índice",
|
"vacuumDataIndex": "Otimizar índice",
|
||||||
"vacuumDataIndexTip": "Verifique o índice de dados, libere espaço e melhore o desempenho do índice",
|
"vacuumDataIndexTip": "Verifique o índice de dados, libere espaço e melhore o desempenho do índice",
|
||||||
"rebuildDataIndex": "Reconstruir índice",
|
"rebuildDataIndex": "Reconstruir índice",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "Mostrar ícones de entradas",
|
"showAllEntriesIcons": "Mostrar ícones de entradas",
|
||||||
"wrapAllFields": "Quebrar automaticamente os campos",
|
"wrapAllFields": "Quebrar automaticamente os campos",
|
||||||
"gallery": "Cartão",
|
"gallery": "Cartão",
|
||||||
|
"kanban": "Kanban",
|
||||||
"newTag": "Nova tag",
|
"newTag": "Nova tag",
|
||||||
"pleaseWait": "Por favor, aguarde...",
|
"pleaseWait": "Por favor, aguarde...",
|
||||||
"reconnectPrompt": "Após alternar aplicativos, levará algum tempo para restaurar a operação do kernel SiYuan. Por favor, aguarde alguns segundos ou clique no botão \"Tentar novamente\"",
|
"reconnectPrompt": "Após alternar aplicativos, levará algum tempo para restaurar a operação do kernel SiYuan. Por favor, aguarde alguns segundos ou clique no botão \"Tentar novamente\"",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "Desvincular bloco",
|
"unbindBlock": "Desvincular bloco",
|
||||||
"showTitle": "Mostrar título do banco de dados",
|
"showTitle": "Mostrar título do banco de dados",
|
||||||
"fillCreated": "Preencher automaticamente a hora de criação",
|
"fillCreated": "Preencher automaticamente a hora de criação",
|
||||||
|
"fillSpecificTime": "Preencher horário específico por padrão",
|
||||||
"removeCard": "Remover cartão de memorização",
|
"removeCard": "Remover cartão de memorização",
|
||||||
"updateLayout": "Atualizar layout",
|
"updateLayout": "Atualizar layout",
|
||||||
"dndFolderTip": "Observe que ${x} apenas insere o hiperlink file:// e não copia o arquivo",
|
"dndFolderTip": "Observe que ${x} apenas insere o hiperlink file:// e não copia o arquivo",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "Limpar o armazenamento em nuvem excluirá completamente todos os instantâneos não referenciados e objetos de dados relacionados. <ul class='fn__list'><li>Certifique-se de que outros dispositivos pausaram a sincronização antes da execução</li><li>A operação de limpeza é muito demorada, certifique-se de que a rede está estável</li></ul>Tem certeza que deseja executar agora?",
|
"cloudStoragePurgeConfirm": "Limpar o armazenamento em nuvem excluirá completamente todos os instantâneos não referenciados e objetos de dados relacionados. <ul class='fn__list'><li>Certifique-se de que outros dispositivos pausaram a sincronização antes da execução</li><li>A operação de limpeza é muito demorada, certifique-se de que a rede está estável</li></ul>Tem certeza que deseja executar agora?",
|
||||||
"dragFill": "Arrastar verticalmente para preencher valor",
|
"dragFill": "Arrastar verticalmente para preencher valor",
|
||||||
"switchReadonly": "Alternar modo somente leitura",
|
"switchReadonly": "Alternar modo somente leitura",
|
||||||
"original": "Original",
|
"original": "Exibir valor original",
|
||||||
|
"uniqueValues": "Exibir valores únicos",
|
||||||
"selectRelation": "Por favor, selecione o campo relacionado primeiro",
|
"selectRelation": "Por favor, selecione o campo relacionado primeiro",
|
||||||
"backRelation": "Bidirecional",
|
"backRelation": "Bidirecional",
|
||||||
"thisDatabase": "Este banco de dados",
|
"thisDatabase": "Este banco de dados",
|
||||||
"relatedTo": "Relacionado a",
|
"relatedTo": "Relacionado a",
|
||||||
"relation": "Relação",
|
"relation": "Relação",
|
||||||
|
"relatedItems": "Itens relacionados",
|
||||||
"rollup": "Rollup",
|
"rollup": "Rollup",
|
||||||
"rollupProperty": "Propriedade",
|
"rollupProperty": "Propriedade",
|
||||||
"rollupCalc": "Calcular",
|
"rollupCalc": "Calcular",
|
||||||
|
|
@ -187,7 +205,7 @@
|
||||||
"imgSrc": "Link da imagem",
|
"imgSrc": "Link da imagem",
|
||||||
"aText": "Texto âncora do link",
|
"aText": "Texto âncora do link",
|
||||||
"aTitle": "Título do link",
|
"aTitle": "Título do link",
|
||||||
"aHref": "Link do link",
|
"aHref": "URL do link",
|
||||||
"code": "código inline",
|
"code": "código inline",
|
||||||
"em": "Itálico",
|
"em": "Itálico",
|
||||||
"strong": "Negrito",
|
"strong": "Negrito",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "Bloco de fórmula",
|
"mathBlock": "Bloco de fórmula",
|
||||||
"htmlBlock": "Bloco HTML"
|
"htmlBlock": "Bloco HTML"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "Copiar URL do link",
|
||||||
"selected": "Selecionado",
|
"selected": "Selecionado",
|
||||||
"loadMore": "Carregar mais",
|
"loadMore": "Carregar mais",
|
||||||
"tempUnlock": "Desbloquear temporariamente",
|
"tempUnlock": "Desbloquear temporariamente",
|
||||||
"cancelTempUnlock": "Cancelar desbloqueio temporário",
|
"cancelTempUnlock": "Cancelar desbloqueio temporário",
|
||||||
"addFilter": "Adicionar filtro",
|
"addFilter": "Adicionar filtro",
|
||||||
"removeFilters": "Limpar filtro",
|
"removeFilters": "Limpar filtro",
|
||||||
|
"addSort": "Adicionar ordenação",
|
||||||
|
"removeSorts": "Limpar ordenação",
|
||||||
"checked": "Marcado",
|
"checked": "Marcado",
|
||||||
"unchecked": "Desmarcado",
|
"unchecked": "Desmarcado",
|
||||||
"percentChecked": "Porcentagem marcada",
|
"percentChecked": "Porcentagem marcada",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "Importação concluída",
|
"imported": "Importação concluída",
|
||||||
"mirrorTip": "Espelhar banco de dados, todas as atualizações de dados serão sincronizadas para todos os outros espelhos",
|
"mirrorTip": "Espelhar banco de dados, todas as atualizações de dados serão sincronizadas para todos os outros espelhos",
|
||||||
"includeTime": "Incluir hora",
|
"includeTime": "Incluir hora",
|
||||||
"accountSupport1": "Desde seu primeiro lançamento público em 31 de agosto de 2020, o SiYuan foi lançado 776 vezes, resolveu requisitos e feedbacks de usuários 13840 vezes e cometeu código 17637 vezes. Não teríamos alcançado isso sem seu apoio e feedback.",
|
"accountSupport1": "Desde seu primeiro lançamento público em 31 de agosto de 2020, o SiYuan foi lançado mais de 830 vezes, resolveu requisitos e feedbacks de usuários mais de 15000 vezes e cometeu código mais de 19800 vezes. Não teríamos alcançado isso sem seu apoio e feedback.",
|
||||||
"accountSupport2": "Seu apoio e feedback tornarão o SiYuan melhor. Seremos sempre amigos dos usuários, trabalharemos duro para melhorar os produtos e fornecer uma melhor experiência de gerenciamento de conhecimento. Muito obrigado pelo seu apoio!",
|
"accountSupport2": "Seu apoio e feedback tornarão o SiYuan melhor. Seremos sempre amigos dos usuários, trabalharemos duro para melhorar os produtos e fornecer uma melhor experiência de gerenciamento de conhecimento. Muito obrigado pelo seu apoio!",
|
||||||
"goToTab1": "Ir para aba #1",
|
"goToTab1": "Ir para aba #1",
|
||||||
"goToTab2": "Ir para aba #2",
|
"goToTab2": "Ir para aba #2",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "Quando ativado, blocos incorporados exibirão navegação estrutural, blocos incorporados em super blocos ignoram esta opção e nunca mostram navegação estrutural",
|
"embedBlockBreadcrumbTip": "Quando ativado, blocos incorporados exibirão navegação estrutural, blocos incorporados em super blocos ignoram esta opção e nunca mostram navegação estrutural",
|
||||||
"appearanceMode": "Modo de Aparência",
|
"appearanceMode": "Modo de Aparência",
|
||||||
"editReadonly": "Modo somente leitura",
|
"editReadonly": "Modo somente leitura",
|
||||||
"editReadonlyTip": "Quando ativado, o documento ficará somente leitura por padrão",
|
"editReadonlyTip": "Quando ativado, o editor de documentos ficará somente leitura por padrão. Ainda é possível buscar e substituir texto, modificar conteúdo via API",
|
||||||
"generateConflictDoc": "Gerar documentação de conflito quando houver conflitos de sincronização",
|
"generateConflictDoc": "Gerar documentação de conflito quando houver conflitos de sincronização",
|
||||||
"generateConflictDocTip": "Quando ativado, um documento de conflito será gerado quando ocorrer um conflito de sincronização, para que possa ser aberto e visualizado diretamente. Independentemente de estar ativado ou não, o [Histórico de Dados] registrará o documento de conflito",
|
"generateConflictDocTip": "Quando ativado, um documento de conflito será gerado quando ocorrer um conflito de sincronização, para que possa ser aberto e visualizado diretamente. Independentemente de estar ativado ou não, o [Histórico de Dados] registrará o documento de conflito",
|
||||||
"deleteOpConfirm": "⚠️ Confirmação de operação de exclusão",
|
"deleteOpConfirm": "⚠️ Confirmação de operação de exclusão",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "Use o formato de objeto JSON (<code class='fn__code'>{}</code>) para envolver definições de macro, por exemplo <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
"katexMacrosTip": "Use o formato de objeto JSON (<code class='fn__code'>{}</code>) para envolver definições de macro, por exemplo <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
||||||
"systemLogTip": "Registros de execução do programa são salvos no log do sistema. Exportando o log do sistema e enviando para os desenvolvedores, pode ajudar melhor os desenvolvedores a diagnosticar problemas do programa",
|
"systemLogTip": "Registros de execução do programa são salvos no log do sistema. Exportando o log do sistema e enviando para os desenvolvedores, pode ajudar melhor os desenvolvedores a diagnosticar problemas do programa",
|
||||||
"systemLog": "Log do sistema",
|
"systemLog": "Log do sistema",
|
||||||
"syncConfGuide1": "Inicializar chave de sincronização",
|
"syncConfGuide1": "Inicializar chave do repositório de dados",
|
||||||
"syncConfGuide2": "Esta chave é usada para criptografia de ponta a ponta de sincronização de dados<br>A chave é gerada com base na senha que você insere, lembre-se da senha",
|
"syncConfGuide2": "Esta chave é usada para criptografia de ponta a ponta de sincronização de dados<br>A chave é gerada com base na senha que você insere, lembre-se da senha",
|
||||||
"syncConfGuide3": "O diretório de sincronização em nuvem é usado para armazenar os dados criptografados correspondentes ao espaço de trabalho atual. O nome padrão é <code>main</code>. Se você tiver apenas um espaço de trabalho para sincronizar, use <code>main</code> diretamente",
|
"syncConfGuide3": "O diretório de sincronização em nuvem é usado para armazenar os dados criptografados correspondentes ao espaço de trabalho atual. O nome padrão é <code>main</code>. Se você tiver apenas um espaço de trabalho para sincronizar, use <code>main</code> diretamente",
|
||||||
"syncConfGuide4": "Sincronizar agora?",
|
"syncConfGuide4": "Sincronizar agora?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "Texto âncora dinâmico",
|
"turnToDynamic": "Texto âncora dinâmico",
|
||||||
"sizeLimit": "Limite",
|
"sizeLimit": "Limite",
|
||||||
"trafficStat": "Estatísticas de tráfego",
|
"trafficStat": "Estatísticas de tráfego",
|
||||||
"hideHeadingBelowBlocks": "Ocultar blocos abaixo do título",
|
"headingEmbedMode": "Configurações de incorporação de bloco de cabeçalho",
|
||||||
|
"headingEmbedModeTip": "Definir o estilo de exibição dos blocos de cabeçalho nos blocos incorporados",
|
||||||
|
"showHeadingWithBlocks": "Mostrar título com blocos abaixo",
|
||||||
|
"showHeadingOnlyTitle": "Mostrar apenas o título",
|
||||||
|
"showHeadingOnlyBlocks": "Mostrar apenas blocos abaixo do título",
|
||||||
"matchDiacritics": "Corresponder Diacríticos",
|
"matchDiacritics": "Corresponder Diacríticos",
|
||||||
"copyHPath": "Copiar caminho legível",
|
"copyHPath": "Copiar caminho legível",
|
||||||
"justify": "Justificar",
|
"justify": "Justificar",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "Título 4",
|
"heading4": "Título 4",
|
||||||
"heading5": "Título 5",
|
"heading5": "Título 5",
|
||||||
"heading6": "Título 6",
|
"heading6": "Título 6",
|
||||||
|
"outlineExpandLevel": "Nível de expansão",
|
||||||
|
"expandAll": "Expandir tudo",
|
||||||
|
"outlineKeepCurrentExpand": "Manter título atual expandido",
|
||||||
"general": "Geral",
|
"general": "Geral",
|
||||||
"insertBefore": "Inserir um bloco vazio antes do bloco onde está o cursor",
|
|
||||||
"insertAfter": "Inserir um bloco vazio após o bloco onde está o cursor",
|
|
||||||
"list1": "Lista",
|
"list1": "Lista",
|
||||||
"element": "Elemento",
|
"element": "Elemento",
|
||||||
"closeTab": "Fechar Aba Atual",
|
"closeTab": "Fechar Aba Atual",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "Recuar",
|
"indent": "Recuar",
|
||||||
"info": "Informação",
|
"info": "Informação",
|
||||||
"inline-code": "Código Inline",
|
"inline-code": "Código Inline",
|
||||||
"insert-after": "Inserir bloco depois",
|
"insertAfter": "Inserir bloco abaixo",
|
||||||
"insert-before": "Inserir bloco Antes",
|
"insertBefore": "Inserir bloco acima",
|
||||||
"insertColumnLeft": "Inserir 1 à esquerda",
|
"insertColumnLeft": "Inserir 1 à esquerda",
|
||||||
"insertColumnRight": "Inserir 1 à direita",
|
"insertColumnRight": "Inserir 1 à direita",
|
||||||
"insertRowAbove": "Inserir 1 acima",
|
"insertRowAbove": "Inserir 1 acima",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Tabela",
|
"table": "Tabela",
|
||||||
"gallery": "Cartão",
|
"gallery": "Cartão",
|
||||||
|
"kanban": "Kanban",
|
||||||
"key": "Chave Primária",
|
"key": "Chave Primária",
|
||||||
"select": "Selecionar"
|
"select": "Selecionar"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "Este bloco já foi adicionado ao banco de dados [%s]",
|
"269": "Este bloco já foi adicionado ao banco de dados [%s]",
|
||||||
"270": "Otimizando o índice de dados, por favor aguarde...",
|
"270": "Otimizando o índice de dados, por favor aguarde...",
|
||||||
"271": "Otimização do índice de dados concluída, [%s] de espaço liberado",
|
"271": "Otimização do índice de dados concluída, [%s] de espaço liberado",
|
||||||
"272": "Campo sem nome"
|
"272": "Campo sem nome",
|
||||||
|
"273": "Não crie o espaço de trabalho na raiz da partição, crie uma nova pasta para o espaço de trabalho",
|
||||||
|
"274": "Esta pasta contém outros arquivos, crie uma nova pasta para o espaço de trabalho"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "Печать",
|
||||||
|
"clickArrow": "Нажмите стрелку",
|
||||||
|
"foldAll": "Свернуть всё",
|
||||||
|
"expandSameLevelHeading": "Развернуть заголовки того же уровня",
|
||||||
|
"foldSameLevelHeading": "Свернуть заголовки того же уровня",
|
||||||
|
"expandChildHeading": "Развернуть дочерние заголовки",
|
||||||
|
"foldChildHeading": "Свернуть дочерние заголовки",
|
||||||
|
"addChildHeading": "Добавить дочерний заголовок",
|
||||||
|
"insertSameLevelHeadingBefore": "Вставить заголовок того же уровня перед",
|
||||||
|
"insertSameLevelHeadingAfter": "Вставить заголовок того же уровня после",
|
||||||
|
"upgrade": "Обновить",
|
||||||
|
"downgrade": "Понизить",
|
||||||
|
"clipboardPermissionDenied": "Доступ к буферу обмена отклонён. Разрешите доступ в адресной строке браузера и попробуйте снова.",
|
||||||
|
"jumpTo": "Перейти к",
|
||||||
"vacuumDataIndex": "Оптимизация индекса",
|
"vacuumDataIndex": "Оптимизация индекса",
|
||||||
"vacuumDataIndexTip": "Проверить индекс данных, освободить место и повысить производительность индекса",
|
"vacuumDataIndexTip": "Проверить индекс данных, освободить место и повысить производительность индекса",
|
||||||
"rebuildDataIndex": "Перестроить индекс",
|
"rebuildDataIndex": "Перестроить индекс",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "Показать значки записей",
|
"showAllEntriesIcons": "Показать значки записей",
|
||||||
"wrapAllFields": "Автоматический перенос полей",
|
"wrapAllFields": "Автоматический перенос полей",
|
||||||
"gallery": "Карточка",
|
"gallery": "Карточка",
|
||||||
|
"kanban": "Канбан",
|
||||||
"newTag": "Новый тег",
|
"newTag": "Новый тег",
|
||||||
"pleaseWait": "Пожалуйста, подождите...",
|
"pleaseWait": "Пожалуйста, подождите...",
|
||||||
"reconnectPrompt": "После переключения приложений потребуется некоторое время, чтобы восстановить работу ядра SiYuan. Пожалуйста, подождите несколько секунд или нажмите кнопку «Повторить»",
|
"reconnectPrompt": "После переключения приложений потребуется некоторое время, чтобы восстановить работу ядра SiYuan. Пожалуйста, подождите несколько секунд или нажмите кнопку «Повторить»",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "Отвязать блок",
|
"unbindBlock": "Отвязать блок",
|
||||||
"showTitle": "Показать заголовок базы данных",
|
"showTitle": "Показать заголовок базы данных",
|
||||||
"fillCreated": "Заполнить время создания по умолчанию",
|
"fillCreated": "Заполнить время создания по умолчанию",
|
||||||
|
"fillSpecificTime": "Заполнить конкретное время по умолчанию",
|
||||||
"removeCard": "Удалить карточку",
|
"removeCard": "Удалить карточку",
|
||||||
"updateLayout": "Обновить макет",
|
"updateLayout": "Обновить макет",
|
||||||
"dndFolderTip": "Пожалуйста, обратите внимание, что ${x} только вставляет файл:// гиперссылку и не копирует файл",
|
"dndFolderTip": "Пожалуйста, обратите внимание, что ${x} только вставляет файл:// гиперссылку и не копирует файл",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "Очистка облачного хранилища полностью удалит все неиспользуемые снимки и связанные с ними объекты данных. <ul class='fn__list'><li>Пожалуйста, убедитесь, что другие устройства приостановили синхронизацию перед выполнением</li><li>Операция очистки занимает много времени, пожалуйста, убедитесь, что сеть стабильна</li></ul>Вы уверены, что хотите выполнить её сейчас?",
|
"cloudStoragePurgeConfirm": "Очистка облачного хранилища полностью удалит все неиспользуемые снимки и связанные с ними объекты данных. <ul class='fn__list'><li>Пожалуйста, убедитесь, что другие устройства приостановили синхронизацию перед выполнением</li><li>Операция очистки занимает много времени, пожалуйста, убедитесь, что сеть стабильна</li></ul>Вы уверены, что хотите выполнить её сейчас?",
|
||||||
"dragFill": "Перетащите вертикально, чтобы заполнить значение",
|
"dragFill": "Перетащите вертикально, чтобы заполнить значение",
|
||||||
"switchReadonly": "Переключить режим только для чтения",
|
"switchReadonly": "Переключить режим только для чтения",
|
||||||
"original": "Оригинал",
|
"original": "Показать исходное значение",
|
||||||
|
"uniqueValues": "Показать уникальные значения",
|
||||||
"selectRelation": "Пожалуйста, сначала выберите связанную колонку",
|
"selectRelation": "Пожалуйста, сначала выберите связанную колонку",
|
||||||
"backRelation": "Двустороннее",
|
"backRelation": "Двустороннее",
|
||||||
"thisDatabase": "Эта база данных",
|
"thisDatabase": "Эта база данных",
|
||||||
"relatedTo": "Связано с",
|
"relatedTo": "Связано с",
|
||||||
"relation": "Связь",
|
"relation": "Связь",
|
||||||
|
"relatedItems": "Связанные элементы",
|
||||||
"rollup": "Свод",
|
"rollup": "Свод",
|
||||||
"rollupProperty": "Свойство",
|
"rollupProperty": "Свойство",
|
||||||
"rollupCalc": "Вычислить",
|
"rollupCalc": "Вычислить",
|
||||||
|
|
@ -187,7 +205,7 @@
|
||||||
"imgSrc": "Ссылка на изображение",
|
"imgSrc": "Ссылка на изображение",
|
||||||
"aText": "Анкор текста ссылки",
|
"aText": "Анкор текста ссылки",
|
||||||
"aTitle": "Заголовок ссылки",
|
"aTitle": "Заголовок ссылки",
|
||||||
"aHref": "Ссылка ссылки",
|
"aHref": "URL ссылки",
|
||||||
"code": "встроенный код",
|
"code": "встроенный код",
|
||||||
"em": "Курсив",
|
"em": "Курсив",
|
||||||
"strong": "Жирный шрифт",
|
"strong": "Жирный шрифт",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "Блок формулы",
|
"mathBlock": "Блок формулы",
|
||||||
"htmlBlock": "HTML блок"
|
"htmlBlock": "HTML блок"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "Копировать URL ссылки",
|
||||||
"selected": "Выбрано",
|
"selected": "Выбрано",
|
||||||
"loadMore": "Загрузить еще",
|
"loadMore": "Загрузить еще",
|
||||||
"tempUnlock": "Временно разблокировать",
|
"tempUnlock": "Временно разблокировать",
|
||||||
"cancelTempUnlock": "Отменить временную разблокировку",
|
"cancelTempUnlock": "Отменить временную разблокировку",
|
||||||
"addFilter": "Добавить фильтр",
|
"addFilter": "Добавить фильтр",
|
||||||
"removeFilters": "Очистить фильтр",
|
"removeFilters": "Очистить фильтр",
|
||||||
|
"addSort": "Добавить сортировку",
|
||||||
|
"removeSorts": "Очистить сортировку",
|
||||||
"checked": "Отмечено",
|
"checked": "Отмечено",
|
||||||
"unchecked": "Не отмечено",
|
"unchecked": "Не отмечено",
|
||||||
"percentChecked": "Процент отмеченных",
|
"percentChecked": "Процент отмеченных",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "Импорт завершен",
|
"imported": "Импорт завершен",
|
||||||
"mirrorTip": "Зеркало базы данных, все обновления данных будут синхронизированы со всеми другими зеркалами",
|
"mirrorTip": "Зеркало базы данных, все обновления данных будут синхронизированы со всеми другими зеркалами",
|
||||||
"includeTime": "Включить время",
|
"includeTime": "Включить время",
|
||||||
"accountSupport1": "С момента своего первого публичного релиза 31 августа 2020 года SiYuan был выпущен в общей сложности 776 раз, решив 13840 требований и обратной связи от пользователей и закомитировав 17637 раз. Мы не можем обойтись без вашей поддержки и обратной связи.",
|
"accountSupport1": "С момента своего первого публичного релиза 31 августа 2020 года SiYuan был выпущен более 830 раз, решив более 15000 требований и обратной связи от пользователей и закомитировав более 19800 раз. Мы не можем обойтись без вашей поддержки и обратной связи.",
|
||||||
"accountSupport2": "Ваша поддержка и обратная связь позволят SiYuan развиваться и улучшаться. Мы всегда будем друзьями с пользователями, всегда будем работать над улучшением продуктов и предоставлять вам лучший опыт управления знаниями. Большое спасибо за вашу поддержку!",
|
"accountSupport2": "Ваша поддержка и обратная связь позволят SiYuan развиваться и улучшаться. Мы всегда будем друзьями с пользователями, всегда будем работать над улучшением продуктов и предоставлять вам лучший опыт управления знаниями. Большое спасибо за вашу поддержку!",
|
||||||
"goToTab1": "Перейти на вкладку #1",
|
"goToTab1": "Перейти на вкладку #1",
|
||||||
"goToTab2": "Перейти на вкладку #2",
|
"goToTab2": "Перейти на вкладку #2",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "После включения вложенные блоки будут отображать крошки, вложенные блоки в супер блоках игнорируют эту опцию и никогда не показывают крошки",
|
"embedBlockBreadcrumbTip": "После включения вложенные блоки будут отображать крошки, вложенные блоки в супер блоках игнорируют эту опцию и никогда не показывают крошки",
|
||||||
"appearanceMode": "Режим внешнего вида",
|
"appearanceMode": "Режим внешнего вида",
|
||||||
"editReadonly": "Режим только для чтения",
|
"editReadonly": "Режим только для чтения",
|
||||||
"editReadonlyTip": "После включения документ будет по умолчанию только для чтения",
|
"editReadonlyTip": "После включения редактор документов будет по умолчанию только для чтения. По-прежнему можно искать и заменять текст, изменять содержимое через API",
|
||||||
"generateConflictDoc": "Создавать документацию конфликтов при возникновении конфликтов синхронизации",
|
"generateConflictDoc": "Создавать документацию конфликтов при возникновении конфликтов синхронизации",
|
||||||
"generateConflictDocTip": "После включения при возникновении конфликта синхронизации будет генерироваться документ конфликта, чтобы его можно было открывать и просматривать напрямую. Независимо от включения или нет, [История данных] зарегистрирует документ конфликта",
|
"generateConflictDocTip": "После включения при возникновении конфликта синхронизации будет генерироваться документ конфликта, чтобы его можно было открывать и просматривать напрямую. Независимо от включения или нет, [История данных] зарегистрирует документ конфликта",
|
||||||
"deleteOpConfirm": "⚠️ Подтверждение операции удаления",
|
"deleteOpConfirm": "⚠️ Подтверждение операции удаления",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "Пожалуйста, используйте формат JSON объекта (<code class='fn__code'>{}</code>) для обертки определений макросов, например <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
"katexMacrosTip": "Пожалуйста, используйте формат JSON объекта (<code class='fn__code'>{}</code>) для обертки определений макросов, например <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
||||||
"systemLogTip": "Записи работы программы сохраняются в системный журнал. Экспортируя системный журнал и отправив его разработчикам, это может лучше помочь разработчикам диагностировать проблемы программы",
|
"systemLogTip": "Записи работы программы сохраняются в системный журнал. Экспортируя системный журнал и отправив его разработчикам, это может лучше помочь разработчикам диагностировать проблемы программы",
|
||||||
"systemLog": "Системный журнал",
|
"systemLog": "Системный журнал",
|
||||||
"syncConfGuide1": "Инициализировать ключ синхронизации",
|
"syncConfGuide1": "Инициализировать ключ репозитория данных",
|
||||||
"syncConfGuide2": "Этот ключ используется для end-to-end шифрования данных синхронизации<br>Ключ генерируется на основе пароля, который вы вводите, пожалуйста, запомните пароль",
|
"syncConfGuide2": "Этот ключ используется для end-to-end шифрования данных синхронизации<br>Ключ генерируется на основе пароля, который вы вводите, пожалуйста, запомните пароль",
|
||||||
"syncConfGuide3": "Каталог облачной синхронизации используется для хранения зашифрованных данных, соответствующих текущему рабочему пространству. Имя по умолчанию <code>main</code>. Если у вас только одно рабочее пространство для синхронизации, используйте <code>main</code> непосредственно",
|
"syncConfGuide3": "Каталог облачной синхронизации используется для хранения зашифрованных данных, соответствующих текущему рабочему пространству. Имя по умолчанию <code>main</code>. Если у вас только одно рабочее пространство для синхронизации, используйте <code>main</code> непосредственно",
|
||||||
"syncConfGuide4": "Синхронизировать сейчас?",
|
"syncConfGuide4": "Синхронизировать сейчас?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "Динамический анкорный текст",
|
"turnToDynamic": "Динамический анкорный текст",
|
||||||
"sizeLimit": "Лимит",
|
"sizeLimit": "Лимит",
|
||||||
"trafficStat": "Статистика трафика",
|
"trafficStat": "Статистика трафика",
|
||||||
"hideHeadingBelowBlocks": "Скрыть блоки ниже заголовка",
|
"headingEmbedMode": "Настройки встраивания блока заголовка",
|
||||||
|
"headingEmbedModeTip": "Установить стиль отображения блока заголовка во встроенном блоке",
|
||||||
|
"showHeadingWithBlocks": "Показать заголовок с блоками ниже",
|
||||||
|
"showHeadingOnlyTitle": "Показать только заголовок",
|
||||||
|
"showHeadingOnlyBlocks": "Показать только блоки ниже заголовка",
|
||||||
"matchDiacritics": "Совпадение диакритики",
|
"matchDiacritics": "Совпадение диакритики",
|
||||||
"copyHPath": "Скопировать читаемый путь",
|
"copyHPath": "Скопировать читаемый путь",
|
||||||
"justify": "Выровнять",
|
"justify": "Выровнять",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "Заголовок 4",
|
"heading4": "Заголовок 4",
|
||||||
"heading5": "Заголовок 5",
|
"heading5": "Заголовок 5",
|
||||||
"heading6": "Заголовок 6",
|
"heading6": "Заголовок 6",
|
||||||
|
"outlineExpandLevel": "Уровень развертывания",
|
||||||
|
"expandAll": "Развернуть все",
|
||||||
|
"outlineKeepCurrentExpand": "Сохранять текущий заголовок развернутым",
|
||||||
"general": "Общее",
|
"general": "Общее",
|
||||||
"insertBefore": "Вставить пустой блок перед блоком, где находится курсор",
|
|
||||||
"insertAfter": "Вставить пустой блок после блока, где находится курсор",
|
|
||||||
"list1": "Список",
|
"list1": "Список",
|
||||||
"element": "элемент",
|
"element": "элемент",
|
||||||
"closeTab": "Закрыть текущую вкладку",
|
"closeTab": "Закрыть текущую вкладку",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "Отступ",
|
"indent": "Отступ",
|
||||||
"info": "Информация",
|
"info": "Информация",
|
||||||
"inline-code": "Встроенный код",
|
"inline-code": "Встроенный код",
|
||||||
"insert-after": "Вставить блок после",
|
"insertAfter": "Вставить блок ниже",
|
||||||
"insert-before": "Вставить блок до",
|
"insertBefore": "Вставить блок выше",
|
||||||
"insertColumnLeft": "Вставить 1 слева",
|
"insertColumnLeft": "Вставить 1 слева",
|
||||||
"insertColumnRight": "Вставить 1 справа",
|
"insertColumnRight": "Вставить 1 справа",
|
||||||
"insertRowAbove": "Вставить 1 сверху",
|
"insertRowAbove": "Вставить 1 сверху",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "Таблица",
|
"table": "Таблица",
|
||||||
"gallery": "Карточка",
|
"gallery": "Карточка",
|
||||||
|
"kanban": "Канбан",
|
||||||
"key": "Первичный ключ",
|
"key": "Первичный ключ",
|
||||||
"select": "Выбрать"
|
"select": "Выбрать"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "Этот блок уже добавлен в базу данных [%s]",
|
"269": "Этот блок уже добавлен в базу данных [%s]",
|
||||||
"270": "Оптимизация индекса данных, пожалуйста, подождите...",
|
"270": "Оптимизация индекса данных, пожалуйста, подождите...",
|
||||||
"271": "Оптимизация индекса данных завершена, освобождено [%s] дискового пространства",
|
"271": "Оптимизация индекса данных завершена, освобождено [%s] дискового пространства",
|
||||||
"272": "Неименованное поле"
|
"272": "Неименованное поле",
|
||||||
|
"273": "Не создавайте рабочее пространство в корневом каталоге раздела, создайте отдельную папку для рабочего пространства",
|
||||||
|
"274": "Эта папка содержит другие файлы, создайте отдельную папку для рабочего пространства"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "列印",
|
||||||
|
"clickArrow": "點擊箭頭",
|
||||||
|
"foldAll": "全部摺疊",
|
||||||
|
"expandSameLevelHeading": "展開同級標題",
|
||||||
|
"foldSameLevelHeading": "摺疊同級標題",
|
||||||
|
"expandChildHeading": "展開子標題",
|
||||||
|
"foldChildHeading": "摺疊子標題",
|
||||||
|
"addChildHeading": "新增子標題",
|
||||||
|
"insertSameLevelHeadingBefore": "在前方插入同級標題",
|
||||||
|
"insertSameLevelHeadingAfter": "在後方插入同級標題",
|
||||||
|
"upgrade": "升級",
|
||||||
|
"downgrade": "降級",
|
||||||
|
"clipboardPermissionDenied": "剪貼簿權限被拒絕,請在瀏覽器地址欄允許訪問剪貼簿後再試",
|
||||||
|
"jumpTo": "跳轉到",
|
||||||
"vacuumDataIndex": "優化索引",
|
"vacuumDataIndex": "優化索引",
|
||||||
"vacuumDataIndexTip": "校驗資料索引,釋放儲存空間並提升索引效能",
|
"vacuumDataIndexTip": "校驗資料索引,釋放儲存空間並提升索引效能",
|
||||||
"rebuildDataIndex": "重建索引",
|
"rebuildDataIndex": "重建索引",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "顯示條目圖標",
|
"showAllEntriesIcons": "顯示條目圖標",
|
||||||
"wrapAllFields": "欄位自動換行",
|
"wrapAllFields": "欄位自動換行",
|
||||||
"gallery": "卡片",
|
"gallery": "卡片",
|
||||||
|
"kanban": "看板",
|
||||||
"newTag": "新建標籤",
|
"newTag": "新建標籤",
|
||||||
"pleaseWait": "請稍等片刻...",
|
"pleaseWait": "請稍等片刻...",
|
||||||
"reconnectPrompt": "切換應用後再次進入需要一些時間恢復思源內核運行,請稍等幾秒或者點擊“重試”按鈕",
|
"reconnectPrompt": "切換應用後再次進入需要一些時間恢復思源內核運行,請稍等幾秒或者點擊“重試”按鈕",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "取消綁定塊",
|
"unbindBlock": "取消綁定塊",
|
||||||
"showTitle": "顯示資料庫標題",
|
"showTitle": "顯示資料庫標題",
|
||||||
"fillCreated": "預設填滿創建時間",
|
"fillCreated": "預設填滿創建時間",
|
||||||
|
"fillSpecificTime": "預設填入具體時間",
|
||||||
"removeCard": "移除閃卡",
|
"removeCard": "移除閃卡",
|
||||||
"updateLayout": "更新版面配置",
|
"updateLayout": "更新版面配置",
|
||||||
"dndFolderTip": "請注意 ${x} 僅插入 file:// 超鏈接,不複製檔案",
|
"dndFolderTip": "請注意 ${x} 僅插入 file:// 超鏈接,不複製檔案",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "清理雲端儲存會徹底刪除所有未引用的快照和相關資料物件。<ul class='fn__list'><li>執行前請確保其他設備已經暫停同步</li><li>清理作業非常耗時,請確保網路穩定</li></ul>確定現在就執行嗎?",
|
"cloudStoragePurgeConfirm": "清理雲端儲存會徹底刪除所有未引用的快照和相關資料物件。<ul class='fn__list'><li>執行前請確保其他設備已經暫停同步</li><li>清理作業非常耗時,請確保網路穩定</li></ul>確定現在就執行嗎?",
|
||||||
"dragFill": "垂直拖動以填充值",
|
"dragFill": "垂直拖動以填充值",
|
||||||
"switchReadonly": "唯讀模式切換",
|
"switchReadonly": "唯讀模式切換",
|
||||||
"original": "原值",
|
"original": "顯示原始值",
|
||||||
|
"uniqueValues": "顯示唯一值",
|
||||||
"selectRelation": "請先選擇關聯欄位",
|
"selectRelation": "請先選擇關聯欄位",
|
||||||
"backRelation": "雙向關聯",
|
"backRelation": "雙向關聯",
|
||||||
"thisDatabase": "目前資料庫",
|
"thisDatabase": "目前資料庫",
|
||||||
"relatedTo": "關聯至",
|
"relatedTo": "關聯至",
|
||||||
"relation": "關聯",
|
"relation": "關聯",
|
||||||
|
"relatedItems": "已關聯條目",
|
||||||
"rollup": "匯總",
|
"rollup": "匯總",
|
||||||
"rollupProperty": "總計欄位",
|
"rollupProperty": "總計欄位",
|
||||||
"rollupCalc": "彙總方式",
|
"rollupCalc": "彙總方式",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "公式塊",
|
"mathBlock": "公式塊",
|
||||||
"htmlBlock": "HTML 塊"
|
"htmlBlock": "HTML 塊"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "複製連結位址",
|
||||||
"selected": "已選擇",
|
"selected": "已選擇",
|
||||||
"loadMore": "載入更多",
|
"loadMore": "載入更多",
|
||||||
"tempUnlock": "暫時解鎖",
|
"tempUnlock": "暫時解鎖",
|
||||||
"cancelTempUnlock": "取消暫時解鎖",
|
"cancelTempUnlock": "取消暫時解鎖",
|
||||||
"addFilter": "新增篩選條件",
|
"addFilter": "新增篩選條件",
|
||||||
"removeFilters": "清空篩選規則",
|
"removeFilters": "清空篩選規則",
|
||||||
|
"addSort": "新增排序條件",
|
||||||
|
"removeSorts": "清空排序規則",
|
||||||
"checked": "已完成",
|
"checked": "已完成",
|
||||||
"unchecked": "未完成",
|
"unchecked": "未完成",
|
||||||
"percentChecked": "已完成佔比",
|
"percentChecked": "已完成佔比",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "導入完成",
|
"imported": "導入完成",
|
||||||
"mirrorTip": "鏡像資料庫,所有資料更新會同步到其他所有鏡像中",
|
"mirrorTip": "鏡像資料庫,所有資料更新會同步到其他所有鏡像中",
|
||||||
"includeTime": "具體時間",
|
"includeTime": "具體時間",
|
||||||
"accountSupport1": "自 2020 年 8 月 31 日第一次公開版本以來,思源筆記已累計發版 776 次,解決用戶需求與反饋 13840 次,提交代碼 17637 次,背後無數次的辛勤付出與長期堅持不懈的更新都 離不開您的支持與回饋。",
|
"accountSupport1": "自 2020 年 8 月 31 日第一次公開版本以來,思源筆記已累計發版超過 830 次,解決用戶需求與反饋超過 15000 次,提交代碼超過 19800 次,背後無數次的辛勤付出與長期堅持不懈的更新都離不開您的支持與回饋。",
|
||||||
"accountSupport2": "您的支持與回饋能讓思源筆記更好地開發與發展下去,我們會一直與使用者做朋友,用心做好產品,為您提供更好的知識管理體驗。 非常感謝您的支持! ",
|
"accountSupport2": "您的支持與回饋能讓思源筆記更好地開發與發展下去,我們會一直與使用者做朋友,用心做好產品,為您提供更好的知識管理體驗。 非常感謝您的支持! ",
|
||||||
"goToTab1": "跳到第一個頁籤",
|
"goToTab1": "跳到第一個頁籤",
|
||||||
"goToTab2": "跳到第二個頁籤",
|
"goToTab2": "跳到第二個頁籤",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "啟用後嵌入塊將顯示導覽路徑,在超級塊中的嵌入塊忽略該選項,始終不顯示導覽路徑",
|
"embedBlockBreadcrumbTip": "啟用後嵌入塊將顯示導覽路徑,在超級塊中的嵌入塊忽略該選項,始終不顯示導覽路徑",
|
||||||
"appearanceMode": "外觀模式",
|
"appearanceMode": "外觀模式",
|
||||||
"editReadonly": "只讀模式",
|
"editReadonly": "只讀模式",
|
||||||
"editReadonlyTip": "啟用後文檔將預設鎖定編輯",
|
"editReadonlyTip": "啟用後文檔編輯器將預設鎖定編輯。仍然能夠搜尋替換文字、透過 API 修改內容",
|
||||||
"generateConflictDoc": "同步衝突時生成衝突文檔",
|
"generateConflictDoc": "同步衝突時生成衝突文檔",
|
||||||
"generateConflictDocTip": "啟用後當同步發生衝突時會生成衝突文檔,以便直接打開查看。無論是否啟用,[資料歷史] 都會記錄衝突文檔",
|
"generateConflictDocTip": "啟用後當同步發生衝突時會生成衝突文檔,以便直接打開查看。無論是否啟用,[資料歷史] 都會記錄衝突文檔",
|
||||||
"deleteOpConfirm": "⚠️ Delete operation confirmation",
|
"deleteOpConfirm": "⚠️ Delete operation confirmation",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "請使用 JSON 對象格式(<code class='fn__code'>{}</code>)來包裹宏定義,例如 <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
"katexMacrosTip": "請使用 JSON 對象格式(<code class='fn__code'>{}</code>)來包裹宏定義,例如 <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
||||||
"systemLogTip": "系統日誌中保存了程式運行記錄,通過導出系統日誌發送給開發者可以更好地幫助開發者診斷程式問題",
|
"systemLogTip": "系統日誌中保存了程式運行記錄,通過導出系統日誌發送給開發者可以更好地幫助開發者診斷程式問題",
|
||||||
"systemLog": "系統日誌",
|
"systemLog": "系統日誌",
|
||||||
"syncConfGuide1": "初始化同步密鑰",
|
"syncConfGuide1": "初始化資料倉庫密鑰",
|
||||||
"syncConfGuide2": "該密鑰用於資料同步端到端加密<br>密鑰基於你輸入的密碼生成,請務必牢記密碼",
|
"syncConfGuide2": "該密鑰用於資料同步端到端加密<br>密鑰基於你輸入的密碼生成,請務必牢記密碼",
|
||||||
"syncConfGuide3": "雲端同步目錄用於存放當前工作空間對應的加密資料,預設名稱為 <code>main</code>。如果你只有一個工作空間需要同步,直接使用 <code>main</code> 即可",
|
"syncConfGuide3": "雲端同步目錄用於存放當前工作空間對應的加密資料,預設名稱為 <code>main</code>。如果你只有一個工作空間需要同步,直接使用 <code>main</code> 即可",
|
||||||
"syncConfGuide4": "立即同步?",
|
"syncConfGuide4": "立即同步?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "動態錨文字",
|
"turnToDynamic": "動態錨文字",
|
||||||
"sizeLimit": "上限",
|
"sizeLimit": "上限",
|
||||||
"trafficStat": "流量統計",
|
"trafficStat": "流量統計",
|
||||||
"hideHeadingBelowBlocks": "隱藏標題下方的塊",
|
"headingEmbedMode": "標題塊嵌入設定",
|
||||||
|
"headingEmbedModeTip": "設定標題塊在嵌入塊中的顯示樣式",
|
||||||
|
"showHeadingWithBlocks": "顯示標題與下方的塊",
|
||||||
|
"showHeadingOnlyTitle": "僅顯示標題",
|
||||||
|
"showHeadingOnlyBlocks": "僅顯示標題下方的塊",
|
||||||
"matchDiacritics": "符合變音符號",
|
"matchDiacritics": "符合變音符號",
|
||||||
"copyHPath": "複製可讀路徑",
|
"copyHPath": "複製可讀路徑",
|
||||||
"justify": "兩側對齊",
|
"justify": "兩側對齊",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "四級標題",
|
"heading4": "四級標題",
|
||||||
"heading5": "五級標題",
|
"heading5": "五級標題",
|
||||||
"heading6": "六級標題",
|
"heading6": "六級標題",
|
||||||
|
"outlineExpandLevel": "展開層級",
|
||||||
|
"expandAll": "全部展開",
|
||||||
|
"outlineKeepCurrentExpand": "保持當前標題展開",
|
||||||
"general": "通用",
|
"general": "通用",
|
||||||
"insertBefore": "游標所在塊前插入空塊",
|
|
||||||
"insertAfter": "游標所在塊後插入空塊",
|
|
||||||
"list1": "列表",
|
"list1": "列表",
|
||||||
"element": "元素",
|
"element": "元素",
|
||||||
"closeTab": "關閉當前分頁",
|
"closeTab": "關閉當前分頁",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "列表縮進",
|
"indent": "列表縮進",
|
||||||
"info": "關於",
|
"info": "關於",
|
||||||
"inline-code": "行內代碼",
|
"inline-code": "行內代碼",
|
||||||
"insert-after": "末尾插入塊",
|
"insertAfter": "下方插入塊",
|
||||||
"insert-before": "起始插入塊",
|
"insertBefore": "上方插入塊",
|
||||||
"insertColumnLeft": "在左邊插入一行",
|
"insertColumnLeft": "在左邊插入一行",
|
||||||
"insertColumnRight": "在右邊插入一行",
|
"insertColumnRight": "在右邊插入一行",
|
||||||
"insertRowAbove": "在上方插入一列",
|
"insertRowAbove": "在上方插入一列",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "表格",
|
"table": "表格",
|
||||||
"gallery": "卡片",
|
"gallery": "卡片",
|
||||||
|
"kanban": "看板",
|
||||||
"key": "主鍵",
|
"key": "主鍵",
|
||||||
"select": "單選"
|
"select": "單選"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "該塊已經添加到資料庫 [%s] 中",
|
"269": "該塊已經添加到資料庫 [%s] 中",
|
||||||
"270": "正在優化資料索引,請稍等...",
|
"270": "正在優化資料索引,請稍等...",
|
||||||
"271": "資料索引優化完畢,共釋放 [%s] 磁碟空間",
|
"271": "資料索引優化完畢,共釋放 [%s] 磁碟空間",
|
||||||
"272": "未命名欄位"
|
"272": "未命名欄位",
|
||||||
|
"273": "請勿在分區根路徑上建立工作空間,請新建一個資料夾作為工作空間",
|
||||||
|
"274": "該資料夾包含其他檔案,請新建一個資料夾作為工作空間"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1,4 +1,18 @@
|
||||||
{
|
{
|
||||||
|
"print": "打印",
|
||||||
|
"clickArrow": "点击箭头",
|
||||||
|
"foldAll": "全部折叠",
|
||||||
|
"expandSameLevelHeading": "展开同级标题",
|
||||||
|
"foldSameLevelHeading": "折叠同级标题",
|
||||||
|
"expandChildHeading": "展开子标题",
|
||||||
|
"foldChildHeading": "折叠子标题",
|
||||||
|
"addChildHeading": "添加子标题",
|
||||||
|
"insertSameLevelHeadingBefore": "在前方插入同级标题",
|
||||||
|
"insertSameLevelHeadingAfter": "在后方插入同级标题",
|
||||||
|
"upgrade": "升级",
|
||||||
|
"downgrade": "降级",
|
||||||
|
"clipboardPermissionDenied": "剪贴板权限被拒绝,请在浏览器地址栏允许访问剪贴板后再试",
|
||||||
|
"jumpTo": "跳转到",
|
||||||
"vacuumDataIndex": "优化索引",
|
"vacuumDataIndex": "优化索引",
|
||||||
"vacuumDataIndexTip": "校验数据索引,释放存储空间并提升索引性能",
|
"vacuumDataIndexTip": "校验数据索引,释放存储空间并提升索引性能",
|
||||||
"rebuildDataIndex": "重建索引",
|
"rebuildDataIndex": "重建索引",
|
||||||
|
|
@ -36,6 +50,7 @@
|
||||||
"showAllEntriesIcons": "显示条目图标",
|
"showAllEntriesIcons": "显示条目图标",
|
||||||
"wrapAllFields": "字段自动换行",
|
"wrapAllFields": "字段自动换行",
|
||||||
"gallery": "卡片",
|
"gallery": "卡片",
|
||||||
|
"kanban": "看板",
|
||||||
"newTag": "新建标签",
|
"newTag": "新建标签",
|
||||||
"pleaseWait": "请稍等片刻...",
|
"pleaseWait": "请稍等片刻...",
|
||||||
"reconnectPrompt": "切换应用后再次进入需要一些时间恢复思源内核运行,请稍等几秒或者点击“重试”按钮",
|
"reconnectPrompt": "切换应用后再次进入需要一些时间恢复思源内核运行,请稍等几秒或者点击“重试”按钮",
|
||||||
|
|
@ -127,6 +142,7 @@
|
||||||
"unbindBlock": "取消绑定块",
|
"unbindBlock": "取消绑定块",
|
||||||
"showTitle": "显示数据库标题",
|
"showTitle": "显示数据库标题",
|
||||||
"fillCreated": "默认填充创建时间",
|
"fillCreated": "默认填充创建时间",
|
||||||
|
"fillSpecificTime": "默认填充具体时间",
|
||||||
"removeCard": "移除闪卡",
|
"removeCard": "移除闪卡",
|
||||||
"updateLayout": "更新布局",
|
"updateLayout": "更新布局",
|
||||||
"dndFolderTip": "请注意 ${x} 仅插入 file:// 超链接,不复制文件",
|
"dndFolderTip": "请注意 ${x} 仅插入 file:// 超链接,不复制文件",
|
||||||
|
|
@ -169,12 +185,14 @@
|
||||||
"cloudStoragePurgeConfirm": "清理云端存储会彻底删除所有未引用的快照和相关数据对象。<ul class='fn__list'><li>执行前请确保其他设备已经暂停同步</li><li>清理操作非常耗时,请确保网络稳定</li></ul> 确定现在就执行吗?",
|
"cloudStoragePurgeConfirm": "清理云端存储会彻底删除所有未引用的快照和相关数据对象。<ul class='fn__list'><li>执行前请确保其他设备已经暂停同步</li><li>清理操作非常耗时,请确保网络稳定</li></ul> 确定现在就执行吗?",
|
||||||
"dragFill": "垂直拖动以填充值",
|
"dragFill": "垂直拖动以填充值",
|
||||||
"switchReadonly": "只读模式切换",
|
"switchReadonly": "只读模式切换",
|
||||||
"original": "原值",
|
"original": "显示原始值",
|
||||||
|
"uniqueValues": "显示唯一值",
|
||||||
"selectRelation": "请先选择关联字段",
|
"selectRelation": "请先选择关联字段",
|
||||||
"backRelation": "双向关联",
|
"backRelation": "双向关联",
|
||||||
"thisDatabase": "当前数据库",
|
"thisDatabase": "当前数据库",
|
||||||
"relatedTo": "关联至",
|
"relatedTo": "关联至",
|
||||||
"relation": "关联",
|
"relation": "关联",
|
||||||
|
"relatedItems": "已关联条目",
|
||||||
"rollup": "汇总",
|
"rollup": "汇总",
|
||||||
"rollupProperty": "汇总字段",
|
"rollupProperty": "汇总字段",
|
||||||
"rollupCalc": "汇总方式",
|
"rollupCalc": "汇总方式",
|
||||||
|
|
@ -207,12 +225,15 @@
|
||||||
"mathBlock": "公式块",
|
"mathBlock": "公式块",
|
||||||
"htmlBlock": "HTML 块"
|
"htmlBlock": "HTML 块"
|
||||||
},
|
},
|
||||||
|
"copyAHref": "复制链接地址",
|
||||||
"selected": "已选中",
|
"selected": "已选中",
|
||||||
"loadMore": "加载更多",
|
"loadMore": "加载更多",
|
||||||
"tempUnlock": "临时解锁",
|
"tempUnlock": "临时解锁",
|
||||||
"cancelTempUnlock": "取消临时解锁",
|
"cancelTempUnlock": "取消临时解锁",
|
||||||
"addFilter": "添加筛选条件",
|
"addFilter": "添加筛选条件",
|
||||||
"removeFilters": "清空筛选规则",
|
"removeFilters": "清空筛选规则",
|
||||||
|
"addSort": "添加排序条件",
|
||||||
|
"removeSorts": "清空排序规则",
|
||||||
"checked": "已完成",
|
"checked": "已完成",
|
||||||
"unchecked": "未完成",
|
"unchecked": "未完成",
|
||||||
"percentChecked": "已完成占比",
|
"percentChecked": "已完成占比",
|
||||||
|
|
@ -228,7 +249,7 @@
|
||||||
"imported": "导入完成",
|
"imported": "导入完成",
|
||||||
"mirrorTip": "镜像数据库,所有数据更新会同步到其他所有镜像中",
|
"mirrorTip": "镜像数据库,所有数据更新会同步到其他所有镜像中",
|
||||||
"includeTime": "具体时间",
|
"includeTime": "具体时间",
|
||||||
"accountSupport1": "自 2020 年 8 月 31 日第一次公开发版以来,思源笔记已累计发版 776 次,解决用户需求与反馈 13840 次,提交代码 17637 次,背后无数次的辛勤付出与长期坚持不懈的更新都离不开您的支持与反馈。",
|
"accountSupport1": "自 2020 年 8 月 31 日第一次公开发版以来,思源笔记已累计发版超过 830 次,解决用户需求与反馈超过 15000 次,提交代码超过 19800 次,背后无数次的辛勤付出与长期坚持不懈的更新都离不开您的支持与反馈。",
|
||||||
"accountSupport2": "您的支持与反馈能够让思源笔记更好地开发与发展下去,我们会一直与用户做朋友,用心做好产品,为您提供更好的知识管理体验。非常感谢您的支持!",
|
"accountSupport2": "您的支持与反馈能够让思源笔记更好地开发与发展下去,我们会一直与用户做朋友,用心做好产品,为您提供更好的知识管理体验。非常感谢您的支持!",
|
||||||
"goToTab1": "跳转到第一个页签",
|
"goToTab1": "跳转到第一个页签",
|
||||||
"goToTab2": "跳转到第二个页签",
|
"goToTab2": "跳转到第二个页签",
|
||||||
|
|
@ -565,7 +586,7 @@
|
||||||
"embedBlockBreadcrumbTip": "启用后嵌入块将显示面包屑,在超级块中的嵌入块忽略该选项,始终不显示面包屑",
|
"embedBlockBreadcrumbTip": "启用后嵌入块将显示面包屑,在超级块中的嵌入块忽略该选项,始终不显示面包屑",
|
||||||
"appearanceMode": "外观模式",
|
"appearanceMode": "外观模式",
|
||||||
"editReadonly": "只读模式",
|
"editReadonly": "只读模式",
|
||||||
"editReadonlyTip": "启用后文档将默认锁定编辑",
|
"editReadonlyTip": "启用后文档编辑器将默认锁定编辑。仍然能够搜索替换文本、通过 API 修改内容",
|
||||||
"generateConflictDoc": "同步冲突时生成冲突文档",
|
"generateConflictDoc": "同步冲突时生成冲突文档",
|
||||||
"generateConflictDocTip": "启用后当同步发生冲突时会生成冲突文档,以便直接打开查看。无论是否启用,[数据历史] 都会记录冲突文档",
|
"generateConflictDocTip": "启用后当同步发生冲突时会生成冲突文档,以便直接打开查看。无论是否启用,[数据历史] 都会记录冲突文档",
|
||||||
"deleteOpConfirm": "⚠️ 删除操作确认",
|
"deleteOpConfirm": "⚠️ 删除操作确认",
|
||||||
|
|
@ -595,7 +616,7 @@
|
||||||
"katexMacrosTip": "请使用 JSON 对象格式(<code class='fn__code'>{}</code>)来包裹宏定义,例如 <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
"katexMacrosTip": "请使用 JSON 对象格式(<code class='fn__code'>{}</code>)来包裹宏定义,例如 <code class='fn__code'>{ \"\\\\foo\": \"{x^2}\" }</code>",
|
||||||
"systemLogTip": "系统日志中保存了程序运行记录,通过导出系统日志发送给开发者可以更好地帮助开发者诊断程序问题",
|
"systemLogTip": "系统日志中保存了程序运行记录,通过导出系统日志发送给开发者可以更好地帮助开发者诊断程序问题",
|
||||||
"systemLog": "系统日志",
|
"systemLog": "系统日志",
|
||||||
"syncConfGuide1": "初始化同步密钥",
|
"syncConfGuide1": "初始化数据仓库密钥",
|
||||||
"syncConfGuide2": "该密钥用于数据同步端到端加密<br>密钥基于你输入的密码生成,请务必牢记密码",
|
"syncConfGuide2": "该密钥用于数据同步端到端加密<br>密钥基于你输入的密码生成,请务必牢记密码",
|
||||||
"syncConfGuide3": "云端同步目录用于存放当前工作空间对应的加密数据,默认名称为 <code>main</code>。如果你只有一个工作空间需要同步,直接使用 <code>main</code> 即可",
|
"syncConfGuide3": "云端同步目录用于存放当前工作空间对应的加密数据,默认名称为 <code>main</code>。如果你只有一个工作空间需要同步,直接使用 <code>main</code> 即可",
|
||||||
"syncConfGuide4": "立即同步?",
|
"syncConfGuide4": "立即同步?",
|
||||||
|
|
@ -670,7 +691,11 @@
|
||||||
"turnToDynamic": "动态锚文本",
|
"turnToDynamic": "动态锚文本",
|
||||||
"sizeLimit": "上限",
|
"sizeLimit": "上限",
|
||||||
"trafficStat": "流量统计",
|
"trafficStat": "流量统计",
|
||||||
"hideHeadingBelowBlocks": "隐藏标题下方的块",
|
"headingEmbedMode": "标题块嵌入设置",
|
||||||
|
"showHeadingWithBlocks": "显示标题与下方的块",
|
||||||
|
"showHeadingOnlyTitle": "仅显示标题",
|
||||||
|
"showHeadingOnlyBlocks": "仅显示标题下方的块",
|
||||||
|
"headingEmbedModeTip": "设置标题块在嵌入块中的显示样式",
|
||||||
"matchDiacritics": "匹配变音符号",
|
"matchDiacritics": "匹配变音符号",
|
||||||
"copyHPath": "复制可读路径",
|
"copyHPath": "复制可读路径",
|
||||||
"justify": "两侧对齐",
|
"justify": "两侧对齐",
|
||||||
|
|
@ -967,9 +992,10 @@
|
||||||
"heading4": "四级标题",
|
"heading4": "四级标题",
|
||||||
"heading5": "五级标题",
|
"heading5": "五级标题",
|
||||||
"heading6": "六级标题",
|
"heading6": "六级标题",
|
||||||
|
"outlineExpandLevel": "展开层级",
|
||||||
|
"expandAll": "全部展开",
|
||||||
|
"outlineKeepCurrentExpand": "保持当前标题展开",
|
||||||
"general": "通用",
|
"general": "通用",
|
||||||
"insertBefore": "光标所在块前插入空块",
|
|
||||||
"insertAfter": "光标所在块后插入空块",
|
|
||||||
"list1": "列表",
|
"list1": "列表",
|
||||||
"element": "元素",
|
"element": "元素",
|
||||||
"closeTab": "关闭当前页签",
|
"closeTab": "关闭当前页签",
|
||||||
|
|
@ -1284,8 +1310,8 @@
|
||||||
"indent": "列表缩进",
|
"indent": "列表缩进",
|
||||||
"info": "关于",
|
"info": "关于",
|
||||||
"inline-code": "行级代码",
|
"inline-code": "行级代码",
|
||||||
"insert-after": "末尾插入块",
|
"insertAfter": "下方插入块",
|
||||||
"insert-before": "起始插入块",
|
"insertBefore": "上方插入块",
|
||||||
"insertColumnLeft": "在左边插入一列",
|
"insertColumnLeft": "在左边插入一列",
|
||||||
"insertColumnRight": "在右边插入一列",
|
"insertColumnRight": "在右边插入一列",
|
||||||
"insertRowAbove": "在上方插入一行",
|
"insertRowAbove": "在上方插入一行",
|
||||||
|
|
@ -1387,6 +1413,7 @@
|
||||||
"_attrView": {
|
"_attrView": {
|
||||||
"table": "表格",
|
"table": "表格",
|
||||||
"gallery": "卡片",
|
"gallery": "卡片",
|
||||||
|
"kanban": "看板",
|
||||||
"key": "主键",
|
"key": "主键",
|
||||||
"select": "单选"
|
"select": "单选"
|
||||||
},
|
},
|
||||||
|
|
@ -1663,6 +1690,8 @@
|
||||||
"269": "该块已经添加到数据库 [%s] 中",
|
"269": "该块已经添加到数据库 [%s] 中",
|
||||||
"270": "正在优化数据索引,请稍等...",
|
"270": "正在优化数据索引,请稍等...",
|
||||||
"271": "数据索引优化完毕,共释放 [%s] 磁盘空间",
|
"271": "数据索引优化完毕,共释放 [%s] 磁盘空间",
|
||||||
"272": "未命名字段"
|
"272": "未命名字段",
|
||||||
|
"273": "请勿在分区根路径上创建工作空间,请新建一个文件夹作为工作空间",
|
||||||
|
"274": "该文件夹包含了其他文件,请新建一个文件夹作为工作空间"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
47
app/appx/AppxManifest-arm64.xml
Normal file
47
app/appx/AppxManifest-arm64.xml
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--suppress XmlUnusedNamespaceDeclaration -->
|
||||||
|
<Package
|
||||||
|
xmlns="http://schemas.microsoft.com/appx/manifest/foundation/windows10"
|
||||||
|
xmlns:uap="http://schemas.microsoft.com/appx/manifest/uap/windows10"
|
||||||
|
xmlns:desktop="http://schemas.microsoft.com/appx/manifest/desktop/windows10"
|
||||||
|
xmlns:rescap="http://schemas.microsoft.com/appx/manifest/foundation/windows10/restrictedcapabilities">
|
||||||
|
<!-- use single quotes to avoid double quotes escaping in the publisher value -->
|
||||||
|
<Identity Name="89C2A984.SiYuan"
|
||||||
|
ProcessorArchitecture="arm64"
|
||||||
|
Publisher="CN=087C656E-C1D9-42D8-8807-CED45A74FC0F"
|
||||||
|
Version="3.3.5.0"/>
|
||||||
|
<Properties>
|
||||||
|
<DisplayName>SiYuan</DisplayName>
|
||||||
|
<PublisherDisplayName>云南链滴科技有限公司</PublisherDisplayName>
|
||||||
|
<Description>Refactor your thinking</Description>
|
||||||
|
<Logo>assets\StoreLogo.png</Logo>
|
||||||
|
</Properties>
|
||||||
|
<Resources>
|
||||||
|
<Resource Language="en-US"/>
|
||||||
|
<Resource Language="zh-CN"/>
|
||||||
|
</Resources>
|
||||||
|
<Dependencies>
|
||||||
|
<TargetDeviceFamily Name="Windows.Desktop" MinVersion="10.0.14316.0" MaxVersionTested="10.0.14316.0"/>
|
||||||
|
</Dependencies>
|
||||||
|
<Capabilities>
|
||||||
|
<rescap:Capability Name="runFullTrust"/>
|
||||||
|
</Capabilities>
|
||||||
|
<Applications>
|
||||||
|
<Application Id="SiYuan" Executable="app\SiYuan.exe" EntryPoint="Windows.FullTrustApplication">
|
||||||
|
<uap:VisualElements
|
||||||
|
BackgroundColor="transparent"
|
||||||
|
DisplayName="SiYuan"
|
||||||
|
Square150x150Logo="assets\Square150x150Logo.png"
|
||||||
|
Square44x44Logo="assets\Square44x44Logo.png"
|
||||||
|
Description="Refactor your thinking">
|
||||||
|
<uap:DefaultTile Wide310x150Logo="assets\Wide310x150Logo.png"/>
|
||||||
|
</uap:VisualElements>
|
||||||
|
|
||||||
|
<Extensions>
|
||||||
|
<uap:Extension Category="windows.protocol">
|
||||||
|
<uap:Protocol Name="siyuan"/>
|
||||||
|
</uap:Extension>
|
||||||
|
</Extensions>
|
||||||
|
</Application>
|
||||||
|
</Applications>
|
||||||
|
</Package>
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
<Identity Name="89C2A984.SiYuan"
|
<Identity Name="89C2A984.SiYuan"
|
||||||
ProcessorArchitecture="x64"
|
ProcessorArchitecture="x64"
|
||||||
Publisher="CN=087C656E-C1D9-42D8-8807-CED45A74FC0F"
|
Publisher="CN=087C656E-C1D9-42D8-8807-CED45A74FC0F"
|
||||||
Version="3.3.2.0"/>
|
Version="3.3.5.0"/>
|
||||||
<Properties>
|
<Properties>
|
||||||
<DisplayName>SiYuan</DisplayName>
|
<DisplayName>SiYuan</DisplayName>
|
||||||
<PublisherDisplayName>云南链滴科技有限公司</PublisherDisplayName>
|
<PublisherDisplayName>云南链滴科技有限公司</PublisherDisplayName>
|
||||||
|
|
@ -34,9 +34,7 @@
|
||||||
Square150x150Logo="assets\Square150x150Logo.png"
|
Square150x150Logo="assets\Square150x150Logo.png"
|
||||||
Square44x44Logo="assets\Square44x44Logo.png"
|
Square44x44Logo="assets\Square44x44Logo.png"
|
||||||
Description="Refactor your thinking">
|
Description="Refactor your thinking">
|
||||||
|
|
||||||
<uap:DefaultTile Wide310x150Logo="assets\Wide310x150Logo.png"/>
|
<uap:DefaultTile Wide310x150Logo="assets\Wide310x150Logo.png"/>
|
||||||
|
|
||||||
</uap:VisualElements>
|
</uap:VisualElements>
|
||||||
|
|
||||||
<Extensions>
|
<Extensions>
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
* [為外掛程式 API 添加一些 `Protyle` 方法](https://github.com/siyuan-note/siyuan/issues/9762)
|
* [為外掛程式 API 添加一些 `Protyle` 方法](https://github.com/siyuan-note/siyuan/issues/9762)
|
||||||
* [當編輯器左側邊距最小時改進資料庫表格視圖行圖示](https://github.com/siyuan-note/siyuan/pull/9772)
|
* [當編輯器左側邊距最小時改進資料庫表格視圖行圖示](https://github.com/siyuan-note/siyuan/pull/9772)
|
||||||
* [新增插件事件 `mobile-keyboard-show` 和 `mobile-keyboard-hide`](https://github.com/siyuan-note/siyuan/issues/9773)
|
* [新增插件事件 `mobile-keyboard-show` 和 `mobile-keyboard-hide`](https://github.com/siyuan-note/siyuan/issues/9773)
|
||||||
* [新增插件時間 `sync-start`、`sync-end` 和 `sync-fail`](https://github.com/siyuan-note/siyuan/issues/9798)
|
* [新增插件事件 `sync-start`、`sync-end` 和 `sync-fail`](https://github.com/siyuan-note/siyuan/issues/9798)
|
||||||
* [插件 `requrie` 函數支援載入 node 模組](https://github.com/siyuan-note/siyuan/pull/9803)
|
* [插件 `requrie` 函數支援載入 node 模組](https://github.com/siyuan-note/siyuan/pull/9803)
|
||||||
* [建立日記文件時新增 `custom-dailynote-yyyyMMdd` 屬性](https://github.com/siyuan-note/siyuan/issues/9807)
|
* [建立日記文件時新增 `custom-dailynote-yyyyMMdd` 屬性](https://github.com/siyuan-note/siyuan/issues/9807)
|
||||||
* [新增一些日期相關的範本函數](https://github.com/siyuan-note/siyuan/pull/9812)
|
* [新增一些日期相關的範本函數](https://github.com/siyuan-note/siyuan/pull/9812)
|
||||||
|
|
|
||||||
|
|
@ -49,7 +49,7 @@
|
||||||
* [为插件 API 添加一些 `Protyle` 方法](https://github.com/siyuan-note/siyuan/issues/9762)
|
* [为插件 API 添加一些 `Protyle` 方法](https://github.com/siyuan-note/siyuan/issues/9762)
|
||||||
* [当编辑器左侧边距最小时改进数据库表格视图行图标](https://github.com/siyuan-note/siyuan/pull/9772)
|
* [当编辑器左侧边距最小时改进数据库表格视图行图标](https://github.com/siyuan-note/siyuan/pull/9772)
|
||||||
* [添加插件事件 `mobile-keyboard-show` 和 `mobile-keyboard-hide`](https://github.com/siyuan-note/siyuan/issues/9773)
|
* [添加插件事件 `mobile-keyboard-show` 和 `mobile-keyboard-hide`](https://github.com/siyuan-note/siyuan/issues/9773)
|
||||||
* [添加插件时间 `sync-start`、`sync-end` 和 `sync-fail`](https://github.com/siyuan-note/siyuan/issues/9798)
|
* [添加插件事件 `sync-start`、`sync-end` 和 `sync-fail`](https://github.com/siyuan-note/siyuan/issues/9798)
|
||||||
* [插件 `requrie` 函数支持加载 node 模块](https://github.com/siyuan-note/siyuan/pull/9803)
|
* [插件 `requrie` 函数支持加载 node 模块](https://github.com/siyuan-note/siyuan/pull/9803)
|
||||||
* [创建日记文档时添加 `custom-dailynote-yyyyMMdd` 属性](https://github.com/siyuan-note/siyuan/issues/9807)
|
* [创建日记文档时添加 `custom-dailynote-yyyyMMdd` 属性](https://github.com/siyuan-note/siyuan/issues/9807)
|
||||||
* [添加一些日期相关的模板函数](https://github.com/siyuan-note/siyuan/pull/9812)
|
* [添加一些日期相关的模板函数](https://github.com/siyuan-note/siyuan/pull/9812)
|
||||||
|
|
|
||||||
61
app/changelogs/v3.3.3/v3.3.3.md
Normal file
61
app/changelogs/v3.3.3/v3.3.3.md
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
This version improves some details.
|
||||||
|
|
||||||
|
## Changelogs
|
||||||
|
|
||||||
|
Below are the detailed changes in this version.
|
||||||
|
|
||||||
|
### Enhancement
|
||||||
|
|
||||||
|
* [Database asset fields support filtering](https://github.com/siyuan-note/siyuan/issues/11967)
|
||||||
|
* [Block ref elements retain their original styles when exported](https://github.com/siyuan-note/siyuan/issues/15698)
|
||||||
|
* [The new block created after folding the heading must be a heading of the same level](https://github.com/siyuan-note/siyuan/issues/15725)
|
||||||
|
* [Add scenes for expanding and collapsing headings](https://github.com/siyuan-note/siyuan/issues/15726)
|
||||||
|
* [Refresh the data in the interface after moving the document](https://github.com/siyuan-note/siyuan/issues/15762)
|
||||||
|
* [Improve copy/cut/delete `Headings and Bottom Blocks` menu](https://github.com/siyuan-note/siyuan/issues/15797)
|
||||||
|
* [Improve database group view performance](https://github.com/siyuan-note/siyuan/issues/15811)
|
||||||
|
* [Upgrade mermaid.js from 11.6.0 to 11.11.0](https://github.com/siyuan-note/siyuan/issues/15819)
|
||||||
|
* [The browser clipping extension supports "Show directories first in path search"](https://github.com/siyuan-note/siyuan/issues/15822)
|
||||||
|
* [Improve reopening interaction of closed notebooks](https://github.com/siyuan-note/siyuan/issues/15825)
|
||||||
|
* [Add new icon: iconInclude](https://github.com/siyuan-note/siyuan/issues/15831)
|
||||||
|
* [Support arm64 version in Microsoft Store](https://github.com/siyuan-note/siyuan/issues/15836)
|
||||||
|
* [Improve database menu rendering](https://github.com/siyuan-note/siyuan/issues/15839)
|
||||||
|
* [Improve the drag-and-drop in the chart and math editing dialogs](https://github.com/siyuan-note/siyuan/issues/15850)
|
||||||
|
* [The database rollup field supports using the relation field](https://github.com/siyuan-note/siyuan/issues/15851)
|
||||||
|
* [Add "Show unique values" to the calculation of the database rollup field](https://github.com/siyuan-note/siyuan/issues/15852)
|
||||||
|
* [Extend the time the interface waits for kernel startup on the desktop](https://github.com/siyuan-note/siyuan/issues/15853)
|
||||||
|
* [When exporting inline code to Markdown, try to remove the trailing zero-width space](https://github.com/siyuan-note/siyuan/issues/15854)
|
||||||
|
* [Improve HTML code block clipping](https://github.com/siyuan-note/siyuan/issues/15855)
|
||||||
|
* [Improve HTML clipping base64 images](https://github.com/siyuan-note/siyuan/issues/15856)
|
||||||
|
* [Improve database rollup checkbox fields](https://github.com/siyuan-note/siyuan/issues/15858)
|
||||||
|
* [Disallow editing of non-bound block icons in database relation field](https://github.com/siyuan-note/siyuan/issues/15859)
|
||||||
|
* [Improve database interaction details](https://github.com/siyuan-note/siyuan/issues/15861)
|
||||||
|
* [Improve the interaction when using the backspace key at the beginning of a code block](https://github.com/siyuan-note/siyuan/issues/15864)
|
||||||
|
* [The database relation fields support copying existing relations](https://github.com/siyuan-note/siyuan/pull/15876)
|
||||||
|
* [Improve font loading](https://github.com/siyuan-note/siyuan/issues/15879)
|
||||||
|
* [Improve document opening compatibility](https://github.com/siyuan-note/siyuan/issues/15885)
|
||||||
|
* [Improve dynamic loading to prevent continuous automatic loading in certain situations](https://github.com/siyuan-note/siyuan/issues/15889)
|
||||||
|
* [Improve the judgment of editable blocks and the escape processing of HTML blocks](https://github.com/siyuan-note/siyuan/issues/15904)
|
||||||
|
|
||||||
|
### Bugfix
|
||||||
|
|
||||||
|
* [The editor switch cursor does not follow](https://github.com/siyuan-note/siyuan/issues/15821)
|
||||||
|
* [After updating a select field in the database attribute panel, clicking on other select fields does not respond](https://github.com/siyuan-note/siyuan/issues/15827)
|
||||||
|
* [When "Default fill created time" is enabled for database date fields, the automatically filled time value is incorrect](https://github.com/siyuan-note/siyuan/issues/15828)
|
||||||
|
* [The menus for database relation and rollup fields on the mobile do not display the related database name and field name](https://github.com/siyuan-note/siyuan/issues/15835)
|
||||||
|
* [When exporting images, the code block line number will display 0](https://github.com/siyuan-note/siyuan/issues/15837)
|
||||||
|
* [File history cannot load the correct view of database blocks](https://github.com/siyuan-note/siyuan/issues/15841)
|
||||||
|
* [`Optimize typography` exception when code block contains ```](https://github.com/siyuan-note/siyuan/issues/15843)
|
||||||
|
* [`Add to Database` shows databases that are not in the document](https://github.com/siyuan-note/siyuan/issues/15847)
|
||||||
|
* [An error occurs when inserting a tag using a mouse click](https://github.com/siyuan-note/siyuan/issues/15867)
|
||||||
|
* [Outline drag function is abnormal](https://github.com/siyuan-note/siyuan/issues/15909)
|
||||||
|
|
||||||
|
### Development
|
||||||
|
|
||||||
|
* [Add an attribute for the breadcrumb unlock/lock button tag](https://github.com/siyuan-note/siyuan/pull/15820)
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
* [B3log](https://b3log.org/siyuan/en/download.html)
|
||||||
|
* [GitHub](https://github.com/siyuan-note/siyuan/releases)
|
||||||
61
app/changelogs/v3.3.3/v3.3.3_zh_CHT.md
Normal file
61
app/changelogs/v3.3.3/v3.3.3_zh_CHT.md
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
該版本改進了一些細節。
|
||||||
|
|
||||||
|
## 變更記錄
|
||||||
|
|
||||||
|
以下是此版本中的詳細變更。
|
||||||
|
|
||||||
|
### 改進功能
|
||||||
|
|
||||||
|
* [資料庫資源欄位支援篩選](https://github.com/siyuan-note/siyuan/issues/11967)
|
||||||
|
* [塊引用元素導出時保留原有樣式](https://github.com/siyuan-note/siyuan/issues/15698)
|
||||||
|
* [折疊標題後新建的區塊為同級標題](https://github.com/siyuan-note/siyuan/issues/15725)
|
||||||
|
* [增加標題展開與折疊的場景](https://github.com/siyuan-note/siyuan/issues/15726)
|
||||||
|
* [行動文件後刷新介面資料](https://github.com/siyuan-note/siyuan/issues/15762)
|
||||||
|
* [改進複製/剪下/刪除 `標題與下方區塊` 選單](https://github.com/siyuan-note/siyuan/issues/15797)
|
||||||
|
* [提升資料庫分組檢視效能](https://github.com/siyuan-note/siyuan/issues/15811)
|
||||||
|
* [將 mermaid.js 從 11.6.0 升級到 11.11.0](https://github.com/siyuan-note/siyuan/issues/15819)
|
||||||
|
* [瀏覽器剪藏擴充功能支援「路徑搜尋時目錄優先顯示」](https://github.com/siyuan-note/siyuan/issues/15822)
|
||||||
|
* [改進關閉筆記本後重新開啟的互動](https://github.com/siyuan-note/siyuan/issues/15825)
|
||||||
|
* [新增圖示:iconInclude](https://github.com/siyuan-note/siyuan/issues/15831)
|
||||||
|
* [Microsoft Store 支援 arm64 版本](https://github.com/siyuan-note/siyuan/issues/15836)
|
||||||
|
* [改進資料庫選單渲染](https://github.com/siyuan-note/siyuan/issues/15839)
|
||||||
|
* [改進圖表和數學編輯對話框的拖曳](https://github.com/siyuan-note/siyuan/issues/15850)
|
||||||
|
* [資料庫匯總欄位支援使用關聯欄位](https://github.com/siyuan-note/siyuan/issues/15851)
|
||||||
|
* [資料庫匯總欄位計算中增加「顯示唯一值」](https://github.com/siyuan-note/siyuan/issues/15852)
|
||||||
|
* [桌上端介面等待內核啟動時間延長](https://github.com/siyuan-note/siyuan/issues/15853)
|
||||||
|
* [匯出 Markdown 行內程式碼時盡量移除結尾零寬空格](https://github.com/siyuan-note/siyuan/issues/15854)
|
||||||
|
* [改進 HTML 程式碼區塊剪藏](https://github.com/siyuan-note/siyuan/issues/15855)
|
||||||
|
* [改進 HTML 剪藏 base64 圖片](https://github.com/siyuan-note/siyuan/issues/15856)
|
||||||
|
* [改進資料庫總複選方塊欄位](https://github.com/siyuan-note/siyuan/issues/15858)
|
||||||
|
* [資料庫關聯欄位不允許編輯未綁定區塊的圖示](https://github.com/siyuan-note/siyuan/issues/15859)
|
||||||
|
* [改進資料庫互動細節](https://github.com/siyuan-note/siyuan/issues/15861)
|
||||||
|
* [在程式碼區塊開頭使用退格鍵時改進互動](https://github.com/siyuan-note/siyuan/issues/15864)
|
||||||
|
* [資料庫關聯欄位支援複製已有關聯](https://github.com/siyuan-note/siyuan/pull/15876)
|
||||||
|
* [改進字體載入](https://github.com/siyuan-note/siyuan/issues/15879)
|
||||||
|
* [改進開啟文件相容性](https://github.com/siyuan-note/siyuan/issues/15885)
|
||||||
|
* [改進文件動態加載,防止在特定情況下持續自動加載](https://github.com/siyuan-note/siyuan/issues/15889)
|
||||||
|
* [改進可編輯區塊的判斷和 HTML 區塊的轉義處理](https://github.com/siyuan-note/siyuan/issues/15904)
|
||||||
|
|
||||||
|
### 修復缺陷
|
||||||
|
|
||||||
|
* [編輯器切換時光標未跟隨](https://github.com/siyuan-note/siyuan/issues/15821)
|
||||||
|
* [資料庫屬性面板更新選擇欄位後,點選其他選擇欄位無回應](https://github.com/siyuan-note/siyuan/issues/15827)
|
||||||
|
* [資料庫日期欄位啟用「預設填入建立時間」後自動填入的時間值不正確](https://github.com/siyuan-note/siyuan/issues/15828)
|
||||||
|
* [行動端資料庫關聯和匯總欄位選單未顯示關聯資料庫名稱和欄位名稱](https://github.com/siyuan-note/siyuan/issues/15835)
|
||||||
|
* [匯出圖片時程式碼區塊行號顯示為 0](https://github.com/siyuan-note/siyuan/issues/15837)
|
||||||
|
* [檔案歷史無法載入資料庫區塊的正確檢視](https://github.com/siyuan-note/siyuan/issues/15841)
|
||||||
|
* [程式碼區塊包含 ``` 時「最佳化排版」異常](https://github.com/siyuan-note/siyuan/issues/15843)
|
||||||
|
* [「新增至資料庫」會顯示不在文件中的資料庫](https://github.com/siyuan-note/siyuan/issues/15847)
|
||||||
|
* [滑鼠點選插入標籤時報錯誤](https://github.com/siyuan-note/siyuan/issues/15867)
|
||||||
|
* [大綱拖曳功能異常](https://github.com/siyuan-note/siyuan/issues/15909)
|
||||||
|
|
||||||
|
### 開發者
|
||||||
|
|
||||||
|
* [為麵包屑解鎖/鎖定按鈕標籤增加屬性](https://github.com/siyuan-note/siyuan/pull/15820)
|
||||||
|
|
||||||
|
## 下載
|
||||||
|
|
||||||
|
* [B3log](https://b3log.org/siyuan/download.html)
|
||||||
|
* [GitHub](https://github.com/siyuan-note/siyuan/releases)
|
||||||
61
app/changelogs/v3.3.3/v3.3.3_zh_CN.md
Normal file
61
app/changelogs/v3.3.3/v3.3.3_zh_CN.md
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
该版本改进了一些细节。
|
||||||
|
|
||||||
|
## 变更记录
|
||||||
|
|
||||||
|
以下是此版本中的详细变更。
|
||||||
|
|
||||||
|
### 改进功能
|
||||||
|
|
||||||
|
* [数据库资源字段支持筛选](https://github.com/siyuan-note/siyuan/issues/11967)
|
||||||
|
* [块引用元素导出时保留原有样式](https://github.com/siyuan-note/siyuan/issues/15698)
|
||||||
|
* [折叠标题后新建的块为同级标题](https://github.com/siyuan-note/siyuan/issues/15725)
|
||||||
|
* [增加标题展开与折叠的场景](https://github.com/siyuan-note/siyuan/issues/15726)
|
||||||
|
* [移动文档后刷新界面数据](https://github.com/siyuan-note/siyuan/issues/15762)
|
||||||
|
* [改进复制/剪切/删除 `标题与下方块` 菜单](https://github.com/siyuan-note/siyuan/issues/15797)
|
||||||
|
* [提升数据库分组视图性能](https://github.com/siyuan-note/siyuan/issues/15811)
|
||||||
|
* [将 mermaid.js 从 11.6.0 升级到 11.11.0](https://github.com/siyuan-note/siyuan/issues/15819)
|
||||||
|
* [浏览器剪藏扩展支持“路径搜索时目录优先显示”](https://github.com/siyuan-note/siyuan/issues/15822)
|
||||||
|
* [改进关闭笔记本后重新打开的交互](https://github.com/siyuan-note/siyuan/issues/15825)
|
||||||
|
* [新增图标:iconInclude](https://github.com/siyuan-note/siyuan/issues/15831)
|
||||||
|
* [Microsoft Store 支持 arm64 版本](https://github.com/siyuan-note/siyuan/issues/15836)
|
||||||
|
* [改进数据库菜单渲染](https://github.com/siyuan-note/siyuan/issues/15839)
|
||||||
|
* [改进图表和数学编辑对话框的拖拽](https://github.com/siyuan-note/siyuan/issues/15850)
|
||||||
|
* [数据库汇总字段支持使用关联字段](https://github.com/siyuan-note/siyuan/issues/15851)
|
||||||
|
* [数据库汇总字段计算中增加“显示唯一值”](https://github.com/siyuan-note/siyuan/issues/15852)
|
||||||
|
* [桌面端界面等待内核启动时间延长](https://github.com/siyuan-note/siyuan/issues/15853)
|
||||||
|
* [导出 Markdown 行内代码时尽量去除末尾零宽空格](https://github.com/siyuan-note/siyuan/issues/15854)
|
||||||
|
* [改进 HTML 代码块剪藏](https://github.com/siyuan-note/siyuan/issues/15855)
|
||||||
|
* [改进 HTML 剪藏 base64 图片](https://github.com/siyuan-note/siyuan/issues/15856)
|
||||||
|
* [改进数据库汇总复选框字段](https://github.com/siyuan-note/siyuan/issues/15858)
|
||||||
|
* [数据库关联字段不允许编辑未绑定块的图标](https://github.com/siyuan-note/siyuan/issues/15859)
|
||||||
|
* [改进数据库交互细节](https://github.com/siyuan-note/siyuan/issues/15861)
|
||||||
|
* [在代码块开头使用退格键时改进交互](https://github.com/siyuan-note/siyuan/issues/15864)
|
||||||
|
* [数据库关联字段支持复制已有关联](https://github.com/siyuan-note/siyuan/pull/15876)
|
||||||
|
* [改进字体加载](https://github.com/siyuan-note/siyuan/issues/15879)
|
||||||
|
* [改进打开文档兼容性](https://github.com/siyuan-note/siyuan/issues/15885)
|
||||||
|
* [改进文档动态加载,防止特定情况下持续自动加载](https://github.com/siyuan-note/siyuan/issues/15889)
|
||||||
|
* [改进可编辑块的判断和 HTML 块的转义处理](https://github.com/siyuan-note/siyuan/issues/15904)
|
||||||
|
|
||||||
|
### 修复缺陷
|
||||||
|
|
||||||
|
* [编辑器切换时光标未跟随](https://github.com/siyuan-note/siyuan/issues/15821)
|
||||||
|
* [数据库属性面板更新选择字段后,点击其他选择字段无响应](https://github.com/siyuan-note/siyuan/issues/15827)
|
||||||
|
* [数据库日期字段启用“默认填充创建时间”后自动填充的时间值不正确](https://github.com/siyuan-note/siyuan/issues/15828)
|
||||||
|
* [移动端数据库关联和汇总字段菜单未显示关联数据库名和字段名](https://github.com/siyuan-note/siyuan/issues/15835)
|
||||||
|
* [导出图片时代码块行号显示为 0](https://github.com/siyuan-note/siyuan/issues/15837)
|
||||||
|
* [文件历史无法加载数据库块的正确视图](https://github.com/siyuan-note/siyuan/issues/15841)
|
||||||
|
* [代码块包含 ``` 时“优化排版”异常](https://github.com/siyuan-note/siyuan/issues/15843)
|
||||||
|
* [“添加到数据库”会显示不在文档中的数据库](https://github.com/siyuan-note/siyuan/issues/15847)
|
||||||
|
* [鼠标点击插入标签时报错](https://github.com/siyuan-note/siyuan/issues/15867)
|
||||||
|
* [大纲拖动功能异常](https://github.com/siyuan-note/siyuan/issues/15909)
|
||||||
|
|
||||||
|
### 开发者
|
||||||
|
|
||||||
|
* [为面包屑解锁/锁定按钮标签增加属性](https://github.com/siyuan-note/siyuan/pull/15820)
|
||||||
|
|
||||||
|
## 下载
|
||||||
|
|
||||||
|
* [B3log](https://b3log.org/siyuan/download.html)
|
||||||
|
* [GitHub](https://github.com/siyuan-note/siyuan/releases)
|
||||||
50
app/changelogs/v3.3.4/v3.3.4.md
Normal file
50
app/changelogs/v3.3.4/v3.3.4.md
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
This version improves some details.
|
||||||
|
|
||||||
|
## Changelogs
|
||||||
|
|
||||||
|
Below are the detailed changes in this version.
|
||||||
|
|
||||||
|
### Enhancement
|
||||||
|
|
||||||
|
* [Improve the first empty list item editing](https://github.com/siyuan-note/siyuan/issues/12060)
|
||||||
|
* [Add `Default fill specific time` switch to database date field](https://github.com/siyuan-note/siyuan/issues/12089)
|
||||||
|
* [Improve line break handling within tables](https://github.com/siyuan-note/siyuan/issues/15844)
|
||||||
|
* [Improve fold heading editing](https://github.com/siyuan-note/siyuan/issues/15848)
|
||||||
|
* [The embed block of a heading supports hiding the heading itself](https://github.com/siyuan-note/siyuan/pull/15877)
|
||||||
|
* [Improve database editing cell style](https://github.com/siyuan-note/siyuan/issues/15908)
|
||||||
|
* [Improve HTML dl/dt/dd clipping](https://github.com/siyuan-note/siyuan/issues/15912)
|
||||||
|
* [If the block ref is pointing to a doc block, the doc title will be displayed in the block ref floating window](https://github.com/siyuan-note/siyuan/pull/15929)
|
||||||
|
* [Improve `Jump to` block icon menu](https://github.com/siyuan-note/siyuan/issues/15937)
|
||||||
|
* [Improve the behavior of `Jump to the next/previous block of the parent block` in lists](https://github.com/siyuan-note/siyuan/issues/15939)
|
||||||
|
* [Improve `Jump to the next/previous block of the parent block` for container blocks](https://github.com/siyuan-note/siyuan/issues/15940)
|
||||||
|
* [Improve style for document tags and tables resize in read-only mode](https://github.com/siyuan-note/siyuan/issues/15944)
|
||||||
|
* [Add icons and zenmuml support to mermaid.js](https://github.com/siyuan-note/siyuan/issues/15948)
|
||||||
|
* [Upgrade mermaid from 11.11.0 to 11.12.0](https://github.com/siyuan-note/siyuan/issues/15957)
|
||||||
|
* [Add a refresh button in the upper right corner of the chart block](https://github.com/siyuan-note/siyuan/issues/15964)
|
||||||
|
* [Doc tree supports `Shift+Click` to select multiple documents](https://github.com/siyuan-note/siyuan/pull/15965)
|
||||||
|
* [Ensure compatibility with inline elements containing <br> tags](https://github.com/siyuan-note/siyuan/issues/15968)
|
||||||
|
* [Prompt when the user attempts to create a workspace in the root directory of the disk](https://github.com/siyuan-note/siyuan/issues/15976)
|
||||||
|
* [`History Retention Days` supports a maximum setting of 3650](https://github.com/siyuan-note/siyuan/issues/15979)
|
||||||
|
* [Improve font loading](https://github.com/siyuan-note/siyuan/issues/15981)
|
||||||
|
* [Improve return to desktop gesture on Android](https://github.com/siyuan-note/siyuan/issues/15991)
|
||||||
|
|
||||||
|
### Bugfix
|
||||||
|
|
||||||
|
* [Chart block height setting is not fully effective](https://github.com/siyuan-note/siyuan/issues/15765)
|
||||||
|
* [Filter over rollups doesn't work](https://github.com/siyuan-note/siyuan/issues/15915)
|
||||||
|
* [Chart not rendering after copying and pasting](https://github.com/siyuan-note/siyuan/issues/15918)
|
||||||
|
* [Nested lists cause hang after collapsing headings](https://github.com/siyuan-note/siyuan/issues/15943)
|
||||||
|
* [IFrame block address escape error](https://github.com/siyuan-note/siyuan/issues/15946)
|
||||||
|
* [XSS to RCE in dynamic icon feature](https://github.com/siyuan-note/siyuan/issues/15970)
|
||||||
|
* [Doc tree drag function is abnormal](https://github.com/siyuan-note/siyuan/issues/15972)
|
||||||
|
|
||||||
|
### Refactor
|
||||||
|
|
||||||
|
* [Upgrade to Electron v37.6.0](https://github.com/siyuan-note/siyuan/issues/15990)
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
* [B3log](https://b3log.org/siyuan/en/download.html)
|
||||||
|
* [GitHub](https://github.com/siyuan-note/siyuan/releases)
|
||||||
50
app/changelogs/v3.3.4/v3.3.4_zh_CHT.md
Normal file
50
app/changelogs/v3.3.4/v3.3.4_zh_CHT.md
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
該版本改進了一些細節。
|
||||||
|
|
||||||
|
## 變更記錄
|
||||||
|
|
||||||
|
以下是此版本中的詳細變更。
|
||||||
|
|
||||||
|
### 改進功能
|
||||||
|
|
||||||
|
* [改進首個空列表項目的編輯](https://github.com/siyuan-note/siyuan/issues/12060)
|
||||||
|
* [資料庫日期欄位新增「預設填入特定時間」開關](https://github.com/siyuan-note/siyuan/issues/12089)
|
||||||
|
* [改進表格內換行處理](https://github.com/siyuan-note/siyuan/issues/15844)
|
||||||
|
* [改進折疊標題的編輯](https://github.com/siyuan-note/siyuan/issues/15848)
|
||||||
|
* [標題嵌入區塊支援隱藏標題本身](https://github.com/siyuan-note/siyuan/pull/15877)
|
||||||
|
* [改進資料庫編輯單元格樣式](https://github.com/siyuan-note/siyuan/issues/15908)
|
||||||
|
* [改進 HTML dl/dt/dd 剪藏](https://github.com/siyuan-note/siyuan/issues/15912)
|
||||||
|
* [當區塊引用指向文件區塊時,浮窗顯示文件標題](https://github.com/siyuan-note/siyuan/pull/15929)
|
||||||
|
* [改進「跳到」區塊圖示選單](https://github.com/siyuan-note/siyuan/issues/15937)
|
||||||
|
* [改進清單中「跳到父區塊的下/上一個區塊」行為](https://github.com/siyuan-note/siyuan/issues/15939)
|
||||||
|
* [改進容器區塊「跳到父區塊的下/上一個區塊」行為](https://github.com/siyuan-note/siyuan/issues/15940)
|
||||||
|
* [改進唯讀模式下文件標籤和表格縮放樣式](https://github.com/siyuan-note/siyuan/issues/15944)
|
||||||
|
* [mermaid.js 新增圖示和 zenmuml 支援](https://github.com/siyuan-note/siyuan/issues/15948)
|
||||||
|
* [mermaid 從 11.11.0 升級到 11.12.0](https://github.com/siyuan-note/siyuan/issues/15957)
|
||||||
|
* [圖表區塊右上角新增刷新按鈕](https://github.com/siyuan-note/siyuan/issues/15964)
|
||||||
|
* [文檔樹支援 `Shift+點擊` 多選文件](https://github.com/siyuan-note/siyuan/pull/15965)
|
||||||
|
* [確保相容於包含 <br> 標籤的行級元素](https://github.com/siyuan-note/siyuan/issues/15968)
|
||||||
|
* [嘗試在磁碟根目錄建立工作空間時提示使用者](https://github.com/siyuan-note/siyuan/issues/15976)
|
||||||
|
* [`歷史保留天數` 最大支援 3650](https://github.com/siyuan-note/siyuan/issues/15979)
|
||||||
|
* [改進字體載入](https://github.com/siyuan-note/siyuan/issues/15981)
|
||||||
|
* [改進 Android 端回傳桌面手勢](https://github.com/siyuan-note/siyuan/issues/15991)
|
||||||
|
|
||||||
|
### 修復缺陷
|
||||||
|
|
||||||
|
* [圖表塊高度設定未完全生效](https://github.com/siyuan-note/siyuan/issues/15765)
|
||||||
|
* [匯總過濾器無法正常運作](https://github.com/siyuan-note/siyuan/issues/15915)
|
||||||
|
* [複製貼上後圖表未渲染](https://github.com/siyuan-note/siyuan/issues/15918)
|
||||||
|
* [折疊標題後嵌套列表導致卡死](https://github.com/siyuan-note/siyuan/issues/15943)
|
||||||
|
* [IFrame 區塊位址轉義錯誤](https://github.com/siyuan-note/siyuan/issues/15946)
|
||||||
|
* [動態圖示功能存在 XSS 到 RCE 漏洞](https://github.com/siyuan-note/siyuan/issues/15970)
|
||||||
|
* [文檔樹拖曳功能異常](https://github.com/siyuan-note/siyuan/issues/15972)
|
||||||
|
|
||||||
|
### 開發重構
|
||||||
|
|
||||||
|
* [升級至 Electron v37.6.0](https://github.com/siyuan-note/siyuan/issues/15990)
|
||||||
|
|
||||||
|
## 下載
|
||||||
|
|
||||||
|
* [B3log](https://b3log.org/siyuan/download.html)
|
||||||
|
* [GitHub](https://github.com/siyuan-note/siyuan/releases)
|
||||||
50
app/changelogs/v3.3.4/v3.3.4_zh_CN.md
Normal file
50
app/changelogs/v3.3.4/v3.3.4_zh_CN.md
Normal file
|
|
@ -0,0 +1,50 @@
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
该版本改进了一些细节。
|
||||||
|
|
||||||
|
## 变更记录
|
||||||
|
|
||||||
|
以下是此版本中的详细变更。
|
||||||
|
|
||||||
|
### 改进功能
|
||||||
|
|
||||||
|
* [改进首个空列表项的编辑](https://github.com/siyuan-note/siyuan/issues/12060)
|
||||||
|
* [数据库日期字段新增“默认填充具体时间”开关](https://github.com/siyuan-note/siyuan/issues/12089)
|
||||||
|
* [改进表格内换行处理](https://github.com/siyuan-note/siyuan/issues/15844)
|
||||||
|
* [改进折叠标题的编辑](https://github.com/siyuan-note/siyuan/issues/15848)
|
||||||
|
* [标题嵌入块支持隐藏标题本身](https://github.com/siyuan-note/siyuan/pull/15877)
|
||||||
|
* [改进数据库编辑单元格样式](https://github.com/siyuan-note/siyuan/issues/15908)
|
||||||
|
* [改进 HTML dl/dt/dd 剪藏](https://github.com/siyuan-note/siyuan/issues/15912)
|
||||||
|
* [块引用指向文档块时,浮窗显示文档标题](https://github.com/siyuan-note/siyuan/pull/15929)
|
||||||
|
* [改进“跳转到”块图标菜单](https://github.com/siyuan-note/siyuan/issues/15937)
|
||||||
|
* [改进列表中“跳转到父块的下/上一个块”行为](https://github.com/siyuan-note/siyuan/issues/15939)
|
||||||
|
* [改进容器块“跳转到父块的下/上一个块”行为](https://github.com/siyuan-note/siyuan/issues/15940)
|
||||||
|
* [改进只读模式下文档标签和表格缩放样式](https://github.com/siyuan-note/siyuan/issues/15944)
|
||||||
|
* [mermaid.js 新增图标和 zenmuml 支持](https://github.com/siyuan-note/siyuan/issues/15948)
|
||||||
|
* [mermaid 从 11.11.0 升级到 11.12.0](https://github.com/siyuan-note/siyuan/issues/15957)
|
||||||
|
* [图表块右上角新增刷新按钮](https://github.com/siyuan-note/siyuan/issues/15964)
|
||||||
|
* [文档树支持 `Shift+点击` 多选文档](https://github.com/siyuan-note/siyuan/pull/15965)
|
||||||
|
* [确保兼容包含 <br> 标签的行级元素](https://github.com/siyuan-note/siyuan/issues/15968)
|
||||||
|
* [尝试在磁盘根目录创建工作空间时提示用户](https://github.com/siyuan-note/siyuan/issues/15976)
|
||||||
|
* [`历史保留天数` 最大支持 3650](https://github.com/siyuan-note/siyuan/issues/15979)
|
||||||
|
* [改进字体加载](https://github.com/siyuan-note/siyuan/issues/15981)
|
||||||
|
* [改进 Android 端返回桌面手势](https://github.com/siyuan-note/siyuan/issues/15991)
|
||||||
|
|
||||||
|
### 修复缺陷
|
||||||
|
|
||||||
|
* [图表块高度设置未完全生效](https://github.com/siyuan-note/siyuan/issues/15765)
|
||||||
|
* [汇总过滤器无法正常工作](https://github.com/siyuan-note/siyuan/issues/15915)
|
||||||
|
* [复制粘贴后图表未渲染](https://github.com/siyuan-note/siyuan/issues/15918)
|
||||||
|
* [折叠标题后嵌套列表导致卡死](https://github.com/siyuan-note/siyuan/issues/15943)
|
||||||
|
* [IFrame 块地址转义错误](https://github.com/siyuan-note/siyuan/issues/15946)
|
||||||
|
* [动态图标功能存在 XSS 到 RCE 漏洞](https://github.com/siyuan-note/siyuan/issues/15970)
|
||||||
|
* [文档树拖拽功能异常](https://github.com/siyuan-note/siyuan/issues/15972)
|
||||||
|
|
||||||
|
### 开发重构
|
||||||
|
|
||||||
|
* [升级至 Electron v37.6.0](https://github.com/siyuan-note/siyuan/issues/15990)
|
||||||
|
|
||||||
|
## 下载
|
||||||
|
|
||||||
|
* [B3log](https://b3log.org/siyuan/download.html)
|
||||||
|
* [GitHub](https://github.com/siyuan-note/siyuan/releases)
|
||||||
56
app/changelogs/v3.3.5/v3.3.5.md
Normal file
56
app/changelogs/v3.3.5/v3.3.5.md
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
## Overview
|
||||||
|
|
||||||
|
This version improves some details.
|
||||||
|
|
||||||
|
## Changelogs
|
||||||
|
|
||||||
|
Below are the detailed changes in this version.
|
||||||
|
|
||||||
|
### Enhancement
|
||||||
|
|
||||||
|
* [Browser clipping extension supports context menu `Send to SiYuan`](https://github.com/siyuan-note/siyuan/issues/9181)
|
||||||
|
* [Improve database relation field filter settings](https://github.com/siyuan-note/siyuan/issues/12000)
|
||||||
|
* [Improve doc browsing location loading](https://github.com/siyuan-note/siyuan/issues/14505)
|
||||||
|
* [Supports theme light/dark mode following the system setting on HarmonyOS](https://github.com/siyuan-note/siyuan/issues/14676)
|
||||||
|
* [Improve spaced repetition interface](https://github.com/siyuan-note/siyuan/pull/15627)
|
||||||
|
* [Search results show document titles](https://github.com/siyuan-note/siyuan/pull/15969)
|
||||||
|
* [Improve toolbar position calculation](https://github.com/siyuan-note/siyuan/pull/15983)
|
||||||
|
* [Improve fold heading editing](https://github.com/siyuan-note/siyuan/issues/15989)
|
||||||
|
* [Improve browser clipping extension `After clipping a web page, open document*`](https://github.com/siyuan-note/siyuan/issues/15992)
|
||||||
|
* [Increase the height of the editing toolbar on mobile](https://github.com/siyuan-note/siyuan/issues/15994)
|
||||||
|
* [Add `Show in Folder` for the database block](https://github.com/siyuan-note/siyuan/issues/15995)
|
||||||
|
* [Read-only mode supports previewing title images and searching by clicking on document tags](https://github.com/siyuan-note/siyuan/issues/15999)
|
||||||
|
* [Improve search document title highlighting](https://github.com/siyuan-note/siyuan/issues/16011)
|
||||||
|
* [Improve exporting block ref style](https://github.com/siyuan-note/siyuan/issues/16017)
|
||||||
|
* [Remove the "Import" item from the doc block menu within the doc](https://github.com/siyuan-note/siyuan/issues/16019)
|
||||||
|
* [Prompt when the web page does not have permission to read the clipboard](https://github.com/siyuan-note/siyuan/issues/16024)
|
||||||
|
* [Improve block memo display](https://github.com/siyuan-note/siyuan/pull/16025)
|
||||||
|
* [Cancel the animation effect when exiting focus and scrolling to the corresponding block](https://github.com/siyuan-note/siyuan/issues/16028)
|
||||||
|
* [Turn off autocomplete and spellcheck in the search input box](https://github.com/siyuan-note/siyuan/issues/16031)
|
||||||
|
* [Improve export of empty documents with subdocuments](https://github.com/siyuan-note/siyuan/issues/16040)
|
||||||
|
* [Improve exporting markdown block ref relative path](https://github.com/siyuan-note/siyuan/issues/16042)
|
||||||
|
* [Change `Search asset content` and `Add watermark to exported PDF or image` from paid to free](https://github.com/siyuan-note/siyuan/issues/16044)
|
||||||
|
* [Improve copy and cut](https://github.com/siyuan-note/siyuan/issues/16048)
|
||||||
|
* [Improve data sync S3 provider compatibility](https://github.com/siyuan-note/siyuan/issues/16058)
|
||||||
|
* [Improve HTML img clipping](https://github.com/siyuan-note/siyuan/issues/16076)
|
||||||
|
|
||||||
|
### Bugfix
|
||||||
|
|
||||||
|
* [Drag errors with blocks in the list](https://github.com/siyuan-note/siyuan/issues/13822)
|
||||||
|
* [Inserting an image into an empty list item will insert it into the next paragraph block on mobile](https://github.com/siyuan-note/siyuan/issues/15998)
|
||||||
|
* [The database attribute panel of the doc opened from the doc tree does not display the content](https://github.com/siyuan-note/siyuan/issues/16001)
|
||||||
|
* [Chart not refreshing after updating code](https://github.com/siyuan-note/siyuan/issues/16003)
|
||||||
|
* [Database is constantly loading](https://github.com/siyuan-note/siyuan/issues/16023)
|
||||||
|
* [Unable to export PDF after setting KaTeX macro definition](https://github.com/siyuan-note/siyuan/issues/16037)
|
||||||
|
* [Unable to save search and replace type settings](https://github.com/siyuan-note/siyuan/issues/16059)
|
||||||
|
|
||||||
|
### Development
|
||||||
|
|
||||||
|
* [API `getTag` add an optional parameter `ignoreMaxListHint`](https://github.com/siyuan-note/siyuan/issues/16000)
|
||||||
|
* [Add internal kernel API `/api/ui/reloadIcon`](https://github.com/siyuan-note/siyuan/issues/16008)
|
||||||
|
* [Improve the `click-blockicon` event triggering after multiple blocks are selected in read-only mode](https://github.com/siyuan-note/siyuan/issues/16010)
|
||||||
|
|
||||||
|
## Download
|
||||||
|
|
||||||
|
* [B3log](https://b3log.org/siyuan/en/download.html)
|
||||||
|
* [GitHub](https://github.com/siyuan-note/siyuan/releases)
|
||||||
56
app/changelogs/v3.3.5/v3.3.5_zh_CHT.md
Normal file
56
app/changelogs/v3.3.5/v3.3.5_zh_CHT.md
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
該版本改進了一些細節。
|
||||||
|
|
||||||
|
## 變更記錄
|
||||||
|
|
||||||
|
以下是此版本中的詳細變更。
|
||||||
|
|
||||||
|
### 改進功能
|
||||||
|
|
||||||
|
* [瀏覽器剪藏擴充功能支援右鍵選單「傳送到思源」](https://github.com/siyuan-note/siyuan/issues/9181)
|
||||||
|
* [改進資料庫關聯欄位篩選設定](https://github.com/siyuan-note/siyuan/issues/12000)
|
||||||
|
* [改進文件瀏覽位置載入](https://github.com/siyuan-note/siyuan/issues/14505)
|
||||||
|
* [鴻蒙系統支援主題跟隨系統設定的明暗模式](https://github.com/siyuan-note/siyuan/issues/14676)
|
||||||
|
* [改進間隔重複介面](https://github.com/siyuan-note/siyuan/pull/15627)
|
||||||
|
* [搜尋結果顯示文件標題](https://github.com/siyuan-note/siyuan/pull/15969)
|
||||||
|
* [改進工具列位置計算](https://github.com/siyuan-note/siyuan/pull/15983)
|
||||||
|
* [改進折疊標題編輯](https://github.com/siyuan-note/siyuan/issues/15989)
|
||||||
|
* [改進瀏覽器剪藏擴充功能「剪藏網頁後開啟文件」](https://github.com/siyuan-note/siyuan/issues/15992)
|
||||||
|
* [增加行動裝置編輯工具列高度](https://github.com/siyuan-note/siyuan/issues/15994)
|
||||||
|
* [資料庫區塊新增「在資料夾中顯示」](https://github.com/siyuan-note/siyuan/issues/15995)
|
||||||
|
* [唯讀模式支援預覽標題圖片和點擊文件標籤搜尋](https://github.com/siyuan-note/siyuan/issues/15999)
|
||||||
|
* [改進搜尋文件標題高亮顯示](https://github.com/siyuan-note/siyuan/issues/16011)
|
||||||
|
* [改進導出區塊引用樣式](https://github.com/siyuan-note/siyuan/issues/16017)
|
||||||
|
* [移除文件區塊選單中的「導入」項目](https://github.com/siyuan-note/siyuan/issues/16019)
|
||||||
|
* [網頁無剪貼簿讀取權限時提示](https://github.com/siyuan-note/siyuan/issues/16024)
|
||||||
|
* [改進區塊備註顯示](https://github.com/siyuan-note/siyuan/pull/16025)
|
||||||
|
* [退出對焦並捲動至對應區塊時取消動畫效果](https://github.com/siyuan-note/siyuan/issues/16028)
|
||||||
|
* [搜尋輸入方塊關閉自動補全與拼字檢查](https://github.com/siyuan-note/siyuan/issues/16031)
|
||||||
|
* [改進匯出含子文件的空白文檔](https://github.com/siyuan-note/siyuan/issues/16040)
|
||||||
|
* [改進匯出 Markdown 區塊引用相對路徑](https://github.com/siyuan-note/siyuan/issues/16042)
|
||||||
|
* [「搜尋資源文件內容」和「匯出 PDF 或圖片加浮水印」由付費改為免費](https://github.com/siyuan-note/siyuan/issues/16044)
|
||||||
|
* [改進複製和剪切](https://github.com/siyuan-note/siyuan/issues/16048)
|
||||||
|
* [改進資料同步 S3 供應商相容性](https://github.com/siyuan-note/siyuan/issues/16058)
|
||||||
|
* [改良 HTML img 剪藏](https://github.com/siyuan-note/siyuan/issues/16076)
|
||||||
|
|
||||||
|
### 修復缺陷
|
||||||
|
|
||||||
|
* [清單中區塊拖曳異常](https://github.com/siyuan-note/siyuan/issues/13822)
|
||||||
|
* [行動端空列表項目插入圖片會插入到下一個段落區塊](https://github.com/siyuan-note/siyuan/issues/15998)
|
||||||
|
* [從文件樹開啟的文件資料庫屬性面板不顯示內容](https://github.com/siyuan-note/siyuan/issues/16001)
|
||||||
|
* [更新程式碼後圖表未刷新](https://github.com/siyuan-note/siyuan/issues/16003)
|
||||||
|
* [資料庫一直載入](https://github.com/siyuan-note/siyuan/issues/16023)
|
||||||
|
* [設定 KaTeX 巨集定義後無法匯出 PDF](https://github.com/siyuan-note/siyuan/issues/16037)
|
||||||
|
* [無法儲存搜尋和替換類型設定](https://github.com/siyuan-note/siyuan/issues/16059)
|
||||||
|
|
||||||
|
### 開發者
|
||||||
|
|
||||||
|
* [API `getTag` 新增選用參數 `ignoreMaxListHint`](https://github.com/siyuan-note/siyuan/issues/16000)
|
||||||
|
* [新增核心 API `/api/ui/reloadIcon`](https://github.com/siyuan-note/siyuan/issues/16008)
|
||||||
|
* [改進唯讀模式下多選區塊後 `click-blockicon` 事件觸發](https://github.com/siyuan-note/siyuan/issues/16010)
|
||||||
|
|
||||||
|
## 下載
|
||||||
|
|
||||||
|
* [B3log](https://b3log.org/siyuan/download.html)
|
||||||
|
* [GitHub](https://github.com/siyuan-note/siyuan/releases)
|
||||||
56
app/changelogs/v3.3.5/v3.3.5_zh_CN.md
Normal file
56
app/changelogs/v3.3.5/v3.3.5_zh_CN.md
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
## 概述
|
||||||
|
|
||||||
|
该版本改进了一些细节。
|
||||||
|
|
||||||
|
## 变更记录
|
||||||
|
|
||||||
|
以下是此版本中的详细变更。
|
||||||
|
|
||||||
|
### 改进功能
|
||||||
|
|
||||||
|
* [浏览器剪藏扩展支持右键菜单“发送到思源”](https://github.com/siyuan-note/siyuan/issues/9181)
|
||||||
|
* [改进数据库关联字段筛选设置](https://github.com/siyuan-note/siyuan/issues/12000)
|
||||||
|
* [改进文档浏览位置加载](https://github.com/siyuan-note/siyuan/issues/14505)
|
||||||
|
* [鸿蒙系统支持主题跟随系统设置的明暗模式](https://github.com/siyuan-note/siyuan/issues/14676)
|
||||||
|
* [改进间隔重复界面](https://github.com/siyuan-note/siyuan/pull/15627)
|
||||||
|
* [搜索结果显示文档标题](https://github.com/siyuan-note/siyuan/pull/15969)
|
||||||
|
* [改进工具栏位置计算](https://github.com/siyuan-note/siyuan/pull/15983)
|
||||||
|
* [改进折叠标题编辑](https://github.com/siyuan-note/siyuan/issues/15989)
|
||||||
|
* [改进浏览器剪藏扩展“剪藏网页后打开文档”](https://github.com/siyuan-note/siyuan/issues/15992)
|
||||||
|
* [增加移动端编辑工具栏高度](https://github.com/siyuan-note/siyuan/issues/15994)
|
||||||
|
* [数据库块新增“在文件夹中显示”](https://github.com/siyuan-note/siyuan/issues/15995)
|
||||||
|
* [只读模式支持预览标题图片和点击文档标签搜索](https://github.com/siyuan-note/siyuan/issues/15999)
|
||||||
|
* [改进搜索文档标题高亮显示](https://github.com/siyuan-note/siyuan/issues/16011)
|
||||||
|
* [改进导出块引用样式](https://github.com/siyuan-note/siyuan/issues/16017)
|
||||||
|
* [移除文档块菜单中的“导入”项](https://github.com/siyuan-note/siyuan/issues/16019)
|
||||||
|
* [网页无剪贴板读取权限时提示](https://github.com/siyuan-note/siyuan/issues/16024)
|
||||||
|
* [改进块备注显示](https://github.com/siyuan-note/siyuan/pull/16025)
|
||||||
|
* [退出聚焦并滚动到对应块时取消动画效果](https://github.com/siyuan-note/siyuan/issues/16028)
|
||||||
|
* [搜索输入框关闭自动补全和拼写检查](https://github.com/siyuan-note/siyuan/issues/16031)
|
||||||
|
* [改进导出含子文档的空文档](https://github.com/siyuan-note/siyuan/issues/16040)
|
||||||
|
* [改进导出 Markdown 块引用相对路径](https://github.com/siyuan-note/siyuan/issues/16042)
|
||||||
|
* [“搜索资源文件内容”和“导出 PDF 或图片添加水印”由付费改为免费](https://github.com/siyuan-note/siyuan/issues/16044)
|
||||||
|
* [改进复制和剪切](https://github.com/siyuan-note/siyuan/issues/16048)
|
||||||
|
* [改进数据同步 S3 提供商兼容性](https://github.com/siyuan-note/siyuan/issues/16058)
|
||||||
|
* [改进 HTML img 剪藏](https://github.com/siyuan-note/siyuan/issues/16076)
|
||||||
|
|
||||||
|
### 修复缺陷
|
||||||
|
|
||||||
|
* [列表中块拖拽异常](https://github.com/siyuan-note/siyuan/issues/13822)
|
||||||
|
* [移动端空列表项插入图片会插入到下一个段落块](https://github.com/siyuan-note/siyuan/issues/15998)
|
||||||
|
* [从文档树打开的文档数据库属性面板不显示内容](https://github.com/siyuan-note/siyuan/issues/16001)
|
||||||
|
* [更新代码后图表未刷新](https://github.com/siyuan-note/siyuan/issues/16003)
|
||||||
|
* [数据库一直加载](https://github.com/siyuan-note/siyuan/issues/16023)
|
||||||
|
* [设置 KaTeX 宏定义后无法导出 PDF](https://github.com/siyuan-note/siyuan/issues/16037)
|
||||||
|
* [无法保存搜索和替换类型设置](https://github.com/siyuan-note/siyuan/issues/16059)
|
||||||
|
|
||||||
|
### 开发者
|
||||||
|
|
||||||
|
* [API `getTag` 新增可选参数 `ignoreMaxListHint`](https://github.com/siyuan-note/siyuan/issues/16000)
|
||||||
|
* [新增内核 API `/api/ui/reloadIcon`](https://github.com/siyuan-note/siyuan/issues/16008)
|
||||||
|
* [改进只读模式下多选块后 `click-blockicon` 事件触发](https://github.com/siyuan-note/siyuan/issues/16010)
|
||||||
|
|
||||||
|
## 下载
|
||||||
|
|
||||||
|
* [B3log](https://b3log.org/siyuan/download.html)
|
||||||
|
* [GitHub](https://github.com/siyuan-note/siyuan/releases)
|
||||||
|
|
@ -383,6 +383,24 @@
|
||||||
}
|
}
|
||||||
const initPath = result.filePaths[0]
|
const initPath = result.filePaths[0]
|
||||||
|
|
||||||
|
if (isPartitionRootPath(initPath)) {
|
||||||
|
let msg = '⚠️ Do not create the workspace in the partition root path, please create a new folder as the workspace'
|
||||||
|
if (isChinese(currentLang)) {
|
||||||
|
msg = '⚠️ 请勿在分区根路径上创建工作空间,请新建一个文件夹作为工作空间'
|
||||||
|
}
|
||||||
|
alert(msg)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isWorkspaceDir(initPath) && !isEmptyDir(initPath)) {
|
||||||
|
let msg = '⚠️ This folder contains other files, please create a new folder as the workspace'
|
||||||
|
if (isChinese(currentLang)) {
|
||||||
|
msg = '⚠️ 该文件夹包含了其他文件,请新建一个文件夹作为工作空间'
|
||||||
|
}
|
||||||
|
alert(msg)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if (isICloudPath(initPath)) {
|
if (isICloudPath(initPath)) {
|
||||||
let msg = '⚠️ This folder is under the iCloud sync path, please change another path'
|
let msg = '⚠️ This folder is under the iCloud sync path, please change another path'
|
||||||
if (isChinese(currentLang)) {
|
if (isChinese(currentLang)) {
|
||||||
|
|
@ -417,6 +435,36 @@
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
const isPartitionRootPath = (absPath) => {
|
||||||
|
const path = require('path')
|
||||||
|
const parsedPath = path.parse(absPath)
|
||||||
|
return parsedPath.root === absPath
|
||||||
|
}
|
||||||
|
|
||||||
|
const isEmptyDir = (absPath) => {
|
||||||
|
const fs = require('fs')
|
||||||
|
let files;
|
||||||
|
try {
|
||||||
|
files = fs.readdirSync(absPath)
|
||||||
|
} catch (err) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return 0 === files.length
|
||||||
|
}
|
||||||
|
|
||||||
|
const isWorkspaceDir = (absPath) => {
|
||||||
|
const path = require('path');
|
||||||
|
const fs = require('fs');
|
||||||
|
const conf = path.join(absPath, 'conf', 'conf.json');
|
||||||
|
let data;
|
||||||
|
try {
|
||||||
|
data = fs.readFileSync(conf, 'utf8');
|
||||||
|
} catch (err) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return data.includes('kernelVersion');
|
||||||
|
}
|
||||||
|
|
||||||
const isCloudDrivePath = (absPath) => {
|
const isCloudDrivePath = (absPath) => {
|
||||||
const absPathLower = absPath.toLowerCase()
|
const absPathLower = absPath.toLowerCase()
|
||||||
return -1 < absPathLower.indexOf("onedrive") || -1 < absPathLower.indexOf("dropbox") ||
|
return -1 < absPathLower.indexOf("onedrive") || -1 < absPathLower.indexOf("dropbox") ||
|
||||||
|
|
|
||||||
|
|
@ -352,7 +352,7 @@ const initMainWindow = () => {
|
||||||
}).then((response) => {
|
}).then((response) => {
|
||||||
setProxy(`${response.data.proxy.scheme}://${response.data.proxy.host}:${response.data.proxy.port}`, currentWindow.webContents).then(() => {
|
setProxy(`${response.data.proxy.scheme}://${response.data.proxy.host}:${response.data.proxy.port}`, currentWindow.webContents).then(() => {
|
||||||
// 加载主界面
|
// 加载主界面
|
||||||
currentWindow.loadURL(getServer() + "/stage/build/app/index.html?v=" + new Date().getTime());
|
currentWindow.loadURL(getServer() + "/stage/build/app/?v=" + new Date().getTime());
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -607,7 +607,7 @@ const initKernel = (workspace, port, lang) => {
|
||||||
resolve(false);
|
resolve(false);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
await sleep(200);
|
await sleep(500);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -866,6 +866,13 @@ app.whenReady().then(() => {
|
||||||
event.sender.send("siyuan-event", "leave-full-screen");
|
event.sender.send("siyuan-event", "leave-full-screen");
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
ipcMain.on("siyuan-focus-fix", (event) => {
|
||||||
|
const currentWindow = getWindowByContentId(event.sender.id);
|
||||||
|
if (currentWindow && process.platform === "win32") {
|
||||||
|
currentWindow.blur();
|
||||||
|
currentWindow.focus();
|
||||||
|
}
|
||||||
|
});
|
||||||
ipcMain.on("siyuan-cmd", (event, data) => {
|
ipcMain.on("siyuan-cmd", (event, data) => {
|
||||||
let cmd = data;
|
let cmd = data;
|
||||||
let webContentsId = event.sender.id;
|
let webContentsId = event.sender.id;
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
"id": "20200924100950-9op5xi1",
|
"id": "20200924100950-9op5xi1",
|
||||||
"title": "Shortcuts",
|
"title": "Shortcuts",
|
||||||
"type": "doc",
|
"type": "doc",
|
||||||
"updated": "20250529111226"
|
"updated": "20250929214205"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9049,7 +9049,7 @@
|
||||||
"HeadingLevel": 3,
|
"HeadingLevel": 3,
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20210106154319-d0mxz1p",
|
"id": "20210106154319-d0mxz1p",
|
||||||
"updated": "20250115160840"
|
"updated": "20250924165043"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9073,7 +9073,7 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"colgroup": "||",
|
"colgroup": "||",
|
||||||
"id": "20210106154319-v6ksqnu",
|
"id": "20210106154319-v6ksqnu",
|
||||||
"updated": "20250115160840"
|
"updated": "20250924165043"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9233,7 +9233,43 @@
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": "Must select content"
|
"Data": "Requires selecting content; by default uses static anchor text. Press "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Enter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " or "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Click"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " in the candidate list to use dynamic anchor text"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -14981,7 +15017,7 @@
|
||||||
"HeadingLevel": 3,
|
"HeadingLevel": 3,
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20220619002135-5dfw1yo",
|
"id": "20220619002135-5dfw1yo",
|
||||||
"updated": "20250407200538"
|
"updated": "20250929214205"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -15001,7 +15037,7 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"colgroup": "||",
|
"colgroup": "||",
|
||||||
"id": "20220619002135-s399g7e",
|
"id": "20220619002135-s399g7e",
|
||||||
"updated": "20250115161052"
|
"updated": "20250929214205"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -15103,7 +15139,7 @@
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": "Multiple choice"
|
"Data": "Multiple selection"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -15150,6 +15186,87 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableRow",
|
||||||
|
"Data": "tr",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "Batch multiple selection"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Shift"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Click"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " / "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "⇧Click"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "You need to use "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "click"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " to select the first document"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeTableRow",
|
"Type": "NodeTableRow",
|
||||||
"Data": "tr",
|
"Data": "tr",
|
||||||
|
|
@ -15233,6 +15350,15 @@
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": ""
|
"Data": ""
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeTextMark",
|
"Type": "NodeTextMark",
|
||||||
"TextMarkType": "kbd",
|
"TextMarkType": "kbd",
|
||||||
|
|
@ -15254,7 +15380,7 @@
|
||||||
{
|
{
|
||||||
"Type": "NodeTextMark",
|
"Type": "NodeTextMark",
|
||||||
"TextMarkType": "kbd",
|
"TextMarkType": "kbd",
|
||||||
"TextMarkTextContent": "⇧Click"
|
"TextMarkTextContent": "⌥⇧Click"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
"id": "20201227201128-m1wrouw",
|
"id": "20201227201128-m1wrouw",
|
||||||
"title": "Docker hosting",
|
"title": "Docker hosting",
|
||||||
"type": "doc",
|
"type": "doc",
|
||||||
"updated": "20231108220523"
|
"updated": "20250926110627"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -790,7 +790,7 @@
|
||||||
"HeadingLevel": 2,
|
"HeadingLevel": 2,
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406105311-sq5f3qj",
|
"id": "20230406105311-sq5f3qj",
|
||||||
"updated": "20230406105334"
|
"updated": "20250926110627"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -805,7 +805,7 @@
|
||||||
"ListData": {},
|
"ListData": {},
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406105311-jvtmuhi",
|
"id": "20230406105311-jvtmuhi",
|
||||||
"updated": "20230406105617"
|
"updated": "20250926110627"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -845,7 +845,7 @@
|
||||||
},
|
},
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406105311-rz3umi0",
|
"id": "20230406105311-rz3umi0",
|
||||||
"updated": "20230406105311"
|
"updated": "20250926110627"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -853,40 +853,12 @@
|
||||||
"Type": "NodeParagraph",
|
"Type": "NodeParagraph",
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406105311-bhdrf8a",
|
"id": "20230406105311-bhdrf8a",
|
||||||
"updated": "20230406105311"
|
"updated": "20250926110627"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": "Export to PDF, HTML and Word formats is not supported"
|
"Data": "Does not support exporting to formats such as PDF, HTML, and Word"
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ID": "20230406105311-3rrhrq2",
|
|
||||||
"Type": "NodeListItem",
|
|
||||||
"ListData": {
|
|
||||||
"BulletChar": 42,
|
|
||||||
"Marker": "Kg=="
|
|
||||||
},
|
|
||||||
"Properties": {
|
|
||||||
"id": "20230406105311-3rrhrq2",
|
|
||||||
"updated": "20230406105617"
|
|
||||||
},
|
|
||||||
"Children": [
|
|
||||||
{
|
|
||||||
"ID": "20230406105311-w0rmhgz",
|
|
||||||
"Type": "NodeParagraph",
|
|
||||||
"Properties": {
|
|
||||||
"id": "20230406105311-w0rmhgz",
|
|
||||||
"updated": "20230406105617"
|
|
||||||
},
|
|
||||||
"Children": [
|
|
||||||
{
|
|
||||||
"Type": "NodeText",
|
|
||||||
"Data": "Import Markdown file is not supported"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
"id": "20200813004551-gm0pbn1",
|
"id": "20200813004551-gm0pbn1",
|
||||||
"title": "快捷键",
|
"title": "快捷键",
|
||||||
"type": "doc",
|
"type": "doc",
|
||||||
"updated": "20250529111202"
|
"updated": "20250929213838"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9061,7 +9061,7 @@
|
||||||
"HeadingLevel": 3,
|
"HeadingLevel": 3,
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20210102174148-tq925jm",
|
"id": "20210102174148-tq925jm",
|
||||||
"updated": "20250115154629"
|
"updated": "20250924163015"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9081,7 +9081,7 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"colgroup": "||",
|
"colgroup": "||",
|
||||||
"id": "20210102174148-snb76bj",
|
"id": "20210102174148-snb76bj",
|
||||||
"updated": "20250115154629"
|
"updated": "20250924163015"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9190,7 +9190,7 @@
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": "引用块"
|
"Data": "块引用"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -9237,7 +9237,43 @@
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": "需选中内容"
|
"Data": "需选中内容;默认使用静态锚文本,在候选列表中按 "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "回车"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " 或 "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "点击"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " 会使用动态锚文本"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -14934,7 +14970,7 @@
|
||||||
"HeadingLevel": 3,
|
"HeadingLevel": 3,
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20220619001156-26volkp",
|
"id": "20220619001156-26volkp",
|
||||||
"updated": "20250407195943"
|
"updated": "20250929213838"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -14954,7 +14990,7 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"colgroup": "||",
|
"colgroup": "||",
|
||||||
"id": "20220619001217-e9cwukj",
|
"id": "20220619001217-e9cwukj",
|
||||||
"updated": "20250115154936"
|
"updated": "20250929213838"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -15095,6 +15131,87 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableRow",
|
||||||
|
"Data": "tr",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "批量多选"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Shift"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "点击"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " / "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "⇧点击"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "需要先使用 "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "点击"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " 选中首个文档"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeTableRow",
|
"Type": "NodeTableRow",
|
||||||
"Data": "tr",
|
"Data": "tr",
|
||||||
|
|
@ -15178,6 +15295,15 @@
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": ""
|
"Data": ""
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeTextMark",
|
"Type": "NodeTextMark",
|
||||||
"TextMarkType": "kbd",
|
"TextMarkType": "kbd",
|
||||||
|
|
@ -15199,7 +15325,7 @@
|
||||||
{
|
{
|
||||||
"Type": "NodeTextMark",
|
"Type": "NodeTextMark",
|
||||||
"TextMarkType": "kbd",
|
"TextMarkType": "kbd",
|
||||||
"TextMarkTextContent": "⇧点击"
|
"TextMarkTextContent": "⌥⇧点击"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@
|
||||||
"id": "20201227173504-847cs1q",
|
"id": "20201227173504-847cs1q",
|
||||||
"title": "Docker 伺服",
|
"title": "Docker 伺服",
|
||||||
"type": "doc",
|
"type": "doc",
|
||||||
"updated": "20231108220452"
|
"updated": "20250926110513"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -798,7 +798,7 @@
|
||||||
"HeadingLevel": 2,
|
"HeadingLevel": 2,
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406104141-6o5jpu6",
|
"id": "20230406104141-6o5jpu6",
|
||||||
"updated": "20230406104144"
|
"updated": "20250926110513"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -813,7 +813,7 @@
|
||||||
"ListData": {},
|
"ListData": {},
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406104201-nbfn2p9",
|
"id": "20230406104201-nbfn2p9",
|
||||||
"updated": "20230406104451"
|
"updated": "20250926110513"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -852,7 +852,8 @@
|
||||||
"Marker": "Kg=="
|
"Marker": "Kg=="
|
||||||
},
|
},
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406104247-qyrt1tz"
|
"id": "20230406104247-qyrt1tz",
|
||||||
|
"updated": "20250926110513"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -860,40 +861,12 @@
|
||||||
"Type": "NodeParagraph",
|
"Type": "NodeParagraph",
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406104247-vrslzoi",
|
"id": "20230406104247-vrslzoi",
|
||||||
"updated": "20230406104438"
|
"updated": "20250926110513"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": "不支持导出 PDF、HTML 和 Word 格式"
|
"Data": "不支持导出 PDF、HTML 和 Word 等格式"
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ID": "20230406104438-kqz2pl7",
|
|
||||||
"Type": "NodeListItem",
|
|
||||||
"ListData": {
|
|
||||||
"BulletChar": 42,
|
|
||||||
"Marker": "Kg=="
|
|
||||||
},
|
|
||||||
"Properties": {
|
|
||||||
"id": "20230406104438-kqz2pl7",
|
|
||||||
"updated": "20230406104451"
|
|
||||||
},
|
|
||||||
"Children": [
|
|
||||||
{
|
|
||||||
"ID": "20230406104438-b4m8fen",
|
|
||||||
"Type": "NodeParagraph",
|
|
||||||
"Properties": {
|
|
||||||
"id": "20230406104438-b4m8fen",
|
|
||||||
"updated": "20230406104451"
|
|
||||||
},
|
|
||||||
"Children": [
|
|
||||||
{
|
|
||||||
"Type": "NodeText",
|
|
||||||
"Data": "不支持导入 Markdown 文件"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20211226122459-08mi5cq",
|
"id": "20211226122459-08mi5cq",
|
||||||
"title": "Docker 伺服",
|
"title": "Docker 伺服",
|
||||||
"updated": "20231108220609"
|
"type": "doc",
|
||||||
|
"updated": "20250926110600"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -760,7 +761,7 @@
|
||||||
"HeadingLevel": 2,
|
"HeadingLevel": 2,
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406105213-yoyn08w",
|
"id": "20230406105213-yoyn08w",
|
||||||
"updated": "20230406105213"
|
"updated": "20250926110600"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -775,7 +776,7 @@
|
||||||
"ListData": {},
|
"ListData": {},
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406105213-899tzed",
|
"id": "20230406105213-899tzed",
|
||||||
"updated": "20230406105213"
|
"updated": "20250926110600"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -815,7 +816,7 @@
|
||||||
},
|
},
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406105213-a8dt0r2",
|
"id": "20230406105213-a8dt0r2",
|
||||||
"updated": "20230406105213"
|
"updated": "20250926110600"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -823,53 +824,18 @@
|
||||||
"Type": "NodeParagraph",
|
"Type": "NodeParagraph",
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20230406105213-2dqmoo6",
|
"id": "20230406105213-2dqmoo6",
|
||||||
"updated": "20230406105213"
|
"updated": "20250926110600"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": "不支持導出 PDF、HTML 和 Word 格式"
|
"Data": "不支援導出 PDF、HTML 和 Word 等格式"
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ID": "20230406105213-7du7gyh",
|
|
||||||
"Type": "NodeListItem",
|
|
||||||
"ListData": {
|
|
||||||
"BulletChar": 42,
|
|
||||||
"Marker": "Kg=="
|
|
||||||
},
|
|
||||||
"Properties": {
|
|
||||||
"id": "20230406105213-7du7gyh",
|
|
||||||
"updated": "20230406105213"
|
|
||||||
},
|
|
||||||
"Children": [
|
|
||||||
{
|
|
||||||
"ID": "20230406105213-c9nvb8g",
|
|
||||||
"Type": "NodeParagraph",
|
|
||||||
"Properties": {
|
|
||||||
"id": "20230406105213-c9nvb8g",
|
|
||||||
"updated": "20230406105213"
|
|
||||||
},
|
|
||||||
"Children": [
|
|
||||||
{
|
|
||||||
"Type": "NodeText",
|
|
||||||
"Data": "不支持導入 Markdown 文件"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"ID": "20230406105209-10odb7t",
|
|
||||||
"Type": "NodeParagraph",
|
|
||||||
"Properties": {
|
|
||||||
"id": "20230406105209-10odb7t"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
"id": "20211226122549-jktxego",
|
"id": "20211226122549-jktxego",
|
||||||
"title": "快捷鍵",
|
"title": "快捷鍵",
|
||||||
"type": "doc",
|
"type": "doc",
|
||||||
"updated": "20250529111304"
|
"updated": "20250929213959"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9104,7 +9104,7 @@
|
||||||
"HeadingLevel": 3,
|
"HeadingLevel": 3,
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20211226122652-8191vgw",
|
"id": "20211226122652-8191vgw",
|
||||||
"updated": "20250115155758"
|
"updated": "20250924164911"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9124,7 +9124,7 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"colgroup": "||",
|
"colgroup": "||",
|
||||||
"id": "20211226122652-v6as45b",
|
"id": "20211226122652-v6as45b",
|
||||||
"updated": "20250115155758"
|
"updated": "20250924164911"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9233,7 +9233,7 @@
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": "引用塊"
|
"Data": "塊引用"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
|
@ -9280,7 +9280,43 @@
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": "需選中內容"
|
"Data": "需選中內容;預設使用靜態錨文本,在候選列表中按 "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Enter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " 或 "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "點擊"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " 會使用動態錨文本"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -15027,7 +15063,7 @@
|
||||||
"HeadingLevel": 3,
|
"HeadingLevel": 3,
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20220619002223-zliquo3",
|
"id": "20220619002223-zliquo3",
|
||||||
"updated": "20250407200322"
|
"updated": "20250929213959"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -15047,7 +15083,7 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"colgroup": "||",
|
"colgroup": "||",
|
||||||
"id": "20220619002223-xwob5s8",
|
"id": "20220619002223-xwob5s8",
|
||||||
"updated": "20250115160004"
|
"updated": "20250929213959"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -15196,6 +15232,87 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableRow",
|
||||||
|
"Data": "tr",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "批次多選"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Shift"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "點擊"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " / "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "⇧點擊"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "需要先使用 "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "點擊"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " 選取首個文件"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeTableRow",
|
"Type": "NodeTableRow",
|
||||||
"Data": "tr",
|
"Data": "tr",
|
||||||
|
|
@ -15283,6 +15400,15 @@
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": ""
|
"Data": ""
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeTextMark",
|
"Type": "NodeTextMark",
|
||||||
"TextMarkType": "kbd",
|
"TextMarkType": "kbd",
|
||||||
|
|
@ -15304,7 +15430,7 @@
|
||||||
{
|
{
|
||||||
"Type": "NodeTextMark",
|
"Type": "NodeTextMark",
|
||||||
"TextMarkType": "kbd",
|
"TextMarkType": "kbd",
|
||||||
"TextMarkTextContent": "⇧點擊"
|
"TextMarkTextContent": "⌥⇧點擊"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@
|
||||||
"id": "20240530101000-f16hpct",
|
"id": "20240530101000-f16hpct",
|
||||||
"title": "Docker サーバー",
|
"title": "Docker サーバー",
|
||||||
"type": "doc",
|
"type": "doc",
|
||||||
"updated": "20240530101000"
|
"updated": "20250926110655"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -906,7 +906,7 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"ID": "20240530101000-8bjgcwz",
|
"ID": "20240530101000-8bjgcwz",
|
||||||
"id": "20240530101000-av0hc90",
|
"id": "20240530101000-av0hc90",
|
||||||
"updated": "20240530101000"
|
"updated": "20250926110655"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -922,7 +922,7 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"ID": "20240530101000-c39mqvp",
|
"ID": "20240530101000-c39mqvp",
|
||||||
"id": "20240530101000-95f1jst",
|
"id": "20240530101000-95f1jst",
|
||||||
"updated": "20240530101000"
|
"updated": "20250926110655"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -965,65 +965,26 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"ID": "20240530101000-r9haojg",
|
"ID": "20240530101000-r9haojg",
|
||||||
"id": "20240530101000-ibq4c4y",
|
"id": "20240530101000-ibq4c4y",
|
||||||
"updated": "20240530101000"
|
"updated": "20250926110655"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"ID": "20240530101000-k2rz2gr",
|
"ID": "20240530101000-k2rz2gr",
|
||||||
"Type": "NodeParagraph",
|
"Type": "NodeParagraph",
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"ID": "20240530101000-txuv357",
|
|
||||||
"id": "20240530101000-k2rz2gr",
|
"id": "20240530101000-k2rz2gr",
|
||||||
"updated": "20240530101000"
|
"updated": "20250926110655"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": "PDF、HTML、Word 形式のエクスポートは対応していません"
|
"Data": "PDF、HTML、Word などの形式でのエクスポートはサポートしていません"
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ID": "20240530101000-hei819m",
|
|
||||||
"Type": "NodeListItem",
|
|
||||||
"ListData": {
|
|
||||||
"BulletChar": 42,
|
|
||||||
"Marker": "Kg=="
|
|
||||||
},
|
|
||||||
"Properties": {
|
|
||||||
"ID": "20240530101000-r7ab84s",
|
|
||||||
"id": "20240530101000-hei819m",
|
|
||||||
"updated": "20240530101000"
|
|
||||||
},
|
|
||||||
"Children": [
|
|
||||||
{
|
|
||||||
"ID": "20240530101000-0y6efyk",
|
|
||||||
"Type": "NodeParagraph",
|
|
||||||
"Properties": {
|
|
||||||
"ID": "20240530101000-6fuv1qy",
|
|
||||||
"id": "20240530101000-0y6efyk",
|
|
||||||
"updated": "20240530101000"
|
|
||||||
},
|
|
||||||
"Children": [
|
|
||||||
{
|
|
||||||
"Type": "NodeText",
|
|
||||||
"Data": "Markdown ファイルのインポートは対応していません"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"ID": "20240530101000-vboxjwn",
|
|
||||||
"Type": "NodeParagraph",
|
|
||||||
"Properties": {
|
|
||||||
"ID": "20240530101000-iy4sbqy",
|
|
||||||
"id": "20240530101000-vboxjwn"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -9,7 +9,7 @@
|
||||||
"id": "20240530101000-xsbxokr",
|
"id": "20240530101000-xsbxokr",
|
||||||
"title": "ショートカット",
|
"title": "ショートカット",
|
||||||
"type": "doc",
|
"type": "doc",
|
||||||
"updated": "20250529111249"
|
"updated": "20250929214234"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9010,7 +9010,7 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"ID": "20240530101000-qf3oj4u",
|
"ID": "20240530101000-qf3oj4u",
|
||||||
"id": "20240530101000-zy0pmo3",
|
"id": "20240530101000-zy0pmo3",
|
||||||
"updated": "20250115161741"
|
"updated": "20250924165340"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9040,7 +9040,7 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"colgroup": "||",
|
"colgroup": "||",
|
||||||
"id": "20240530101000-5be9vw0",
|
"id": "20240530101000-5be9vw0",
|
||||||
"updated": "20250115161741"
|
"updated": "20250924165340"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -9200,7 +9200,43 @@
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": "コンテンツが選択されている必要があります"
|
"Data": "コンテンツを選択する必要があります。デフォルトでは静的アンカーテキストを使用し、候補リストで "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Enter"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " または "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "クリック"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " を押すと動的アンカーテキストを使用します"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
@ -15077,7 +15113,7 @@
|
||||||
"HeadingLevel": 3,
|
"HeadingLevel": 3,
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"id": "20240530101000-mifghto",
|
"id": "20240530101000-mifghto",
|
||||||
"updated": "20250407200635"
|
"updated": "20250929214234"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -15097,7 +15133,7 @@
|
||||||
"Properties": {
|
"Properties": {
|
||||||
"colgroup": "||",
|
"colgroup": "||",
|
||||||
"id": "20240530101000-4iuhg30",
|
"id": "20240530101000-4iuhg30",
|
||||||
"updated": "20250115161937"
|
"updated": "20250929214234"
|
||||||
},
|
},
|
||||||
"Children": [
|
"Children": [
|
||||||
{
|
{
|
||||||
|
|
@ -15238,6 +15274,87 @@
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableRow",
|
||||||
|
"Data": "tr",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "一括複数選択"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": ""
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Shift"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "クリック"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " / "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "⇧クリック"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": ""
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTableCell",
|
||||||
|
"Data": "td",
|
||||||
|
"Children": [
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "まずは "
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "クリック"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": " で最初の文書を選択する必要があります"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeTableRow",
|
"Type": "NodeTableRow",
|
||||||
"Data": "tr",
|
"Data": "tr",
|
||||||
|
|
@ -15321,6 +15438,15 @@
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
"Data": ""
|
"Data": ""
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeTextMark",
|
||||||
|
"TextMarkType": "kbd",
|
||||||
|
"TextMarkTextContent": "Ctrl"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Type": "NodeText",
|
||||||
|
"Data": "+"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeTextMark",
|
"Type": "NodeTextMark",
|
||||||
"TextMarkType": "kbd",
|
"TextMarkType": "kbd",
|
||||||
|
|
@ -15342,7 +15468,7 @@
|
||||||
{
|
{
|
||||||
"Type": "NodeTextMark",
|
"Type": "NodeTextMark",
|
||||||
"TextMarkType": "kbd",
|
"TextMarkType": "kbd",
|
||||||
"TextMarkTextContent": "⇧クリック"
|
"TextMarkTextContent": "⌥⇧クリック"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Type": "NodeText",
|
"Type": "NodeText",
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,10 @@
|
||||||
{
|
{
|
||||||
"name": "SiYuan",
|
"name": "SiYuan",
|
||||||
"version": "3.3.2",
|
"version": "3.3.5",
|
||||||
"description": "Refactor your thinking",
|
"description": "Refactor your thinking",
|
||||||
"homepage": "https://b3log.org/siyuan",
|
"homepage": "https://b3log.org/siyuan",
|
||||||
"main": "./electron/main.js",
|
"main": "./electron/main.js",
|
||||||
"packageManager": "pnpm@10.15.1",
|
"packageManager": "pnpm@10.18.3",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"lint": "eslint . --fix --cache",
|
"lint": "eslint . --fix --cache",
|
||||||
"dev": "webpack --mode development",
|
"dev": "webpack --mode development",
|
||||||
|
|
@ -18,7 +18,6 @@
|
||||||
"build:export": "webpack --mode production --config webpack.export.js",
|
"build:export": "webpack --mode production --config webpack.export.js",
|
||||||
"gen:types": "tsc -d",
|
"gen:types": "tsc -d",
|
||||||
"start": "NODE_ENV=development electron ./electron/main.js",
|
"start": "NODE_ENV=development electron ./electron/main.js",
|
||||||
"dist-appx": "ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ electron-builder --config electron-appx-builder.yml",
|
|
||||||
"dist": "ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ electron-builder --config electron-builder.yml --publish=never",
|
"dist": "ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ electron-builder --config electron-builder.yml --publish=never",
|
||||||
"dist-arm64": "ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ electron-builder --arm64 --config electron-builder-arm64.yml --publish=never",
|
"dist-arm64": "ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ electron-builder --arm64 --config electron-builder-arm64.yml --publish=never",
|
||||||
"dist-darwin": "ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ electron-builder --mac --config electron-builder-darwin.yml --publish=never",
|
"dist-darwin": "ELECTRON_MIRROR=https://npmmirror.com/mirrors/electron/ electron-builder --mac --config electron-builder-darwin.yml --publish=never",
|
||||||
|
|
@ -58,7 +57,7 @@
|
||||||
"clean-webpack-plugin": "^4.0.0",
|
"clean-webpack-plugin": "^4.0.0",
|
||||||
"css-loader": "^7.1.2",
|
"css-loader": "^7.1.2",
|
||||||
"dayjs": "^1.11.5",
|
"dayjs": "^1.11.5",
|
||||||
"electron": "37.4.0",
|
"electron": "37.7.0",
|
||||||
"electron-builder": "26.0.12",
|
"electron-builder": "26.0.12",
|
||||||
"encoding": "^0.1.13",
|
"encoding": "^0.1.13",
|
||||||
"esbuild-loader": "^3.0.1",
|
"esbuild-loader": "^3.0.1",
|
||||||
|
|
|
||||||
65
app/pnpm-lock.yaml
generated
65
app/pnpm-lock.yaml
generated
|
|
@ -10,7 +10,7 @@ importers:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@electron/remote':
|
'@electron/remote':
|
||||||
specifier: ^2.1.3
|
specifier: ^2.1.3
|
||||||
version: 2.1.3(electron@37.4.0)
|
version: 2.1.3(electron@37.7.0)
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@eslint/eslintrc':
|
'@eslint/eslintrc':
|
||||||
specifier: ^3.3.1
|
specifier: ^3.3.1
|
||||||
|
|
@ -23,10 +23,10 @@ importers:
|
||||||
version: 18.19.124
|
version: 18.19.124
|
||||||
'@typescript-eslint/eslint-plugin':
|
'@typescript-eslint/eslint-plugin':
|
||||||
specifier: ^8.15.0
|
specifier: ^8.15.0
|
||||||
version: 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0)(typescript@4.9.5))(eslint@9.35.0)(typescript@4.9.5)
|
version: 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5)
|
||||||
'@typescript-eslint/parser':
|
'@typescript-eslint/parser':
|
||||||
specifier: ^8.15.0
|
specifier: ^8.15.0
|
||||||
version: 8.42.0(eslint@9.35.0)(typescript@4.9.5)
|
version: 8.42.0(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5)
|
||||||
blueimp-md5:
|
blueimp-md5:
|
||||||
specifier: ^2.19.0
|
specifier: ^2.19.0
|
||||||
version: 2.19.0
|
version: 2.19.0
|
||||||
|
|
@ -40,8 +40,8 @@ importers:
|
||||||
specifier: ^1.11.5
|
specifier: ^1.11.5
|
||||||
version: 1.11.18
|
version: 1.11.18
|
||||||
electron:
|
electron:
|
||||||
specifier: 37.4.0
|
specifier: 37.7.0
|
||||||
version: 37.4.0
|
version: 37.7.0
|
||||||
electron-builder:
|
electron-builder:
|
||||||
specifier: 26.0.12
|
specifier: 26.0.12
|
||||||
version: 26.0.12(electron-builder-squirrel-windows@26.0.12)
|
version: 26.0.12(electron-builder-squirrel-windows@26.0.12)
|
||||||
|
|
@ -53,7 +53,7 @@ importers:
|
||||||
version: 3.2.0(webpack@5.101.3)
|
version: 3.2.0(webpack@5.101.3)
|
||||||
eslint:
|
eslint:
|
||||||
specifier: ^9.15.0
|
specifier: ^9.15.0
|
||||||
version: 9.35.0
|
version: 9.35.0(jiti@1.21.7)
|
||||||
file-loader:
|
file-loader:
|
||||||
specifier: ^6.2.0
|
specifier: ^6.2.0
|
||||||
version: 6.2.0(webpack@5.101.3)
|
version: 6.2.0(webpack@5.101.3)
|
||||||
|
|
@ -1198,8 +1198,8 @@ packages:
|
||||||
resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==}
|
resolution: {integrity: sha512-bO3y10YikuUwUuDUQRM4KfwNkKhnpVO7IPdbsrejwN9/AABJzzTQ4GeHwyzNSrVO+tEH3/Np255a3sVZpZDjvg==}
|
||||||
engines: {node: '>=8.0.0'}
|
engines: {node: '>=8.0.0'}
|
||||||
|
|
||||||
electron@37.4.0:
|
electron@37.7.0:
|
||||||
resolution: {integrity: sha512-HhsSdWowE5ODOeWNc/323Ug2C52mq/TqNBG+4uMeOA3G2dMXNc/nfyi0RYu1rJEgiaJLEjtHveeZZaYRYFsFCQ==}
|
resolution: {integrity: sha512-LBzvfrS0aalynOsnC11AD7zeoU8eOois090mzLpQM3K8yZ2N04i2ZW9qmHOTFLrXlKvrwRc7EbyQf1u8XHMl6Q==}
|
||||||
engines: {node: '>= 12.20.55'}
|
engines: {node: '>= 12.20.55'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
|
|
@ -1757,6 +1757,10 @@ packages:
|
||||||
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
|
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
|
||||||
engines: {node: '>= 10.13.0'}
|
engines: {node: '>= 10.13.0'}
|
||||||
|
|
||||||
|
jiti@1.21.7:
|
||||||
|
resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
js-yaml@4.1.0:
|
js-yaml@4.1.0:
|
||||||
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
|
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
@ -2864,9 +2868,9 @@ snapshots:
|
||||||
- bluebird
|
- bluebird
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@electron/remote@2.1.3(electron@37.4.0)':
|
'@electron/remote@2.1.3(electron@37.7.0)':
|
||||||
dependencies:
|
dependencies:
|
||||||
electron: 37.4.0
|
electron: 37.7.0
|
||||||
|
|
||||||
'@electron/universal@2.0.1':
|
'@electron/universal@2.0.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
|
|
@ -2960,9 +2964,9 @@ snapshots:
|
||||||
'@esbuild/win32-x64@0.19.12':
|
'@esbuild/win32-x64@0.19.12':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@eslint-community/eslint-utils@4.8.0(eslint@9.35.0)':
|
'@eslint-community/eslint-utils@4.8.0(eslint@9.35.0(jiti@1.21.7))':
|
||||||
dependencies:
|
dependencies:
|
||||||
eslint: 9.35.0
|
eslint: 9.35.0(jiti@1.21.7)
|
||||||
eslint-visitor-keys: 3.4.3
|
eslint-visitor-keys: 3.4.3
|
||||||
|
|
||||||
'@eslint-community/regexpp@4.12.1': {}
|
'@eslint-community/regexpp@4.12.1': {}
|
||||||
|
|
@ -3234,15 +3238,15 @@ snapshots:
|
||||||
'@types/node': 18.19.124
|
'@types/node': 18.19.124
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0)(typescript@4.9.5))(eslint@9.35.0)(typescript@4.9.5)':
|
'@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5))(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/regexpp': 4.12.1
|
'@eslint-community/regexpp': 4.12.1
|
||||||
'@typescript-eslint/parser': 8.42.0(eslint@9.35.0)(typescript@4.9.5)
|
'@typescript-eslint/parser': 8.42.0(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5)
|
||||||
'@typescript-eslint/scope-manager': 8.42.0
|
'@typescript-eslint/scope-manager': 8.42.0
|
||||||
'@typescript-eslint/type-utils': 8.42.0(eslint@9.35.0)(typescript@4.9.5)
|
'@typescript-eslint/type-utils': 8.42.0(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5)
|
||||||
'@typescript-eslint/utils': 8.42.0(eslint@9.35.0)(typescript@4.9.5)
|
'@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5)
|
||||||
'@typescript-eslint/visitor-keys': 8.42.0
|
'@typescript-eslint/visitor-keys': 8.42.0
|
||||||
eslint: 9.35.0
|
eslint: 9.35.0(jiti@1.21.7)
|
||||||
graphemer: 1.4.0
|
graphemer: 1.4.0
|
||||||
ignore: 7.0.5
|
ignore: 7.0.5
|
||||||
natural-compare: 1.4.0
|
natural-compare: 1.4.0
|
||||||
|
|
@ -3251,14 +3255,14 @@ snapshots:
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/parser@8.42.0(eslint@9.35.0)(typescript@4.9.5)':
|
'@typescript-eslint/parser@8.42.0(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/scope-manager': 8.42.0
|
'@typescript-eslint/scope-manager': 8.42.0
|
||||||
'@typescript-eslint/types': 8.42.0
|
'@typescript-eslint/types': 8.42.0
|
||||||
'@typescript-eslint/typescript-estree': 8.42.0(typescript@4.9.5)
|
'@typescript-eslint/typescript-estree': 8.42.0(typescript@4.9.5)
|
||||||
'@typescript-eslint/visitor-keys': 8.42.0
|
'@typescript-eslint/visitor-keys': 8.42.0
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
eslint: 9.35.0
|
eslint: 9.35.0(jiti@1.21.7)
|
||||||
typescript: 4.9.5
|
typescript: 4.9.5
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
@ -3281,13 +3285,13 @@ snapshots:
|
||||||
dependencies:
|
dependencies:
|
||||||
typescript: 4.9.5
|
typescript: 4.9.5
|
||||||
|
|
||||||
'@typescript-eslint/type-utils@8.42.0(eslint@9.35.0)(typescript@4.9.5)':
|
'@typescript-eslint/type-utils@8.42.0(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/types': 8.42.0
|
'@typescript-eslint/types': 8.42.0
|
||||||
'@typescript-eslint/typescript-estree': 8.42.0(typescript@4.9.5)
|
'@typescript-eslint/typescript-estree': 8.42.0(typescript@4.9.5)
|
||||||
'@typescript-eslint/utils': 8.42.0(eslint@9.35.0)(typescript@4.9.5)
|
'@typescript-eslint/utils': 8.42.0(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5)
|
||||||
debug: 4.4.1
|
debug: 4.4.1
|
||||||
eslint: 9.35.0
|
eslint: 9.35.0(jiti@1.21.7)
|
||||||
ts-api-utils: 2.1.0(typescript@4.9.5)
|
ts-api-utils: 2.1.0(typescript@4.9.5)
|
||||||
typescript: 4.9.5
|
typescript: 4.9.5
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
|
|
@ -3311,13 +3315,13 @@ snapshots:
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
'@typescript-eslint/utils@8.42.0(eslint@9.35.0)(typescript@4.9.5)':
|
'@typescript-eslint/utils@8.42.0(eslint@9.35.0(jiti@1.21.7))(typescript@4.9.5)':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0)
|
'@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@1.21.7))
|
||||||
'@typescript-eslint/scope-manager': 8.42.0
|
'@typescript-eslint/scope-manager': 8.42.0
|
||||||
'@typescript-eslint/types': 8.42.0
|
'@typescript-eslint/types': 8.42.0
|
||||||
'@typescript-eslint/typescript-estree': 8.42.0(typescript@4.9.5)
|
'@typescript-eslint/typescript-estree': 8.42.0(typescript@4.9.5)
|
||||||
eslint: 9.35.0
|
eslint: 9.35.0(jiti@1.21.7)
|
||||||
typescript: 4.9.5
|
typescript: 4.9.5
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
@ -4009,7 +4013,7 @@ snapshots:
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
electron@37.4.0:
|
electron@37.7.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
'@electron/get': 2.0.3
|
'@electron/get': 2.0.3
|
||||||
'@types/node': 22.18.1
|
'@types/node': 22.18.1
|
||||||
|
|
@ -4116,9 +4120,9 @@ snapshots:
|
||||||
|
|
||||||
eslint-visitor-keys@4.2.1: {}
|
eslint-visitor-keys@4.2.1: {}
|
||||||
|
|
||||||
eslint@9.35.0:
|
eslint@9.35.0(jiti@1.21.7):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0)
|
'@eslint-community/eslint-utils': 4.8.0(eslint@9.35.0(jiti@1.21.7))
|
||||||
'@eslint-community/regexpp': 4.12.1
|
'@eslint-community/regexpp': 4.12.1
|
||||||
'@eslint/config-array': 0.21.0
|
'@eslint/config-array': 0.21.0
|
||||||
'@eslint/config-helpers': 0.3.1
|
'@eslint/config-helpers': 0.3.1
|
||||||
|
|
@ -4153,6 +4157,8 @@ snapshots:
|
||||||
minimatch: 3.1.2
|
minimatch: 3.1.2
|
||||||
natural-compare: 1.4.0
|
natural-compare: 1.4.0
|
||||||
optionator: 0.9.4
|
optionator: 0.9.4
|
||||||
|
optionalDependencies:
|
||||||
|
jiti: 1.21.7
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
|
|
@ -4649,6 +4655,9 @@ snapshots:
|
||||||
merge-stream: 2.0.0
|
merge-stream: 2.0.0
|
||||||
supports-color: 8.1.1
|
supports-color: 8.1.1
|
||||||
|
|
||||||
|
jiti@1.21.7:
|
||||||
|
optional: true
|
||||||
|
|
||||||
js-yaml@4.1.0:
|
js-yaml@4.1.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
argparse: 2.0.1
|
argparse: 2.0.1
|
||||||
|
|
|
||||||
|
|
@ -161,7 +161,7 @@ export const AIActions = (elements: Element[], protyle: IProtyle) => {
|
||||||
elements.forEach(item => {
|
elements.forEach(item => {
|
||||||
ids.push(item.getAttribute("data-node-id"));
|
ids.push(item.getAttribute("data-node-id"));
|
||||||
});
|
});
|
||||||
const menu = new Menu("ai", () => {
|
const menu = new Menu(Constants.MENU_AI, () => {
|
||||||
focusByRange(protyle.toolbar.range);
|
focusByRange(protyle.toolbar.range);
|
||||||
});
|
});
|
||||||
let customHTML = "";
|
let customHTML = "";
|
||||||
|
|
|
||||||
|
|
@ -180,43 +180,43 @@ export class Asset extends Model {
|
||||||
<button id="previous" class="secondaryToolbarButton b3-menu__item pageUp">
|
<button id="previous" class="secondaryToolbarButton b3-menu__item pageUp">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconUp"></use></svg>
|
<svg class="b3-menu__icon"><use xlink:href="#iconUp"></use></svg>
|
||||||
<span class="b3-menu__label">${window.siyuan.languages.previousLabel}</span>
|
<span class="b3-menu__label">${window.siyuan.languages.previousLabel}</span>
|
||||||
<span class="b3-menu__accelerator">${updateHotkeyTip("P")}/${updateHotkeyTip("K")}</span>
|
<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">${updateHotkeyTip("P")}/${updateHotkeyTip("K")}</span>
|
||||||
</button>
|
</button>
|
||||||
<button id="next" class="secondaryToolbarButton b3-menu__item pageDown">
|
<button id="next" class="secondaryToolbarButton b3-menu__item pageDown">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconDown"></use></svg>
|
<svg class="b3-menu__icon"><use xlink:href="#iconDown"></use></svg>
|
||||||
<span class="b3-menu__label">${window.siyuan.languages.nextLabel}</span>
|
<span class="b3-menu__label">${window.siyuan.languages.nextLabel}</span>
|
||||||
<span class="b3-menu__accelerator">${updateHotkeyTip("J")}/${updateHotkeyTip("N")}</span>
|
<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">${updateHotkeyTip("J")}/${updateHotkeyTip("N")}</span>
|
||||||
</button>
|
</button>
|
||||||
<button id="firstPage" class="secondaryToolbarButton b3-menu__item firstPage">
|
<button id="firstPage" class="secondaryToolbarButton b3-menu__item firstPage">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconBack"></use></svg>
|
<svg class="b3-menu__icon"><use xlink:href="#iconBack"></use></svg>
|
||||||
<span class="b3-menu__label">${window.siyuan.languages.firstPage}</span>
|
<span class="b3-menu__label">${window.siyuan.languages.firstPage}</span>
|
||||||
<span class="b3-menu__accelerator">Home</span>
|
<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">Home</span>
|
||||||
</button>
|
</button>
|
||||||
<button id="lastPage" class="secondaryToolbarButton b3-menu__item lastPage">
|
<button id="lastPage" class="secondaryToolbarButton b3-menu__item lastPage">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconForward"></use></svg>
|
<svg class="b3-menu__icon"><use xlink:href="#iconForward"></use></svg>
|
||||||
<span class="b3-menu__label">${window.siyuan.languages.lastPage}</span>
|
<span class="b3-menu__label">${window.siyuan.languages.lastPage}</span>
|
||||||
<span class="b3-menu__accelerator">End</span>
|
<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">End</span>
|
||||||
</button>
|
</button>
|
||||||
<div class="horizontalToolbarSeparator b3-menu__separator"></div>
|
<div class="horizontalToolbarSeparator b3-menu__separator"></div>
|
||||||
<button id="zoomOutButton" class="secondaryToolbarButton b3-menu__item zoomOut">
|
<button id="zoomOutButton" class="secondaryToolbarButton b3-menu__item zoomOut">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconLine"></use></svg>
|
<svg class="b3-menu__icon"><use xlink:href="#iconLine"></use></svg>
|
||||||
<span class="b3-menu__label">${window.siyuan.languages.zoomOut}</span>
|
<span class="b3-menu__label">${window.siyuan.languages.zoomOut}</span>
|
||||||
<span class="b3-menu__accelerator">${updateHotkeyTip("⌘-")}</span>
|
<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">${updateHotkeyTip("⌘-")}</span>
|
||||||
</button>
|
</button>
|
||||||
<button id="zoomInButton" class="secondaryToolbarButton b3-menu__item zoomIn">
|
<button id="zoomInButton" class="secondaryToolbarButton b3-menu__item zoomIn">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconAdd"></use></svg>
|
<svg class="b3-menu__icon"><use xlink:href="#iconAdd"></use></svg>
|
||||||
<span class="b3-menu__label">${window.siyuan.languages.zoomIn}</span>
|
<span class="b3-menu__label">${window.siyuan.languages.zoomIn}</span>
|
||||||
<span class="b3-menu__accelerator">${updateHotkeyTip("⌘=")}</span>
|
<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">${updateHotkeyTip("⌘=")}</span>
|
||||||
</button>
|
</button>
|
||||||
<button id="pageRotateCw" class="secondaryToolbarButton b3-menu__item rotateCw">
|
<button id="pageRotateCw" class="secondaryToolbarButton b3-menu__item rotateCw">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconRedo"></use></svg>
|
<svg class="b3-menu__icon"><use xlink:href="#iconRedo"></use></svg>
|
||||||
<span class="b3-menu__label">${window.siyuan.languages.rotateCw}</span>
|
<span class="b3-menu__label">${window.siyuan.languages.rotateCw}</span>
|
||||||
<span class="b3-menu__accelerator">R</span>
|
<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">R</span>
|
||||||
</button>
|
</button>
|
||||||
<button id="pageRotateCcw" class="secondaryToolbarButton b3-menu__item rotateCcw">
|
<button id="pageRotateCcw" class="secondaryToolbarButton b3-menu__item rotateCcw">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconUndo"></use></svg>
|
<svg class="b3-menu__icon"><use xlink:href="#iconUndo"></use></svg>
|
||||||
<span class="b3-menu__label">${window.siyuan.languages.rotateCcw}</span>
|
<span class="b3-menu__label">${window.siyuan.languages.rotateCcw}</span>
|
||||||
<span class="b3-menu__accelerator">⇧R</span>
|
<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">${updateHotkeyTip("⇧R")}</span>
|
||||||
</button>
|
</button>
|
||||||
|
|
||||||
<div class="horizontalToolbarSeparator b3-menu__separator"></div>
|
<div class="horizontalToolbarSeparator b3-menu__separator"></div>
|
||||||
|
|
@ -224,12 +224,12 @@ export class Asset extends Model {
|
||||||
<button id="cursorSelectTool" class="secondaryToolbarButton b3-menu__item selectTool toggled">
|
<button id="cursorSelectTool" class="secondaryToolbarButton b3-menu__item selectTool toggled">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconSelectText"></use></svg>
|
<svg class="b3-menu__icon"><use xlink:href="#iconSelectText"></use></svg>
|
||||||
<span class="b3-menu__label">${window.siyuan.languages.cursorText}</span>
|
<span class="b3-menu__label">${window.siyuan.languages.cursorText}</span>
|
||||||
<span class="b3-menu__accelerator">S</span>
|
<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">S</span>
|
||||||
</button>
|
</button>
|
||||||
<button id="cursorHandTool" class="secondaryToolbarButton b3-menu__item handTool">
|
<button id="cursorHandTool" class="secondaryToolbarButton b3-menu__item handTool">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconHand"></use></svg>
|
<svg class="b3-menu__icon"><use xlink:href="#iconHand"></use></svg>
|
||||||
<span class="b3-menu__label">${window.siyuan.languages.cursorHand}</span>
|
<span class="b3-menu__label">${window.siyuan.languages.cursorHand}</span>
|
||||||
<span class="b3-menu__accelerator">H</span>
|
<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">H</span>
|
||||||
</button>
|
</button>
|
||||||
<div class="horizontalToolbarSeparator b3-menu__separator"></div>
|
<div class="horizontalToolbarSeparator b3-menu__separator"></div>
|
||||||
<button id="scrollVertical" class="secondaryToolbarButton b3-menu__item scrollModeButtons scrollVertical toggled">
|
<button id="scrollVertical" class="secondaryToolbarButton b3-menu__item scrollModeButtons scrollVertical toggled">
|
||||||
|
|
@ -262,7 +262,7 @@ export class Asset extends Model {
|
||||||
<button id="presentationMode" class="secondaryToolbarButton b3-menu__item presentationMode">
|
<button id="presentationMode" class="secondaryToolbarButton b3-menu__item presentationMode">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconPlay"></use></svg>
|
<svg class="b3-menu__icon"><use xlink:href="#iconPlay"></use></svg>
|
||||||
<span class="b3-menu__label">${window.siyuan.languages.presentationMode}</span>
|
<span class="b3-menu__label">${window.siyuan.languages.presentationMode}</span>
|
||||||
<span class="b3-menu__accelerator">${updateHotkeyTip("⌥⌘P")}</span>
|
<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">${updateHotkeyTip("⌥⌘P")}</span>
|
||||||
</button>
|
</button>
|
||||||
<div class="horizontalToolbarSeparator b3-menu__separator spreadModeButtons"></div>
|
<div class="horizontalToolbarSeparator b3-menu__separator spreadModeButtons"></div>
|
||||||
<button id="documentProperties" class="secondaryToolbarButton b3-menu__item documentProperties">
|
<button id="documentProperties" class="secondaryToolbarButton b3-menu__item documentProperties">
|
||||||
|
|
|
||||||
|
|
@ -74,4 +74,8 @@
|
||||||
left: -8px;
|
left: -8px;
|
||||||
bottom: 8px;
|
bottom: 8px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&__move {
|
||||||
|
cursor: move;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -375,6 +375,7 @@
|
||||||
position: fixed;
|
position: fixed;
|
||||||
box-shadow: var(--b3-dialog-shadow);
|
box-shadow: var(--b3-dialog-shadow);
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
&__accelerator {
|
&__accelerator {
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
em,
|
em,
|
||||||
|
a[data-type~="em"],
|
||||||
span[data-type~="em"] {
|
span[data-type~="em"] {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
color: var(--b3-protyle-inline-em-color);
|
color: var(--b3-protyle-inline-em-color);
|
||||||
|
|
@ -72,6 +73,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
strong,
|
strong,
|
||||||
|
a[data-type~="strong"],
|
||||||
span[data-type~="strong"] {
|
span[data-type~="strong"] {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
color: var(--b3-protyle-inline-strong-color);
|
color: var(--b3-protyle-inline-strong-color);
|
||||||
|
|
@ -345,10 +347,11 @@
|
||||||
[data-subtype="echarts"],
|
[data-subtype="echarts"],
|
||||||
[data-subtype="mindmap"] {
|
[data-subtype="mindmap"] {
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
|
height: 420px;
|
||||||
|
box-sizing: border-box;
|
||||||
|
|
||||||
& > div:not(.protyle-icons):not(.protyle-attr) {
|
& > div:not(.protyle-icons):not(.protyle-attr) {
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
height: 420px;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -607,11 +610,15 @@
|
||||||
& > span {
|
& > span {
|
||||||
pointer-events: none;
|
pointer-events: none;
|
||||||
display: block;
|
display: block;
|
||||||
|
color: var(--b3-theme-on-surface);
|
||||||
|
|
||||||
|
&:not(:empty)::before {
|
||||||
|
content: "";
|
||||||
|
}
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
counter-increment: linenumber;
|
counter-increment: linenumber;
|
||||||
content: counter(linenumber);
|
content: counter(linenumber);
|
||||||
color: var(--b3-theme-on-surface);
|
|
||||||
display: block;
|
display: block;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
|
|
||||||
|
|
@ -278,7 +278,7 @@
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
box-sizing: border-box;
|
box-sizing: border-box;
|
||||||
height: 42px;
|
height: 48px;
|
||||||
background: var(--b3-theme-background);
|
background: var(--b3-theme-background);
|
||||||
display: flex;
|
display: flex;
|
||||||
border-top: 1px solid var(--b3-theme-surface-lighter);
|
border-top: 1px solid var(--b3-theme-surface-lighter);
|
||||||
|
|
@ -336,8 +336,8 @@
|
||||||
height: 16px;
|
height: 16px;
|
||||||
width: 16px;
|
width: 16px;
|
||||||
float: left;
|
float: left;
|
||||||
padding: 6px;
|
padding: 13px 9px;
|
||||||
margin: 6px;
|
margin: 3px;
|
||||||
border-radius: var(--b3-border-radius);
|
border-radius: var(--b3-border-radius);
|
||||||
|
|
||||||
&.keyboard__svg--big {
|
&.keyboard__svg--big {
|
||||||
|
|
@ -432,7 +432,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.b3-menu {
|
.b3-menu {
|
||||||
&__accelerator {
|
&__accelerator--hotkey {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,7 @@
|
||||||
height: 16px;
|
height: 16px;
|
||||||
background-color: var(--b3-theme-surface);
|
background-color: var(--b3-theme-surface);
|
||||||
z-index: 1; // 防止被 protyle-scroll 遮挡
|
z-index: 1; // 防止被 protyle-scroll 遮挡
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
&:hover {
|
&:hover {
|
||||||
color: var(--b3-theme-on-background);
|
color: var(--b3-theme-on-background);
|
||||||
|
|
|
||||||
|
|
@ -274,10 +274,18 @@
|
||||||
.protyle-background {
|
.protyle-background {
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
||||||
&:not(.protyle-background--enable) .protyle-background__img .protyle-icons {
|
&:not(.protyle-background--enable) {
|
||||||
|
.protyle-background__img .protyle-icons,
|
||||||
|
.b3-chips__doctag .b3-chip__close,
|
||||||
|
.protyle-background__action {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.protyle-background__icon {
|
||||||
|
cursor: default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&--enable {
|
&--enable {
|
||||||
.protyle-background__img:hover .protyle-icons,
|
.protyle-background__img:hover .protyle-icons,
|
||||||
.protyle-background__icon:hover {
|
.protyle-background__icon:hover {
|
||||||
|
|
@ -414,7 +422,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
table[contenteditable="false"] + .protyle-action__table > .table__resize {
|
table[contenteditable="false"] + .protyle-action__table > .table__resize {
|
||||||
display: none;
|
display: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
table + .protyle-action__table {
|
table + .protyle-action__table {
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@
|
||||||
box-shadow: var(--b3-point-shadow);
|
box-shadow: var(--b3-point-shadow);
|
||||||
border-radius: var(--b3-border-radius);
|
border-radius: var(--b3-border-radius);
|
||||||
display: flex;
|
display: flex;
|
||||||
transition: top .15s cubic-bezier(0, 0, .2, 1) 0ms;
|
|
||||||
|
|
||||||
&__item {
|
&__item {
|
||||||
color: var(--b3-theme-on-surface);
|
color: var(--b3-theme-on-surface);
|
||||||
|
|
|
||||||
|
|
@ -604,12 +604,18 @@
|
||||||
&--attr .protyle-attr {
|
&--attr .protyle-attr {
|
||||||
opacity: 1;
|
opacity: 1;
|
||||||
|
|
||||||
& > div:not(.protyle-attr--memo):not(.protyle-attr--refcount) {
|
& > div {
|
||||||
|
&.protyle-attr--memo {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
&:not(.protyle-attr--memo):not(.protyle-attr--refcount) {
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
@include mixin.text-clamp(1);
|
@include mixin.text-clamp(1);
|
||||||
max-width: 25vw;
|
max-width: 25vw;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
&--animate {
|
&--animate {
|
||||||
animation: bottom2Top .3s ease-in-out;
|
animation: bottom2Top .3s ease-in-out;
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,14 @@
|
||||||
@use "mixin";
|
@use "mixin";
|
||||||
|
|
||||||
.fn {
|
.fn {
|
||||||
&__hidescrollbar::-webkit-scrollbar {
|
&__hidescrollbar {
|
||||||
|
&::-webkit-scrollbar {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
overflow: auto;
|
||||||
|
}
|
||||||
|
|
||||||
&__ellipsis {
|
&__ellipsis {
|
||||||
@include mixin.text-clamp(1);
|
@include mixin.text-clamp(1);
|
||||||
display: block; // 集市挂件名称过长遮挡星标 https://github.com/siyuan-note/siyuan/issues/4782
|
display: block; // 集市挂件名称过长遮挡星标 https://github.com/siyuan-note/siyuan/issues/4782
|
||||||
|
|
@ -20,6 +24,12 @@
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&--5 {
|
||||||
|
width: 5px;
|
||||||
|
display: inline-block;
|
||||||
|
flex-shrink: 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
&__hr {
|
&__hr {
|
||||||
|
|
|
||||||
|
|
@ -182,6 +182,7 @@ export class BlockPanel {
|
||||||
scroll: true,
|
scroll: true,
|
||||||
gutter: true,
|
gutter: true,
|
||||||
breadcrumbDocName: true,
|
breadcrumbDocName: true,
|
||||||
|
title: response.data.rootID === this.refDefs[index].refID, // 如果块是文档,显示文档标题
|
||||||
},
|
},
|
||||||
typewriterMode: false,
|
typewriterMode: false,
|
||||||
after: (editor) => {
|
after: (editor) => {
|
||||||
|
|
@ -227,7 +228,7 @@ export class BlockPanel {
|
||||||
this.targetElement = undefined;
|
this.targetElement = undefined;
|
||||||
// 移除弹出上使用右键菜单
|
// 移除弹出上使用右键菜单
|
||||||
const menuLevel = parseInt(window.siyuan.menus.menu.element.dataset.from);
|
const menuLevel = parseInt(window.siyuan.menus.menu.element.dataset.from);
|
||||||
if (window.siyuan.menus.menu.element.dataset.from !== "app" && menuLevel && menuLevel >= level) {
|
if (menuLevel && menuLevel >= level && window.siyuan.menus.menu.element.dataset.from?.includes("popover")) {
|
||||||
// https://github.com/siyuan-note/siyuan/issues/9854 右键菜单不是从浮窗中弹出的则不进行移除
|
// https://github.com/siyuan-note/siyuan/issues/9854 右键菜单不是从浮窗中弹出的则不进行移除
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -220,7 +220,7 @@ const hidePopover = (event: MouseEvent & { path: HTMLElement[] }) => {
|
||||||
} else {
|
} else {
|
||||||
// 浮窗上点击菜单,浮窗不能消失 https://ld246.com/article/1632668091023
|
// 浮窗上点击菜单,浮窗不能消失 https://ld246.com/article/1632668091023
|
||||||
const menuElement = hasClosestByClassName(target, "b3-menu");
|
const menuElement = hasClosestByClassName(target, "b3-menu");
|
||||||
if (menuElement && menuElement.getAttribute("data-name") !== "docTreeMore") {
|
if (menuElement && menuElement.getAttribute("data-name") !== Constants.MENU_DOC_TREE_MORE) {
|
||||||
const blockPanel = window.siyuan.blockPanels.find((item) => {
|
const blockPanel = window.siyuan.blockPanels.find((item) => {
|
||||||
if (item.element.style.zIndex < menuElement.style.zIndex) {
|
if (item.element.style.zIndex < menuElement.style.zIndex) {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
||||||
|
|
@ -150,7 +150,16 @@ export const insertEmptyBlock = (protyle: IProtyle, position: InsertPosition, id
|
||||||
if (blockElement.getAttribute("data-type") === "NodeListItem") {
|
if (blockElement.getAttribute("data-type") === "NodeListItem") {
|
||||||
newElement = genListItemElement(blockElement, 0, true) as HTMLDivElement;
|
newElement = genListItemElement(blockElement, 0, true) as HTMLDivElement;
|
||||||
orderIndex = parseInt(blockElement.parentElement.firstElementChild.getAttribute("data-marker"));
|
orderIndex = parseInt(blockElement.parentElement.firstElementChild.getAttribute("data-marker"));
|
||||||
|
} else if (position === "beforebegin" && blockElement.previousElementSibling &&
|
||||||
|
blockElement.previousElementSibling.getAttribute("data-type") === "NodeHeading" &&
|
||||||
|
blockElement.previousElementSibling.getAttribute("fold") === "1") {
|
||||||
|
newElement = genHeadingElement(blockElement.previousElementSibling, false, true) as HTMLDivElement;
|
||||||
|
} else if (position === "afterend" && blockElement &&
|
||||||
|
blockElement.getAttribute("data-type") === "NodeHeading" &&
|
||||||
|
blockElement.getAttribute("fold") === "1") {
|
||||||
|
newElement = genHeadingElement(blockElement, false, true) as HTMLDivElement;
|
||||||
}
|
}
|
||||||
|
|
||||||
const parentOldHTML = blockElement.parentElement.outerHTML;
|
const parentOldHTML = blockElement.parentElement.outerHTML;
|
||||||
const newId = newElement.getAttribute("data-node-id");
|
const newId = newElement.getAttribute("data-node-id");
|
||||||
blockElement.insertAdjacentElement(position, newElement);
|
blockElement.insertAdjacentElement(position, newElement);
|
||||||
|
|
@ -216,6 +225,17 @@ export const genEmptyElement = (zwsp = true, wbr = true, id?: string) => {
|
||||||
return element;
|
return element;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const genHeadingElement = (headElement: Element, getHTML = false, addWbr = false) => {
|
||||||
|
const html = `<div data-subtype="${headElement.getAttribute("data-subtype")}" data-node-id="${Lute.NewNodeID()}" data-type="NodeHeading" class="${headElement.className}"><div contenteditable="true" spellcheck="false">${addWbr ? "<wbr>" : ""}</div><div class="protyle-attr" contenteditable="false">${Constants.ZWSP}</div></div>`;
|
||||||
|
if (getHTML) {
|
||||||
|
return html;
|
||||||
|
} else {
|
||||||
|
const tempElement = document.createElement("template");
|
||||||
|
tempElement.innerHTML = html;
|
||||||
|
return tempElement.content.firstElementChild;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
export const getLangByType = (type: string) => {
|
export const getLangByType = (type: string) => {
|
||||||
let lang = type;
|
let lang = type;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ import {popSearch} from "../../../mobile/menu/search";
|
||||||
import {getRecentDocs} from "../../../mobile/menu/getRecentDocs";
|
import {getRecentDocs} from "../../../mobile/menu/getRecentDocs";
|
||||||
/// #else
|
/// #else
|
||||||
import {openNewWindow} from "../../../window/openNewWindow";
|
import {openNewWindow} from "../../../window/openNewWindow";
|
||||||
import {toggleDockBar} from "../../../layout/dock/util";
|
import {selectOpenTab, toggleDockBar} from "../../../layout/dock/util";
|
||||||
import {openGlobalSearch} from "../../../search/util";
|
import {openGlobalSearch} from "../../../search/util";
|
||||||
import {workspaceMenu} from "../../../menus/workspace";
|
import {workspaceMenu} from "../../../menus/workspace";
|
||||||
import {isWindow} from "../../../util/functions";
|
import {isWindow} from "../../../util/functions";
|
||||||
|
|
@ -27,7 +27,6 @@ import {
|
||||||
} from "../../../layout/tabUtil";
|
} from "../../../layout/tabUtil";
|
||||||
import {openSetting} from "../../../config";
|
import {openSetting} from "../../../config";
|
||||||
import {Tab} from "../../../layout/Tab";
|
import {Tab} from "../../../layout/Tab";
|
||||||
import {Files} from "../../../layout/dock/Files";
|
|
||||||
/// #endif
|
/// #endif
|
||||||
/// #if !BROWSER
|
/// #if !BROWSER
|
||||||
import {ipcRenderer} from "electron";
|
import {ipcRenderer} from "electron";
|
||||||
|
|
@ -42,32 +41,6 @@ import {syncGuide} from "../../../sync/syncGuide";
|
||||||
import {Wnd} from "../../../layout/Wnd";
|
import {Wnd} from "../../../layout/Wnd";
|
||||||
import {unsplitWnd} from "../../../menus/tab";
|
import {unsplitWnd} from "../../../menus/tab";
|
||||||
|
|
||||||
const selectOpenTab = () => {
|
|
||||||
/// #if MOBILE
|
|
||||||
if (window.siyuan.mobile.editor?.protyle) {
|
|
||||||
openDock("file");
|
|
||||||
window.siyuan.mobile.docks.file.selectItem(window.siyuan.mobile.editor.protyle.notebookId, window.siyuan.mobile.editor.protyle.path);
|
|
||||||
}
|
|
||||||
/// #else
|
|
||||||
const dockFile = getDockByType("file");
|
|
||||||
if (!dockFile) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const files = dockFile.data.file as Files;
|
|
||||||
const element = document.querySelector(".layout__wnd--active > .fn__flex > .layout-tab-bar > .item--focus") ||
|
|
||||||
document.querySelector("ul.layout-tab-bar > .item--focus");
|
|
||||||
if (element) {
|
|
||||||
const tab = getInstanceById(element.getAttribute("data-id")) as Tab;
|
|
||||||
if (tab && tab.model instanceof Editor) {
|
|
||||||
tab.model.editor.protyle.wysiwyg.element.blur();
|
|
||||||
tab.model.editor.protyle.title.editElement.blur();
|
|
||||||
files.selectItem(tab.model.editor.protyle.notebookId, tab.model.editor.protyle.path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dockFile.toggleModel("file", true);
|
|
||||||
/// #endif
|
|
||||||
};
|
|
||||||
|
|
||||||
export const globalCommand = (command: string, app: App) => {
|
export const globalCommand = (command: string, app: App) => {
|
||||||
/// #if MOBILE
|
/// #if MOBILE
|
||||||
switch (command) {
|
switch (command) {
|
||||||
|
|
|
||||||
|
|
@ -442,7 +442,7 @@ export const execByCommand = async (options: {
|
||||||
case "move":
|
case "move":
|
||||||
if (!isFileFocus) {
|
if (!isFileFocus) {
|
||||||
const nodeElement = hasClosestBlock(range.startContainer);
|
const nodeElement = hasClosestBlock(range.startContainer);
|
||||||
if (protyle.title?.editElement.contains(range.startContainer) || !nodeElement || window.siyuan.menus.menu.element.getAttribute("data-name") === "titleMenu") {
|
if (protyle.title?.editElement.contains(range.startContainer) || !nodeElement || window.siyuan.menus.menu.element.getAttribute("data-name") === Constants.MENU_TITLE) {
|
||||||
movePathTo((toPath, toNotebook) => {
|
movePathTo((toPath, toNotebook) => {
|
||||||
moveToPath([protyle.path], toNotebook[0], toPath[0]);
|
moveToPath([protyle.path], toNotebook[0], toPath[0]);
|
||||||
}, [protyle.path], range);
|
}, [protyle.path], range);
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,5 @@
|
||||||
|
import {Constants} from "../../constants";
|
||||||
|
|
||||||
export const cancelDrag = () => {
|
export const cancelDrag = () => {
|
||||||
const ghostElement = document.getElementById("dragGhost");
|
const ghostElement = document.getElementById("dragGhost");
|
||||||
if (ghostElement) {
|
if (ghostElement) {
|
||||||
|
|
@ -18,5 +20,49 @@ export const cancelDrag = () => {
|
||||||
}
|
}
|
||||||
ghostElement.remove();
|
ghostElement.remove();
|
||||||
document.onmousemove = null;
|
document.onmousemove = null;
|
||||||
|
stopScrollAnimation();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const dragoverScroll: {
|
||||||
|
animationId?: number,
|
||||||
|
element?: Element,
|
||||||
|
space?: number // -1 向上;1 向下
|
||||||
|
lastTime?: number
|
||||||
|
} = {};
|
||||||
|
export const stopScrollAnimation = () => {
|
||||||
|
if (dragoverScroll.animationId) {
|
||||||
|
cancelAnimationFrame(dragoverScroll.animationId);
|
||||||
|
dragoverScroll.animationId = null;
|
||||||
|
dragoverScroll.element = null;
|
||||||
|
dragoverScroll.space = null;
|
||||||
|
dragoverScroll.lastTime = null;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
const scrollAnimation = (timestamp: number) => {
|
||||||
|
if (!dragoverScroll.lastTime) {
|
||||||
|
dragoverScroll.lastTime = timestamp - 8;
|
||||||
|
}
|
||||||
|
dragoverScroll.element.scroll({
|
||||||
|
top: dragoverScroll.element.scrollTop + (timestamp - dragoverScroll.lastTime) * dragoverScroll.space / 64
|
||||||
|
});
|
||||||
|
// 使用 requestAnimationFrame 继续动画
|
||||||
|
dragoverScroll.animationId = requestAnimationFrame(scrollAnimation);
|
||||||
|
dragoverScroll.lastTime = timestamp;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const dragOverScroll = (moveEvent: MouseEvent, contentRect: DOMRect, element: Element) => {
|
||||||
|
const dragToUp = moveEvent.clientY < contentRect.top + Constants.SIZE_SCROLL_TB;
|
||||||
|
if (dragToUp ||
|
||||||
|
moveEvent.clientY > contentRect.bottom - Constants.SIZE_SCROLL_TB) {
|
||||||
|
dragoverScroll.space = dragToUp ? moveEvent.clientY - contentRect.top - Constants.SIZE_SCROLL_TB :
|
||||||
|
moveEvent.clientY - contentRect.bottom + Constants.SIZE_SCROLL_TB;
|
||||||
|
if (!dragoverScroll.animationId) {
|
||||||
|
dragoverScroll.element = element;
|
||||||
|
dragoverScroll.animationId = requestAnimationFrame(scrollAnimation);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 离开滚动区域时停止滚动
|
||||||
|
stopScrollAnimation();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -601,6 +601,7 @@ const fileTreeKeydown = (app: App, event: KeyboardEvent) => {
|
||||||
const liElement = files.element.querySelector(".b3-list-item");
|
const liElement = files.element.querySelector(".b3-list-item");
|
||||||
if (liElement) {
|
if (liElement) {
|
||||||
liElement.classList.add("b3-list-item--focus");
|
liElement.classList.add("b3-list-item--focus");
|
||||||
|
files.lastSelectedElement = liElement;
|
||||||
}
|
}
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
}
|
}
|
||||||
|
|
@ -863,6 +864,7 @@ const fileTreeKeydown = (app: App, event: KeyboardEvent) => {
|
||||||
item.classList.remove("b3-list-item--focus");
|
item.classList.remove("b3-list-item--focus");
|
||||||
});
|
});
|
||||||
parentElement.classList.add("b3-list-item--focus");
|
parentElement.classList.add("b3-list-item--focus");
|
||||||
|
files.lastSelectedElement = parentElement;
|
||||||
const parentRect = parentElement.getBoundingClientRect();
|
const parentRect = parentElement.getBoundingClientRect();
|
||||||
const fileRect = files.element.getBoundingClientRect();
|
const fileRect = files.element.getBoundingClientRect();
|
||||||
if (parentRect.top < fileRect.top || parentRect.bottom > fileRect.bottom) {
|
if (parentRect.top < fileRect.top || parentRect.bottom > fileRect.bottom) {
|
||||||
|
|
@ -895,6 +897,7 @@ const fileTreeKeydown = (app: App, event: KeyboardEvent) => {
|
||||||
item.classList.remove("b3-list-item--focus");
|
item.classList.remove("b3-list-item--focus");
|
||||||
});
|
});
|
||||||
nextElement.classList.add("b3-list-item--focus");
|
nextElement.classList.add("b3-list-item--focus");
|
||||||
|
files.lastSelectedElement = nextElement;
|
||||||
const nextRect = nextElement.getBoundingClientRect();
|
const nextRect = nextElement.getBoundingClientRect();
|
||||||
const fileRect = files.element.getBoundingClientRect();
|
const fileRect = files.element.getBoundingClientRect();
|
||||||
if (nextRect.top < fileRect.top || nextRect.bottom > fileRect.bottom) {
|
if (nextRect.top < fileRect.top || nextRect.bottom > fileRect.bottom) {
|
||||||
|
|
@ -928,6 +931,7 @@ const fileTreeKeydown = (app: App, event: KeyboardEvent) => {
|
||||||
item.classList.remove("b3-list-item--focus");
|
item.classList.remove("b3-list-item--focus");
|
||||||
});
|
});
|
||||||
previousElement.classList.add("b3-list-item--focus");
|
previousElement.classList.add("b3-list-item--focus");
|
||||||
|
files.lastSelectedElement = previousElement;
|
||||||
const previousRect = previousElement.getBoundingClientRect();
|
const previousRect = previousElement.getBoundingClientRect();
|
||||||
const fileRect = files.element.getBoundingClientRect();
|
const fileRect = files.element.getBoundingClientRect();
|
||||||
if (previousRect.top < fileRect.top || previousRect.bottom > fileRect.bottom) {
|
if (previousRect.top < fileRect.top || previousRect.bottom > fileRect.bottom) {
|
||||||
|
|
|
||||||
|
|
@ -224,8 +224,8 @@ export const windowMouseMove = (event: MouseEvent, mouseIsEnter: boolean) => {
|
||||||
const blockElement = hasClosestByClassName(target, "table");
|
const blockElement = hasClosestByClassName(target, "table");
|
||||||
if (blockElement && blockElement.style.cursor !== "col-resize" && !hasClosestByClassName(blockElement, "protyle-wysiwyg__embed")) {
|
if (blockElement && blockElement.style.cursor !== "col-resize" && !hasClosestByClassName(blockElement, "protyle-wysiwyg__embed")) {
|
||||||
const cellElement = (hasClosestByTag(target, "TH") || hasClosestByTag(target, "TD")) as HTMLTableCellElement;
|
const cellElement = (hasClosestByTag(target, "TH") || hasClosestByTag(target, "TD")) as HTMLTableCellElement;
|
||||||
if (cellElement) {
|
|
||||||
const tableElement = blockElement.querySelector("table");
|
const tableElement = blockElement.querySelector("table");
|
||||||
|
if (cellElement && tableElement && tableElement.getAttribute("contenteditable") === "true") {
|
||||||
const tableHeight = blockElement.querySelector("table").clientHeight;
|
const tableHeight = blockElement.querySelector("table").clientHeight;
|
||||||
const resizeElement = blockElement.querySelector(".table__resize");
|
const resizeElement = blockElement.querySelector(".table__resize");
|
||||||
if (blockElement.style.textAlign === "center" || blockElement.style.textAlign === "right") {
|
if (blockElement.style.textAlign === "center" || blockElement.style.textAlign === "right") {
|
||||||
|
|
|
||||||
|
|
@ -7,6 +7,7 @@ import * as fs from "fs";
|
||||||
import * as path from "path";
|
import * as path from "path";
|
||||||
import {afterExport} from "../protyle/export/util";
|
import {afterExport} from "../protyle/export/util";
|
||||||
import {onWindowsMsg} from "../window/onWindowsMsg";
|
import {onWindowsMsg} from "../window/onWindowsMsg";
|
||||||
|
import {initFocusFix} from "../protyle/util/compatibility";
|
||||||
/// #endif
|
/// #endif
|
||||||
import {Constants} from "../constants";
|
import {Constants} from "../constants";
|
||||||
import {appearance} from "../config/appearance";
|
import {appearance} from "../config/appearance";
|
||||||
|
|
@ -68,6 +69,9 @@ export const onGetConfig = (isStart: boolean, app: App) => {
|
||||||
initBar(app);
|
initBar(app);
|
||||||
initStatus();
|
initStatus();
|
||||||
initWindow(app);
|
initWindow(app);
|
||||||
|
/// #if !BROWSER
|
||||||
|
initFocusFix();
|
||||||
|
/// #endif
|
||||||
appearance.onSetAppearance(window.siyuan.config.appearance);
|
appearance.onSetAppearance(window.siyuan.config.appearance);
|
||||||
initAssets();
|
initAssets();
|
||||||
setInlineStyle();
|
setInlineStyle();
|
||||||
|
|
|
||||||
|
|
@ -26,13 +26,14 @@ export const newCardModel = (options: {
|
||||||
data: options.data,
|
data: options.data,
|
||||||
async init() {
|
async init() {
|
||||||
if (options.data.cardsData) {
|
if (options.data.cardsData) {
|
||||||
|
let cardsData = options.data.cardsData;
|
||||||
for (let i = 0; i < options.app.plugins.length; i++) {
|
for (let i = 0; i < options.app.plugins.length; i++) {
|
||||||
options.data.cardsData = await options.app.plugins[i].updateCards(options.data.cardsData);
|
cardsData = await options.app.plugins[i].updateCards(options.data.cardsData);
|
||||||
}
|
}
|
||||||
this.element.innerHTML = genCardHTML({
|
this.element.innerHTML = genCardHTML({
|
||||||
id: this.data.id,
|
id: this.data.id,
|
||||||
cardType: this.data.cardType,
|
cardType: this.data.cardType,
|
||||||
cardsData: options.data.cardsData,
|
cardsData,
|
||||||
isTab: true,
|
isTab: true,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -42,7 +43,7 @@ export const newCardModel = (options: {
|
||||||
id: this.data.id,
|
id: this.data.id,
|
||||||
title: this.data.title,
|
title: this.data.title,
|
||||||
cardType: this.data.cardType,
|
cardType: this.data.cardType,
|
||||||
cardsData: options.data.cardsData,
|
cardsData,
|
||||||
index: options.data.index,
|
index: options.data.index,
|
||||||
});
|
});
|
||||||
customObj.editors.push(editor);
|
customObj.editors.push(editor);
|
||||||
|
|
@ -56,9 +57,9 @@ export const newCardModel = (options: {
|
||||||
deckID: this.data.id,
|
deckID: this.data.id,
|
||||||
notebook: this.data.id,
|
notebook: this.data.id,
|
||||||
}, async (response) => {
|
}, async (response) => {
|
||||||
let cardsData: ICardData = response.data;
|
let cardsData = response.data;
|
||||||
for (let i = 0; i < options.app.plugins.length; i++) {
|
for (let i = 0; i < options.app.plugins.length; i++) {
|
||||||
cardsData = await options.app.plugins[i].updateCards(response.data);
|
cardsData = await options.app.plugins[i].updateCards(cardsData);
|
||||||
}
|
}
|
||||||
this.element.innerHTML = genCardHTML({
|
this.element.innerHTML = genCardHTML({
|
||||||
id: this.data.id,
|
id: this.data.id,
|
||||||
|
|
@ -75,7 +76,6 @@ export const newCardModel = (options: {
|
||||||
cardType: this.data.cardType,
|
cardType: this.data.cardType,
|
||||||
cardsData,
|
cardsData,
|
||||||
});
|
});
|
||||||
|
|
||||||
customObj.editors.push(editor);
|
customObj.editors.push(editor);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
@ -97,15 +97,28 @@ export const newCardModel = (options: {
|
||||||
deckID: this.data.id,
|
deckID: this.data.id,
|
||||||
notebook: this.data.id,
|
notebook: this.data.id,
|
||||||
}, async (response) => {
|
}, async (response) => {
|
||||||
|
let cardsData = response.data;
|
||||||
for (let i = 0; i < options.app.plugins.length; i++) {
|
for (let i = 0; i < options.app.plugins.length; i++) {
|
||||||
options.data.cardsData = await options.app.plugins[i].updateCards(options.data.cardsData);
|
cardsData = await options.app.plugins[i].updateCards(cardsData);
|
||||||
}
|
}
|
||||||
|
customObj.editors.forEach(item => {
|
||||||
|
item.destroy();
|
||||||
|
});
|
||||||
this.element.innerHTML = genCardHTML({
|
this.element.innerHTML = genCardHTML({
|
||||||
id: this.data.id,
|
id: this.data.id,
|
||||||
cardType: this.data.cardType,
|
cardType: this.data.cardType,
|
||||||
cardsData: response.data,
|
cardsData,
|
||||||
isTab: true,
|
isTab: true,
|
||||||
});
|
});
|
||||||
|
editor = await bindCardEvent({
|
||||||
|
app: options.app,
|
||||||
|
element: this.element,
|
||||||
|
id: this.data.id,
|
||||||
|
title: this.data.title,
|
||||||
|
cardType: this.data.cardType,
|
||||||
|
cardsData,
|
||||||
|
});
|
||||||
|
customObj.editors.push(editor);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -82,8 +82,8 @@ export const genCardHTML = (options: {
|
||||||
<div data-type="fullscreen" class="b3-tooltips b3-tooltips__sw block__icon block__icon--show" aria-label="${window.siyuan.languages.fullscreen}">
|
<div data-type="fullscreen" class="b3-tooltips b3-tooltips__sw block__icon block__icon--show" aria-label="${window.siyuan.languages.fullscreen}">
|
||||||
<svg><use xlink:href="#iconFullscreen"></use></svg>
|
<svg><use xlink:href="#iconFullscreen"></use></svg>
|
||||||
</div>
|
</div>
|
||||||
<div class="fn__space"></div>
|
<div class="fn__space${options.cardsData.cards.length === 0 ? " fn__none" : ""}"></div>
|
||||||
<div data-type="more" class="b3-tooltips b3-tooltips__sw block__icon block__icon--show" aria-label="${window.siyuan.languages.more}">
|
<div data-type="more" class="${options.cardsData.cards.length === 0 ? "fn__none " : ""}b3-tooltips b3-tooltips__sw block__icon block__icon--show" aria-label="${window.siyuan.languages.more}">
|
||||||
<svg><use xlink:href="#iconMore"></use></svg>
|
<svg><use xlink:href="#iconMore"></use></svg>
|
||||||
</div>
|
</div>
|
||||||
<div class="fn__space${options.isTab ? " fn__none" : ""}"></div>
|
<div class="fn__space${options.isTab ? " fn__none" : ""}"></div>
|
||||||
|
|
@ -161,10 +161,11 @@ const getEditor = (id: string, protyle: IProtyle, element: Element, currentCard:
|
||||||
updateReadonly: true,
|
updateReadonly: true,
|
||||||
data: response,
|
data: response,
|
||||||
protyle,
|
protyle,
|
||||||
action: response.data.rootID === response.data.id ? [Constants.CB_GET_HTML] : [Constants.CB_GET_ALL, Constants.CB_GET_HTML],
|
action: response.data.rootID === response.data.id ? [] : [Constants.CB_GET_ALL],
|
||||||
afterCB: () => {
|
afterCB: () => {
|
||||||
protyle.title.element.removeAttribute("data-render");
|
if (protyle.element.classList.contains("fn__none")) {
|
||||||
protyle.title.render(protyle, docResponse);
|
return;
|
||||||
|
}
|
||||||
let hasHide = false;
|
let hasHide = false;
|
||||||
if (!window.siyuan.config.flashcard.superBlock &&
|
if (!window.siyuan.config.flashcard.superBlock &&
|
||||||
!window.siyuan.config.flashcard.heading &&
|
!window.siyuan.config.flashcard.heading &&
|
||||||
|
|
@ -235,7 +236,7 @@ export const bindCardEvent = async (options: {
|
||||||
cardType: TCardType,
|
cardType: TCardType,
|
||||||
id?: string,
|
id?: string,
|
||||||
dialog?: Dialog,
|
dialog?: Dialog,
|
||||||
index?: number
|
index?: number,
|
||||||
}) => {
|
}) => {
|
||||||
if (window.siyuan.storage[Constants.LOCAL_FLASHCARD].fullscreen) {
|
if (window.siyuan.storage[Constants.LOCAL_FLASHCARD].fullscreen) {
|
||||||
fullscreen(options.element.querySelector(".card__main"),
|
fullscreen(options.element.querySelector(".card__main"),
|
||||||
|
|
@ -303,7 +304,7 @@ export const bindCardEvent = async (options: {
|
||||||
};
|
};
|
||||||
|
|
||||||
countElement.innerHTML = genCardCount(options.cardsData, index);
|
countElement.innerHTML = genCardCount(options.cardsData, index);
|
||||||
options.element.addEventListener("click", (event: MouseEvent) => {
|
options.element.firstChild.addEventListener("click", (event: MouseEvent) => {
|
||||||
const target = event.target as HTMLElement;
|
const target = event.target as HTMLElement;
|
||||||
let type = "";
|
let type = "";
|
||||||
const currentCard = options.cardsData.cards[index];
|
const currentCard = options.cardsData.cards[index];
|
||||||
|
|
@ -337,7 +338,7 @@ export const bindCardEvent = async (options: {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const moreElement = hasClosestByAttribute(target, "data-type", "more");
|
const moreElement = hasClosestByAttribute(target, "data-type", "more");
|
||||||
if (moreElement) {
|
if (moreElement && currentCard) {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
if (filterElement.getAttribute("data-cardtype") === "all" && filterElement.getAttribute("data-id")) {
|
if (filterElement.getAttribute("data-cardtype") === "all" && filterElement.getAttribute("data-id")) {
|
||||||
|
|
@ -491,6 +492,29 @@ export const bindCardEvent = async (options: {
|
||||||
const sticktabElement = hasClosestByAttribute(target, "data-type", "sticktab");
|
const sticktabElement = hasClosestByAttribute(target, "data-type", "sticktab");
|
||||||
if (sticktabElement) {
|
if (sticktabElement) {
|
||||||
const stickMenu = new Menu();
|
const stickMenu = new Menu();
|
||||||
|
stickMenu.addItem({
|
||||||
|
id: "openInNewTab",
|
||||||
|
icon: "iconOpen",
|
||||||
|
label: window.siyuan.languages.openInNewTab,
|
||||||
|
click() {
|
||||||
|
openFile({
|
||||||
|
app: options.app,
|
||||||
|
custom: {
|
||||||
|
icon: "iconRiffCard",
|
||||||
|
title: window.siyuan.languages.spaceRepetition,
|
||||||
|
data: {
|
||||||
|
cardsData: options.cardsData,
|
||||||
|
index,
|
||||||
|
cardType: filterElement.getAttribute("data-cardtype") as TCardType,
|
||||||
|
id: docId,
|
||||||
|
title: options.title
|
||||||
|
},
|
||||||
|
id: "siyuan-card"
|
||||||
|
},
|
||||||
|
});
|
||||||
|
options.dialog.destroy();
|
||||||
|
}
|
||||||
|
});
|
||||||
stickMenu.addItem({
|
stickMenu.addItem({
|
||||||
id: "insertRight",
|
id: "insertRight",
|
||||||
icon: "iconLayoutRight",
|
icon: "iconLayoutRight",
|
||||||
|
|
@ -529,6 +553,8 @@ export const bindCardEvent = async (options: {
|
||||||
"instance": "Custom",
|
"instance": "Custom",
|
||||||
"customModelType": "siyuan-card",
|
"customModelType": "siyuan-card",
|
||||||
"customModelData": {
|
"customModelData": {
|
||||||
|
"cardsData": options.cardsData,
|
||||||
|
"index": index,
|
||||||
"cardType": filterElement.getAttribute("data-cardtype"),
|
"cardType": filterElement.getAttribute("data-cardtype"),
|
||||||
"id": docId,
|
"id": docId,
|
||||||
"title": options.title
|
"title": options.title
|
||||||
|
|
@ -851,6 +877,9 @@ const allDone = (countElement: Element, editor: Protyle, actionElements: NodeLis
|
||||||
emptyElement.classList.remove("fn__none");
|
emptyElement.classList.remove("fn__none");
|
||||||
actionElements[0].classList.add("fn__none");
|
actionElements[0].classList.add("fn__none");
|
||||||
actionElements[1].classList.add("fn__none");
|
actionElements[1].classList.add("fn__none");
|
||||||
|
const moreElement = countElement.parentElement.querySelector('[data-type="more"]');
|
||||||
|
moreElement.classList.add("fn__none");
|
||||||
|
moreElement.previousElementSibling.classList.add("fn__none");
|
||||||
};
|
};
|
||||||
|
|
||||||
const newRound = (countElement: Element, editor: Protyle, actionElements: NodeListOf<Element>, unreviewedCount: number) => {
|
const newRound = (countElement: Element, editor: Protyle, actionElements: NodeListOf<Element>, unreviewedCount: number) => {
|
||||||
|
|
|
||||||
|
|
@ -313,11 +313,7 @@ const getArticle = (edit: Protyle, id: string) => {
|
||||||
updateReadonly: true,
|
updateReadonly: true,
|
||||||
data: getResponse,
|
data: getResponse,
|
||||||
protyle: edit.protyle,
|
protyle: edit.protyle,
|
||||||
action: getResponse.data.rootID === getResponse.data.id ? [Constants.CB_GET_HTML] : [Constants.CB_GET_ALL, Constants.CB_GET_HTML],
|
action: getResponse.data.rootID === getResponse.data.id ? [] : [Constants.CB_GET_ALL],
|
||||||
afterCB() {
|
|
||||||
edit.protyle.title.element.removeAttribute("data-render");
|
|
||||||
edit.protyle.title.render(edit.protyle, response);
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,18 @@ export const editor = {
|
||||||
<span class="fn__space"></span>
|
<span class="fn__space"></span>
|
||||||
<input class="b3-switch fn__flex-center" id="embedBlockBreadcrumb" type="checkbox"${window.siyuan.config.editor.embedBlockBreadcrumb ? " checked" : ""}/>
|
<input class="b3-switch fn__flex-center" id="embedBlockBreadcrumb" type="checkbox"${window.siyuan.config.editor.embedBlockBreadcrumb ? " checked" : ""}/>
|
||||||
</label>
|
</label>
|
||||||
|
<div class="fn__flex b3-label config__item">
|
||||||
|
<div class="fn__flex-1">
|
||||||
|
${window.siyuan.languages.headingEmbedMode}
|
||||||
|
<div class="b3-label__text">${window.siyuan.languages.headingEmbedModeTip}</div>
|
||||||
|
</div>
|
||||||
|
<span class="fn__space"></span>
|
||||||
|
<select class="b3-select fn__flex-center fn__size200" id="headingEmbedMode">
|
||||||
|
<option value="0" ${window.siyuan.config.editor.headingEmbedMode === 0 ? "selected" : ""}>${window.siyuan.languages.showHeadingWithBlocks}</option>
|
||||||
|
<option value="1" ${window.siyuan.config.editor.headingEmbedMode === 1 ? "selected" : ""}>${window.siyuan.languages.showHeadingOnlyTitle}</option>
|
||||||
|
<option value="2" ${window.siyuan.config.editor.headingEmbedMode === 2 ? "selected" : ""}>${window.siyuan.languages.showHeadingOnlyBlocks}</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
<label class="fn__flex b3-label">
|
<label class="fn__flex b3-label">
|
||||||
<div class="fn__flex-1">
|
<div class="fn__flex-1">
|
||||||
${window.siyuan.languages.outlineOutdent}
|
${window.siyuan.languages.outlineOutdent}
|
||||||
|
|
@ -222,7 +234,7 @@ export const editor = {
|
||||||
<div class="fn__flex config__item">
|
<div class="fn__flex config__item">
|
||||||
<div class="fn__flex-center fn__flex-1 ft__on-surface">${window.siyuan.languages.historyRetentionDays}</div>
|
<div class="fn__flex-center fn__flex-1 ft__on-surface">${window.siyuan.languages.historyRetentionDays}</div>
|
||||||
<span class="fn__space"></span>
|
<span class="fn__space"></span>
|
||||||
<input class="b3-text-field fn__flex-center fn__size200" id="historyRetentionDays" type="number" min="0" value="${window.siyuan.config.editor.historyRetentionDays}"/>
|
<input class="b3-text-field fn__flex-center fn__size200" id="historyRetentionDays" type="number" min="1" max="3650" value="${window.siyuan.config.editor.historyRetentionDays}"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="fn__flex b3-label config__item">
|
<div class="fn__flex b3-label config__item">
|
||||||
|
|
@ -428,6 +440,7 @@ export const editor = {
|
||||||
displayNetImgMark: (editor.element.querySelector("#displayNetImgMark") as HTMLInputElement).checked,
|
displayNetImgMark: (editor.element.querySelector("#displayNetImgMark") as HTMLInputElement).checked,
|
||||||
codeSyntaxHighlightLineNum: (editor.element.querySelector("#codeSyntaxHighlightLineNum") as HTMLInputElement).checked,
|
codeSyntaxHighlightLineNum: (editor.element.querySelector("#codeSyntaxHighlightLineNum") as HTMLInputElement).checked,
|
||||||
embedBlockBreadcrumb: (editor.element.querySelector("#embedBlockBreadcrumb") as HTMLInputElement).checked,
|
embedBlockBreadcrumb: (editor.element.querySelector("#embedBlockBreadcrumb") as HTMLInputElement).checked,
|
||||||
|
headingEmbedMode: parseInt((editor.element.querySelector("#headingEmbedMode") as HTMLSelectElement).value),
|
||||||
listLogicalOutdent: (editor.element.querySelector("#listLogicalOutdent") as HTMLInputElement).checked,
|
listLogicalOutdent: (editor.element.querySelector("#listLogicalOutdent") as HTMLInputElement).checked,
|
||||||
listItemDotNumberClickFocus: (editor.element.querySelector("#listItemDotNumberClickFocus") as HTMLInputElement).checked,
|
listItemDotNumberClickFocus: (editor.element.querySelector("#listItemDotNumberClickFocus") as HTMLInputElement).checked,
|
||||||
spellcheck: (editor.element.querySelector("#spellcheck") as HTMLInputElement).checked,
|
spellcheck: (editor.element.querySelector("#spellcheck") as HTMLInputElement).checked,
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ export const openSnippets = () => {
|
||||||
type: target.id === "addCodeSnippetCSS" ? "css" : "js",
|
type: target.id === "addCodeSnippetCSS" ? "css" : "js",
|
||||||
name: "",
|
name: "",
|
||||||
content: "",
|
content: "",
|
||||||
enabled: false,
|
enabled: true,
|
||||||
disabledInPublish: false,
|
disabledInPublish: false,
|
||||||
}));
|
}));
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
|
|
|
||||||
|
|
@ -224,6 +224,69 @@ export abstract class Constants {
|
||||||
public static readonly DIALOG_OPENWORKSPACE = "dialog-openworkspace"; // 打开工作空间
|
public static readonly DIALOG_OPENWORKSPACE = "dialog-openworkspace"; // 打开工作空间
|
||||||
public static readonly DIALOG_SAVEWORKSPACE = "dialog-saveworkspace"; // 保存工作空间
|
public static readonly DIALOG_SAVEWORKSPACE = "dialog-saveworkspace"; // 保存工作空间
|
||||||
|
|
||||||
|
// menu
|
||||||
|
public static readonly MENU_BAR_WORKSPACE = "barWorkspace"; // 顶栏主菜单
|
||||||
|
public static readonly MENU_BAR_PLUGIN = "topBarPlugin"; // 顶栏插件菜单
|
||||||
|
public static readonly MENU_BAR_ZOOM = "barZoom"; // 顶栏缩放菜单
|
||||||
|
public static readonly MENU_BAR_MODE = "barmode"; // 顶栏外观菜单
|
||||||
|
public static readonly MENU_BAR_MORE = "barmore"; // 顶栏更多菜单
|
||||||
|
public static readonly MENU_STATUS_HELP = "statusHelp"; // 状态栏帮助菜单
|
||||||
|
public static readonly MENU_STATUS_BACKGROUND_TASK = "statusBackgroundTask"; // 状态栏后台任务菜单
|
||||||
|
public static readonly MENU_DOCK_MOBILE = "dockMobileMenu"; // 移动端侧栏插件选项菜单
|
||||||
|
|
||||||
|
public static readonly MENU_BLOCK_SINGLE = "block-single"; // 单选块菜单
|
||||||
|
public static readonly MENU_BLOCK_MULTI = "block-multi"; // 多选块菜单
|
||||||
|
public static readonly MENU_TITLE = "titleMenu"; // 文档块菜单
|
||||||
|
public static readonly MENU_FROM_TITLE_PROTYLE = "title-protyle"; // 在 Protyle 触发的文档块菜单
|
||||||
|
public static readonly MENU_FROM_TITLE_BREADCRUMB = "title-breadcrumb"; // 在面包屑触发的文档块菜单
|
||||||
|
public static readonly MENU_BREADCRUMB_MORE = "breadcrumbMore"; // 面包屑更多菜单
|
||||||
|
public static readonly MENU_BREADCRUMB_MOBILE_PATH = "breadcrumb-mobile-path"; // 移动端面包屑菜单
|
||||||
|
|
||||||
|
public static readonly MENU_DOC_TREE_MORE = "docTreeMore"; // 侧栏文档树右键菜单
|
||||||
|
public static readonly MENU_FROM_DOC_TREE_MORE_NOTEBOOK = "tree-notebook"; // 侧栏文档树右键菜单,单个笔记本
|
||||||
|
public static readonly MENU_FROM_DOC_TREE_MORE_DOC = "tree-doc"; // 侧栏文档树右键菜单,单个文档
|
||||||
|
public static readonly MENU_FROM_DOC_TREE_MORE_ITEMS = "tree-items"; // 侧栏文档树右键菜单,多个文档或笔记本
|
||||||
|
public static readonly MENU_TAG = "tagMenu"; // 侧栏标签菜单
|
||||||
|
public static readonly MENU_BOOKMARK = "bookmarkMenu"; // 侧栏书签菜单
|
||||||
|
public static readonly MENU_OUTLINE_CONTEXT = "outline-context"; // 大纲标题右键菜单
|
||||||
|
public static readonly MENU_OUTLINE_EXPAND_LEVEL = "outline-expand-level"; // 大纲展开层级菜单
|
||||||
|
|
||||||
|
public static readonly MENU_AV_VIEW = "av-view"; // 数据库视图标题菜单
|
||||||
|
public static readonly MENU_AV_HEADER_CELL = "av-header-cell"; // 数据库字段标题菜单
|
||||||
|
public static readonly MENU_AV_HEADER_ADD = "av-header-add"; // 数据库添加字段菜单
|
||||||
|
public static readonly MENU_AV_ADD_FILTER = "av-add-filter"; // 数据库添加筛选条件菜单
|
||||||
|
public static readonly MENU_AV_ADD_SORT = "av-add-sort"; // 数据库添加排序条件菜单
|
||||||
|
public static readonly MENU_AV_COL_OPTION = "av-col-option"; // 数据库单选多选字段的选项编辑菜单
|
||||||
|
public static readonly MENU_AV_COL_FORMAT_NUMBER = "av-col-format-number"; // 数据库数字字段格式化菜单
|
||||||
|
public static readonly MENU_AV_GROUP_DATE = "avGroupDate"; // 数据库日期字段分组菜单的日期菜单
|
||||||
|
public static readonly MENU_AV_GROUP_SORT = "avGroupSort"; // 数据库日期字段分组菜单的排序菜单
|
||||||
|
public static readonly MENU_AV_ASSET_EDIT = "av-asset-edit"; // 数据库资源字段链接或资源文件菜单
|
||||||
|
public static readonly MENU_AV_CALC = "av-calc"; // 数据库计算菜单
|
||||||
|
public static readonly MENU_AV_PAGE_SIZE = "av-page-size"; // 数据库条目数菜单
|
||||||
|
|
||||||
|
public static readonly MENU_SEARCH_MORE = "searchMore"; // 搜索更多菜单
|
||||||
|
public static readonly MENU_SEARCH_METHOD = "searchMethod"; // 搜索方式菜单
|
||||||
|
public static readonly MENU_SEARCH_ASSET_MORE = "searchAssetMore"; // 资源文件搜索更多菜单
|
||||||
|
public static readonly MENU_SEARCH_ASSET_METHOD = "searchAssetMethod"; // 资源文件搜索方式菜单
|
||||||
|
public static readonly MENU_SEARCH_UNREF_MORE = "searchUnRefMore"; // 列出引用失效的块的更多菜单
|
||||||
|
public static readonly MENU_SEARCH_HISTORY = "search-history"; // 搜索历史菜单
|
||||||
|
public static readonly MENU_SEARCH_REPLACE_HISTORY = "search-replace-history"; // 替换历史菜单
|
||||||
|
public static readonly MENU_SEARCH_ASSET_HISTORY = "search-asset-history"; // 资源文件搜索历史菜单
|
||||||
|
public static readonly MENU_MOVE_PATH_HISTORY = "move-path-history"; // 移动文档窗口搜索历史菜单
|
||||||
|
|
||||||
|
public static readonly MENU_BACKGROUND_ASSET = "background-asset"; // 资源文件选择器菜单
|
||||||
|
public static readonly MENU_AI = "ai"; // 块 AI 菜单
|
||||||
|
public static readonly MENU_TAB = "tab"; // 页签右键菜单
|
||||||
|
public static readonly MENU_TAB_LIST = "tabList"; // 页签切换菜单
|
||||||
|
|
||||||
|
public static readonly MENU_INLINE_CONTEXT = "inline-context"; // 文本右键菜单
|
||||||
|
public static readonly MENU_INLINE_IMG = "inline-img"; // 图片元素菜单
|
||||||
|
public static readonly MENU_INLINE_FILE_ANNOTATION_REF = "inline-file-annotation-ref"; // PDF 标注元素菜单
|
||||||
|
public static readonly MENU_INLINE_REF = "inline-block-ref"; // 块引用元素菜单
|
||||||
|
public static readonly MENU_INLINE_A = "inline-a"; // 超链接元素菜单
|
||||||
|
public static readonly MENU_INLINE_TAG = "inline-tag"; // 行级标签元素菜单
|
||||||
|
public static readonly MENU_INLINE_MATH = "inline-math"; // 行级公式元素菜单
|
||||||
|
|
||||||
// timeout
|
// timeout
|
||||||
public static readonly TIMEOUT_OPENDIALOG = 50;
|
public static readonly TIMEOUT_OPENDIALOG = 50;
|
||||||
public static readonly TIMEOUT_DBLCLICK = 190;
|
public static readonly TIMEOUT_DBLCLICK = 190;
|
||||||
|
|
|
||||||
|
|
@ -461,7 +461,7 @@ export const progressBackgroundTask = (tasks: { action: string }[]) => {
|
||||||
if (tasks.length === 0) {
|
if (tasks.length === 0) {
|
||||||
backgroundTaskElement.classList.add("fn__none");
|
backgroundTaskElement.classList.add("fn__none");
|
||||||
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
||||||
window.siyuan.menus.menu.element.getAttribute("data-name") === "statusBackgroundTask") {
|
window.siyuan.menus.menu.element.getAttribute("data-name") === Constants.MENU_STATUS_BACKGROUND_TASK) {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -362,11 +362,11 @@ export const openEmojiPanel = (id: string, type: "doc" | "notebook" | "av", posi
|
||||||
<span class="fn__space"></span>
|
<span class="fn__space"></span>
|
||||||
<span class="fn__flex-center ft__on-surface" style="width: 89px">${window.siyuan.languages.custom}</span>
|
<span class="fn__flex-center ft__on-surface" style="width: 89px">${window.siyuan.languages.custom}</span>
|
||||||
<span class="fn__space--small"></span>
|
<span class="fn__space--small"></span>
|
||||||
<input type="text" class="b3-text-field fn__flex-1" value="${dynamicCurrentObj.content}">
|
<input type="text" class="b3-text-field fn__flex-1" value="">
|
||||||
<span class="fn__space"></span>
|
<span class="fn__space"></span>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<img data-type="text" class="emoji__dynamic-item${dynamicCurrentObj.type === "8" ? " emoji__dynamic-item--current" : ""}" src="${dynamicURL}type=8&color=${encodeURIComponent(dynamicCurrentObj.color)}&content=${dynamicCurrentObj.content}&id=${id}">
|
<img data-type="text" class="emoji__dynamic-item${dynamicCurrentObj.type === "8" ? " emoji__dynamic-item--current" : ""}" src="${dynamicURL}type=8&color=${encodeURIComponent(dynamicCurrentObj.color)}&content=${encodeURIComponent(dynamicCurrentObj.content)}&id=${id}">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -685,6 +685,7 @@ export const openEmojiPanel = (id: string, type: "doc" | "notebook" | "av", posi
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
dynamicTextElements[1].value = dynamicCurrentObj.content;
|
||||||
dynamicTextElements[1].addEventListener("input", () => {
|
dynamicTextElements[1].addEventListener("input", () => {
|
||||||
const url = new URLSearchParams(dynamicTextImgElement.getAttribute("src").replace(dynamicURL, ""));
|
const url = new URLSearchParams(dynamicTextImgElement.getAttribute("src").replace(dynamicURL, ""));
|
||||||
url.set("content", dynamicTextElements[1].value);
|
url.set("content", dynamicTextElements[1].value);
|
||||||
|
|
|
||||||
|
|
@ -654,7 +654,7 @@ export class Wnd {
|
||||||
|
|
||||||
private renderTabList(target: HTMLElement) {
|
private renderTabList(target: HTMLElement) {
|
||||||
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
||||||
window.siyuan.menus.menu.element.getAttribute("data-name") === "tabList") {
|
window.siyuan.menus.menu.element.getAttribute("data-name") === Constants.MENU_TAB_LIST) {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -703,7 +703,7 @@ export class Wnd {
|
||||||
current: item.classList.contains("item--focus")
|
current: item.classList.contains("item--focus")
|
||||||
}).element);
|
}).element);
|
||||||
});
|
});
|
||||||
window.siyuan.menus.menu.element.setAttribute("data-name", "tabList");
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_TAB_LIST);
|
||||||
const rect = target.getBoundingClientRect();
|
const rect = target.getBoundingClientRect();
|
||||||
window.siyuan.menus.menu.popup({
|
window.siyuan.menus.menu.popup({
|
||||||
x: rect.left + rect.width,
|
x: rect.left + rect.width,
|
||||||
|
|
|
||||||
|
|
@ -150,14 +150,6 @@ export class Backlink extends Model {
|
||||||
this.searchBacklinks();
|
this.searchBacklinks();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
item.addEventListener("input", (event: KeyboardEvent) => {
|
|
||||||
const inputElement = event.target as HTMLInputElement;
|
|
||||||
if (inputElement.value === "") {
|
|
||||||
inputElement.classList.remove("search__input--block");
|
|
||||||
} else {
|
|
||||||
inputElement.classList.add("search__input--block");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
this.tree = new Tree({
|
this.tree = new Tree({
|
||||||
element: this.element.querySelector(".backlinkList") as HTMLElement,
|
element: this.element.querySelector(".backlinkList") as HTMLElement,
|
||||||
|
|
|
||||||
|
|
@ -1,25 +1,18 @@
|
||||||
import {escapeAriaLabel, escapeGreat, escapeHtml} from "../../util/escape";
|
import {escapeAriaLabel, escapeGreat, escapeHtml} from "../../util/escape";
|
||||||
import {Tab} from "../Tab";
|
import {Tab} from "../Tab";
|
||||||
import {Model} from "../Model";
|
import {Model} from "../Model";
|
||||||
import {getInstanceById, setPanelFocus} from "../util";
|
import {setPanelFocus} from "../util";
|
||||||
import {getDockByType} from "../tabUtil";
|
import {getDockByType} from "../tabUtil";
|
||||||
import {Constants} from "../../constants";
|
import {Constants} from "../../constants";
|
||||||
import {getDisplayName, pathPosix, setNoteBook} from "../../util/pathName";
|
import {getDisplayName, pathPosix, setNoteBook} from "../../util/pathName";
|
||||||
import {newFile} from "../../util/newFile";
|
import {newFile} from "../../util/newFile";
|
||||||
import {initFileMenu, initNavigationMenu, sortMenu} from "../../menus/navigation";
|
import {initFileMenu, initNavigationMenu, sortMenu} from "../../menus/navigation";
|
||||||
import {MenuItem} from "../../menus/Menu";
|
import {MenuItem} from "../../menus/Menu";
|
||||||
import {Editor} from "../../editor";
|
|
||||||
import {showMessage} from "../../dialog/message";
|
import {showMessage} from "../../dialog/message";
|
||||||
import {fetchPost, fetchSyncPost} from "../../util/fetch";
|
import {fetchPost, fetchSyncPost} from "../../util/fetch";
|
||||||
import {openEmojiPanel, unicode2Emoji} from "../../emoji";
|
import {openEmojiPanel, unicode2Emoji} from "../../emoji";
|
||||||
import {mountHelp, newNotebook} from "../../util/mount";
|
import {mountHelp, newNotebook} from "../../util/mount";
|
||||||
import {confirmDialog} from "../../dialog/confirmDialog";
|
import {isNotCtrl, isOnlyMeta, setStorageVal, updateHotkeyAfterTip} from "../../protyle/util/compatibility";
|
||||||
import {
|
|
||||||
isNotCtrl,
|
|
||||||
isOnlyMeta,
|
|
||||||
setStorageVal,
|
|
||||||
updateHotkeyAfterTip
|
|
||||||
} from "../../protyle/util/compatibility";
|
|
||||||
import {openFileById} from "../../editor/util";
|
import {openFileById} from "../../editor/util";
|
||||||
import {
|
import {
|
||||||
hasClosestByAttribute,
|
hasClosestByAttribute,
|
||||||
|
|
@ -34,12 +27,14 @@ import {refreshFileTree} from "../../dialog/processSystem";
|
||||||
import {ipcRenderer} from "electron";
|
import {ipcRenderer} from "electron";
|
||||||
/// #endif
|
/// #endif
|
||||||
import {hideTooltip, showTooltip} from "../../dialog/tooltip";
|
import {hideTooltip, showTooltip} from "../../dialog/tooltip";
|
||||||
|
import {selectOpenTab} from "./util";
|
||||||
|
|
||||||
export class Files extends Model {
|
export class Files extends Model {
|
||||||
public element: HTMLElement;
|
public element: HTMLElement;
|
||||||
public parent: Tab;
|
public parent: Tab;
|
||||||
private actionsElement: HTMLElement;
|
|
||||||
public closeElement: HTMLElement;
|
public closeElement: HTMLElement;
|
||||||
|
public lastSelectedElement: Element = null;
|
||||||
|
private actionsElement: HTMLElement;
|
||||||
|
|
||||||
constructor(options: { tab: Tab, app: App }) {
|
constructor(options: { tab: Tab, app: App }) {
|
||||||
super({
|
super({
|
||||||
|
|
@ -178,18 +173,6 @@ export class Files extends Model {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
break;
|
break;
|
||||||
} else if (type === "remove") {
|
|
||||||
confirmDialog(window.siyuan.languages.deleteOpConfirm,
|
|
||||||
`${window.siyuan.languages.confirmDelete} <b>${escapeHtml(target.parentElement.querySelector(".b3-list-item__text").textContent)}</b>?`, () => {
|
|
||||||
fetchPost("/api/notebook/removeNotebook", {
|
|
||||||
notebook: target.getAttribute("data-url"),
|
|
||||||
callback: Constants.CB_MOUNT_REMOVE
|
|
||||||
});
|
|
||||||
}, undefined, true);
|
|
||||||
window.siyuan.menus.menu.remove();
|
|
||||||
event.stopPropagation();
|
|
||||||
event.preventDefault();
|
|
||||||
break;
|
|
||||||
} else if (type === "open") {
|
} else if (type === "open") {
|
||||||
fetchPost("/api/notebook/openNotebook", {
|
fetchPost("/api/notebook/openNotebook", {
|
||||||
notebook: target.getAttribute("data-url")
|
notebook: target.getAttribute("data-url")
|
||||||
|
|
@ -226,23 +209,7 @@ export class Files extends Model {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
break;
|
break;
|
||||||
} else if (type === "focus") {
|
} else if (type === "focus") {
|
||||||
let element = document.querySelector(".layout__wnd--active > .fn__flex > .layout-tab-bar > .item--focus") as HTMLElement;
|
selectOpenTab();
|
||||||
if (!element) {
|
|
||||||
document.querySelectorAll("ul.layout-tab-bar > .item--focus").forEach((item: HTMLElement, index) => {
|
|
||||||
if (index === 0) {
|
|
||||||
element = item;
|
|
||||||
} else if (item.dataset.activetime > element.dataset.activetime) {
|
|
||||||
element = item;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (element) {
|
|
||||||
const tab = getInstanceById(element.getAttribute("data-id")) as Tab;
|
|
||||||
if (tab && tab.model instanceof Editor) {
|
|
||||||
this.selectItem(tab.model.editor.protyle.notebookId, tab.model.editor.protyle.path);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
break;
|
break;
|
||||||
} else if (type === "more") {
|
} else if (type === "more") {
|
||||||
|
|
@ -351,9 +318,42 @@ export class Files extends Model {
|
||||||
} else if (target.tagName === "LI") {
|
} else if (target.tagName === "LI") {
|
||||||
if (isOnlyMeta(event) && !event.altKey && !event.shiftKey) {
|
if (isOnlyMeta(event) && !event.altKey && !event.shiftKey) {
|
||||||
target.classList.toggle("b3-list-item--focus");
|
target.classList.toggle("b3-list-item--focus");
|
||||||
|
this.lastSelectedElement = target;
|
||||||
|
} else if (event.shiftKey && !event.altKey && isNotCtrl(event)) {
|
||||||
|
// Shift+click 多选文档
|
||||||
|
if (!document.contains(this.lastSelectedElement)) {
|
||||||
|
this.lastSelectedElement = null;
|
||||||
|
}
|
||||||
|
if (!this.lastSelectedElement) {
|
||||||
|
this.lastSelectedElement = this.element.querySelector(".b3-list-item--focus");
|
||||||
|
}
|
||||||
|
if (!this.lastSelectedElement) {
|
||||||
|
this.lastSelectedElement = target.parentElement.firstElementChild;
|
||||||
|
}
|
||||||
|
this.element.querySelectorAll(".b3-list-item--focus").forEach(item => {
|
||||||
|
item.classList.remove("b3-list-item--focus");
|
||||||
|
});
|
||||||
|
|
||||||
|
// 获取所有文档项
|
||||||
|
const allFiles = Array.from(this.element.querySelectorAll("li.b3-list-item"));
|
||||||
|
|
||||||
|
// 获取起始和结束索引
|
||||||
|
const startIndex = allFiles.indexOf(this.lastSelectedElement);
|
||||||
|
const endIndex = allFiles.indexOf(target);
|
||||||
|
|
||||||
|
// 确定选择范围
|
||||||
|
const start = Math.min(startIndex, endIndex);
|
||||||
|
const end = Math.max(startIndex, endIndex);
|
||||||
|
|
||||||
|
// 添加新选择
|
||||||
|
for (let i = start; i <= end; i++) {
|
||||||
|
(allFiles[i] as HTMLElement).classList.add("b3-list-item--focus");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
this.lastSelectedElement = target;
|
||||||
this.setCurrent(target, false);
|
this.setCurrent(target, false);
|
||||||
if (target.getAttribute("data-type") === "navigation-file") {
|
if (target.getAttribute("data-type") === "navigation-file") {
|
||||||
|
// 更新最后点击的文档项
|
||||||
needFocus = false;
|
needFocus = false;
|
||||||
if (target.getAttribute("data-opening")) {
|
if (target.getAttribute("data-opening")) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -369,7 +369,7 @@ export class Files extends Model {
|
||||||
target.removeAttribute("data-opening");
|
target.removeAttribute("data-opening");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if (!event.altKey && isNotCtrl(event) && event.shiftKey) {
|
} else if (!event.altKey && isOnlyMeta(event) && event.shiftKey) {
|
||||||
openFileById({
|
openFileById({
|
||||||
app: options.app,
|
app: options.app,
|
||||||
id: target.getAttribute("data-node-id"),
|
id: target.getAttribute("data-node-id"),
|
||||||
|
|
@ -751,6 +751,7 @@ export class Files extends Model {
|
||||||
fetchPost("/api/filetree/listDocsByPath", {
|
fetchPost("/api/filetree/listDocsByPath", {
|
||||||
notebook: toURL,
|
notebook: toURL,
|
||||||
path: toDir === "/" ? "/" : toDir + ".sy",
|
path: toDir === "/" ? "/" : toDir + ".sy",
|
||||||
|
app: Constants.SIYUAN_APPID,
|
||||||
}, response => {
|
}, response => {
|
||||||
if (response.data.path === "/" && response.data.files.length === 0) {
|
if (response.data.path === "/" && response.data.files.length === 0) {
|
||||||
showMessage(window.siyuan.languages.emptyContent);
|
showMessage(window.siyuan.languages.emptyContent);
|
||||||
|
|
@ -813,14 +814,14 @@ export class Files extends Model {
|
||||||
private genNotebook(item: INotebook) {
|
private genNotebook(item: INotebook) {
|
||||||
const emojiHTML = `<span class="b3-list-item__icon b3-tooltips b3-tooltips__e" aria-label="${window.siyuan.languages.changeIcon}">${unicode2Emoji(item.icon || window.siyuan.storage[Constants.LOCAL_IMAGES].note)}</span>`;
|
const emojiHTML = `<span class="b3-list-item__icon b3-tooltips b3-tooltips__e" aria-label="${window.siyuan.languages.changeIcon}">${unicode2Emoji(item.icon || window.siyuan.storage[Constants.LOCAL_IMAGES].note)}</span>`;
|
||||||
if (item.closed) {
|
if (item.closed) {
|
||||||
return `<li data-type="open" data-url="${item.id}" class="b3-list-item b3-list-item--hide-action">
|
return `<li data-url="${item.id}" class="b3-list-item b3-list-item--hide-action">
|
||||||
<span class="b3-list-item__toggle fn__hidden">
|
<span class="b3-list-item__toggle fn__hidden">
|
||||||
<svg class="b3-list-item__arrow"><use xlink:href="#iconRight"></use></svg>
|
<svg class="b3-list-item__arrow"><use xlink:href="#iconRight"></use></svg>
|
||||||
</span>
|
</span>
|
||||||
${emojiHTML}
|
${emojiHTML}
|
||||||
<span class="b3-list-item__text">${escapeHtml(item.name)}</span>
|
<span class="b3-list-item__text" style="cursor: default;">${escapeHtml(item.name)}</span>
|
||||||
<span data-type="remove" data-url="${item.id}" class="b3-list-item__action b3-tooltips b3-tooltips__w${(window.siyuan.config.readonly) ? " fn__none" : ""}" aria-label="${window.siyuan.languages.delete}">
|
<span data-type="open" data-url="${item.id}" class="b3-list-item__action b3-tooltips b3-tooltips__w${(window.siyuan.config.readonly) ? " fn__none" : ""}" aria-label="${window.siyuan.languages.openBy}">
|
||||||
<svg><use xlink:href="#iconTrashcan"></use></svg>
|
<svg><use xlink:href="#iconOpen"></use></svg>
|
||||||
</span>
|
</span>
|
||||||
</li>`;
|
</li>`;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -1005,9 +1006,12 @@ data-type="navigation-root" data-path="/">
|
||||||
}
|
}
|
||||||
if (sourceElement.parentElement.childElementCount === 1) {
|
if (sourceElement.parentElement.childElementCount === 1) {
|
||||||
if (sourceElement.parentElement.previousElementSibling) {
|
if (sourceElement.parentElement.previousElementSibling) {
|
||||||
sourceElement.parentElement.previousElementSibling.querySelector(".b3-list-item__toggle").classList.add("fn__hidden");
|
const parentLiElement = sourceElement.parentElement.previousElementSibling;
|
||||||
sourceElement.parentElement.previousElementSibling.querySelector(".b3-list-item__arrow").classList.remove("b3-list-item__arrow--open");
|
if (parentLiElement.getAttribute("data-type") !== "navigation-root") {
|
||||||
const emojiElement = sourceElement.parentElement.previousElementSibling.querySelector(".b3-list-item__icon");
|
parentLiElement.querySelector(".b3-list-item__toggle").classList.add("fn__hidden");
|
||||||
|
}
|
||||||
|
parentLiElement.querySelector(".b3-list-item__arrow").classList.remove("b3-list-item__arrow--open");
|
||||||
|
const emojiElement = parentLiElement.querySelector(".b3-list-item__icon");
|
||||||
if (emojiElement.innerHTML === unicode2Emoji(window.siyuan.storage[Constants.LOCAL_IMAGES].folder)) {
|
if (emojiElement.innerHTML === unicode2Emoji(window.siyuan.storage[Constants.LOCAL_IMAGES].folder)) {
|
||||||
emojiElement.innerHTML = unicode2Emoji(window.siyuan.storage[Constants.LOCAL_IMAGES].file);
|
emojiElement.innerHTML = unicode2Emoji(window.siyuan.storage[Constants.LOCAL_IMAGES].file);
|
||||||
}
|
}
|
||||||
|
|
@ -1016,6 +1020,12 @@ data-type="navigation-root" data-path="/">
|
||||||
} else {
|
} else {
|
||||||
sourceElement.remove();
|
sourceElement.remove();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
const parentElement = this.element.querySelector(`ul[data-url="${response.data.fromNotebook}"] li[data-path="${pathPosix().dirname(response.data.fromPath)}.sy"]`) as HTMLElement;
|
||||||
|
if (parentElement && parentElement.getAttribute("data-count") === "1") {
|
||||||
|
parentElement.querySelector(".b3-list-item__toggle").classList.add("fn__hidden");
|
||||||
|
parentElement.querySelector(".b3-list-item__arrow").classList.remove("b3-list-item__arrow--open");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const newElement = this.element.querySelector(`[data-url="${response.data.toNotebook}"] li[data-path="${response.data.toPath}"]`) as HTMLElement;
|
const newElement = this.element.querySelector(`[data-url="${response.data.toNotebook}"] li[data-path="${response.data.toPath}"]`) as HTMLElement;
|
||||||
// 更新移动到的新文件夹
|
// 更新移动到的新文件夹
|
||||||
|
|
@ -1094,6 +1104,9 @@ data-type="navigation-root" data-path="/">
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const liElement = this.element.querySelector(`ul[data-url="${data.box}"] li[data-path="${data.path}"]`);
|
const liElement = this.element.querySelector(`ul[data-url="${data.box}"] li[data-path="${data.path}"]`);
|
||||||
|
if (!liElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (liElement.nextElementSibling && liElement.nextElementSibling.tagName === "UL") {
|
if (liElement.nextElementSibling && liElement.nextElementSibling.tagName === "UL") {
|
||||||
// 文件展开时,刷新
|
// 文件展开时,刷新
|
||||||
liElement.nextElementSibling.remove();
|
liElement.nextElementSibling.remove();
|
||||||
|
|
@ -1114,7 +1127,8 @@ data-type="navigation-root" data-path="/">
|
||||||
} else if (filePath.startsWith(item.path.replace(".sy", ""))) {
|
} else if (filePath.startsWith(item.path.replace(".sy", ""))) {
|
||||||
const response = await fetchSyncPost("/api/filetree/listDocsByPath", {
|
const response = await fetchSyncPost("/api/filetree/listDocsByPath", {
|
||||||
notebook: data.box,
|
notebook: data.box,
|
||||||
path: item.path
|
path: item.path,
|
||||||
|
app: Constants.SIYUAN_APPID,
|
||||||
});
|
});
|
||||||
newLiElement = await this.selectItem(response.data.box, filePath, response.data, setStorage, isSetCurrent);
|
newLiElement = await this.selectItem(response.data.box, filePath, response.data, setStorage, isSetCurrent);
|
||||||
}
|
}
|
||||||
|
|
@ -1151,6 +1165,7 @@ data-type="navigation-root" data-path="/">
|
||||||
fetchPost("/api/filetree/listDocsByPath", {
|
fetchPost("/api/filetree/listDocsByPath", {
|
||||||
notebook: notebookId,
|
notebook: notebookId,
|
||||||
path: liElement.getAttribute("data-path"),
|
path: liElement.getAttribute("data-path"),
|
||||||
|
app: Constants.SIYUAN_APPID,
|
||||||
}, response => {
|
}, response => {
|
||||||
if (response.data.path === "/" && response.data.files.length === 0) {
|
if (response.data.path === "/" && response.data.files.length === 0) {
|
||||||
newFile({
|
newFile({
|
||||||
|
|
@ -1206,7 +1221,8 @@ data-type="navigation-root" data-path="/">
|
||||||
} else {
|
} else {
|
||||||
const response = await fetchSyncPost("/api/filetree/listDocsByPath", {
|
const response = await fetchSyncPost("/api/filetree/listDocsByPath", {
|
||||||
notebook: notebookId,
|
notebook: notebookId,
|
||||||
path: currentPath
|
path: currentPath,
|
||||||
|
app: Constants.SIYUAN_APPID,
|
||||||
});
|
});
|
||||||
liElement = await this.onLsSelect(response.data, filePath, setStorage, isSetCurrent);
|
liElement = await this.onLsSelect(response.data, filePath, setStorage, isSetCurrent);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -341,7 +341,6 @@ export class Graph extends Model {
|
||||||
});
|
});
|
||||||
this.inputElement.addEventListener("compositionend", () => {
|
this.inputElement.addEventListener("compositionend", () => {
|
||||||
this.searchGraph(false);
|
this.searchGraph(false);
|
||||||
this.inputElement.classList.add("search__input--block");
|
|
||||||
});
|
});
|
||||||
this.inputElement.addEventListener("blur", (event: InputEvent) => {
|
this.inputElement.addEventListener("blur", (event: InputEvent) => {
|
||||||
const inputElement = event.target as HTMLInputElement;
|
const inputElement = event.target as HTMLInputElement;
|
||||||
|
|
@ -351,11 +350,6 @@ export class Graph extends Model {
|
||||||
if (event.isComposing) {
|
if (event.isComposing) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (this.inputElement.value === "") {
|
|
||||||
this.inputElement.classList.remove("search__input--block");
|
|
||||||
} else {
|
|
||||||
this.inputElement.classList.add("search__input--block");
|
|
||||||
}
|
|
||||||
this.searchGraph(false);
|
this.searchGraph(false);
|
||||||
});
|
});
|
||||||
this.element.querySelectorAll(".b3-slider").forEach((item: HTMLInputElement) => {
|
this.element.querySelectorAll(".b3-slider").forEach((item: HTMLInputElement) => {
|
||||||
|
|
|
||||||
|
|
@ -6,17 +6,28 @@ import {getDockByType} from "../tabUtil";
|
||||||
import {fetchPost} from "../../util/fetch";
|
import {fetchPost} from "../../util/fetch";
|
||||||
import {getAllModels} from "../getAll";
|
import {getAllModels} from "../getAll";
|
||||||
import {hasClosestBlock, hasClosestByClassName, hasTopClosestByClassName} from "../../protyle/util/hasClosest";
|
import {hasClosestBlock, hasClosestByClassName, hasTopClosestByClassName} from "../../protyle/util/hasClosest";
|
||||||
import {setStorageVal, updateHotkeyAfterTip} from "../../protyle/util/compatibility";
|
import {
|
||||||
|
isInAndroid,
|
||||||
|
isInHarmony,
|
||||||
|
setStorageVal,
|
||||||
|
updateHotkeyAfterTip,
|
||||||
|
writeText
|
||||||
|
} from "../../protyle/util/compatibility";
|
||||||
import {openFileById} from "../../editor/util";
|
import {openFileById} from "../../editor/util";
|
||||||
import {Constants} from "../../constants";
|
import {Constants} from "../../constants";
|
||||||
import {escapeHtml} from "../../util/escape";
|
import {MenuItem} from "../../menus/Menu";
|
||||||
|
import {escapeAttr, escapeHtml} from "../../util/escape";
|
||||||
import {unicode2Emoji} from "../../emoji";
|
import {unicode2Emoji} from "../../emoji";
|
||||||
import {getPreviousBlock} from "../../protyle/wysiwyg/getBlock";
|
import {getPreviousBlock} from "../../protyle/wysiwyg/getBlock";
|
||||||
import {App} from "../../index";
|
import {App} from "../../index";
|
||||||
import {checkFold} from "../../util/noRelyPCFunction";
|
import {checkFold} from "../../util/noRelyPCFunction";
|
||||||
import {transaction} from "../../protyle/wysiwyg/transaction";
|
import {transaction, turnsIntoTransaction} from "../../protyle/wysiwyg/transaction";
|
||||||
import {goHome} from "../../protyle/wysiwyg/commonHotkey";
|
import {goHome} from "../../protyle/wysiwyg/commonHotkey";
|
||||||
import {Editor} from "../../editor";
|
import {Editor} from "../../editor";
|
||||||
|
import {mathRender} from "../../protyle/render/mathRender";
|
||||||
|
import {genEmptyElement} from "../../block/util";
|
||||||
|
import {focusBlock, focusByWbr} from "../../protyle/util/selection";
|
||||||
|
import {dragOverScroll, stopScrollAnimation} from "../../boot/globalEvent/dragover";
|
||||||
|
|
||||||
export class Outline extends Model {
|
export class Outline extends Model {
|
||||||
public tree: Tree;
|
public tree: Tree;
|
||||||
|
|
@ -25,7 +36,7 @@ export class Outline extends Model {
|
||||||
public type: "pin" | "local";
|
public type: "pin" | "local";
|
||||||
public blockId: string;
|
public blockId: string;
|
||||||
public isPreview: boolean;
|
public isPreview: boolean;
|
||||||
private openNodes: { [key: string]: string[] } = {};
|
private preFilterExpandIds: string[] | null = null;
|
||||||
|
|
||||||
constructor(options: {
|
constructor(options: {
|
||||||
app: App,
|
app: App,
|
||||||
|
|
@ -84,27 +95,64 @@ export class Outline extends Model {
|
||||||
this.blockId = options.blockId;
|
this.blockId = options.blockId;
|
||||||
this.type = options.type;
|
this.type = options.type;
|
||||||
options.tab.panelElement.classList.add("fn__flex-column", "file-tree", "sy__outline");
|
options.tab.panelElement.classList.add("fn__flex-column", "file-tree", "sy__outline");
|
||||||
options.tab.panelElement.innerHTML = `<div class="block__icons">
|
options.tab.panelElement.innerHTML = `<div class="block__icons fn__hidescrollbar">
|
||||||
<div class="block__logo">
|
<div class="block__logo">
|
||||||
<svg class="block__logoicon"><use xlink:href="#iconAlignCenter"></use></svg>${window.siyuan.languages.outline}
|
<svg class="block__logoicon"><use xlink:href="#iconAlignCenter"></use></svg>${window.siyuan.languages.outline}
|
||||||
</div>
|
</div>
|
||||||
<span class="fn__flex-1 fn__space"></span>
|
<span class="fn__flex-1 fn__space"></span>
|
||||||
<span data-type="expand" class="block__icon b3-tooltips b3-tooltips__sw${window.siyuan.storage[Constants.LOCAL_OUTLINE].keepExpand ? " block__icon--active" : ""}" aria-label="${window.siyuan.languages.stickOpen}${updateHotkeyAfterTip(window.siyuan.config.keymap.editor.general.expand.custom)}">
|
<input class="b3-text-field search__label fn__none fn__size200" placeholder="${window.siyuan.languages.filterKeywordEnter}" />
|
||||||
|
<span data-type="search" class="block__icon ariaLabel" aria-label="${window.siyuan.languages.filter}">
|
||||||
|
<svg><use xlink:href='#iconFilter'></use></svg>
|
||||||
|
</span>
|
||||||
|
<span class="fn__space"></span>
|
||||||
|
<span data-type="keepCurrentExpand" class="block__icon ariaLabel${window.siyuan.storage[Constants.LOCAL_OUTLINE].keepCurrentExpand ? " block__icon--active" : ""}" aria-label="${window.siyuan.languages.outlineKeepCurrentExpand}">
|
||||||
|
<svg><use xlink:href="#iconFocus"></use></svg>
|
||||||
|
</span>
|
||||||
|
<span class="fn__space"></span>
|
||||||
|
<span data-type="expandLevel" class="block__icon ariaLabel" aria-label="${window.siyuan.languages.expandLevel}">
|
||||||
|
<svg><use xlink:href="#iconList"></use></svg>
|
||||||
|
</span>
|
||||||
|
<span class="fn__space"></span>
|
||||||
|
<span data-type="expand" class="block__icon ariaLabel" aria-label="${window.siyuan.languages.expandAll}${updateHotkeyAfterTip(window.siyuan.config.keymap.editor.general.expand.custom)}">
|
||||||
<svg><use xlink:href="#iconExpand"></use></svg>
|
<svg><use xlink:href="#iconExpand"></use></svg>
|
||||||
</span>
|
</span>
|
||||||
<span class="fn__space"></span>
|
<span class="fn__space"></span>
|
||||||
<span data-type="collapse" class="block__icon b3-tooltips b3-tooltips__sw" aria-label="${window.siyuan.languages.collapse}${updateHotkeyAfterTip(window.siyuan.config.keymap.editor.general.collapse.custom)}">
|
<span data-type="collapse" class="block__icon ariaLabel" aria-label="${window.siyuan.languages.foldAll}${updateHotkeyAfterTip(window.siyuan.config.keymap.editor.general.collapse.custom)}">
|
||||||
<svg><use xlink:href="#iconContract"></use></svg>
|
<svg><use xlink:href="#iconContract"></use></svg>
|
||||||
</span>
|
</span>
|
||||||
<span class="${this.type === "local" ? "fn__none " : ""}fn__space"></span>
|
<span class="${this.type === "local" ? "fn__none " : ""}fn__space"></span>
|
||||||
<span data-type="min" class="${this.type === "local" ? "fn__none " : ""}block__icon b3-tooltips b3-tooltips__sw" aria-label="${window.siyuan.languages.min}${updateHotkeyAfterTip(window.siyuan.config.keymap.general.closeTab.custom)}"><svg><use xlink:href='#iconMin'></use></svg></span>
|
<span data-type="min" class="${this.type === "local" ? "fn__none " : ""}block__icon ariaLabel" aria-label="${window.siyuan.languages.min}${updateHotkeyAfterTip(window.siyuan.config.keymap.general.closeTab.custom)}">
|
||||||
|
<svg><use xlink:href='#iconMin'></use></svg>
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="b3-list-item fn__none"></div>
|
<div class="b3-list-item fn__none"></div>
|
||||||
<div class="fn__flex-1" style="padding: 3px 0 8px"></div>`;
|
<div class="fn__flex-1" style="padding: 3px 0 8px"></div>`;
|
||||||
this.element = options.tab.panelElement.lastElementChild as HTMLElement;
|
this.element = options.tab.panelElement.lastElementChild as HTMLElement;
|
||||||
this.headerElement = options.tab.panelElement.firstElementChild as HTMLElement;
|
this.headerElement = options.tab.panelElement.firstElementChild as HTMLElement;
|
||||||
|
const inputElement = this.headerElement.querySelector("input.b3-text-field.search__label") as HTMLInputElement;
|
||||||
|
inputElement.addEventListener("blur", () => {
|
||||||
|
inputElement.classList.add("fn__none");
|
||||||
|
const filterIconElement = inputElement.nextElementSibling as HTMLElement; // search 图标
|
||||||
|
const value = inputElement.value;
|
||||||
|
if (value) {
|
||||||
|
filterIconElement.classList.add("block__icon--active");
|
||||||
|
filterIconElement.setAttribute("aria-label", window.siyuan.languages.filter + " " + escapeAttr(value));
|
||||||
|
} else {
|
||||||
|
filterIconElement.classList.remove("block__icon--active");
|
||||||
|
filterIconElement.setAttribute("aria-label", window.siyuan.languages.filter);
|
||||||
|
}
|
||||||
|
if (inputElement.dataset.value !== value) {
|
||||||
|
this.setFilter();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
inputElement.addEventListener("keydown", (event: KeyboardEvent) => {
|
||||||
|
if (!event.isComposing && event.key === "Enter") {
|
||||||
|
inputElement.dataset.value = inputElement.value;
|
||||||
|
this.setFilter();
|
||||||
|
}
|
||||||
|
});
|
||||||
this.tree = new Tree({
|
this.tree = new Tree({
|
||||||
element: options.tab.panelElement.lastElementChild as HTMLElement,
|
element: this.element,
|
||||||
data: null,
|
data: null,
|
||||||
click: (element: HTMLElement) => {
|
click: (element: HTMLElement) => {
|
||||||
const id = element.getAttribute("data-node-id");
|
const id = element.getAttribute("data-node-id");
|
||||||
|
|
@ -134,7 +182,12 @@ export class Outline extends Model {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
ctrlClick(element: HTMLElement) {
|
ctrlClick: (element: HTMLElement, event) => {
|
||||||
|
const arrowElement = hasClosestByClassName(event.target as Element, "b3-list-item__toggle");
|
||||||
|
if (arrowElement && !arrowElement.classList.contains("fn__hidden")) {
|
||||||
|
this.collapseChildren(element);
|
||||||
|
return;
|
||||||
|
}
|
||||||
const id = element.getAttribute("data-node-id");
|
const id = element.getAttribute("data-node-id");
|
||||||
openFileById({
|
openFileById({
|
||||||
app: options.app,
|
app: options.app,
|
||||||
|
|
@ -142,13 +195,52 @@ export class Outline extends Model {
|
||||||
action: [Constants.CB_GET_FOCUS, Constants.CB_GET_ALL, Constants.CB_GET_HTML],
|
action: [Constants.CB_GET_FOCUS, Constants.CB_GET_ALL, Constants.CB_GET_HTML],
|
||||||
zoomIn: true,
|
zoomIn: true,
|
||||||
});
|
});
|
||||||
|
},
|
||||||
|
altClick: (element: HTMLElement, event: MouseEvent) => {
|
||||||
|
// alt 点击箭头,切换同层级的所有标题的展开/折叠状态
|
||||||
|
const arrowElement = hasClosestByClassName(event.target as HTMLElement, "b3-list-item__toggle");
|
||||||
|
if (arrowElement) {
|
||||||
|
this.collapseSameLevel(element);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
rightClick: (element: HTMLElement, event: MouseEvent) => {
|
||||||
|
this.showContextMenu(element, event);
|
||||||
|
},
|
||||||
|
toggleClick: (liElement) => {
|
||||||
|
if (!liElement.nextElementSibling) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const svgElement = liElement.firstElementChild.firstElementChild;
|
||||||
|
if (svgElement.classList.contains("b3-list-item__arrow--open")) {
|
||||||
|
svgElement.classList.remove("b3-list-item__arrow--open");
|
||||||
|
liElement.nextElementSibling.classList.add("fn__none");
|
||||||
|
if (liElement.nextElementSibling.nextElementSibling && liElement.nextElementSibling.nextElementSibling.tagName === "UL") {
|
||||||
|
liElement.nextElementSibling.nextElementSibling.classList.add("fn__none");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
svgElement.classList.add("b3-list-item__arrow--open");
|
||||||
|
liElement.nextElementSibling.classList.remove("fn__none");
|
||||||
|
if (liElement.nextElementSibling.nextElementSibling && liElement.nextElementSibling.nextElementSibling.tagName === "UL") {
|
||||||
|
liElement.nextElementSibling.nextElementSibling.classList.remove("fn__none");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.saveExpendIds();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// 为了快捷键的 dispatch
|
// 为了快捷键的 dispatch
|
||||||
options.tab.panelElement.querySelector('[data-type="collapse"]').addEventListener("click", () => {
|
options.tab.panelElement.querySelector('[data-type="collapse"]').addEventListener("click", () => {
|
||||||
this.tree.collapseAll();
|
this.tree.collapseAll();
|
||||||
|
this.saveExpendIds();
|
||||||
});
|
});
|
||||||
options.tab.panelElement.querySelector('[data-type="expand"]').addEventListener("click", (event: MouseEvent & {
|
|
||||||
|
// 普通的全部展开按钮
|
||||||
|
options.tab.panelElement.querySelector('[data-type="expand"]').addEventListener("click", () => {
|
||||||
|
this.tree.expandAll();
|
||||||
|
this.saveExpendIds();
|
||||||
|
});
|
||||||
|
|
||||||
|
// 保持当前标题展开功能
|
||||||
|
options.tab.panelElement.querySelector('[data-type="keepCurrentExpand"]').addEventListener("click", (event: MouseEvent & {
|
||||||
target: Element
|
target: Element
|
||||||
}) => {
|
}) => {
|
||||||
const iconElement = hasClosestByClassName(event.target, "block__icon");
|
const iconElement = hasClosestByClassName(event.target, "block__icon");
|
||||||
|
|
@ -157,17 +249,35 @@ export class Outline extends Model {
|
||||||
}
|
}
|
||||||
if (iconElement.classList.contains("block__icon--active")) {
|
if (iconElement.classList.contains("block__icon--active")) {
|
||||||
iconElement.classList.remove("block__icon--active");
|
iconElement.classList.remove("block__icon--active");
|
||||||
window.siyuan.storage[Constants.LOCAL_OUTLINE].keepExpand = false;
|
window.siyuan.storage[Constants.LOCAL_OUTLINE].keepCurrentExpand = false;
|
||||||
} else {
|
} else {
|
||||||
iconElement.classList.add("block__icon--active");
|
iconElement.classList.add("block__icon--active");
|
||||||
window.siyuan.storage[Constants.LOCAL_OUTLINE].keepExpand = true;
|
window.siyuan.storage[Constants.LOCAL_OUTLINE].keepCurrentExpand = true;
|
||||||
this.tree.expandAll();
|
let focusElement;
|
||||||
|
getAllModels().editor.find(editItem => {
|
||||||
|
if (editItem.editor.protyle.block.rootID === this.blockId) {
|
||||||
|
const selection = getSelection();
|
||||||
|
if (selection.rangeCount > 0) {
|
||||||
|
const blockElement = hasClosestBlock(selection.getRangeAt(0).startContainer);
|
||||||
|
if (blockElement) {
|
||||||
|
focusElement = blockElement;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (focusElement) {
|
||||||
|
this.setCurrent(focusElement);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// 保存keepCurrentExpand状态到localStorage
|
||||||
setStorageVal(Constants.LOCAL_OUTLINE, window.siyuan.storage[Constants.LOCAL_OUTLINE]);
|
setStorageVal(Constants.LOCAL_OUTLINE, window.siyuan.storage[Constants.LOCAL_OUTLINE]);
|
||||||
});
|
});
|
||||||
options.tab.panelElement.addEventListener("click", (event: MouseEvent & { target: HTMLElement }) => {
|
options.tab.panelElement.addEventListener("click", (event: MouseEvent & { target: HTMLElement }) => {
|
||||||
let target = event.target as HTMLElement;
|
let target = event.target as HTMLElement;
|
||||||
|
if (target.tagName === "INPUT") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
let isFocus = true;
|
let isFocus = true;
|
||||||
while (target && !target.isEqualNode(options.tab.panelElement)) {
|
while (target && !target.isEqualNode(options.tab.panelElement)) {
|
||||||
if (target.classList.contains("block__icon")) {
|
if (target.classList.contains("block__icon")) {
|
||||||
|
|
@ -176,6 +286,15 @@ export class Outline extends Model {
|
||||||
case "min":
|
case "min":
|
||||||
getDockByType("outline").toggleModel("outline", false, true);
|
getDockByType("outline").toggleModel("outline", false, true);
|
||||||
break;
|
break;
|
||||||
|
case "search":
|
||||||
|
inputElement.classList.remove("fn__none");
|
||||||
|
inputElement.select();
|
||||||
|
break;
|
||||||
|
case "expandLevel":
|
||||||
|
this.showExpandLevelMenu(target);
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
} else if (this.blockId && (target === this.headerElement.nextElementSibling || target.classList.contains("block__icons"))) {
|
} else if (this.blockId && (target === this.headerElement.nextElementSibling || target.classList.contains("block__icons"))) {
|
||||||
|
|
@ -250,18 +369,13 @@ export class Outline extends Model {
|
||||||
}
|
}
|
||||||
ghostElement.style.top = moveEvent.clientY + "px";
|
ghostElement.style.top = moveEvent.clientY + "px";
|
||||||
ghostElement.style.left = moveEvent.clientX + "px";
|
ghostElement.style.left = moveEvent.clientX + "px";
|
||||||
|
dragOverScroll(moveEvent, contentRect, this.element);
|
||||||
if (!this.element.contains(moveEvent.target as Element)) {
|
if (!this.element.contains(moveEvent.target as Element)) {
|
||||||
this.element.querySelectorAll(".dragover__top, .dragover__bottom, .dragover, .dragover__current").forEach(item => {
|
this.element.querySelectorAll(".dragover__top, .dragover__bottom, .dragover, .dragover__current").forEach(item => {
|
||||||
item.classList.remove("dragover__top", "dragover__bottom", "dragover", "dragover__current");
|
item.classList.remove("dragover__top", "dragover__bottom", "dragover", "dragover__current");
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (moveEvent.clientY < contentRect.top + Constants.SIZE_SCROLL_TB || moveEvent.clientY > contentRect.bottom - Constants.SIZE_SCROLL_TB) {
|
|
||||||
this.element.scroll({
|
|
||||||
top: this.element.scrollTop + (moveEvent.clientY < contentRect.top + Constants.SIZE_SCROLL_TB ? -Constants.SIZE_SCROLL_STEP : Constants.SIZE_SCROLL_STEP),
|
|
||||||
behavior: "smooth"
|
|
||||||
});
|
|
||||||
}
|
|
||||||
selectItem = hasClosestByClassName(moveEvent.target as HTMLElement, "b3-list-item") as HTMLElement;
|
selectItem = hasClosestByClassName(moveEvent.target as HTMLElement, "b3-list-item") as HTMLElement;
|
||||||
if (!selectItem || selectItem.tagName !== "LI" || selectItem.style.position === "fixed") {
|
if (!selectItem || selectItem.tagName !== "LI" || selectItem.style.position === "fixed") {
|
||||||
return;
|
return;
|
||||||
|
|
@ -292,6 +406,8 @@ export class Outline extends Model {
|
||||||
documentSelf.onselect = null;
|
documentSelf.onselect = null;
|
||||||
ghostElement?.remove();
|
ghostElement?.remove();
|
||||||
item.style.opacity = "";
|
item.style.opacity = "";
|
||||||
|
// 清理滚动动画
|
||||||
|
stopScrollAnimation();
|
||||||
if (!selectItem) {
|
if (!selectItem) {
|
||||||
selectItem = this.element.querySelector(".dragover__top, .dragover__bottom, .dragover");
|
selectItem = this.element.querySelector(".dragover__top, .dragover__bottom, .dragover");
|
||||||
}
|
}
|
||||||
|
|
@ -332,6 +448,7 @@ export class Outline extends Model {
|
||||||
}
|
}
|
||||||
if (hasChange) {
|
if (hasChange) {
|
||||||
this.element.setAttribute("data-loading", "true");
|
this.element.setAttribute("data-loading", "true");
|
||||||
|
|
||||||
transaction(editor, [{
|
transaction(editor, [{
|
||||||
action: "moveOutlineHeading",
|
action: "moveOutlineHeading",
|
||||||
id: item.dataset.nodeId,
|
id: item.dataset.nodeId,
|
||||||
|
|
@ -343,6 +460,7 @@ export class Outline extends Model {
|
||||||
previousID: undoPreviousID,
|
previousID: undoPreviousID,
|
||||||
parentID: undoParentID,
|
parentID: undoParentID,
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
// https://github.com/siyuan-note/siyuan/issues/10828#issuecomment-2044099675
|
// https://github.com/siyuan-note/siyuan/issues/10828#issuecomment-2044099675
|
||||||
editor.wysiwyg.element.querySelectorAll('[data-type="NodeHeading"] [contenteditable="true"][spellcheck]').forEach(item => {
|
editor.wysiwyg.element.querySelectorAll('[data-type="NodeHeading"] [contenteditable="true"][spellcheck]').forEach(item => {
|
||||||
item.setAttribute("contenteditable", "false");
|
item.setAttribute("contenteditable", "false");
|
||||||
|
|
@ -480,9 +598,19 @@ export class Outline extends Model {
|
||||||
item.classList.remove("b3-list-item--focus");
|
item.classList.remove("b3-list-item--focus");
|
||||||
});
|
});
|
||||||
let currentElement = this.element.querySelector(`.b3-list-item[data-node-id="${id}"]`) as HTMLElement;
|
let currentElement = this.element.querySelector(`.b3-list-item[data-node-id="${id}"]`) as HTMLElement;
|
||||||
|
if (window.siyuan.storage[Constants.LOCAL_OUTLINE].keepCurrentExpand) {
|
||||||
|
let ulElement = currentElement.parentElement;
|
||||||
|
while (ulElement && !ulElement.classList.contains("b3-list") && ulElement.tagName === "UL") {
|
||||||
|
ulElement.classList.remove("fn__none");
|
||||||
|
ulElement.previousElementSibling.querySelector(".b3-list-item__arrow").classList.add("b3-list-item__arrow--open");
|
||||||
|
ulElement = ulElement.parentElement;
|
||||||
|
}
|
||||||
|
this.saveExpendIds();
|
||||||
|
} else {
|
||||||
while (currentElement && currentElement.clientHeight === 0) {
|
while (currentElement && currentElement.clientHeight === 0) {
|
||||||
currentElement = currentElement.parentElement.previousElementSibling as HTMLElement;
|
currentElement = currentElement.parentElement.previousElementSibling as HTMLElement;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (currentElement) {
|
if (currentElement) {
|
||||||
currentElement.classList.add("b3-list-item--focus");
|
currentElement.classList.add("b3-list-item--focus");
|
||||||
const elementRect = this.element.getBoundingClientRect();
|
const elementRect = this.element.getBoundingClientRect();
|
||||||
|
|
@ -496,28 +624,31 @@ export class Outline extends Model {
|
||||||
if (currentElement) {
|
if (currentElement) {
|
||||||
currentId = currentElement.getAttribute("data-node-id");
|
currentId = currentElement.getAttribute("data-node-id");
|
||||||
}
|
}
|
||||||
|
const scrollTop = this.element.scrollTop;
|
||||||
if (!this.isPreview && this.openNodes[this.blockId]) {
|
|
||||||
this.openNodes[this.blockId] = this.tree.getExpandIds();
|
|
||||||
}
|
|
||||||
if (typeof callbackId !== "undefined") {
|
if (typeof callbackId !== "undefined") {
|
||||||
this.blockId = callbackId;
|
this.blockId = callbackId;
|
||||||
}
|
}
|
||||||
this.tree.updateData(data.data);
|
this.tree.updateData(data.data);
|
||||||
if (!this.isPreview && this.openNodes[this.blockId] && !this.headerElement.querySelector('[data-type="expand"]').classList.contains("block__icon--active")) {
|
|
||||||
this.tree.setExpandIds(this.openNodes[this.blockId]);
|
|
||||||
} else {
|
|
||||||
this.tree.expandAll();
|
|
||||||
if (!this.isPreview) {
|
|
||||||
this.openNodes[this.blockId] = this.tree.getExpandIds();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (this.isPreview) {
|
if (this.isPreview) {
|
||||||
this.tree.element.querySelectorAll(".popover__block").forEach(item => {
|
this.tree.element.querySelectorAll(".popover__block").forEach(item => {
|
||||||
item.classList.remove("popover__block");
|
item.classList.remove("popover__block");
|
||||||
});
|
});
|
||||||
|
this.element.scrollTop = scrollTop;
|
||||||
|
} else if (this.blockId) {
|
||||||
|
fetchPost("/api/storage/getOutlineStorage", {
|
||||||
|
docID: this.blockId
|
||||||
|
}, storageResponse => {
|
||||||
|
const storageData = storageResponse.data;
|
||||||
|
if (storageData && storageData.expandIds) {
|
||||||
|
this.tree.setExpandIds(storageData.expandIds);
|
||||||
|
}
|
||||||
|
if ((this.headerElement.querySelector("input.b3-text-field.search__label") as HTMLInputElement).value) {
|
||||||
|
this.setFilter();
|
||||||
|
}
|
||||||
|
this.element.scrollTop = scrollTop;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (currentId) {
|
if (currentId) {
|
||||||
currentElement = this.element.querySelector(`[data-node-id="${currentId}"]`);
|
currentElement = this.element.querySelector(`[data-node-id="${currentId}"]`);
|
||||||
if (currentElement) {
|
if (currentElement) {
|
||||||
|
|
@ -526,4 +657,648 @@ export class Outline extends Model {
|
||||||
}
|
}
|
||||||
this.element.removeAttribute("data-loading");
|
this.element.removeAttribute("data-loading");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public saveExpendIds() {
|
||||||
|
if (window.siyuan.config.readonly || window.siyuan.isPublish) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!this.isPreview && this.type === "pin") {
|
||||||
|
fetchPost("/api/storage/setOutlineStorage", {
|
||||||
|
docID: this.blockId,
|
||||||
|
val: {
|
||||||
|
expandIds: this.tree.getExpandIds()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 应用大纲筛选
|
||||||
|
*/
|
||||||
|
private setFilter() {
|
||||||
|
// 还原 display
|
||||||
|
this.element.querySelectorAll('li.b3-list-item[style$="display: none;"]').forEach((item: HTMLElement) => {
|
||||||
|
item.style.display = "";
|
||||||
|
});
|
||||||
|
this.element.querySelectorAll("ul.fn__none").forEach((item) => {
|
||||||
|
item.previousElementSibling.querySelector(".b3-list-item__toggle").classList.remove("fn__hidden");
|
||||||
|
});
|
||||||
|
const keyword = (this.headerElement.querySelector("input.b3-text-field.search__label") as HTMLInputElement).value.toLowerCase();
|
||||||
|
if (keyword) {
|
||||||
|
// 首次筛选时记录折叠状态
|
||||||
|
if (!this.preFilterExpandIds) {
|
||||||
|
this.preFilterExpandIds = this.tree.getExpandIds();
|
||||||
|
}
|
||||||
|
const processUL = (ul: Element) => {
|
||||||
|
let hasMatch = false;
|
||||||
|
let hasChildMatch = false;
|
||||||
|
const children = ul.querySelectorAll(":scope > li.b3-list-item");
|
||||||
|
|
||||||
|
children.forEach((liItem: HTMLElement) => {
|
||||||
|
const nextUlElement = (liItem.nextElementSibling && liItem.nextElementSibling.tagName === "UL") ? liItem.nextElementSibling as HTMLElement : undefined;
|
||||||
|
|
||||||
|
let childResult = {hasMatch: false, hasChildMatch: false};
|
||||||
|
if (nextUlElement) {
|
||||||
|
childResult = processUL(nextUlElement);
|
||||||
|
}
|
||||||
|
|
||||||
|
const arrowElement = liItem.querySelector(".b3-list-item__arrow");
|
||||||
|
if ((liItem.querySelector(".b3-list-item__text")?.textContent || "").trim().toLowerCase().includes(keyword)) {
|
||||||
|
// 当前标题命中
|
||||||
|
liItem.style.display = "";
|
||||||
|
hasMatch = true;
|
||||||
|
|
||||||
|
if (nextUlElement) {
|
||||||
|
nextUlElement.classList.remove("fn__none");
|
||||||
|
if (childResult.hasMatch || childResult.hasChildMatch) {
|
||||||
|
// 子项也有命中
|
||||||
|
arrowElement.classList.add("b3-list-item__arrow--open");
|
||||||
|
nextUlElement.classList.remove("fn__none");
|
||||||
|
} else {
|
||||||
|
// 子项无命中,折叠所有子项
|
||||||
|
arrowElement.classList.remove("b3-list-item__arrow--open");
|
||||||
|
arrowElement.parentElement.classList.add("fn__hidden");
|
||||||
|
nextUlElement.classList.add("fn__none");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (childResult.hasMatch || childResult.hasChildMatch) {
|
||||||
|
// 当前标题未命中,但子级有命中
|
||||||
|
liItem.style.display = "";
|
||||||
|
hasChildMatch = true;
|
||||||
|
|
||||||
|
if (nextUlElement) {
|
||||||
|
nextUlElement.classList.remove("fn__none");
|
||||||
|
arrowElement.classList.add("b3-list-item__arrow--open");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 当前标题和子级都未命中,隐藏
|
||||||
|
liItem.style.display = "none";
|
||||||
|
if (nextUlElement) {
|
||||||
|
nextUlElement.classList.add("fn__none");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return {hasMatch, hasChildMatch};
|
||||||
|
};
|
||||||
|
|
||||||
|
processUL(this.element.firstElementChild);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// 恢复折叠状态
|
||||||
|
this.tree.setExpandIds(this.preFilterExpandIds);
|
||||||
|
this.preFilterExpandIds = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取标题元素的实际标题级别(H1=1, H2=2, 等等)
|
||||||
|
* @param element li元素
|
||||||
|
* @returns 标题级别(1-6)
|
||||||
|
*/
|
||||||
|
private getHeadingLevel(element: HTMLElement) {
|
||||||
|
return parseInt(element.getAttribute("data-subtype")?.replace("h", "") || "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 展开到指定标题级别
|
||||||
|
* @param targetLevel 目标标题级别,1-6级(H1-H6),6级表示全部展开
|
||||||
|
*/
|
||||||
|
private expandToLevel(targetLevel: number) {
|
||||||
|
if (targetLevel >= 6) {
|
||||||
|
// 全部展开
|
||||||
|
this.tree.expandAll();
|
||||||
|
} else {
|
||||||
|
// 展开到指定标题级别
|
||||||
|
this.element.querySelectorAll("li.b3-list-item").forEach(item => {
|
||||||
|
const headingLevel = this.getHeadingLevel(item as HTMLElement);
|
||||||
|
const arrowElement = item.querySelector(".b3-list-item__arrow");
|
||||||
|
if (item.nextElementSibling && item.nextElementSibling.tagName === "UL" && arrowElement) {
|
||||||
|
if (headingLevel > 0 && headingLevel < targetLevel) {
|
||||||
|
// 当前标题级别小于目标级别,展开
|
||||||
|
arrowElement.classList.add("b3-list-item__arrow--open");
|
||||||
|
item.nextElementSibling.classList.remove("fn__none");
|
||||||
|
} else if (headingLevel >= targetLevel) {
|
||||||
|
// 当前标题级别大于等于目标级别,折叠
|
||||||
|
arrowElement.classList.remove("b3-list-item__arrow--open");
|
||||||
|
item.nextElementSibling.classList.add("fn__none");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.saveExpendIds();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 显示展开层级菜单
|
||||||
|
*/
|
||||||
|
private showExpandLevelMenu(target: HTMLElement) {
|
||||||
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_OUTLINE_EXPAND_LEVEL);
|
||||||
|
for (let i = 1; i <= 6; i++) {
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: `heading${i}`,
|
||||||
|
icon: `iconH${i}`,
|
||||||
|
label: window.siyuan.languages[`heading${i}`],
|
||||||
|
click: () => this.expandToLevel(i)
|
||||||
|
}).element);
|
||||||
|
}
|
||||||
|
const rect = target.getBoundingClientRect();
|
||||||
|
window.siyuan.menus.menu.popup({
|
||||||
|
x: rect.left,
|
||||||
|
y: rect.bottom,
|
||||||
|
h: rect.height
|
||||||
|
});
|
||||||
|
return window.siyuan.menus.menu;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 切换同层级的所有标题的展开/折叠状态(基于标题级别而不是DOM层级)
|
||||||
|
*/
|
||||||
|
private collapseSameLevel(element: HTMLElement, expand?: boolean) {
|
||||||
|
// 获取所有相同标题级别的元素
|
||||||
|
this.element.querySelectorAll(`li.b3-list-item[data-subtype="${element.getAttribute("data-subtype")}"]`).forEach(item => {
|
||||||
|
const arrowElement = item.querySelector(".b3-list-item__arrow");
|
||||||
|
if (typeof expand === "undefined") {
|
||||||
|
expand = !element.querySelector(".b3-list-item__arrow").classList.contains("b3-list-item__arrow--open");
|
||||||
|
}
|
||||||
|
if (expand) {
|
||||||
|
if (item.nextElementSibling && item.nextElementSibling.tagName === "UL") {
|
||||||
|
item.nextElementSibling.classList.remove("fn__none");
|
||||||
|
arrowElement.classList.add("b3-list-item__arrow--open");
|
||||||
|
}
|
||||||
|
let ulElement = item.parentElement;
|
||||||
|
while (ulElement && !ulElement.classList.contains("b3-list") && ulElement.tagName === "UL") {
|
||||||
|
ulElement.classList.remove("fn__none");
|
||||||
|
ulElement.previousElementSibling.querySelector(".b3-list-item__arrow").classList.add("b3-list-item__arrow--open");
|
||||||
|
ulElement = ulElement.parentElement;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (item.nextElementSibling && item.nextElementSibling.tagName === "UL") {
|
||||||
|
item.nextElementSibling.classList.add("fn__none");
|
||||||
|
arrowElement.classList.remove("b3-list-item__arrow--open");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
this.saveExpendIds();
|
||||||
|
}
|
||||||
|
|
||||||
|
private collapseChildren(element: HTMLElement, expand?: boolean) {
|
||||||
|
const nextElement = element.nextElementSibling;
|
||||||
|
if (!nextElement || nextElement.tagName !== "UL") {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const arrowElement = element.querySelector(".b3-list-item__arrow");
|
||||||
|
if (typeof expand === "undefined") {
|
||||||
|
expand = !arrowElement.classList.contains("b3-list-item__arrow--open");
|
||||||
|
}
|
||||||
|
if (expand) {
|
||||||
|
arrowElement.classList.add("b3-list-item__arrow--open");
|
||||||
|
nextElement.classList.remove("fn__none");
|
||||||
|
nextElement.querySelectorAll("ul").forEach(item => {
|
||||||
|
item.previousElementSibling.querySelector(".b3-list-item__arrow").classList.add("b3-list-item__arrow--open");
|
||||||
|
item.classList.remove("fn__none");
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
arrowElement.classList.remove("b3-list-item__arrow--open");
|
||||||
|
nextElement.classList.add("fn__none");
|
||||||
|
}
|
||||||
|
this.saveExpendIds();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 显示右键菜单
|
||||||
|
*/
|
||||||
|
private showContextMenu(element: HTMLElement, event: MouseEvent) {
|
||||||
|
if (this.isPreview) {
|
||||||
|
return; // 预览模式下不显示右键菜单
|
||||||
|
}
|
||||||
|
const currentLevel = this.getHeadingLevel(element);
|
||||||
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_OUTLINE_CONTEXT);
|
||||||
|
const id = element.getAttribute("data-node-id");
|
||||||
|
if (!window.siyuan.config.readonly) {
|
||||||
|
// 升级
|
||||||
|
if (currentLevel > 1) {
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "upgrade",
|
||||||
|
icon: "iconUp",
|
||||||
|
label: window.siyuan.languages.upgrade,
|
||||||
|
click: () => {
|
||||||
|
const data = this.getProtyleAndBlockElement(element);
|
||||||
|
if (data) {
|
||||||
|
turnsIntoTransaction({
|
||||||
|
protyle: data.protyle,
|
||||||
|
selectsElement: [data.blockElement],
|
||||||
|
type: "Blocks2Hs",
|
||||||
|
level: currentLevel - 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).element);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 降级
|
||||||
|
if (currentLevel < 6) {
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "downgrade",
|
||||||
|
icon: "iconDown",
|
||||||
|
label: window.siyuan.languages.downgrade,
|
||||||
|
click: () => {
|
||||||
|
const data = this.getProtyleAndBlockElement(element);
|
||||||
|
if (data) {
|
||||||
|
turnsIntoTransaction({
|
||||||
|
protyle: data.protyle,
|
||||||
|
selectsElement: [data.blockElement],
|
||||||
|
type: "Blocks2Hs",
|
||||||
|
level: currentLevel + 1
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}).element);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 带子标题转换
|
||||||
|
checkFold(id, (zoomIn) => {
|
||||||
|
openFileById({
|
||||||
|
app: this.app,
|
||||||
|
id,
|
||||||
|
action: zoomIn ? [Constants.CB_GET_FOCUS, Constants.CB_GET_ALL, Constants.CB_GET_HTML, Constants.CB_GET_OUTLINE] : [Constants.CB_GET_FOCUS, Constants.CB_GET_OUTLINE, Constants.CB_GET_SETID, Constants.CB_GET_CONTEXT, Constants.CB_GET_HTML],
|
||||||
|
});
|
||||||
|
});
|
||||||
|
this.setCurrentById(id);
|
||||||
|
const headingSubMenu = [];
|
||||||
|
if (currentLevel !== 1) {
|
||||||
|
headingSubMenu.push(this.genHeadingTransform(id, 1));
|
||||||
|
}
|
||||||
|
if (currentLevel !== 2) {
|
||||||
|
headingSubMenu.push(this.genHeadingTransform(id, 2));
|
||||||
|
}
|
||||||
|
if (currentLevel !== 3) {
|
||||||
|
headingSubMenu.push(this.genHeadingTransform(id, 3));
|
||||||
|
}
|
||||||
|
if (currentLevel !== 4) {
|
||||||
|
headingSubMenu.push(this.genHeadingTransform(id, 4));
|
||||||
|
}
|
||||||
|
if (currentLevel !== 5) {
|
||||||
|
headingSubMenu.push(this.genHeadingTransform(id, 5));
|
||||||
|
}
|
||||||
|
if (currentLevel !== 6) {
|
||||||
|
headingSubMenu.push(this.genHeadingTransform(id, 6));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (headingSubMenu.length > 0) {
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "tWithSubtitle",
|
||||||
|
type: "submenu",
|
||||||
|
icon: "iconRefresh",
|
||||||
|
label: window.siyuan.languages.tWithSubtitle,
|
||||||
|
submenu: headingSubMenu
|
||||||
|
}).element);
|
||||||
|
}
|
||||||
|
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({id: "separator_1", type: "separator"}).element);
|
||||||
|
|
||||||
|
// 在前面插入同级标题
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "insertSameLevelHeadingBefore",
|
||||||
|
icon: "iconBefore",
|
||||||
|
label: window.siyuan.languages.insertSameLevelHeadingBefore,
|
||||||
|
click: () => {
|
||||||
|
const data = this.getProtyleAndBlockElement(element);
|
||||||
|
const newId = Lute.NewNodeID();
|
||||||
|
const html = `<div data-subtype="h${currentLevel}" data-node-id="${newId}" data-type="NodeHeading" class="h${currentLevel}"><div contenteditable="true" spellcheck="false"><wbr></div><div class="protyle-attr" contenteditable="false">${Constants.ZWSP}</div></div>`;
|
||||||
|
transaction(data.protyle, [{
|
||||||
|
action: "insert",
|
||||||
|
data: html,
|
||||||
|
id: newId,
|
||||||
|
previousID: data.blockElement.previousElementSibling?.getAttribute("data-node-id"),
|
||||||
|
parentID: data.blockElement.parentElement.getAttribute("data-node-id") || data.protyle.block.parentID,
|
||||||
|
}], [{
|
||||||
|
action: "delete",
|
||||||
|
id: newId
|
||||||
|
}]);
|
||||||
|
data.blockElement.insertAdjacentHTML("beforebegin", html);
|
||||||
|
data.blockElement.previousElementSibling.scrollIntoView();
|
||||||
|
focusByWbr(data.blockElement.previousElementSibling, document.createRange());
|
||||||
|
}
|
||||||
|
}).element);
|
||||||
|
|
||||||
|
// 在后面插入同级标题
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "insertSameLevelHeadingAfter",
|
||||||
|
icon: "iconAfter",
|
||||||
|
label: window.siyuan.languages.insertSameLevelHeadingAfter,
|
||||||
|
click: () => {
|
||||||
|
fetchPost("/api/block/getHeadingDeleteTransaction", {
|
||||||
|
id,
|
||||||
|
}, (deleteResponse) => {
|
||||||
|
const data = this.getProtyleAndBlockElement(element);
|
||||||
|
const previousID = deleteResponse.data.doOperations[deleteResponse.data.doOperations.length - 1].id;
|
||||||
|
|
||||||
|
const newId = Lute.NewNodeID();
|
||||||
|
const html = `<div data-subtype="h${currentLevel}" data-node-id="${newId}" data-type="NodeHeading" class="h${currentLevel}"><div contenteditable="true" spellcheck="false"><wbr></div><div class="protyle-attr" contenteditable="false">${Constants.ZWSP}</div></div>`;
|
||||||
|
transaction(data.protyle, [{
|
||||||
|
action: "insert",
|
||||||
|
data: html,
|
||||||
|
id: newId,
|
||||||
|
previousID,
|
||||||
|
}], [{
|
||||||
|
action: "delete",
|
||||||
|
id: newId
|
||||||
|
}]);
|
||||||
|
const previousElement = data.protyle.wysiwyg.element.querySelector(`[data-node-id="${previousID}"]`);
|
||||||
|
if (previousElement) {
|
||||||
|
previousElement.insertAdjacentHTML("afterend", html);
|
||||||
|
previousElement.nextElementSibling.scrollIntoView();
|
||||||
|
focusByWbr(previousElement.nextElementSibling, document.createRange());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).element);
|
||||||
|
|
||||||
|
// 添加子标题
|
||||||
|
if (currentLevel < 6) { // 只有当前级别小于6时才能添加子标题
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "addChildHeading",
|
||||||
|
icon: "iconAdd",
|
||||||
|
label: window.siyuan.languages.addChildHeading,
|
||||||
|
click: () => {
|
||||||
|
fetchPost("/api/block/getHeadingDeleteTransaction", {
|
||||||
|
id,
|
||||||
|
}, (deleteResponse) => {
|
||||||
|
let previousID = deleteResponse.data.doOperations[deleteResponse.data.doOperations.length - 1].id;
|
||||||
|
deleteResponse.data.undoOperations.find((operationsItem: IOperation, index: number) => {
|
||||||
|
const startIndex = operationsItem.data.indexOf(' data-subtype="h');
|
||||||
|
if (startIndex > -1 && startIndex < 260 && parseInt(operationsItem.data.substring(startIndex + 16, startIndex + 17)) === currentLevel + 1) {
|
||||||
|
previousID = deleteResponse.data.undoOperations[index - 1].id;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
const data = this.getProtyleAndBlockElement(element);
|
||||||
|
const newId = Lute.NewNodeID();
|
||||||
|
const html = `<div data-subtype="h${currentLevel + 1}" data-node-id="${newId}" data-type="NodeHeading" class="h${currentLevel + 1}"><div contenteditable="true" spellcheck="false"><wbr></div><div class="protyle-attr" contenteditable="false">${Constants.ZWSP}</div></div>`;
|
||||||
|
transaction(data.protyle, [{
|
||||||
|
action: "insert",
|
||||||
|
data: html,
|
||||||
|
id: newId,
|
||||||
|
previousID,
|
||||||
|
}], [{
|
||||||
|
action: "delete",
|
||||||
|
id: newId
|
||||||
|
}]);
|
||||||
|
const previousElement = data.protyle.wysiwyg.element.querySelector(`[data-node-id="${previousID}"]`);
|
||||||
|
if (previousElement) {
|
||||||
|
previousElement.insertAdjacentHTML("afterend", html);
|
||||||
|
previousElement.nextElementSibling.scrollIntoView();
|
||||||
|
focusByWbr(previousElement.nextElementSibling, document.createRange());
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).element);
|
||||||
|
}
|
||||||
|
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({id: "separator_2", type: "separator"}).element);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 复制带子标题
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "copyHeadings1",
|
||||||
|
icon: "iconCopy",
|
||||||
|
label: `${window.siyuan.languages.copy} ${window.siyuan.languages.headings1}`,
|
||||||
|
click: () => {
|
||||||
|
const data = this.getProtyleAndBlockElement(element);
|
||||||
|
fetchPost("/api/block/getHeadingChildrenDOM", {
|
||||||
|
id,
|
||||||
|
removeFoldAttr: data.blockElement.getAttribute("fold") !== "1"
|
||||||
|
}, (response) => {
|
||||||
|
if (isInAndroid()) {
|
||||||
|
window.JSAndroid.writeHTMLClipboard(data.protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), response.data + Constants.ZWSP);
|
||||||
|
} else if (isInHarmony()) {
|
||||||
|
window.JSHarmony.writeHTMLClipboard(data.protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), response.data + Constants.ZWSP);
|
||||||
|
} else {
|
||||||
|
writeText(response.data + Constants.ZWSP);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).element);
|
||||||
|
|
||||||
|
if (!window.siyuan.config.readonly) {
|
||||||
|
// 剪切带子标题
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "cutHeadings1",
|
||||||
|
icon: "iconCut",
|
||||||
|
label: `${window.siyuan.languages.cut} ${window.siyuan.languages.headings1}`,
|
||||||
|
click: () => {
|
||||||
|
const data = this.getProtyleAndBlockElement(element);
|
||||||
|
fetchPost("/api/block/getHeadingChildrenDOM", {
|
||||||
|
id,
|
||||||
|
removeFoldAttr: data.blockElement.getAttribute("fold") !== "1"
|
||||||
|
}, (response) => {
|
||||||
|
if (isInAndroid()) {
|
||||||
|
window.JSAndroid.writeHTMLClipboard(data.protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), response.data + Constants.ZWSP);
|
||||||
|
} else if (isInHarmony()) {
|
||||||
|
window.JSHarmony.writeHTMLClipboard(data.protyle.lute.BlockDOM2StdMd(response.data).trimEnd(), response.data + Constants.ZWSP);
|
||||||
|
} else {
|
||||||
|
writeText(response.data + Constants.ZWSP);
|
||||||
|
}
|
||||||
|
fetchPost("/api/block/getHeadingDeleteTransaction", {
|
||||||
|
id,
|
||||||
|
}, (deleteResponse) => {
|
||||||
|
deleteResponse.data.doOperations.forEach((operation: IOperation) => {
|
||||||
|
data.protyle.wysiwyg.element.querySelectorAll(`[data-node-id="${operation.id}"]`).forEach((itemElement: HTMLElement) => {
|
||||||
|
itemElement.remove();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if (data.protyle.wysiwyg.element.childElementCount === 0) {
|
||||||
|
const newID = Lute.NewNodeID();
|
||||||
|
const emptyElement = genEmptyElement(false, false, newID);
|
||||||
|
data.protyle.wysiwyg.element.insertAdjacentElement("afterbegin", emptyElement);
|
||||||
|
deleteResponse.data.doOperations.push({
|
||||||
|
action: "insert",
|
||||||
|
data: emptyElement.outerHTML,
|
||||||
|
id: newID,
|
||||||
|
parentID: data.protyle.block.parentID
|
||||||
|
});
|
||||||
|
deleteResponse.data.undoOperations.push({
|
||||||
|
action: "delete",
|
||||||
|
id: newID,
|
||||||
|
});
|
||||||
|
focusBlock(emptyElement);
|
||||||
|
}
|
||||||
|
transaction(data.protyle, deleteResponse.data.doOperations, deleteResponse.data.undoOperations);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).element);
|
||||||
|
|
||||||
|
// 删除
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "deleteHeadings1",
|
||||||
|
icon: "iconTrashcan",
|
||||||
|
label: `${window.siyuan.languages.delete} ${window.siyuan.languages.headings1}`,
|
||||||
|
click: () => {
|
||||||
|
const data = this.getProtyleAndBlockElement(element);
|
||||||
|
fetchPost("/api/block/getHeadingDeleteTransaction", {
|
||||||
|
id,
|
||||||
|
}, (response) => {
|
||||||
|
response.data.doOperations.forEach((operation: IOperation) => {
|
||||||
|
data.protyle.wysiwyg.element.querySelectorAll(`[data-node-id="${operation.id}"]`).forEach((itemElement: HTMLElement) => {
|
||||||
|
itemElement.remove();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
if (data.protyle.wysiwyg.element.childElementCount === 0) {
|
||||||
|
const newID = Lute.NewNodeID();
|
||||||
|
const emptyElement = genEmptyElement(false, false, newID);
|
||||||
|
data.protyle.wysiwyg.element.insertAdjacentElement("afterbegin", emptyElement);
|
||||||
|
response.data.doOperations.push({
|
||||||
|
action: "insert",
|
||||||
|
data: emptyElement.outerHTML,
|
||||||
|
id: newID,
|
||||||
|
parentID: data.protyle.block.parentID
|
||||||
|
});
|
||||||
|
response.data.undoOperations.push({
|
||||||
|
action: "delete",
|
||||||
|
id: newID,
|
||||||
|
});
|
||||||
|
focusBlock(emptyElement);
|
||||||
|
}
|
||||||
|
transaction(data.protyle, response.data.doOperations, response.data.undoOperations);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}).element);
|
||||||
|
}
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({id: "separator_3", type: "separator"}).element);
|
||||||
|
|
||||||
|
// 展开子标题
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "expandChildHeading",
|
||||||
|
icon: "iconExpand",
|
||||||
|
label: window.siyuan.languages.expandChildHeading,
|
||||||
|
accelerator: "⌘" + window.siyuan.languages.clickArrow,
|
||||||
|
click: () => this.collapseChildren(element, true)
|
||||||
|
}).element);
|
||||||
|
|
||||||
|
// 折叠子标题
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "foldChildHeading",
|
||||||
|
icon: "iconContract",
|
||||||
|
label: window.siyuan.languages.foldChildHeading,
|
||||||
|
accelerator: "⌘" + window.siyuan.languages.clickArrow,
|
||||||
|
click: () => this.collapseChildren(element, false)
|
||||||
|
}).element);
|
||||||
|
|
||||||
|
// 展开同级标题
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "expandSameLevelHeading",
|
||||||
|
icon: "iconExpand",
|
||||||
|
label: window.siyuan.languages.expandSameLevelHeading,
|
||||||
|
accelerator: "⌥" + window.siyuan.languages.clickArrow,
|
||||||
|
click: () => this.collapseSameLevel(element, true)
|
||||||
|
}).element);
|
||||||
|
|
||||||
|
// 折叠同级标题
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "foldSameLevelHeading",
|
||||||
|
icon: "iconContract",
|
||||||
|
label: window.siyuan.languages.foldSameLevelHeading,
|
||||||
|
accelerator: "⌥" + window.siyuan.languages.clickArrow,
|
||||||
|
click: () => this.collapseSameLevel(element, false)
|
||||||
|
}).element);
|
||||||
|
|
||||||
|
// 全部展开
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "expandAll",
|
||||||
|
icon: "iconExpand",
|
||||||
|
label: window.siyuan.languages.expandAll,
|
||||||
|
click: () => {
|
||||||
|
this.tree.expandAll();
|
||||||
|
this.saveExpendIds();
|
||||||
|
}
|
||||||
|
}).element);
|
||||||
|
|
||||||
|
// 全部折叠
|
||||||
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
|
id: "foldAll",
|
||||||
|
icon: "iconContract",
|
||||||
|
label: window.siyuan.languages.foldAll,
|
||||||
|
click: () => {
|
||||||
|
this.tree.collapseAll();
|
||||||
|
this.saveExpendIds();
|
||||||
|
}
|
||||||
|
}).element);
|
||||||
|
|
||||||
|
window.siyuan.menus.menu.popup({
|
||||||
|
x: event.clientX,
|
||||||
|
y: event.clientY
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private getProtyleAndBlockElement(element: HTMLElement) {
|
||||||
|
const id = element.getAttribute("data-node-id");
|
||||||
|
let protyle: IProtyle;
|
||||||
|
let blockElement: HTMLElement;
|
||||||
|
getAllModels().editor.find(editItem => {
|
||||||
|
if (editItem.editor.protyle.block.rootID === this.blockId) {
|
||||||
|
protyle = editItem.editor.protyle;
|
||||||
|
blockElement = protyle.wysiwyg.element.querySelector(`[data-node-id="${id}"]`);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!protyle || !blockElement) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
protyle, blockElement
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成标题级别转换菜单项
|
||||||
|
*/
|
||||||
|
private genHeadingTransform(id: string, level: number) {
|
||||||
|
return {
|
||||||
|
id: "heading" + level,
|
||||||
|
iconHTML: "",
|
||||||
|
icon: "iconHeading" + level,
|
||||||
|
label: window.siyuan.languages["heading" + level],
|
||||||
|
click: () => {
|
||||||
|
let protyle: IProtyle;
|
||||||
|
getAllModels().editor.find(editItem => {
|
||||||
|
if (editItem.editor.protyle.block.rootID === this.blockId) {
|
||||||
|
protyle = editItem.editor.protyle;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
if (!protyle) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
fetchPost("/api/block/getHeadingLevelTransaction", {
|
||||||
|
id,
|
||||||
|
level
|
||||||
|
}, (response) => {
|
||||||
|
response.data.doOperations.forEach((operation: any, index: number) => {
|
||||||
|
protyle.wysiwyg.element.querySelectorAll(`[data-node-id="${operation.id}"]`).forEach((itemElement: HTMLElement) => {
|
||||||
|
itemElement.outerHTML = operation.data;
|
||||||
|
});
|
||||||
|
// 使用 outer 后元素需要重新查询
|
||||||
|
protyle.wysiwyg.element.querySelectorAll(`[data-node-id="${operation.id}"]`).forEach((itemElement: HTMLElement) => {
|
||||||
|
mathRender(itemElement);
|
||||||
|
});
|
||||||
|
if (index === 0) {
|
||||||
|
const focusElement = protyle.wysiwyg.element.querySelector(`[data-node-id="${operation.id}"]`);
|
||||||
|
if (focusElement) {
|
||||||
|
focusElement.scrollIntoView({behavior: "smooth", block: "center"});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
transaction(protyle, response.data.doOperations, response.data.undoOperations);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ import {MenuItem} from "../../menus/Menu";
|
||||||
import {App} from "../../index";
|
import {App} from "../../index";
|
||||||
import {openTagMenu} from "../../menus/tag";
|
import {openTagMenu} from "../../menus/tag";
|
||||||
import {hasClosestByClassName} from "../../protyle/util/hasClosest";
|
import {hasClosestByClassName} from "../../protyle/util/hasClosest";
|
||||||
|
import {Constants} from "../../constants";
|
||||||
|
|
||||||
export class Tag extends Model {
|
export class Tag extends Model {
|
||||||
private openNodes: string[];
|
private openNodes: string[];
|
||||||
|
|
@ -174,17 +175,19 @@ export class Tag extends Model {
|
||||||
target = target.parentElement;
|
target = target.parentElement;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.update();
|
this.update(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public update() {
|
public update(ignoreMaxListHint = true) {
|
||||||
const element = this.element.querySelector('.block__icon[data-type="refresh"] svg');
|
const element = this.element.querySelector('.block__icon[data-type="refresh"] svg');
|
||||||
if (element.classList.contains("fn__rotate")) {
|
if (element.classList.contains("fn__rotate")) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
element.classList.add("fn__rotate");
|
element.classList.add("fn__rotate");
|
||||||
fetchPost("/api/tag/getTag", {
|
fetchPost("/api/tag/getTag", {
|
||||||
sort: window.siyuan.config.tag.sort
|
sort: window.siyuan.config.tag.sort,
|
||||||
|
app: Constants.SIYUAN_APPID,
|
||||||
|
ignoreMaxListHint
|
||||||
}, response => {
|
}, response => {
|
||||||
if (this.openNodes) {
|
if (this.openNodes) {
|
||||||
this.openNodes = this.tree.getExpandIds();
|
this.openNodes = this.tree.getExpandIds();
|
||||||
|
|
|
||||||
|
|
@ -3,11 +3,13 @@ import {Tab} from "../Tab";
|
||||||
import {Graph} from "./Graph";
|
import {Graph} from "./Graph";
|
||||||
import {Outline} from "./Outline";
|
import {Outline} from "./Outline";
|
||||||
import {fixWndFlex1, getInstanceById, getWndByLayout, saveLayout, switchWnd} from "../util";
|
import {fixWndFlex1, getInstanceById, getWndByLayout, saveLayout, switchWnd} from "../util";
|
||||||
import {resizeTabs} from "../tabUtil";
|
import {getDockByType, resizeTabs} from "../tabUtil";
|
||||||
import {Backlink} from "./Backlink";
|
import {Backlink} from "./Backlink";
|
||||||
import {App} from "../../index";
|
import {App} from "../../index";
|
||||||
import {Wnd} from "../Wnd";
|
import {Wnd} from "../Wnd";
|
||||||
import {fetchSyncPost} from "../../util/fetch";
|
import {fetchSyncPost} from "../../util/fetch";
|
||||||
|
import {Files} from "./Files";
|
||||||
|
import {Editor} from "../../editor";
|
||||||
|
|
||||||
export const openBacklink = async (options: {
|
export const openBacklink = async (options: {
|
||||||
app: App,
|
app: App,
|
||||||
|
|
@ -234,3 +236,23 @@ export const clearOBG = () => {
|
||||||
item.render(undefined);
|
item.render(undefined);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const selectOpenTab = async () => {
|
||||||
|
const dockFile = getDockByType("file");
|
||||||
|
if (!dockFile) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
const files = dockFile.data.file as Files;
|
||||||
|
const element = document.querySelector(".layout__wnd--active > .fn__flex > .layout-tab-bar > .item--focus") ||
|
||||||
|
document.querySelector("ul.layout-tab-bar > .item--focus");
|
||||||
|
if (element) {
|
||||||
|
const tab = getInstanceById(element.getAttribute("data-id")) as Tab;
|
||||||
|
if (tab && tab.model instanceof Editor) {
|
||||||
|
tab.model.editor.protyle.wysiwyg.element.blur();
|
||||||
|
tab.model.editor.protyle.title.editElement.blur();
|
||||||
|
await files.selectItem(tab.model.editor.protyle.notebookId, tab.model.editor.protyle.path);
|
||||||
|
files.lastSelectedElement = files.element.querySelector(".b3-list-item--focus");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dockFile.toggleModel("file", true);
|
||||||
|
};
|
||||||
|
|
|
||||||
|
|
@ -39,12 +39,12 @@ export const initStatus = (isWindow = false) => {
|
||||||
break;
|
break;
|
||||||
} else if (target.classList.contains("status__backgroundtask")) {
|
} else if (target.classList.contains("status__backgroundtask")) {
|
||||||
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
||||||
window.siyuan.menus.menu.element.getAttribute("data-name") === "statusBackgroundTask") {
|
window.siyuan.menus.menu.element.getAttribute("data-name") === Constants.MENU_STATUS_BACKGROUND_TASK) {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
window.siyuan.menus.menu.element.setAttribute("data-name", "statusBackgroundTask");
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_STATUS_BACKGROUND_TASK);
|
||||||
JSON.parse(target.getAttribute("data-tasks")).forEach((item: { action: string }) => {
|
JSON.parse(target.getAttribute("data-tasks")).forEach((item: { action: string }) => {
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
type: "readonly",
|
type: "readonly",
|
||||||
|
|
@ -58,12 +58,12 @@ export const initStatus = (isWindow = false) => {
|
||||||
break;
|
break;
|
||||||
} else if (target.id === "statusHelp") {
|
} else if (target.id === "statusHelp") {
|
||||||
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
||||||
window.siyuan.menus.menu.element.getAttribute("data-name") === "statusHelp") {
|
window.siyuan.menus.menu.element.getAttribute("data-name") === Constants.MENU_STATUS_HELP) {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
window.siyuan.menus.menu.element.setAttribute("data-name", "statusHelp");
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_STATUS_HELP);
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
label: window.siyuan.languages.userGuide,
|
label: window.siyuan.languages.userGuide,
|
||||||
icon: "iconHelp",
|
icon: "iconHelp",
|
||||||
|
|
|
||||||
|
|
@ -75,12 +75,12 @@ export const initBar = (app: App) => {
|
||||||
break;
|
break;
|
||||||
} else if (targetId === "barMore") {
|
} else if (targetId === "barMore") {
|
||||||
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
||||||
window.siyuan.menus.menu.element.getAttribute("data-name") === "barmore") {
|
window.siyuan.menus.menu.element.getAttribute("data-name") === Constants.MENU_BAR_MORE) {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
window.siyuan.menus.menu.element.setAttribute("data-name", "barmore");
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_BAR_MORE);
|
||||||
(target.getAttribute("data-hideids") || "").split(",").forEach((itemId) => {
|
(target.getAttribute("data-hideids") || "").split(",").forEach((itemId) => {
|
||||||
const hideElement = toolbarElement.querySelector("#" + itemId);
|
const hideElement = toolbarElement.querySelector("#" + itemId);
|
||||||
const useElement = hideElement.querySelector("use");
|
const useElement = hideElement.querySelector("use");
|
||||||
|
|
@ -127,12 +127,12 @@ export const initBar = (app: App) => {
|
||||||
break;
|
break;
|
||||||
} else if (targetId === "barMode") {
|
} else if (targetId === "barMode") {
|
||||||
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
||||||
window.siyuan.menus.menu.element.getAttribute("data-name") === "barmode") {
|
window.siyuan.menus.menu.element.getAttribute("data-name") === Constants.MENU_BAR_MODE) {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
window.siyuan.menus.menu.element.setAttribute("data-name", "barmode");
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_BAR_MODE);
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
id: "themeLight",
|
id: "themeLight",
|
||||||
label: window.siyuan.languages.themeLight,
|
label: window.siyuan.languages.themeLight,
|
||||||
|
|
@ -191,12 +191,12 @@ export const initBar = (app: App) => {
|
||||||
break;
|
break;
|
||||||
} else if (targetId === "barZoom") {
|
} else if (targetId === "barZoom") {
|
||||||
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
||||||
window.siyuan.menus.menu.element.getAttribute("data-name") === "barZoom") {
|
window.siyuan.menus.menu.element.getAttribute("data-name") === Constants.MENU_BAR_ZOOM) {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
window.siyuan.menus.menu.element.setAttribute("data-name", "barZoom");
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_BAR_ZOOM);
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
label: window.siyuan.languages.zoomIn,
|
label: window.siyuan.languages.zoomIn,
|
||||||
icon: "iconZoomIn",
|
icon: "iconZoomIn",
|
||||||
|
|
|
||||||
|
|
@ -578,7 +578,7 @@ export const layoutToJSON = (layout: Layout | Wnd | Tab | Model, json: any, brea
|
||||||
json.blockId = layout.editor.protyle.block.id;
|
json.blockId = layout.editor.protyle.block.id;
|
||||||
json.rootId = layout.editor.protyle.block.rootID;
|
json.rootId = layout.editor.protyle.block.rootID;
|
||||||
json.mode = layout.editor.protyle.preview.element.classList.contains("fn__none") ? "wysiwyg" : "preview";
|
json.mode = layout.editor.protyle.preview.element.classList.contains("fn__none") ? "wysiwyg" : "preview";
|
||||||
json.action = layout.editor.protyle.block.showAll ? Constants.CB_GET_ALL : Constants.CB_GET_SCROLL;
|
json.action = (layout.editor.protyle.block.showAll && layout.editor.protyle.block.id !== layout.editor.protyle.block.rootID) ? Constants.CB_GET_ALL : Constants.CB_GET_SCROLL;
|
||||||
json.instance = "Editor";
|
json.instance = "Editor";
|
||||||
} else if (layout instanceof Asset) {
|
} else if (layout instanceof Asset) {
|
||||||
json.path = layout.path;
|
json.path = layout.path;
|
||||||
|
|
@ -744,13 +744,20 @@ export const newModelByInitData = (app: App, tab: Tab, json: any) => {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else if (json.instance === "Editor") {
|
} else if (json.instance === "Editor") {
|
||||||
|
if (json.rootId === json.blockId && json.action) {
|
||||||
|
if (typeof json.action === "string") {
|
||||||
|
json.action = json.action.replace(Constants.CB_GET_ALL, "");
|
||||||
|
} else if (typeof json.action === "object" && Array.isArray(json.action)) {
|
||||||
|
json.action = json.action.filter((item: string) => item !== Constants.CB_GET_ALL);
|
||||||
|
}
|
||||||
|
}
|
||||||
model = new Editor({
|
model = new Editor({
|
||||||
app,
|
app,
|
||||||
tab,
|
tab,
|
||||||
rootId: json.rootId,
|
rootId: json.rootId,
|
||||||
blockId: json.blockId,
|
blockId: json.blockId,
|
||||||
mode: json.mode,
|
mode: json.mode,
|
||||||
action: typeof json.action === "string" ? [json.action] : json.action,
|
action: typeof json.action === "string" ? (json.action ? [json.action, Constants.CB_GET_FOCUS] : [Constants.CB_GET_FOCUS]) : json.action.concat(Constants.CB_GET_FOCUS),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return model;
|
return model;
|
||||||
|
|
|
||||||
|
|
@ -89,9 +89,11 @@ export class Menu {
|
||||||
|
|
||||||
public addItem(option: IMenu) {
|
public addItem(option: IMenu) {
|
||||||
const menuItem = new MenuItem(option);
|
const menuItem = new MenuItem(option);
|
||||||
|
if (menuItem) {
|
||||||
this.append(menuItem.element, option.index);
|
this.append(menuItem.element, option.index);
|
||||||
return menuItem.element;
|
return menuItem.element;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public removeScrollEvent() {
|
public removeScrollEvent() {
|
||||||
window.removeEventListener(isMobile() ? "touchmove" : this.wheelEvent, this.preventDefault, false);
|
window.removeEventListener(isMobile() ? "touchmove" : this.wheelEvent, this.preventDefault, false);
|
||||||
|
|
@ -120,7 +122,7 @@ export class Menu {
|
||||||
this.element.classList.remove("b3-menu--list", "b3-menu--fullscreen");
|
this.element.classList.remove("b3-menu--list", "b3-menu--fullscreen");
|
||||||
this.element.removeAttribute("style"); // zIndex
|
this.element.removeAttribute("style"); // zIndex
|
||||||
this.element.removeAttribute("data-name"); // 标识再次点击不消失
|
this.element.removeAttribute("data-name"); // 标识再次点击不消失
|
||||||
this.element.removeAttribute("data-from"); // 标识是否在浮窗内打开
|
this.element.removeAttribute("data-from"); // 标识菜单入口
|
||||||
this.data = undefined; // 移除数据
|
this.data = undefined; // 移除数据
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -236,7 +238,7 @@ export class MenuItem {
|
||||||
html = `<svg class="b3-menu__icon ${options.iconClass || ""}" style="${options.icon === "iconClose" ? "height:10px;" : ""}"><use xlink:href="#${options.icon || ""}"></use></svg>${html}`;
|
html = `<svg class="b3-menu__icon ${options.iconClass || ""}" style="${options.icon === "iconClose" ? "height:10px;" : ""}"><use xlink:href="#${options.icon || ""}"></use></svg>${html}`;
|
||||||
}
|
}
|
||||||
if (options.accelerator) {
|
if (options.accelerator) {
|
||||||
html += `<span class="b3-menu__accelerator">${updateHotkeyTip(options.accelerator)}</span>`;
|
html += `<span class="b3-menu__accelerator b3-menu__accelerator--hotkey">${updateHotkeyTip(options.accelerator)}</span>`;
|
||||||
}
|
}
|
||||||
if (options.action) {
|
if (options.action) {
|
||||||
html += `<svg class="b3-menu__action${options.action === "iconCloseRound" ? " b3-menu__action--close" : ""}"><use xlink:href="#${options.action}"></use></svg>`;
|
html += `<svg class="b3-menu__action${options.action === "iconCloseRound" ? " b3-menu__action--close" : ""}"><use xlink:href="#${options.action}"></use></svg>`;
|
||||||
|
|
@ -258,7 +260,7 @@ export class MenuItem {
|
||||||
submenuElement.classList.add("b3-menu__submenu");
|
submenuElement.classList.add("b3-menu__submenu");
|
||||||
submenuElement.innerHTML = '<div class="b3-menu__items"></div>';
|
submenuElement.innerHTML = '<div class="b3-menu__items"></div>';
|
||||||
options.submenu.forEach((item) => {
|
options.submenu.forEach((item) => {
|
||||||
submenuElement.firstElementChild.append(new MenuItem(item).element);
|
submenuElement.firstElementChild.append(new MenuItem(item)?.element || "");
|
||||||
});
|
});
|
||||||
this.element.insertAdjacentHTML("beforeend", '<svg class="b3-menu__icon b3-menu__icon--small"><use xlink:href="#iconRight"></use></svg>');
|
this.element.insertAdjacentHTML("beforeend", '<svg class="b3-menu__icon b3-menu__icon--small"><use xlink:href="#iconRight"></use></svg>');
|
||||||
this.element.append(submenuElement);
|
this.element.append(submenuElement);
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ import {Constants} from "../constants";
|
||||||
|
|
||||||
export const openBookmarkMenu = (element: HTMLElement, event: MouseEvent, bookmarkObj: Bookmark | MobileBookmarks) => {
|
export const openBookmarkMenu = (element: HTMLElement, event: MouseEvent, bookmarkObj: Bookmark | MobileBookmarks) => {
|
||||||
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
||||||
window.siyuan.menus.menu.element.getAttribute("data-name") === "bookmarkMenu") {
|
window.siyuan.menus.menu.element.getAttribute("data-name") === Constants.MENU_BOOKMARK) {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -92,6 +92,6 @@ export const openBookmarkMenu = (element: HTMLElement, event: MouseEvent, bookma
|
||||||
}
|
}
|
||||||
}).element);
|
}).element);
|
||||||
}
|
}
|
||||||
window.siyuan.menus.menu.element.setAttribute("data-name", "bookmarkMenu");
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_BOOKMARK);
|
||||||
window.siyuan.menus.menu.popup({x: event.clientX - 11, y: event.clientY + 11, h: 22, w: 12});
|
window.siyuan.menus.menu.popup({x: event.clientX - 11, y: event.clientY + 11, h: 22, w: 12});
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ import {confirmDialog} from "../dialog/confirmDialog";
|
||||||
import {getSearch, isMobile, isValidAttrName} from "../util/functions";
|
import {getSearch, isMobile, isValidAttrName} from "../util/functions";
|
||||||
import {isLocalPath, movePathTo, moveToPath, pathPosix} from "../util/pathName";
|
import {isLocalPath, movePathTo, moveToPath, pathPosix} from "../util/pathName";
|
||||||
import {MenuItem} from "./Menu";
|
import {MenuItem} from "./Menu";
|
||||||
import {saveExport} from "../protyle/export";
|
import {onExport, saveExport} from "../protyle/export";
|
||||||
import {isInAndroid, isInHarmony, openByMobile, writeText} from "../protyle/util/compatibility";
|
import {isInAndroid, isInHarmony, openByMobile, writeText} from "../protyle/util/compatibility";
|
||||||
import {fetchPost, fetchSyncPost} from "../util/fetch";
|
import {fetchPost, fetchSyncPost} from "../util/fetch";
|
||||||
import {hideMessage, showMessage} from "../dialog/message";
|
import {hideMessage, showMessage} from "../dialog/message";
|
||||||
|
|
@ -24,6 +24,8 @@ import {openAssetNewWindow} from "../window/openNewWindow";
|
||||||
import {escapeHtml} from "../util/escape";
|
import {escapeHtml} from "../util/escape";
|
||||||
import {copyTextByType} from "../protyle/toolbar/util";
|
import {copyTextByType} from "../protyle/toolbar/util";
|
||||||
import {hideElements} from "../protyle/ui/hideElements";
|
import {hideElements} from "../protyle/ui/hideElements";
|
||||||
|
import {Protyle} from "../protyle";
|
||||||
|
import {getAllEditor} from "../layout/getAll";
|
||||||
|
|
||||||
const bindAttrInput = (inputElement: HTMLInputElement, id: string) => {
|
const bindAttrInput = (inputElement: HTMLInputElement, id: string) => {
|
||||||
inputElement.addEventListener("change", () => {
|
inputElement.addEventListener("change", () => {
|
||||||
|
|
@ -160,6 +162,20 @@ export const openFileAttr = (attrs: IObject, focusName = "bookmark", protyle?: I
|
||||||
let notifyHTML = "";
|
let notifyHTML = "";
|
||||||
let hasAV = false;
|
let hasAV = false;
|
||||||
const range = getSelection().rangeCount > 0 ? getSelection().getRangeAt(0) : null;
|
const range = getSelection().rangeCount > 0 ? getSelection().getRangeAt(0) : null;
|
||||||
|
let ghostProtyle: Protyle;
|
||||||
|
if (!protyle) {
|
||||||
|
getAllEditor().find(item => {
|
||||||
|
if (attrs.id === item.protyle.block.rootID) {
|
||||||
|
protyle = item.protyle;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!protyle) {
|
||||||
|
ghostProtyle = new Protyle(window.siyuan.ws.app, document.createElement("div"), {
|
||||||
|
blockId: attrs.id,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
Object.keys(attrs).forEach(item => {
|
Object.keys(attrs).forEach(item => {
|
||||||
if (Constants.CUSTOM_RIFF_DECKS === item || item.startsWith("custom-sy-")) {
|
if (Constants.CUSTOM_RIFF_DECKS === item || item.startsWith("custom-sy-")) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -247,6 +263,8 @@ export const openFileAttr = (attrs: IObject, focusName = "bookmark", protyle?: I
|
||||||
focusByRange(range);
|
focusByRange(range);
|
||||||
if (protyle) {
|
if (protyle) {
|
||||||
hideElements(["select"], protyle);
|
hideElements(["select"], protyle);
|
||||||
|
} else {
|
||||||
|
ghostProtyle.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
@ -266,8 +284,8 @@ export const openFileAttr = (attrs: IObject, focusName = "bookmark", protyle?: I
|
||||||
target.classList.add("item--focus");
|
target.classList.add("item--focus");
|
||||||
dialog.element.querySelectorAll(".custom-attr").forEach((item: HTMLElement) => {
|
dialog.element.querySelectorAll(".custom-attr").forEach((item: HTMLElement) => {
|
||||||
if (item.dataset.type === target.dataset.type) {
|
if (item.dataset.type === target.dataset.type) {
|
||||||
if (item.dataset.type === "NodeAttributeView" && item.innerHTML === "" && protyle) {
|
if (item.dataset.type === "NodeAttributeView" && item.innerHTML === "") {
|
||||||
renderAVAttribute(item, attrs.id, protyle);
|
renderAVAttribute(item, attrs.id, protyle || ghostProtyle.protyle);
|
||||||
}
|
}
|
||||||
item.classList.remove("fn__none");
|
item.classList.remove("fn__none");
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -370,7 +388,7 @@ export const openFileAttr = (attrs: IObject, focusName = "bookmark", protyle?: I
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
export const openAttr = (nodeElement: Element, focusName = "bookmark", protyle?: IProtyle) => {
|
export const openAttr = (nodeElement: Element, focusName = "bookmark", protyle: IProtyle) => {
|
||||||
if (nodeElement.getAttribute("data-type") === "NodeThematicBreak") {
|
if (nodeElement.getAttribute("data-type") === "NodeThematicBreak") {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -734,7 +752,34 @@ export const exportMd = (id: string) => {
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
/// #else
|
||||||
|
{
|
||||||
|
id: "exportPDF",
|
||||||
|
label: window.siyuan.languages.print,
|
||||||
|
icon: "iconPDF",
|
||||||
|
ignore: !isInAndroid() && !isInHarmony(),
|
||||||
|
click: () => {
|
||||||
|
const msId = showMessage(window.siyuan.languages.exporting);
|
||||||
|
const localData = window.siyuan.storage[Constants.LOCAL_EXPORTPDF];
|
||||||
|
fetchPost("/api/export/exportPreviewHTML", {
|
||||||
|
id,
|
||||||
|
keepFold: localData.keepFold,
|
||||||
|
merge: localData.mergeSubdocs,
|
||||||
|
}, async response => {
|
||||||
|
const html = await onExport(response, undefined, {type: "pdf", id});
|
||||||
|
if (isInAndroid()) {
|
||||||
|
window.JSAndroid.print(html);
|
||||||
|
} else if (isInHarmony()) {
|
||||||
|
window.JSHarmony.print(html);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
hideMessage(msId);
|
||||||
|
}, 3000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
/// #endif
|
/// #endif
|
||||||
]
|
]
|
||||||
}).element;
|
}).element;
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@ import {openByMobile} from "../protyle/util/compatibility";
|
||||||
import {addFilesToDatabase} from "../protyle/render/av/addToDatabase";
|
import {addFilesToDatabase} from "../protyle/render/av/addToDatabase";
|
||||||
|
|
||||||
const initMultiMenu = (selectItemElements: Element[], app: App) => {
|
const initMultiMenu = (selectItemElements: Element[], app: App) => {
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-from", Constants.MENU_FROM_DOC_TREE_MORE_ITEMS);
|
||||||
const items: { id: string, path: string }[] = [];
|
const items: { id: string, path: string }[] = [];
|
||||||
const blockIDs: string[] = [];
|
const blockIDs: string[] = [];
|
||||||
const fileItemElements = selectItemElements.filter(item => {
|
const fileItemElements = selectItemElements.filter(item => {
|
||||||
|
|
@ -191,6 +192,7 @@ const initMultiMenu = (selectItemElements: Element[], app: App) => {
|
||||||
|
|
||||||
export const initNavigationMenu = (app: App, liElement: HTMLElement) => {
|
export const initNavigationMenu = (app: App, liElement: HTMLElement) => {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_DOC_TREE_MORE);
|
||||||
const fileElement = hasClosestByTag(liElement, "DIV");
|
const fileElement = hasClosestByTag(liElement, "DIV");
|
||||||
if (!fileElement) {
|
if (!fileElement) {
|
||||||
return window.siyuan.menus.menu;
|
return window.siyuan.menus.menu;
|
||||||
|
|
@ -207,6 +209,7 @@ export const initNavigationMenu = (app: App, liElement: HTMLElement) => {
|
||||||
if (selectItemElements.length > 1) {
|
if (selectItemElements.length > 1) {
|
||||||
return initMultiMenu(selectItemElements, app);
|
return initMultiMenu(selectItemElements, app);
|
||||||
}
|
}
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-from", Constants.MENU_FROM_DOC_TREE_MORE_NOTEBOOK);
|
||||||
const notebookId = liElement.parentElement.getAttribute("data-url");
|
const notebookId = liElement.parentElement.getAttribute("data-url");
|
||||||
const name = getNotebookName(notebookId);
|
const name = getNotebookName(notebookId);
|
||||||
if (!window.siyuan.config.readonly) {
|
if (!window.siyuan.config.readonly) {
|
||||||
|
|
@ -422,6 +425,7 @@ export const initNavigationMenu = (app: App, liElement: HTMLElement) => {
|
||||||
|
|
||||||
export const initFileMenu = (app: App, notebookId: string, pathString: string, liElement: Element) => {
|
export const initFileMenu = (app: App, notebookId: string, pathString: string, liElement: Element) => {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_DOC_TREE_MORE);
|
||||||
const fileElement = hasClosestByTag(liElement, "DIV");
|
const fileElement = hasClosestByTag(liElement, "DIV");
|
||||||
if (!fileElement) {
|
if (!fileElement) {
|
||||||
return window.siyuan.menus.menu;
|
return window.siyuan.menus.menu;
|
||||||
|
|
@ -713,7 +717,7 @@ export const initFileMenu = (app: App, notebookId: string, pathString: string, l
|
||||||
separatorPosition: "top",
|
separatorPosition: "top",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
window.siyuan.menus.menu.element.setAttribute("data-name", "docTreeMore");
|
window.siyuan.menus.menu.element.setAttribute("data-from", Constants.MENU_FROM_DOC_TREE_MORE_DOC);
|
||||||
return window.siyuan.menus.menu;
|
return window.siyuan.menus.menu;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,10 @@
|
||||||
import {
|
import {
|
||||||
hasClosestBlock,
|
hasClosestBlock,
|
||||||
hasClosestByAttribute,
|
hasClosestByAttribute,
|
||||||
hasClosestByClassName, hasClosestByTag,
|
hasClosestByClassName,
|
||||||
hasTopClosestByClassName
|
hasClosestByTag,
|
||||||
|
hasTopClosestByClassName,
|
||||||
|
isInEmbedBlock
|
||||||
} from "../protyle/util/hasClosest";
|
} from "../protyle/util/hasClosest";
|
||||||
import {MenuItem} from "./Menu";
|
import {MenuItem} from "./Menu";
|
||||||
import {focusBlock, focusByRange, focusByWbr, getEditorRange, selectAll,} from "../protyle/util/selection";
|
import {focusBlock, focusByRange, focusByWbr, getEditorRange, selectAll,} from "../protyle/util/selection";
|
||||||
|
|
@ -24,13 +26,7 @@ import {transaction, updateTransaction} from "../protyle/wysiwyg/transaction";
|
||||||
import {openMenu} from "./commonMenuItem";
|
import {openMenu} from "./commonMenuItem";
|
||||||
import {fetchPost, fetchSyncPost} from "../util/fetch";
|
import {fetchPost, fetchSyncPost} from "../util/fetch";
|
||||||
import {Constants} from "../constants";
|
import {Constants} from "../constants";
|
||||||
import {
|
import {copyPlainText, readClipboard, setStorageVal, updateHotkeyTip, writeText} from "../protyle/util/compatibility";
|
||||||
copyPlainText,
|
|
||||||
readClipboard,
|
|
||||||
setStorageVal,
|
|
||||||
updateHotkeyTip,
|
|
||||||
writeText
|
|
||||||
} from "../protyle/util/compatibility";
|
|
||||||
import {preventScroll} from "../protyle/scroll/preventScroll";
|
import {preventScroll} from "../protyle/scroll/preventScroll";
|
||||||
import {onGet} from "../protyle/util/onGet";
|
import {onGet} from "../protyle/util/onGet";
|
||||||
import {getAllModels} from "../layout/getAll";
|
import {getAllModels} from "../layout/getAll";
|
||||||
|
|
@ -99,7 +95,7 @@ const renderAssetList = (element: Element, k: string, position: IPosition, exts:
|
||||||
};
|
};
|
||||||
|
|
||||||
export const assetMenu = (protyle: IProtyle, position: IPosition, callback?: (url: string, name: string) => void, exts?: string[]) => {
|
export const assetMenu = (protyle: IProtyle, position: IPosition, callback?: (url: string, name: string) => void, exts?: string[]) => {
|
||||||
const menu = new Menu("background-asset");
|
const menu = new Menu(Constants.MENU_BACKGROUND_ASSET);
|
||||||
if (menu.isOpen) {
|
if (menu.isOpen) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -218,6 +214,7 @@ export const fileAnnotationRefMenu = (protyle: IProtyle, refElement: HTMLElement
|
||||||
const id = nodeElement.getAttribute("data-node-id");
|
const id = nodeElement.getAttribute("data-node-id");
|
||||||
let oldHTML = nodeElement.outerHTML;
|
let oldHTML = nodeElement.outerHTML;
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_INLINE_FILE_ANNOTATION_REF);
|
||||||
let anchorElement: HTMLInputElement;
|
let anchorElement: HTMLInputElement;
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
id: "idAndAnchor",
|
id: "idAndAnchor",
|
||||||
|
|
@ -352,6 +349,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
|
||||||
const id = nodeElement.getAttribute("data-node-id");
|
const id = nodeElement.getAttribute("data-node-id");
|
||||||
let oldHTML = nodeElement.outerHTML;
|
let oldHTML = nodeElement.outerHTML;
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_INLINE_REF);
|
||||||
if (!protyle.disabled) {
|
if (!protyle.disabled) {
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
id: "anchor",
|
id: "anchor",
|
||||||
|
|
@ -710,6 +708,7 @@ export const refMenu = (protyle: IProtyle, element: HTMLElement) => {
|
||||||
export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
|
export const contentMenu = (protyle: IProtyle, nodeElement: Element) => {
|
||||||
const range = getEditorRange(nodeElement);
|
const range = getEditorRange(nodeElement);
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_INLINE_CONTEXT);
|
||||||
/// #if MOBILE
|
/// #if MOBILE
|
||||||
protyle.toolbar.showContent(protyle, range, nodeElement);
|
protyle.toolbar.showContent(protyle, range, nodeElement);
|
||||||
/// #else
|
/// #else
|
||||||
|
|
@ -1021,7 +1020,7 @@ export const zoomOut = (options: {
|
||||||
}
|
}
|
||||||
focusBlock(showElement);
|
focusBlock(showElement);
|
||||||
const resizeObserver = new ResizeObserver(() => {
|
const resizeObserver = new ResizeObserver(() => {
|
||||||
scrollCenter(options.protyle, focusElement, true, "smooth");
|
scrollCenter(options.protyle, focusElement, true);
|
||||||
});
|
});
|
||||||
resizeObserver.observe(options.protyle.wysiwyg.element);
|
resizeObserver.observe(options.protyle.wysiwyg.element);
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
|
|
@ -1078,6 +1077,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
|
||||||
clientY: number
|
clientY: number
|
||||||
}) => {
|
}) => {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_INLINE_IMG);
|
||||||
const nodeElement = hasClosestBlock(assetElement);
|
const nodeElement = hasClosestBlock(assetElement);
|
||||||
if (!nodeElement) {
|
if (!nodeElement) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -1087,6 +1087,10 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
|
||||||
const imgElement = assetElement.querySelector("img");
|
const imgElement = assetElement.querySelector("img");
|
||||||
const titleElement = assetElement.querySelector(".protyle-action__title span") as HTMLElement;
|
const titleElement = assetElement.querySelector(".protyle-action__title span") as HTMLElement;
|
||||||
const html = nodeElement.outerHTML;
|
const html = nodeElement.outerHTML;
|
||||||
|
let src = imgElement.getAttribute("src");
|
||||||
|
if (!src) {
|
||||||
|
src = "";
|
||||||
|
}
|
||||||
if (!protyle.disabled) {
|
if (!protyle.disabled) {
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
id: "imageUrlAndTitleAndTooltipText",
|
id: "imageUrlAndTitleAndTooltipText",
|
||||||
|
|
@ -1098,7 +1102,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
|
||||||
<span data-action="copy" class="block__icon block__icon--show b3-tooltips b3-tooltips__e fn__flex-center" aria-label="${window.siyuan.languages.copy}">
|
<span data-action="copy" class="block__icon block__icon--show b3-tooltips b3-tooltips__e fn__flex-center" aria-label="${window.siyuan.languages.copy}">
|
||||||
<svg><use xlink:href="#iconCopy"></use></svg>
|
<svg><use xlink:href="#iconCopy"></use></svg>
|
||||||
</span>
|
</span>
|
||||||
</div><textarea spellcheck="false" style="margin:4px 0;width: ${isMobile() ? "100%" : "360px"}" rows="1" class="b3-text-field">${imgElement.getAttribute("src")}</textarea><div class="fn__hr"></div><div class="fn__flex">
|
</div><textarea spellcheck="false" style="margin:4px 0;width: ${isMobile() ? "100%" : "360px"}" rows="1" class="b3-text-field">${src}</textarea><div class="fn__hr"></div><div class="fn__flex">
|
||||||
<span class="fn__flex-center">${window.siyuan.languages.title}</span>
|
<span class="fn__flex-center">${window.siyuan.languages.title}</span>
|
||||||
<span class="fn__space"></span>
|
<span class="fn__space"></span>
|
||||||
<span data-action="copy" class="block__icon block__icon--show b3-tooltips b3-tooltips__e fn__flex-center" aria-label="${window.siyuan.languages.copy}">
|
<span data-action="copy" class="block__icon block__icon--show b3-tooltips b3-tooltips__e fn__flex-center" aria-label="${window.siyuan.languages.copy}">
|
||||||
|
|
@ -1454,6 +1458,7 @@ export const imgMenu = (protyle: IProtyle, range: Range, assetElement: HTMLEleme
|
||||||
|
|
||||||
export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText = false) => {
|
export const linkMenu = (protyle: IProtyle, linkElement: HTMLElement, focusText = false) => {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_INLINE_A);
|
||||||
const nodeElement = hasClosestBlock(linkElement);
|
const nodeElement = hasClosestBlock(linkElement);
|
||||||
if (!nodeElement) {
|
if (!nodeElement) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -1588,7 +1593,7 @@ style="margin:4px 0;width: ${isMobile() ? "100%" : "360px"}" class="b3-text-fiel
|
||||||
if (protyle.disabled) {
|
if (protyle.disabled) {
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
id: "copyAHref",
|
id: "copyAHref",
|
||||||
label: window.siyuan.languages.copy + " " + window.siyuan.languages.replaceTypes.aHref,
|
label: window.siyuan.languages.copyAHref,
|
||||||
icon: "iconLink",
|
icon: "iconLink",
|
||||||
click() {
|
click() {
|
||||||
writeText(linkAddress);
|
writeText(linkAddress);
|
||||||
|
|
@ -1742,6 +1747,7 @@ style="margin:4px 0;width: ${isMobile() ? "100%" : "360px"}" class="b3-text-fiel
|
||||||
|
|
||||||
export const tagMenu = (protyle: IProtyle, tagElement: HTMLElement) => {
|
export const tagMenu = (protyle: IProtyle, tagElement: HTMLElement) => {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_INLINE_TAG);
|
||||||
const nodeElement = hasClosestBlock(tagElement);
|
const nodeElement = hasClosestBlock(tagElement);
|
||||||
if (!nodeElement) {
|
if (!nodeElement) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -1900,6 +1906,7 @@ export const tagMenu = (protyle: IProtyle, tagElement: HTMLElement) => {
|
||||||
|
|
||||||
export const inlineMathMenu = (protyle: IProtyle, element: Element) => {
|
export const inlineMathMenu = (protyle: IProtyle, element: Element) => {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_INLINE_MATH);
|
||||||
const nodeElement = hasClosestBlock(element);
|
const nodeElement = hasClosestBlock(element);
|
||||||
if (!nodeElement) {
|
if (!nodeElement) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -2433,18 +2440,35 @@ export const tableMenu = (protyle: IProtyle, nodeElement: Element, cellElement:
|
||||||
return {menus, removeMenus, insertMenus, otherMenus, other2Menus};
|
return {menus, removeMenus, insertMenus, otherMenus, other2Menus};
|
||||||
};
|
};
|
||||||
|
|
||||||
export const setFold = (protyle: IProtyle, nodeElement: Element, isOpen?: boolean, isRemove?: boolean, addLoading = true) => {
|
export const setFoldById = (data: {
|
||||||
|
id: string,
|
||||||
|
currentNodeID: string,
|
||||||
|
}, protyle: IProtyle) => {
|
||||||
|
Array.from(protyle.wysiwyg.element.querySelectorAll(`[data-node-id="${data.id}"]`)).find((item: Element) => {
|
||||||
|
if (!isInEmbedBlock(item)) {
|
||||||
|
const operations = setFold(protyle, item, true, false, true, true);
|
||||||
|
operations.doOperations[0].context = {
|
||||||
|
focusId: data.currentNodeID,
|
||||||
|
};
|
||||||
|
transaction(protyle, operations.doOperations, operations.undoOperations);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const setFold = (protyle: IProtyle, nodeElement: Element, isOpen?: boolean,
|
||||||
|
isRemove?: boolean, addLoading = true, getOperations = false) => {
|
||||||
if (nodeElement.getAttribute("data-type") === "NodeListItem" && nodeElement.childElementCount < 4) {
|
if (nodeElement.getAttribute("data-type") === "NodeListItem" && nodeElement.childElementCount < 4) {
|
||||||
// 没有子列表或多个块的列表项不进行折叠
|
// 没有子列表或多个块的列表项不进行折叠
|
||||||
return -1;
|
return {fold: -1};
|
||||||
}
|
}
|
||||||
if (nodeElement.getAttribute("data-type") === "NodeThematicBreak") {
|
if (nodeElement.getAttribute("data-type") === "NodeThematicBreak") {
|
||||||
return -1;
|
return {fold: -1};
|
||||||
}
|
}
|
||||||
const hasFold = nodeElement.getAttribute("fold") === "1";
|
const hasFold = nodeElement.getAttribute("fold") === "1";
|
||||||
if (hasFold) {
|
if (hasFold) {
|
||||||
if (typeof isOpen === "boolean" && !isOpen) {
|
if (typeof isOpen === "boolean" && !isOpen) {
|
||||||
return -1;
|
return {fold: -1};
|
||||||
}
|
}
|
||||||
nodeElement.removeAttribute("fold");
|
nodeElement.removeAttribute("fold");
|
||||||
// https://github.com/siyuan-note/siyuan/issues/4411
|
// https://github.com/siyuan-note/siyuan/issues/4411
|
||||||
|
|
@ -2453,7 +2477,7 @@ export const setFold = (protyle: IProtyle, nodeElement: Element, isOpen?: boolea
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if (typeof isOpen === "boolean" && isOpen) {
|
if (typeof isOpen === "boolean" && isOpen) {
|
||||||
return -1;
|
return {fold: -1};
|
||||||
}
|
}
|
||||||
nodeElement.setAttribute("fold", "1");
|
nodeElement.setAttribute("fold", "1");
|
||||||
// 光标在子列表中,再次 focus 段尾的时候不会变 https://ld246.com/article/1647099132461
|
// 光标在子列表中,再次 focus 段尾的时候不会变 https://ld246.com/article/1647099132461
|
||||||
|
|
@ -2468,41 +2492,49 @@ export const setFold = (protyle: IProtyle, nodeElement: Element, isOpen?: boolea
|
||||||
clearSelect(["img", "av"], nodeElement);
|
clearSelect(["img", "av"], nodeElement);
|
||||||
}
|
}
|
||||||
const id = nodeElement.getAttribute("data-node-id");
|
const id = nodeElement.getAttribute("data-node-id");
|
||||||
|
const doOperations: IOperation[] = [];
|
||||||
|
const undoOperations: IOperation[] = [];
|
||||||
if (nodeElement.getAttribute("data-type") === "NodeHeading") {
|
if (nodeElement.getAttribute("data-type") === "NodeHeading") {
|
||||||
if (hasFold) {
|
if (hasFold) {
|
||||||
if (addLoading) {
|
if (addLoading) {
|
||||||
nodeElement.insertAdjacentHTML("beforeend", '<div spin="1" style="text-align: center"><img width="24px" height="24px" src="/stage/loading-pure.svg"></div>');
|
nodeElement.insertAdjacentHTML("beforeend", '<div spin="1" style="text-align: center"><img width="24px" height="24px" src="/stage/loading-pure.svg"></div>');
|
||||||
}
|
}
|
||||||
transaction(protyle, [{
|
doOperations.push({
|
||||||
action: "unfoldHeading",
|
action: "unfoldHeading",
|
||||||
id,
|
id,
|
||||||
data: isRemove ? "remove" : undefined,
|
data: isRemove ? "remove" : undefined,
|
||||||
}], [{
|
});
|
||||||
|
undoOperations.push({
|
||||||
action: "foldHeading",
|
action: "foldHeading",
|
||||||
id
|
id
|
||||||
}]);
|
});
|
||||||
} else {
|
} else {
|
||||||
transaction(protyle, [{
|
doOperations.push({
|
||||||
action: "foldHeading",
|
action: "foldHeading",
|
||||||
id
|
id
|
||||||
}], [{
|
});
|
||||||
|
undoOperations.push({
|
||||||
action: "unfoldHeading",
|
action: "unfoldHeading",
|
||||||
id
|
id
|
||||||
}]);
|
});
|
||||||
removeFoldHeading(nodeElement);
|
removeFoldHeading(nodeElement);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
transaction(protyle, [{
|
doOperations.push({
|
||||||
action: "setAttrs",
|
action: "setAttrs",
|
||||||
id,
|
id,
|
||||||
data: JSON.stringify({fold: hasFold ? "" : "1"})
|
data: JSON.stringify({fold: hasFold ? "" : "1"})
|
||||||
}], [{
|
});
|
||||||
|
undoOperations.push({
|
||||||
action: "setAttrs",
|
action: "setAttrs",
|
||||||
id,
|
id,
|
||||||
data: JSON.stringify({fold: hasFold ? "1" : ""})
|
data: JSON.stringify({fold: hasFold ? "1" : ""})
|
||||||
}]);
|
});
|
||||||
|
}
|
||||||
|
if (!getOperations) {
|
||||||
|
transaction(protyle, doOperations, undoOperations);
|
||||||
}
|
}
|
||||||
// 折叠后,防止滚动条滚动后调用 get 请求 https://github.com/siyuan-note/siyuan/issues/2248
|
// 折叠后,防止滚动条滚动后调用 get 请求 https://github.com/siyuan-note/siyuan/issues/2248
|
||||||
preventScroll(protyle);
|
preventScroll(protyle);
|
||||||
return !hasFold ? 1 : 0;
|
return {fold: !hasFold ? 1 : 0, undoOperations, doOperations};
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,7 @@ import {getAllWnds} from "../layout/getAll";
|
||||||
import {Asset} from "../asset";
|
import {Asset} from "../asset";
|
||||||
import {writeText} from "../protyle/util/compatibility";
|
import {writeText} from "../protyle/util/compatibility";
|
||||||
import {getAssetName, pathPosix} from "../util/pathName";
|
import {getAssetName, pathPosix} from "../util/pathName";
|
||||||
|
import {Constants} from "../constants";
|
||||||
|
|
||||||
const closeMenu = (tab: Tab) => {
|
const closeMenu = (tab: Tab) => {
|
||||||
const unmodifiedTabs: Tab[] = [];
|
const unmodifiedTabs: Tab[] = [];
|
||||||
|
|
@ -181,6 +182,7 @@ const splitSubMenu = (app: App, tab: Tab) => {
|
||||||
|
|
||||||
export const initTabMenu = (app: App, tab: Tab) => {
|
export const initTabMenu = (app: App, tab: Tab) => {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_TAB);
|
||||||
closeMenu(tab);
|
closeMenu(tab);
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
id: "split",
|
id: "split",
|
||||||
|
|
|
||||||
|
|
@ -5,10 +5,11 @@ import {escapeHtml} from "../util/escape";
|
||||||
import {renameTag} from "../util/noRelyPCFunction";
|
import {renameTag} from "../util/noRelyPCFunction";
|
||||||
import {getDockByType} from "../layout/tabUtil";
|
import {getDockByType} from "../layout/tabUtil";
|
||||||
import {Tag} from "../layout/dock/Tag";
|
import {Tag} from "../layout/dock/Tag";
|
||||||
|
import {Constants} from "../constants";
|
||||||
|
|
||||||
export const openTagMenu = (element: HTMLElement, event: MouseEvent, labelName: string) => {
|
export const openTagMenu = (element: HTMLElement, event: MouseEvent, labelName: string) => {
|
||||||
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
||||||
window.siyuan.menus.menu.element.getAttribute("data-name") === "tagMenu") {
|
window.siyuan.menus.menu.element.getAttribute("data-name") === Constants.MENU_TAG) {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -36,6 +37,6 @@ export const openTagMenu = (element: HTMLElement, event: MouseEvent, labelName:
|
||||||
}, undefined, true);
|
}, undefined, true);
|
||||||
}
|
}
|
||||||
}).element);
|
}).element);
|
||||||
window.siyuan.menus.menu.element.setAttribute("data-name", "tagMenu");
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_TAG);
|
||||||
window.siyuan.menus.menu.popup({x: event.clientX - 11, y: event.clientY + 11, h: 22, w: 12});
|
window.siyuan.menus.menu.popup({x: event.clientX - 11, y: event.clientY + 11, h: 22, w: 12});
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ export const openEditorTab = (app: App, ids: string[], notebookId?: string, path
|
||||||
id: "insertBottom",
|
id: "insertBottom",
|
||||||
icon: "iconLayoutBottom",
|
icon: "iconLayoutBottom",
|
||||||
label: window.siyuan.languages.insertBottom,
|
label: window.siyuan.languages.insertBottom,
|
||||||
accelerator: ids.length === 1 ? "⇧" + window.siyuan.languages.click : "",
|
accelerator: ids.length === 1 ? "⇧⌘" + window.siyuan.languages.click : "",
|
||||||
click: () => {
|
click: () => {
|
||||||
if (notebookId) {
|
if (notebookId) {
|
||||||
openFileById({
|
openFileById({
|
||||||
|
|
|
||||||
|
|
@ -145,13 +145,13 @@ const togglePinDock = (id: string, dock: Dock, icon: string) => {
|
||||||
|
|
||||||
export const workspaceMenu = (app: App, rect: DOMRect) => {
|
export const workspaceMenu = (app: App, rect: DOMRect) => {
|
||||||
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
if (!window.siyuan.menus.menu.element.classList.contains("fn__none") &&
|
||||||
window.siyuan.menus.menu.element.getAttribute("data-name") === "barWorkspace") {
|
window.siyuan.menus.menu.element.getAttribute("data-name") === Constants.MENU_BAR_WORKSPACE) {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
fetchPost("/api/system/getWorkspaces", {}, (response) => {
|
fetchPost("/api/system/getWorkspaces", {}, (response) => {
|
||||||
window.siyuan.menus.menu.remove();
|
window.siyuan.menus.menu.remove();
|
||||||
window.siyuan.menus.menu.element.setAttribute("data-name", "barWorkspace");
|
window.siyuan.menus.menu.element.setAttribute("data-name", Constants.MENU_BAR_WORKSPACE);
|
||||||
if (!window.siyuan.config.readonly) {
|
if (!window.siyuan.config.readonly) {
|
||||||
window.siyuan.menus.menu.append(new MenuItem({
|
window.siyuan.menus.menu.append(new MenuItem({
|
||||||
id: "config",
|
id: "config",
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,6 @@ import {genUUID} from "../../util/genID";
|
||||||
import {openMobileFileById} from "../editor";
|
import {openMobileFileById} from "../editor";
|
||||||
import {unicode2Emoji} from "../../emoji";
|
import {unicode2Emoji} from "../../emoji";
|
||||||
import {mountHelp, newNotebook} from "../../util/mount";
|
import {mountHelp, newNotebook} from "../../util/mount";
|
||||||
import {confirmDialog} from "../../dialog/confirmDialog";
|
|
||||||
import {newFile} from "../../util/newFile";
|
import {newFile} from "../../util/newFile";
|
||||||
import {MenuItem} from "../../menus/Menu";
|
import {MenuItem} from "../../menus/Menu";
|
||||||
import {App} from "../../index";
|
import {App} from "../../index";
|
||||||
|
|
@ -112,6 +111,9 @@ export class MobileFiles extends Model {
|
||||||
filesElement.addEventListener("click", (event: MouseEvent & { target: HTMLElement }) => {
|
filesElement.addEventListener("click", (event: MouseEvent & { target: HTMLElement }) => {
|
||||||
let target = event.target as HTMLElement;
|
let target = event.target as HTMLElement;
|
||||||
while (target && !target.isEqualNode(this.actionsElement)) {
|
while (target && !target.isEqualNode(this.actionsElement)) {
|
||||||
|
if (target.classList.contains("b3-list-item__icon")) {
|
||||||
|
target = target.previousElementSibling as HTMLElement;
|
||||||
|
}
|
||||||
const type = target.getAttribute("data-type");
|
const type = target.getAttribute("data-type");
|
||||||
if (type === "refresh") {
|
if (type === "refresh") {
|
||||||
if (!target.getAttribute("disabled")) {
|
if (!target.getAttribute("disabled")) {
|
||||||
|
|
@ -176,17 +178,6 @@ export class MobileFiles extends Model {
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
break;
|
break;
|
||||||
} else if (type === "remove") {
|
|
||||||
confirmDialog(window.siyuan.languages.deleteOpConfirm,
|
|
||||||
`${window.siyuan.languages.confirmDelete} <b>${escapeHtml(target.parentElement.querySelector(".b3-list-item__text").textContent)}</b>?`, () => {
|
|
||||||
fetchPost("/api/notebook/removeNotebook", {
|
|
||||||
notebook: target.getAttribute("data-url"),
|
|
||||||
callback: Constants.CB_MOUNT_REMOVE
|
|
||||||
});
|
|
||||||
}, undefined, true);
|
|
||||||
event.stopPropagation();
|
|
||||||
event.preventDefault();
|
|
||||||
break;
|
|
||||||
} else if (type === "open") {
|
} else if (type === "open") {
|
||||||
fetchPost("/api/notebook/openNotebook", {
|
fetchPost("/api/notebook/openNotebook", {
|
||||||
notebook: target.getAttribute("data-url")
|
notebook: target.getAttribute("data-url")
|
||||||
|
|
@ -309,14 +300,14 @@ export class MobileFiles extends Model {
|
||||||
private genNotebook(item: INotebook) {
|
private genNotebook(item: INotebook) {
|
||||||
const emojiHTML = `<span class="b3-list-item__icon b3-tooltips b3-tooltips__e" aria-label="${window.siyuan.languages.changeIcon}">${unicode2Emoji(item.icon || window.siyuan.storage[Constants.LOCAL_IMAGES].note)}</span>`;
|
const emojiHTML = `<span class="b3-list-item__icon b3-tooltips b3-tooltips__e" aria-label="${window.siyuan.languages.changeIcon}">${unicode2Emoji(item.icon || window.siyuan.storage[Constants.LOCAL_IMAGES].note)}</span>`;
|
||||||
if (item.closed) {
|
if (item.closed) {
|
||||||
return `<li data-type="open" data-url="${item.id}" class="b3-list-item">
|
return `<li data-url="${item.id}" class="b3-list-item">
|
||||||
<span class="b3-list-item__toggle fn__hidden">
|
<span class="b3-list-item__toggle fn__hidden">
|
||||||
<svg class="b3-list-item__arrow"><use xlink:href="#iconRight"></use></svg>
|
<svg class="b3-list-item__arrow"><use xlink:href="#iconRight"></use></svg>
|
||||||
</span>
|
</span>
|
||||||
${emojiHTML}
|
${emojiHTML}
|
||||||
<span class="b3-list-item__text">${escapeHtml(item.name)}</span>
|
<span class="b3-list-item__text">${escapeHtml(item.name)}</span>
|
||||||
<span data-type="remove" data-url="${item.id}" class="b3-list-item__action${(window.siyuan.config.readonly) ? " fn__none" : ""}">
|
<span data-type="open" data-url="${item.id}" class="b3-list-item__action${(window.siyuan.config.readonly) ? " fn__none" : ""}">
|
||||||
<svg><use xlink:href="#iconTrashcan"></use></svg>
|
<svg><use xlink:href="#iconOpen"></use></svg>
|
||||||
</span>
|
</span>
|
||||||
</li>`;
|
</li>`;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -402,6 +393,12 @@ export class MobileFiles extends Model {
|
||||||
} else {
|
} else {
|
||||||
sourceElement.remove();
|
sourceElement.remove();
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
const parentElement = this.element.querySelector(`ul[data-url="${data.fromNotebook}"] li[data-path="${pathPosix().dirname(data.fromPath)}.sy"]`) as HTMLElement;
|
||||||
|
if (parentElement && parentElement.getAttribute("data-count") === "1") {
|
||||||
|
parentElement.querySelector(".b3-list-item__toggle").classList.add("fn__hidden");
|
||||||
|
parentElement.querySelector(".b3-list-item__arrow").classList.remove("b3-list-item__arrow--open");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
const newElement = this.element.querySelector(`[data-url="${data.toNotebook}"] li[data-path="${data.toPath}"]`) as HTMLElement;
|
const newElement = this.element.querySelector(`[data-url="${data.toNotebook}"] li[data-path="${data.toPath}"]`) as HTMLElement;
|
||||||
// 重新展开移动到的新文件夹
|
// 重新展开移动到的新文件夹
|
||||||
|
|
@ -609,7 +606,8 @@ export class MobileFiles extends Model {
|
||||||
} else if (filePath.startsWith(item.path.replace(".sy", ""))) {
|
} else if (filePath.startsWith(item.path.replace(".sy", ""))) {
|
||||||
const response = await fetchSyncPost("/api/filetree/listDocsByPath", {
|
const response = await fetchSyncPost("/api/filetree/listDocsByPath", {
|
||||||
notebook: data.box,
|
notebook: data.box,
|
||||||
path: item.path
|
path: item.path,
|
||||||
|
app: Constants.SIYUAN_APPID,
|
||||||
});
|
});
|
||||||
newLiElement = await this.selectItem(response.data.box, filePath, response.data, setStorage, isSetCurrent);
|
newLiElement = await this.selectItem(response.data.box, filePath, response.data, setStorage, isSetCurrent);
|
||||||
}
|
}
|
||||||
|
|
@ -646,6 +644,7 @@ export class MobileFiles extends Model {
|
||||||
fetchPost("/api/filetree/listDocsByPath", {
|
fetchPost("/api/filetree/listDocsByPath", {
|
||||||
notebook: notebookId,
|
notebook: notebookId,
|
||||||
path: liElement.getAttribute("data-path"),
|
path: liElement.getAttribute("data-path"),
|
||||||
|
app: Constants.SIYUAN_APPID,
|
||||||
}, response => {
|
}, response => {
|
||||||
if (response.data.path === "/" && response.data.files.length === 0) {
|
if (response.data.path === "/" && response.data.files.length === 0) {
|
||||||
newFile({
|
newFile({
|
||||||
|
|
@ -701,7 +700,8 @@ export class MobileFiles extends Model {
|
||||||
} else {
|
} else {
|
||||||
const response = await fetchSyncPost("/api/filetree/listDocsByPath", {
|
const response = await fetchSyncPost("/api/filetree/listDocsByPath", {
|
||||||
notebook: notebookId,
|
notebook: notebookId,
|
||||||
path: currentPath
|
path: currentPath,
|
||||||
|
app: Constants.SIYUAN_APPID,
|
||||||
});
|
});
|
||||||
liElement = await this.onLsSelect(response.data, filePath, setStorage, isSetCurrent);
|
liElement = await this.onLsSelect(response.data, filePath, setStorage, isSetCurrent);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@ import {MenuItem} from "../../menus/Menu";
|
||||||
import {popSearch} from "../menu/search";
|
import {popSearch} from "../menu/search";
|
||||||
import {App} from "../../index";
|
import {App} from "../../index";
|
||||||
import {openTagMenu} from "../../menus/tag";
|
import {openTagMenu} from "../../menus/tag";
|
||||||
|
import {Constants} from "../../constants";
|
||||||
|
|
||||||
export class MobileTags {
|
export class MobileTags {
|
||||||
public element: HTMLElement;
|
public element: HTMLElement;
|
||||||
|
|
@ -128,13 +129,15 @@ export class MobileTags {
|
||||||
target = target.parentElement;
|
target = target.parentElement;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.update();
|
this.update(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public update() {
|
public update(ignoreMaxListHint = true) {
|
||||||
this.element.lastElementChild.classList.remove("fn__none");
|
this.element.lastElementChild.classList.remove("fn__none");
|
||||||
fetchPost("/api/tag/getTag", {
|
fetchPost("/api/tag/getTag", {
|
||||||
sort: window.siyuan.config.tag.sort
|
sort: window.siyuan.config.tag.sort,
|
||||||
|
app: Constants.SIYUAN_APPID,
|
||||||
|
ignoreMaxListHint,
|
||||||
}, response => {
|
}, response => {
|
||||||
if (this.openNodes) {
|
if (this.openNodes) {
|
||||||
this.openNodes = this.tree.getExpandIds();
|
this.openNodes = this.tree.getExpandIds();
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,7 @@ window.reconnectWebSocket = () => {
|
||||||
window.siyuan.ws.send("ping", {});
|
window.siyuan.ws.send("ping", {});
|
||||||
window.siyuan.mobile.docks.file.send("ping", {});
|
window.siyuan.mobile.docks.file.send("ping", {});
|
||||||
window.siyuan.mobile.editor.protyle.ws.send("ping", {});
|
window.siyuan.mobile.editor.protyle.ws.send("ping", {});
|
||||||
window.siyuan.mobile.popEditor.protyle.ws.send("ping", {});
|
window.siyuan.mobile.popEditor?.protyle.ws.send("ping", {});
|
||||||
};
|
};
|
||||||
window.goBack = goBack;
|
window.goBack = goBack;
|
||||||
window.showMessage = showMessage;
|
window.showMessage = showMessage;
|
||||||
|
|
|
||||||
|
|
@ -88,7 +88,7 @@ export const initRightMenu = (app: App) => {
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconCalendar"></use></svg><span class="b3-menu__label">${window.siyuan.languages.dailyNote}</span>
|
<svg class="b3-menu__icon"><use xlink:href="#iconCalendar"></use></svg><span class="b3-menu__label">${window.siyuan.languages.dailyNote}</span>
|
||||||
</div>
|
</div>
|
||||||
<div id="menuCard" class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}">
|
<div id="menuCard" class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}">
|
||||||
<svg class="b3-menu__icon" style="color: var(--b3-theme-secondary)"><use xlink:href="#iconRiffCard"></use></svg><span class="b3-menu__label">${window.siyuan.languages.spaceRepetition}</span>
|
<svg class="b3-menu__icon"><use xlink:href="#iconRiffCard"></use></svg><span class="b3-menu__label">${window.siyuan.languages.spaceRepetition}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuLock">
|
<div class="b3-menu__item${window.siyuan.config.readonly ? " fn__none" : ""}" id="menuLock">
|
||||||
<svg class="b3-menu__icon"><use xlink:href="#iconLock"></use></svg><span class="b3-menu__label">${window.siyuan.languages.lockScreen}</span>
|
<svg class="b3-menu__icon"><use xlink:href="#iconLock"></use></svg><span class="b3-menu__label">${window.siyuan.languages.lockScreen}</span>
|
||||||
|
|
|
||||||
|
|
@ -717,7 +717,7 @@ export const popSearch = (app: App, searchConfig?: any) => {
|
||||||
<svg class="svg--mid"><use xlink:href="#iconSearch"></use></svg>
|
<svg class="svg--mid"><use xlink:href="#iconSearch"></use></svg>
|
||||||
<svg class="svg--smaller"><use xlink:href="#iconDown"></use></svg>
|
<svg class="svg--smaller"><use xlink:href="#iconDown"></use></svg>
|
||||||
</span>
|
</span>
|
||||||
<input id="toolbarSearch" placeholder="${window.siyuan.languages.showRecentUpdatedBlocks}" class="toolbar__title fn__block">
|
<input id="toolbarSearch" placeholder="${window.siyuan.languages.showRecentUpdatedBlocks}" class="toolbar__title fn__block" autocomplete="off" autocorrect="off" spellcheck="false">
|
||||||
<svg id="toolbarSearchNew" class="toolbar__icon"><use xlink:href="#iconFile"></use></svg>
|
<svg id="toolbarSearchNew" class="toolbar__icon"><use xlink:href="#iconFile"></use></svg>
|
||||||
</div>`,
|
</div>`,
|
||||||
html: `<div class="fn__flex-column" style="height: 100%">
|
html: `<div class="fn__flex-column" style="height: 100%">
|
||||||
|
|
@ -752,7 +752,7 @@ export const popSearch = (app: App, searchConfig?: any) => {
|
||||||
<div class="toolbar">
|
<div class="toolbar">
|
||||||
<span class="fn__flex-1"></span>
|
<span class="fn__flex-1"></span>
|
||||||
<svg data-type="toggle-replace" class="toolbar__icon${config.hasReplace ? " toolbar__icon--active" : ""}"><use xlink:href="#iconReplace"></use></svg>
|
<svg data-type="toggle-replace" class="toolbar__icon${config.hasReplace ? " toolbar__icon--active" : ""}"><use xlink:href="#iconReplace"></use></svg>
|
||||||
<svg ${enableIncludeChild ? "" : "disabled"} data-type="include" class="toolbar__icon${includeChild ? " toolbar__icon--active" : ""}"><use xlink:href="#iconCopy"></use></svg>
|
<svg ${enableIncludeChild ? "" : "disabled"} data-type="include" class="toolbar__icon${includeChild ? " toolbar__icon--active" : ""}"><use xlink:href="#iconInclude"></use></svg>
|
||||||
<svg data-type="path" class="toolbar__icon"><use xlink:href="#iconFolder"></use></svg>
|
<svg data-type="path" class="toolbar__icon"><use xlink:href="#iconFolder"></use></svg>
|
||||||
<svg ${document.querySelector("#empty").classList.contains("fn__none") ? "" : "disabled"} data-type="currentPath" class="toolbar__icon"><use xlink:href="#iconFocus"></use></svg>
|
<svg ${document.querySelector("#empty").classList.contains("fn__none") ? "" : "disabled"} data-type="currentPath" class="toolbar__icon"><use xlink:href="#iconFocus"></use></svg>
|
||||||
<svg data-type="expand" class="toolbar__icon${config.group === 0 ? " fn__none" : ""}"><use xlink:href="#iconExpand"></use></svg>
|
<svg data-type="expand" class="toolbar__icon${config.group === 0 ? " fn__none" : ""}"><use xlink:href="#iconExpand"></use></svg>
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ const setEditor = (modelMainElement: Element) => {
|
||||||
window.siyuan.config.editor.displayNetImgMark = (modelMainElement.querySelector("#displayNetImgMark") as HTMLInputElement).checked;
|
window.siyuan.config.editor.displayNetImgMark = (modelMainElement.querySelector("#displayNetImgMark") as HTMLInputElement).checked;
|
||||||
window.siyuan.config.editor.codeSyntaxHighlightLineNum = (modelMainElement.querySelector("#codeSyntaxHighlightLineNum") as HTMLInputElement).checked;
|
window.siyuan.config.editor.codeSyntaxHighlightLineNum = (modelMainElement.querySelector("#codeSyntaxHighlightLineNum") as HTMLInputElement).checked;
|
||||||
window.siyuan.config.editor.embedBlockBreadcrumb = (modelMainElement.querySelector("#embedBlockBreadcrumb") as HTMLInputElement).checked;
|
window.siyuan.config.editor.embedBlockBreadcrumb = (modelMainElement.querySelector("#embedBlockBreadcrumb") as HTMLInputElement).checked;
|
||||||
|
window.siyuan.config.editor.headingEmbedMode = parseInt((modelMainElement.querySelector("#headingEmbedMode") as HTMLSelectElement).value);
|
||||||
window.siyuan.config.editor.listLogicalOutdent = (modelMainElement.querySelector("#listLogicalOutdent") as HTMLInputElement).checked;
|
window.siyuan.config.editor.listLogicalOutdent = (modelMainElement.querySelector("#listLogicalOutdent") as HTMLInputElement).checked;
|
||||||
window.siyuan.config.editor.listItemDotNumberClickFocus = (modelMainElement.querySelector("#listItemDotNumberClickFocus") as HTMLInputElement).checked;
|
window.siyuan.config.editor.listItemDotNumberClickFocus = (modelMainElement.querySelector("#listItemDotNumberClickFocus") as HTMLInputElement).checked;
|
||||||
window.siyuan.config.editor.spellcheck = (modelMainElement.querySelector("#spellcheck") as HTMLInputElement).checked;
|
window.siyuan.config.editor.spellcheck = (modelMainElement.querySelector("#spellcheck") as HTMLInputElement).checked;
|
||||||
|
|
@ -115,6 +116,16 @@ export const initEditor = () => {
|
||||||
<span class="fn__space"></span>
|
<span class="fn__space"></span>
|
||||||
<input class="b3-switch fn__flex-center" id="embedBlockBreadcrumb" type="checkbox"${window.siyuan.config.editor.embedBlockBreadcrumb ? " checked" : ""}/>
|
<input class="b3-switch fn__flex-center" id="embedBlockBreadcrumb" type="checkbox"${window.siyuan.config.editor.embedBlockBreadcrumb ? " checked" : ""}/>
|
||||||
</label>
|
</label>
|
||||||
|
<div class="b3-label">
|
||||||
|
${window.siyuan.languages.headingEmbedMode}
|
||||||
|
<span class="fn__hr"></span>
|
||||||
|
<select class="b3-select fn__block" id="headingEmbedMode">
|
||||||
|
<option value="0" ${window.siyuan.config.editor.headingEmbedMode === 0 ? "selected" : ""}>${window.siyuan.languages.showHeadingWithBlocks}</option>
|
||||||
|
<option value="1" ${window.siyuan.config.editor.headingEmbedMode === 1 ? "selected" : ""}>${window.siyuan.languages.showHeadingOnlyTitle}</option>
|
||||||
|
<option value="2" ${window.siyuan.config.editor.headingEmbedMode === 2 ? "selected" : ""}>${window.siyuan.languages.showHeadingOnlyBlocks}</option>
|
||||||
|
</select>
|
||||||
|
<div class="b3-label__text">${window.siyuan.languages.headingEmbedModeTip}</div>
|
||||||
|
</div>
|
||||||
<label class="fn__flex b3-label">
|
<label class="fn__flex b3-label">
|
||||||
<div class="fn__flex-1">
|
<div class="fn__flex-1">
|
||||||
${window.siyuan.languages.outlineOutdent}
|
${window.siyuan.languages.outlineOutdent}
|
||||||
|
|
@ -240,7 +251,7 @@ export const initEditor = () => {
|
||||||
${window.siyuan.languages.historyRetentionDays}
|
${window.siyuan.languages.historyRetentionDays}
|
||||||
<a href="javascript:void(0)" id="clearHistory">${window.siyuan.languages.clearHistory}</a>
|
<a href="javascript:void(0)" id="clearHistory">${window.siyuan.languages.clearHistory}</a>
|
||||||
<span class="fn__hr"></span>
|
<span class="fn__hr"></span>
|
||||||
<input class="b3-text-field fn__block" id="historyRetentionDays" type="number" min="0" value="${window.siyuan.config.editor.historyRetentionDays}"/>
|
<input class="b3-text-field fn__block" id="historyRetentionDays" type="number" min="1" max="3650" value="${window.siyuan.config.editor.historyRetentionDays}"/>
|
||||||
<div class="b3-label__text">${window.siyuan.languages.historyRetentionDaysTip}</div>
|
<div class="b3-label__text">${window.siyuan.languages.historyRetentionDaysTip}</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="b3-label">
|
<div class="b3-label">
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue