Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
e5e327884f
34 changed files with 1044 additions and 204 deletions
|
@ -25,7 +25,7 @@
|
|||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="README_zh_CN.md">中文</a>
|
||||
<a href="README_zh_CN.md">中文</a> | <a href="README_ja_JP.md">日本語</a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
|
387
README_ja_JP.md
Normal file
387
README_ja_JP.md
Normal file
|
@ -0,0 +1,387 @@
|
|||
<p align="center">
|
||||
<img alt="SiYuan" src="https://b3log.org/images/brand/siyuan-128.png">
|
||||
<br>
|
||||
<em>あなたの思考をリファクタリングする</em>
|
||||
<br><br>
|
||||
<a title="Build Status" target="_blank" href="https://github.com/siyuan-note/siyuan/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/siyuan-note/siyuan/cd.yml?style=flat-square"></a>
|
||||
<a title="Releases" target="_blank" href="https://github.com/siyuan-note/siyuan/releases"><img src="https://img.shields.io/github/release/siyuan-note/siyuan.svg?style=flat-square&color=9CF"></a>
|
||||
<a title="Downloads" target="_blank" href="https://github.com/siyuan-note/siyuan/releases"><img src="https://img.shields.io/github/downloads/siyuan-note/siyuan/total.svg?style=flat-square&color=blueviolet"></a>
|
||||
<br>
|
||||
<a title="Docker Pulls" target="_blank" href="https://hub.docker.com/r/b3log/siyuan"><img src="https://img.shields.io/docker/pulls/b3log/siyuan.svg?style=flat-square&color=green"></a>
|
||||
<a title="Docker Image Size" target="_blank" href="https://hub.docker.com/r/b3log/siyuan"><img src="https://img.shields.io/docker/image-size/b3log/siyuan.svg?style=flat-square&color=ff96b4"></a>
|
||||
<a title="Hits" target="_blank" href="https://github.com/siyuan-note/siyuan"><img src="https://hits.b3log.org/siyuan-note/siyuan.svg"></a>
|
||||
<br>
|
||||
<a title="AGPLv3" target="_blank" href="https://www.gnu.org/licenses/agpl-3.0.txt"><img src="http://img.shields.io/badge/license-AGPLv3-orange.svg?style=flat-square"></a>
|
||||
<a title="Code Size" target="_blank" href="https://github.com/siyuan-note/siyuan"><img src="https://img.shields.io/github/languages/code-size/siyuan-note/siyuan.svg?style=flat-square&color=yellow"></a>
|
||||
<a title="GitHub Pull Requests" target="_blank" href="https://github.com/siyuan-note/siyuan/pulls"><img src="https://img.shields.io/github/issues-pr-closed/siyuan-note/siyuan.svg?style=flat-square&color=FF9966"></a>
|
||||
<br>
|
||||
<a title="GitHub Commits" target="_blank" href="https://github.com/siyuan-note/siyuan/commits/master"><img src="https://img.shields.io/github/commit-activity/m/siyuan-note/siyuan.svg?style=flat-square"></a>
|
||||
<a title="Last Commit" target="_blank" href="https://github.com/siyuan-note/siyuan/commits/master"><img src="https://img.shields.io/github/last-commit/siyuan-note/siyuan.svg?style=flat-square&color=FF9900"></a>
|
||||
<br><br>
|
||||
<a title="Twitter" target="_blank" href="https://twitter.com/b3logos"><img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/b3logos?label=Follow&style=social"></a>
|
||||
<a title="Discord" target="_blank" href="https://discord.gg/dmMbCqVX7G"><img alt="Chat on Discord" src="https://img.shields.io/discord/808152298789666826?label=Discord&logo=Discord&style=social"></a>
|
||||
<br><br>
|
||||
<a href="https://www.producthunt.com/products/siyuan/reviews?utm_source=badge-product_rating&utm_medium=badge&utm_souce=badge-siyuan" target="_blank"><img src="https://api.producthunt.com/widgets/embed-image/v1/product_rating.svg?product_id=534576&theme=light" alt="SiYuan - A privacy-first personal knowledge management software | Product Hunt" style="width: 242px; height: 108px;" width="242" height="108" /></a>
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="README.md">English</a> | <a href="README_zh_CN.md">中文</a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
||||
## 目次
|
||||
|
||||
* [💡 紹介](#-紹介)
|
||||
* [🔮 特徴](#-特徴)
|
||||
* [🏗️ アーキテクチャとエコシステム](#️-アーキテクチャとエコシステム)
|
||||
* [🌟 スター履歴](#-スター履歴)
|
||||
* [🗺️ ロードマップ](#️-ロードマップ)
|
||||
* [🚀 ダウンロードとセットアップ](#-ダウンロードとセットアップ)
|
||||
* [アプリマーケット](#アプリマーケット)
|
||||
* [インストールパッケージ](#インストールパッケージ)
|
||||
* [Docker ホスティング](#docker-ホスティング)
|
||||
* [Unraid ホスティング](#unraid-ホスティング)
|
||||
* [インサイダープレビュー](#インサイダープレビュー)
|
||||
* [🏘️ コミュニティ](#️-コミュニティ)
|
||||
* [🛠️ 開発ガイド](#️-開発ガイド)
|
||||
* [❓ FAQ](#-faq)
|
||||
* [SiYuanはどのようにデータを保存しますか?](#siyuanはどのようにデータを保存しますか)
|
||||
* [サードパーティの同期ディスクを介したデータ同期をサポートしていますか?](#サードパーティの同期ディスクを介したデータ同期をサポートしていますか)
|
||||
* [SiYuanはオープンソースですか?](#siyuanはオープンソースですか)
|
||||
* [新しいバージョンにアップグレードするにはどうすればよいですか?](#新しいバージョンにアップグレードするにはどうすればよいですか)
|
||||
* [一部のブロック(リスト項目内の段落ブロックなど)がブロックアイコンを見つけられない場合はどうすればよいですか?](#一部のブロックリスト項目内の段落ブロックなどがブロックアイコンを見つけられない場合はどうすればよいですか)
|
||||
* [データリポジトリキーを紛失した場合はどうすればよいですか?](#データリポジトリキーを紛失した場合はどうすればよいですか)
|
||||
* [支払いが必要ですか?](#支払いが必要ですか)
|
||||
* [🙏 謝辞](#-謝辞)
|
||||
* [貢献者](#貢献者)
|
||||
|
||||
---
|
||||
|
||||
## 💡 紹介
|
||||
|
||||
SiYuanは、プライバシーを最優先とする個人の知識管理システムであり、細かいブロックレベルの参照とMarkdown WYSIWYGをサポートしています。
|
||||
|
||||
詳細については、[SiYuan英語ディスカッションフォーラム](https://liuyun.io)をご覧ください。
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
## 🔮 特徴
|
||||
|
||||
ほとんどの機能は無料で、商業利用も可能です。
|
||||
|
||||
* コンテンツブロック
|
||||
* ブロックレベルの参照と双方向リンク
|
||||
* カスタム属性
|
||||
* SQLクエリ埋め込み
|
||||
* プロトコル `siyuan://`
|
||||
* エディタ
|
||||
* ブロックスタイル
|
||||
* Markdown WYSIWYG
|
||||
* リストアウトライン
|
||||
* ブロックズームイン
|
||||
* 百万字の大規模ドキュメント編集
|
||||
* 数学公式、チャート、フローチャート、ガントチャート、タイミングチャート、五線譜など
|
||||
* ウェブクリッピング
|
||||
* PDF注釈リンク
|
||||
* エクスポート
|
||||
* ブロック参照と埋め込み
|
||||
* アセット付きの標準Markdown
|
||||
* PDF、Word、HTML
|
||||
* WeChat MP、Zhihu、Yuqueへのコピー
|
||||
* データベース
|
||||
* テーブルビュー
|
||||
* フラッシュカード間隔反復
|
||||
* OpenAI APIを介したAIライティングとQ/Aチャット
|
||||
* Tesseract OCR
|
||||
* マルチタブ、ドラッグアンドドロップで分割画面
|
||||
* テンプレートスニペット
|
||||
* JavaScript/CSSスニペット
|
||||
* Android/iOSアプリ
|
||||
* Dockerデプロイメント
|
||||
* [API](https://github.com/siyuan-note/siyuan/blob/master/API.md)
|
||||
* コミュニティマーケットプレイス
|
||||
|
||||
一部の機能は有料会員のみ利用可能です。詳細については[価格](https://b3log.org/siyuan/en/pricing.html)をご覧ください。
|
||||
|
||||
## 🏗️ アーキテクチャとエコシステム
|
||||
|
||||

|
||||
|
||||
| プロジェクト | 説明 | フォーク | スター |
|
||||
|----------------------------------------------------------|-----------------------|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------|
|
||||
| [lute](https://github.com/88250/lute) | エディタエンジン |  |  |
|
||||
| [chrome](https://github.com/siyuan-note/siyuan-chrome) | Chrome/Edge拡張 |  |  |
|
||||
| [bazaar](https://github.com/siyuan-note/bazaar) | コミュニティマーケットプレイス |  |  |
|
||||
| [dejavu](https://github.com/siyuan-note/dejavu) | データリポジトリ |  |  |
|
||||
| [petal](https://github.com/siyuan-note/petal) | プラグインAPI |  |  |
|
||||
| [android](https://github.com/siyuan-note/siyuan-android) | Androidアプリ |  |  |
|
||||
| [ios](https://github.com/siyuan-note/siyuan-ios) | iOSアプリ |  |  |
|
||||
| [riff](https://github.com/siyuan-note/riff) | 間隔反復 |  |  |
|
||||
|
||||
## 🌟 スター履歴
|
||||
|
||||
[](https://star-history.com/#siyuan-note/siyuan&Date)
|
||||
|
||||
## 🗺️ ロードマップ
|
||||
|
||||
* [SiYuanの開発計画と進捗](https://github.com/orgs/siyuan-note/projects/1)
|
||||
* [SiYuanの変更履歴](CHANGELOG.md)
|
||||
|
||||
## 🚀 ダウンロードとセットアップ
|
||||
|
||||
デスクトップとモバイルでは、アプリマーケットからのインストールを優先的にお勧めします。これにより、将来的にワンクリックでバージョンをアップグレードできます。
|
||||
|
||||
### アプリマーケット
|
||||
|
||||
モバイル:
|
||||
|
||||
* [App Store](https://apps.apple.com/us/app/siyuan/id1583226508)
|
||||
* [Google Play](https://play.google.com/store/apps/details?id=org.b3log.siyuan)
|
||||
* [F-Droid](https://f-droid.org/packages/org.b3log.siyuan)
|
||||
|
||||
デスクトップ:
|
||||
|
||||
* [Microsoft Store](https://apps.microsoft.com/detail/9p7hpmxp73k4)
|
||||
|
||||
### インストールパッケージ
|
||||
|
||||
* [B3log](https://b3log.org/siyuan/en/download.html)
|
||||
* [GitHub](https://github.com/siyuan-note/siyuan/releases)
|
||||
|
||||
### Docker ホスティング
|
||||
|
||||
<details>
|
||||
<summary>Dockerデプロイメント</summary>
|
||||
|
||||
#### 概要
|
||||
|
||||
サーバーでSiYuanを提供する最も簡単な方法は、Dockerを使用してデプロイすることです。
|
||||
|
||||
* イメージ名 `b3log/siyuan`
|
||||
* [イメージURL](https://hub.docker.com/r/b3log/siyuan)
|
||||
|
||||
#### ファイル構造
|
||||
|
||||
全体のプログラムは `/opt/siyuan/` にあり、基本的にはElectronインストールパッケージのresourcesフォルダーの構造です:
|
||||
|
||||
* appearance: アイコン、テーマ、言語
|
||||
* guide: ユーザーガイドドキュメント
|
||||
* stage: インターフェースと静的リソース
|
||||
* kernel: カーネルプログラム
|
||||
|
||||
#### エントリポイント
|
||||
|
||||
エントリポイントはDockerイメージのビルド時に設定されます:`ENTRYPOINT ["/opt/siyuan/entrypoint.sh"]`。このスクリプトを使用すると、コンテナ内で実行されるユーザーの `PUID` と `PGID` を変更できます。これは、ホストからディレクトリをマウントする際の権限の問題を解決するために特に重要です。`PUID`(ユーザーID)と `PGID`(グループID)は環境変数として渡すことができ、ホストマウントディレクトリにアクセスする際に正しい権限を確保するのが容易になります。
|
||||
|
||||
`docker run b3log/siyuan` を使用してコンテナを実行する場合、次のパラメータを使用します:
|
||||
|
||||
* `--workspace`: ワークスペースフォルダーのパスを指定し、ホスト上で `-v` を使用してコンテナにマウントします
|
||||
* `--accessAuthCode`: アクセス認証コードを指定します
|
||||
|
||||
詳細なパラメータは `--help` を参照してください。以下は新しい環境変数を使用した起動コマンドの例です:
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
-v workspace_dir_host:workspace_dir_container \
|
||||
-p 6806:6806 \
|
||||
-e PUID=1001 -e PGID=1002 \
|
||||
b3log/siyuan \
|
||||
--workspace=workspace_dir_container \
|
||||
--accessAuthCode=xxx
|
||||
```
|
||||
|
||||
* `PUID`: カスタムユーザーID(オプション、指定しない場合はデフォルトで `1000`)
|
||||
* `PGID`: カスタムグループID(オプション、指定しない場合はデフォルトで `1000`)
|
||||
* `workspace_dir_host`: ホスト上のワークスペースフォルダーのパス
|
||||
* `workspace_dir_container`: コンテナ内のワークスペースフォルダーのパス、`--workspace` で指定されたものと同じ
|
||||
* `accessAuthCode`: アクセス認証コード(**必ず変更してください**、そうしないと誰でもデータにアクセスできます)
|
||||
|
||||
簡略化するために、ホストとコンテナでワークスペースフォルダーのパスを一致させることをお勧めします。たとえば、`workspace_dir_host` と `workspace_dir_container` の両方を `/siyuan/workspace` に設定します。対応する起動コマンドは次のようになります:
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
-v /siyuan/workspace:/siyuan/workspace \
|
||||
-p 6806:6806 \
|
||||
-e PUID=1001 -e PGID=1002 \
|
||||
b3log/siyuan \
|
||||
--workspace=/siyuan/workspace/ \
|
||||
--accessAuthCode=xxx
|
||||
```
|
||||
|
||||
#### Docker Compose
|
||||
|
||||
Docker Composeを使用してSiYuanを実行するユーザー向けに、環境変数 `PUID` と `PGID` を使用してユーザーとグループのIDをカスタマイズできます。以下はDocker Composeの設定例です:
|
||||
|
||||
```yaml
|
||||
version: "3.9"
|
||||
services:
|
||||
main:
|
||||
image: b3log/siyuan
|
||||
command: ['--workspace=/siyuan/workspace/', '--accessAuthCode=${AuthCode}']
|
||||
ports:
|
||||
- 6806:6806
|
||||
volumes:
|
||||
- /siyuan/workspace:/siyuan/workspace
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
# タイムゾーン識別子のリストは https://en.wikipedia.org/wiki/List_of_tz_database_time_zones を参照してください
|
||||
- TZ=${YOUR_TIME_ZONE}
|
||||
- PUID=${YOUR_USER_PUID} # カスタムユーザーID
|
||||
- PGID=${YOUR_USER_PGID} # カスタムグループID
|
||||
```
|
||||
|
||||
この設定では:
|
||||
|
||||
* `PUID` と `PGID` は動的に設定され、コンテナに渡されます
|
||||
* これらの変数が提供されていない場合、デフォルトの `1000` が使用されます
|
||||
|
||||
環境で `PUID` と `PGID` を指定することで、composeファイルで `user` ディレクティブ(`user: '1000:1000'`)を明示的に設定する必要がなくなります。コンテナは起動時にこれらの環境変数に基づいてユーザーとグループを動的に調整します。
|
||||
|
||||
#### ユーザー権限
|
||||
|
||||
イメージ内で、`entrypoint.sh` スクリプトは指定された `PUID` と `PGID` で `siyuan` ユーザーとグループを作成することを保証します。したがって、ホストがワークスペースフォルダーを作成する際には、フォルダーのユーザーとグループの所有権を設定し、使用する予定の `PUID` と `PGID` に一致させることに注意してください。たとえば:
|
||||
|
||||
```bash
|
||||
chown -R 1001:1002 /siyuan/workspace
|
||||
```
|
||||
|
||||
カスタムの `PUID` と `PGID` 値を使用する場合、エントリポイントスクリプトはコンテナ内で正しいユーザーとグループを作成し、マウントされたボリュームの所有権を適切に調整します。`docker run` または `docker-compose` で `-u` を手動で渡す必要はありません。環境変数がカスタマイズを処理します。
|
||||
|
||||
#### 隠しポート
|
||||
|
||||
NGINXリバースプロキシを使用してポート6806を隠します。注意点:
|
||||
|
||||
* WebSocketリバースプロキシ `/ws` を設定します
|
||||
|
||||
#### 注意
|
||||
|
||||
* マウントボリュームの正確性を確認してください。そうしないと、コンテナが削除された後にデータが失われます
|
||||
* URLリライトを使用してリダイレクトしないでください。認証に問題が発生する可能性があるため、リバースプロキシの設定をお勧めします
|
||||
* 権限の問題が発生した場合、`PUID` と `PGID` 環境変数がホストシステム上のマウントされたディレクトリの所有権と一致していることを確認してください
|
||||
|
||||
#### 制限
|
||||
|
||||
* デスクトップおよびモバイルアプリケーションの接続はサポートされておらず、ブラウザでの使用のみサポートされています
|
||||
* PDF、HTML、Word形式へのエクスポートはサポートされていません
|
||||
* Markdownファイルのインポートはサポートされていません
|
||||
|
||||
</details>
|
||||
|
||||
### Unraid ホスティング
|
||||
|
||||
<details>
|
||||
<summary>Unraidデプロイメント</summary>
|
||||
|
||||
注意:最初にターミナルで `chown -R 1000:1000 /mnt/user/appdata/siyuan` を実行します
|
||||
|
||||
テンプレートの参考:
|
||||
|
||||
```
|
||||
Web UI: 6806
|
||||
Container Port: 6806
|
||||
Container Path: /home/siyuan
|
||||
Host path: /mnt/user/appdata/siyuan
|
||||
PUID: 1000
|
||||
PGID: 1000
|
||||
Publish parameters: --accessAuthCode=******(アクセス認証コード)
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
### インサイダープレビュー
|
||||
|
||||
主要な更新前にインサイダープレビューをリリースします。詳細は[https://github.com/siyuan-note/insider](https://github.com/siyuan-note/insider)をご覧ください。
|
||||
|
||||
## 🏘️ コミュニティ
|
||||
|
||||
* [英語ディスカッションフォーラム](https://liuyun.io)
|
||||
* [ユーザーコミュニティのまとめ](https://liuyun.io/article/1687779743723)
|
||||
* [Awesome SiYuan](https://github.com/siyuan-note/awesome)
|
||||
|
||||
## 🛠️ 開発ガイド
|
||||
|
||||
[開発ガイド](https://github.com/siyuan-note/siyuan/blob/master/.github/CONTRIBUTING.md)をご覧ください。
|
||||
|
||||
## ❓ FAQ
|
||||
|
||||
### SiYuanはどのようにデータを保存しますか?
|
||||
|
||||
データはワークスペースフォルダーに保存され、ワークスペースデータフォルダーに保存されます:
|
||||
|
||||
* `assets` はすべての挿入されたアセットを保存するために使用されます
|
||||
* `emojis` は絵文字画像を保存するために使用されます
|
||||
* `snippets` はコードスニペットを保存するために使用されます
|
||||
* `storage` はクエリ条件、レイアウト、フラッシュカードなどを保存するために使用されます
|
||||
* `templates` はテンプレートスニペットを保存するために使用されます
|
||||
* `widgets` はウィジェットを保存するために使用されます
|
||||
* `plugins` はプラグインを保存するために使用されます
|
||||
* `public` は公開データを保存するために使用されます
|
||||
* 残りのフォルダーはユーザーが作成したノートブックフォルダーであり、ノートブックフォルダー内の `.sy` サフィックスのファイルはドキュメントデータを保存するために使用され、データ形式はJSONです
|
||||
|
||||
### サードパーティの同期ディスクを介したデータ同期をサポートしていますか?
|
||||
|
||||
サードパーティの同期ディスクを介したデータ同期はサポートされていません。そうしないとデータが破損する可能性があります。
|
||||
|
||||
サードパーティの同期ディスクをサポートしていない場合でも、サードパーティのクラウドストレージと接続することはサポートされています(会員特典)。
|
||||
|
||||
また、データのエクスポートとインポートを手動で行うことでデータ同期を実現することもできます:
|
||||
|
||||
* デスクトップ:<kbd>設定</kbd> - <kbd>エクスポート</kbd> - <kbd>データのエクスポート</kbd> / <kbd>データのインポート</kbd>
|
||||
* モバイル:<kbd>右カラム</kbd> - <kbd>情報</kbd> - <kbd>データのエクスポート</kbd> / <kbd>データのインポート</kbd>
|
||||
|
||||
### SiYuanはオープンソースですか?
|
||||
|
||||
SiYuanは完全にオープンソースであり、貢献を歓迎します:
|
||||
|
||||
* [ユーザーインターフェースとカーネル](https://github.com/siyuan-note/siyuan)
|
||||
* [Android](https://github.com/siyuan-note/siyuan-android)
|
||||
* [iOS](https://github.com/siyuan-note/siyuan-ios)
|
||||
* [Chromeクリッピング拡張](https://github.com/siyuan-note/siyuan-chrome)
|
||||
|
||||
詳細については[開発ガイド](https://github.com/siyuan-note/siyuan/blob/master/.github/CONTRIBUTING.md)をご覧ください。
|
||||
|
||||
### 新しいバージョンにアップグレードするにはどうすればよいですか?
|
||||
|
||||
* アプリストアからインストールした場合は、アプリストアから更新してください
|
||||
* デスクトップでインストールパッケージを使用してインストールした場合は、<kbd>設定</kbd> - <kbd>情報</kbd> - <kbd>自動的に更新インストールパッケージをダウンロード</kbd> オプションを開くことができます。これにより、SiYuanは最新バージョンのインストールパッケージを自動的にダウンロードし、インストールを促します
|
||||
* 手動でインストールパッケージを使用してインストールした場合は、再度インストールパッケージをダウンロードしてインストールしてください
|
||||
|
||||
<kbd>設定</kbd> - <kbd>情報</kbd> - <kbd>現在のバージョン</kbd> で <kbd>更新を確認</kbd> できます。また、[公式ダウンロード](https://b3log.org/siyuan/en/download.html) または [GitHub Releases](https://github.com/siyuan-note/siyuan/releases) をフォローして新しいバージョンを入手することもできます。
|
||||
|
||||
### 一部のブロック(リスト項目内の段落ブロックなど)がブロックアイコンを見つけられない場合はどうすればよいですか?
|
||||
|
||||
リスト項目の最初のサブブロックはブロックアイコンが省略されています。このブロックにカーソルを移動し、<kbd>Ctrl+/</kbd> を使用してそのブロックメニューをトリガーできます。
|
||||
|
||||
### データリポジトリキーを紛失した場合はどうすればよいですか?
|
||||
|
||||
* データリポジトリキーが以前に複数のデバイスで正しく初期化されている場合、キーはすべてのデバイスで同じであり、<kbd>設定</kbd> - <kbd>情報</kbd> - <kbd>データリポジトリキー</kbd> - <kbd>キー文字列をコピー</kbd> で見つけることができます
|
||||
* 以前に正しく構成されていない場合(たとえば、複数のデバイスでキーが一致しない場合)またはすべてのデバイスが使用できず、キー文字列を取得できない場合は、以下の手順でキーをリセットできます:
|
||||
|
||||
1. データを手動でバックアップします。<kbd>データのエクスポート</kbd> を使用するか、ファイルシステム上で <kbd>ワークスペース/data/</kbd> フォルダーをコピーします
|
||||
2. <kbd>設定</kbd> - <kbd>情報</kbd> - <kbd>データリポジトリキー</kbd> - <kbd>データリポジトリをリセット</kbd>
|
||||
3. データリポジトリキーを再初期化します。1台のデバイスでキーを初期化した後、他のデバイスでキーをインポートします
|
||||
4. クラウドは新しい同期ディレクトリを使用します。古い同期ディレクトリは使用できなくなり、削除できます
|
||||
5. 既存のクラウドスナップショットは使用できなくなり、削除できます
|
||||
|
||||
### 支払いが必要ですか?
|
||||
|
||||
ほとんどの機能は無料で、商業利用も可能です。
|
||||
|
||||
会員特典は支払い後にのみ利用可能です。詳細については[価格](https://b3log.org/siyuan/en/pricing.html)をご覧ください。
|
||||
|
||||
## 🙏 謝辞
|
||||
|
||||
SiYuanの誕生は、多くのオープンソースプロジェクトと貢献者なしでは実現できませんでした。プロジェクトのソースコード kernel/go.mod、app/package.json、およびプロジェクトのホームページをご覧ください。
|
||||
|
||||
SiYuanの成長は、ユーザーのフィードバックとプロモーションなしでは実現できませんでした。SiYuanへのすべての支援に感謝します ❤️
|
||||
|
||||
### 貢献者
|
||||
|
||||
私たちに参加し、一緒にSiYuanにコードを貢献することを歓迎します。
|
||||
|
||||
<a href="https://github.com/siyuan-note/siyuan/graphs/contributors">
|
||||
<img src="https://contrib.rocks/image?repo=siyuan-note/siyuan" />
|
||||
</a>
|
|
@ -25,7 +25,7 @@
|
|||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="README.md">English</a>
|
||||
<a href="README.md">English</a> | <a href="README_ja_JP.md">日本語</a>
|
||||
</p>
|
||||
|
||||
---
|
||||
|
|
|
@ -1380,7 +1380,7 @@
|
|||
"70": "Verarbeite [%s], bitte warten...",
|
||||
"71": "Fehler beim Einfügen der Asset-Datei, bitte Dokument erneut öffnen",
|
||||
"72": "Inhalt wurde in die Systemzwischenablage kopiert, bitte gehen Sie zu SiYuan, um einzufügen",
|
||||
"73": "Importieren, bitte warten...",
|
||||
"73": "Daten werden importiert...",
|
||||
"74": "Der Kernel ist nicht vollständig gestartet [%d%%], bitte versuchen Sie es später erneut",
|
||||
"75": "Zugriff auf die Datei fehlgeschlagen",
|
||||
"76": "Die Netzwerkverbindungsprüfung des Cloud-Speicherdienstanbieters ist abnormal, bitte überprüfen Sie die Netzwerkkonfiguration",
|
||||
|
|
|
@ -1380,7 +1380,7 @@
|
|||
"70": "Processing [%s], please wait...",
|
||||
"71": "Failed to insert asset file, please reopen the document",
|
||||
"72": "Content has been copied to the system clipboard, please go to SiYuan to paste",
|
||||
"73": "Importing, please wait...",
|
||||
"73": "Importing data...",
|
||||
"74": "The kernel has not been fully booted [%d%%], please try again later",
|
||||
"75": "Attempt to access file failed",
|
||||
"76": "The network connectivity verification of the cloud storage service provider is abnormal, please check the network configuration",
|
||||
|
|
|
@ -1380,7 +1380,7 @@
|
|||
"70": "Procesando [%s], por favor espere...",
|
||||
"71": "Fallo en la inserción del archivo de activos, por favor reabra el documento",
|
||||
"72": "El contenido se ha copiado en el portapapeles del sistema, por favor vaya a SiYuan para pegar",
|
||||
"73": "Importando, por favor espere...",
|
||||
"73": "Importando datos...",
|
||||
"74": "El kernel no ha sido arrancado completamente [%d%%], por favor, inténtelo de nuevo más tarde",
|
||||
"75": "Error al intentar acceder al archivo",
|
||||
"76": "La verificaci\u00f3n de conectividad de red del proveedor de servicios de almacenamiento en la nube es anormal, verifique la configuraci\u00f3n de red",
|
||||
|
|
|
@ -1380,7 +1380,7 @@
|
|||
"70": "Traitement de [%s], veuillez patienter...",
|
||||
"71": "L'insertion du fichier asset a échoué, veuillez rouvrir le document.",
|
||||
"72": "Le contenu a été copié dans le presse-papiers du système, veuillez vous rendre sur SiYuan pour le coller.",
|
||||
"73": "En cours d'importation, veuillez patienter...",
|
||||
"73": "Importation des données...",
|
||||
"74": "Le kernel n'a pas été complètement démarré [%d%%], veuillez réessayer plus tard.",
|
||||
"75": "La tentative d'accès au fichier a échoué",
|
||||
"76": "La vérification de la connectivité réseau du fournisseur de service de stockage cloud est anormale, veuillez vérifier la configuration réseau",
|
||||
|
|
|
@ -1380,7 +1380,7 @@
|
|||
"70": "מעבד [%s], אנא המתן...",
|
||||
"71": "נכשל בהכנסת קובץ נכס, אנא פתח מחדש את המסמך",
|
||||
"72": "התוכן הועתק ללוח המערכת, אנא עבור אל SiYuan להדביק",
|
||||
"73": "מייבא, אנא המתן...",
|
||||
"73": "מייבא נתונים...",
|
||||
"74": "הליבה לא הושלמה לחלוטין [%d%%], אנא נסה שוב מאוחר יותר",
|
||||
"75": "ניסיון גישה לקובץ נכשל",
|
||||
"76": "הווידוא על זמינות החיבור המתקן של ספק שירותי אחסון בענן לא תקין, אנא בדוק את הגדרות הרשת",
|
||||
|
|
|
@ -1380,7 +1380,7 @@
|
|||
"70": "Elaborazione [%s], attendere prego...",
|
||||
"71": "Impossibile inserire il file dell'asset, riapri il documento",
|
||||
"72": "Il contenuto è stato copiato negli appunti di sistema, vai su SiYuan per incollare",
|
||||
"73": "Importazione in corso, attendere prego...",
|
||||
"73": "Importazione dei dati in corso...",
|
||||
"74": "Il kernel non è stato avviato completamente [%d%%], riprova più tardi",
|
||||
"75": "Tentativo di accesso al file fallito",
|
||||
"76": "La verifica della connettività di rete del servizio di archiviazione cloud è anomala, controlla la configurazione della rete",
|
||||
|
|
|
@ -1,24 +1,24 @@
|
|||
{
|
||||
"confirmRemoveRelationField": "<b>${x}</b> に関連するフィールドを同時に削除してもよろしいですか?",
|
||||
"removeButKeepRelationField": "削除して関連フィールドを保持",
|
||||
"exportPDFLowMemory": "システムの利用可能なメモリが不足しているため、このPDFをエクスポートできません。内容を減らすか、利用可能なメモリを増やしてから再試行してください",
|
||||
"exportPDFLowMemory": "システムの利用可能なメモリが不足しているため、この PDF をエクスポートできません。内容を減らすか、利用可能なメモリを増やしてから再試行してください",
|
||||
"exportConf": "設定のエクスポート",
|
||||
"exportConfTip": "アカウント、アクセス コード、同期、API トークン、データ ウェアハウス キーはエクスポートされません",
|
||||
"exportConfTip": "アカウント、アクセスコード、同期、API トークン、データウェアハウスキーはエクスポートされません",
|
||||
"importConf": "設定のインポート",
|
||||
"importConfTip": "インポート後、現在の設定は上書きされ、アプリケーションは自動的に終了します。手動で再起動してください。",
|
||||
"jumpToPage": "指定されたページにジャンプ:1 ~ ${x}",
|
||||
"jumpToPage": "指定したページにジャンプ: 1 ~ ${x}",
|
||||
"pageCountAndSnapshotCount": "合計 ${x} ページ、${y} スナップショット",
|
||||
"pageCountAndHistoryCount": "合計 ${x} ページ、${y} 履歴",
|
||||
"visitCommunityShare": "コミュニティシェアを訪問",
|
||||
"clearContextSucc": "コンテキストがクリアされました",
|
||||
"emptyMobilePlaceholder": "何かを記録する",
|
||||
"emptyPlaceholder": "何か書いてください。コマンドの場合は「/」",
|
||||
"emptyPlaceholder": "ここに何か書くか、/ でコマンドメニューを開きます",
|
||||
"publish": "公開する",
|
||||
"publishService": "サービスを公開",
|
||||
"publishServiceNotStarted": "サービスが開始されていません",
|
||||
"publishServiceTip": "有効にすると、サービスを開始します。このサービスは、現在のワークスペースの内容を読み取り専用モードでローカルネットワークに公開します",
|
||||
"publishServicePort": "サービスポート",
|
||||
"publishServicePortTip": "指定したポート番号を使用してサービスを有効にします。0に設定するとランダムなポートが使用されます",
|
||||
"publishServicePortTip": "指定したポート番号を使用してサービスを有効にします。0 に設定するとランダムなポートが使用されます",
|
||||
"publishServiceAddresses": "サービスアドレス",
|
||||
"publishServiceAddressesTip": "公開サービスのネットワークアドレスにアクセス可能",
|
||||
"publishServiceAuth": "サービスの基本認証",
|
||||
|
@ -52,10 +52,10 @@
|
|||
"editorMarkdownInlineTagTip": "<code class='fn__code'>#foo#</code> 形式のインラインタグ構文を有効にします",
|
||||
"editorMarkdownInlineMath": "Markdown インライン数式構文",
|
||||
"editorMarkdownInlineMathTip": "<code class='fn__code'>$foo$</code> 形式のインライン数式構文を有効にします",
|
||||
"editorMarkdownInlineAsterisk": "マークダウン インライン アスタリスク構文",
|
||||
"editorMarkdownInlineAsteriskTip": "有効にすると、<code class='fn__code'>*foo*</code> 斜体構文と <code class='fn__code'>**foo**</code> 太字構文の入力がサポートされます",
|
||||
"editorMarkdownInlineUnderscore": "マークダウンのインライン下線構文",
|
||||
"editorMarkdownInlineUnderscoreTip": "有効にすると、<code class='fn__code'>_foo_</code> 斜体構文と <code class='fn__code'>__foo__</code> 太字構文の入力がサポートされます",
|
||||
"editorMarkdownInlineAsterisk": "Markdown インラインアスタリスク構文",
|
||||
"editorMarkdownInlineAsteriskTip": "<code class='fn__code'>*foo*</code> 形式の斜体構文と <code class='fn__code'>**foo**</code> 形式の太字構文を有効にします",
|
||||
"editorMarkdownInlineUnderscore": "Markdown インライン下線構文",
|
||||
"editorMarkdownInlineUnderscoreTip": "<code class='fn__code'>_foo_</code> 形式の斜体構文と <code class='fn__code'>__foo__</code> 形式の太字構文を有効にします",
|
||||
"currentNotebook": "現在のノートブック",
|
||||
"containerBlockTip1": "コンテナブロックを有効にすると重複した検索結果が表示されます",
|
||||
"containerBlockTip2": "ドキュメントブロックはタイトルの検索のみをサポートしています",
|
||||
|
@ -101,7 +101,7 @@
|
|||
"addToDatabase": "データベースに追加",
|
||||
"clearContext": "コンテキストを消去",
|
||||
"cloudStoragePurge": "クラウドストレージを消去",
|
||||
"cloudStoragePurgeConfirm": "クラウド ストレージを消去すると、参照されていないスナップショットと関連データ オブジェクトがすべて完全に削除されます。<ul class='fn__list'><li>実行前に他のデバイスが同期を一時停止していることを確認してください</li><li>消去操作は非常に時間がかかるため、ネットワークが安定していることを確認してください</li></ul>今すぐ実行してもよろしいですか?",
|
||||
"cloudStoragePurgeConfirm": "クラウドストレージを消去すると、参照されていないスナップショットと関連データオブジェクトが完全に削除されます。<ul class='fn__list'><li>実行前に他のデバイスが同期を一時停止していることを確認してください</li><li>消去操作は非常に時間がかかるため、ネットワークが安定していることを確認してください</li></ul>今すぐ実行してもよろしいですか?",
|
||||
"dragFill": "ドロップダウンで値を入力する",
|
||||
"switchReadonly": "読み取り専用モードの切り替え",
|
||||
"original": "元の値",
|
||||
|
@ -128,7 +128,7 @@
|
|||
"strong": "太字",
|
||||
"inlineMath": "インライン数式",
|
||||
"inlineMemo": "インラインメモ",
|
||||
"blockRef": "アンカー テキストを引用する",
|
||||
"blockRef": "アンカーテキストを引用する",
|
||||
"kbd": "キーボード",
|
||||
"mark": "ハイライト",
|
||||
"s": "取り消し線",
|
||||
|
@ -163,7 +163,7 @@
|
|||
"mirrorTip": "ミラーデータベース: すべてのデータ更新は他のすべてのミラーに同期されます",
|
||||
"includeTime": "時間を含める",
|
||||
"accountSupport1": "SiYuan は 2020 年 8 月 31 日の最初の公開以来、合計 661 回のリリースを行い、ユーザーからの要求とフィードバックを 11877 回解決し、コードを 14796 回コミットしました。",
|
||||
"accountSupport2": "皆様のサポートとフィードバックによって、SiYuan はさらに発展します。私たちは常にユーザーの友人であり、製品の向上に努め、より良い知識管理体験を提供して参ります。ご支援いただき誠にありがとうございます。",
|
||||
"accountSupport2": "皆様のサポートとフィードバックによって、SiYuan はさらに発展します。私たちは常にユーザーのよき理解者であり、製品の向上に努め、より良い知識管理体験を提供して参ります。ご支援いただき誠にありがとうございます。",
|
||||
"goToTab1": "最初のタブへ移動",
|
||||
"goToTab2": "2 番目のタブへ移動",
|
||||
"goToTab3": "3 番目のタブへ移動",
|
||||
|
@ -193,7 +193,7 @@
|
|||
"unlockEdit": "ドキュメントを書き込み可能にする",
|
||||
"enable": "有効",
|
||||
"disable": "無効",
|
||||
"removeWorkspacePhysically": "ワークスペースはリストから削除されました。これから、ワークスペース ${x} のデータが永久に削除されます。この削除操作は元に戻せませんが、続行しますか?",
|
||||
"removeWorkspacePhysically": "この操作を実行すると、ワークスペース ${x} のデータは永久に削除されます。続行しますか?",
|
||||
"mainMenu": "メインメニュー",
|
||||
"searchRemoveName": "${x} を削除して、そのクエリ条件を ${y} に割り当てますか?",
|
||||
"searchUpdateName": "名前 ${x} を ${y} に更新しますか?",
|
||||
|
@ -462,7 +462,7 @@
|
|||
"notBatchRemove": "ノートブックの一括削除はサポートされていません",
|
||||
"confirmRemoveAll": "選択した ${count} 件のドキュメントとそのサブドキュメントを削除してもよろしいですか?",
|
||||
"microphoneDenied": "システム環境設定で SiYuan にマイクへのアクセスを許可する必要があります",
|
||||
"microphoneNotAccess": "マイクへのアクセスが拒否されました。システム環境設定でリセットしてください",
|
||||
"microphoneNotAccess": "マイクへのアクセスが拒否されました。システムの環境設定で許可してください",
|
||||
"dynamicLoadBlocks": "動的に読み込まれるブロックの数",
|
||||
"dynamicLoadBlocksTip": "この値にはサブブロックの数が含まれます。レンダリングする必要があるコードブロック、数式ブロック、チャートブロックが数多くある場合はあまり大きな数値に設定しないことをお勧めします",
|
||||
"backlinkExpand": "バックリンクのデフォルト展開数",
|
||||
|
@ -477,7 +477,7 @@
|
|||
"floatWindowMode1": "<code class='fn__code'>${hotkey}</code> を押しながらホバー",
|
||||
"floatWindowMode2": "表示しない",
|
||||
"codeSnippet": "コードスニペット",
|
||||
"codeSnippetTip": "コード スニペットを通じてインターフェイスまたは機能を微調整します",
|
||||
"codeSnippetTip": "コードスニペットを使用してインターフェースや機能を微調整します",
|
||||
"expandDown": "選択範囲を下に拡張",
|
||||
"expandUp": "選択範囲を上に拡張",
|
||||
"goForward": "進む",
|
||||
|
@ -728,7 +728,7 @@
|
|||
"changeIcon": "アイコンを変更",
|
||||
"addIcon": "アイコンを追加",
|
||||
"includeSubFile": "\nx 個のサブドキュメントを含む",
|
||||
"untitled": "タイトルなし",
|
||||
"untitled": "無題ドキュメント",
|
||||
"lockScreen": "画面ロック",
|
||||
"cloudIntro1": "エンドツーエンドの暗号化されたデータ同期",
|
||||
"cloudIntro2": "暗号化と復号化のプロセスは完全にローカルデバイス上で実行されます",
|
||||
|
@ -1229,9 +1229,9 @@
|
|||
"copyToWechatMP": "Yuque にコピーする",
|
||||
"copyToZhihu": "Zhihu にコピーする",
|
||||
"copyToYuque": "Yuque にコピーする",
|
||||
"pasteToWechatMP": "コピーが完了しました。WeChat に貼り付けることができます",
|
||||
"pasteToZhihu": "コピーが完了しました。Zhihu に貼り付けることができます",
|
||||
"pasteToYuque": "コピーが完了しました。Yuque に貼り付けることができます",
|
||||
"pasteToWechatMP": "コピーしました。WeChat に貼り付けることができます",
|
||||
"pasteToZhihu": "コピーしました。Zhihu に貼り付けることができます",
|
||||
"pasteToYuque": "コピーしました。Yuque に貼り付けることができます",
|
||||
"quote": "引用",
|
||||
"startRecord": "録音開始",
|
||||
"endRecord": "録音停止",
|
||||
|
@ -1380,7 +1380,7 @@
|
|||
"70": "[%s] を処理しています。お待ちください...",
|
||||
"71": "アセットファイルの挿入に失敗しました。ドキュメントを開きなおしてください",
|
||||
"72": "コンテンツがクリップボードにコピーされました。SiYuan に貼り付けてください",
|
||||
"73": "インポートしています。お待ちください...",
|
||||
"73": "データをインポート中...",
|
||||
"74": "カーネルの起動が完了していません [%d%%]。後でまた試してください",
|
||||
"75": "ファイルへのアクセスに失敗しました",
|
||||
"76": "クラウドストレージサービスプロバイダーのネットワーク接続検証の結果が異常です。ネットワーク設定を確認してください",
|
||||
|
@ -1396,9 +1396,9 @@
|
|||
"86": "[設定] - [情報] - [アクセス認証コード] を設定してください",
|
||||
"87": "この場所には移動できません",
|
||||
"88": "[%d] 個のデータファイルの解析が完了し、処理待ちのデータファイルが [%d] 個残っています",
|
||||
"89": "[%d/%d] ブロックレベル要素 [%s] のデータインデックスを [%d] 個作成しました",
|
||||
"90": "[%d/%d] ブロックレベル要素 [%s] の検索インデックスを [%d] 個作成しました",
|
||||
"91": "参照されていないリソース ファイルのクリーンアップが完了し、[%d] ファイルが削除され、合計 [%s] 個のディスク領域が解放されました。",
|
||||
"89": "[%d/%d] [%d] 個のデータインデックスがブロックレベル要素 [%s] に対して作成されました",
|
||||
"90": "[%d/%d] [%d] 個の検索インデックスがブロックレベル要素 [%s] に対して作成されました",
|
||||
"91": "参照されていないリソースファイルのクリーンアップが完了し、[%d] 個のファイルが削除され、合計 [%s] のディスク領域が解放されました。",
|
||||
"92": "ドキュメントツリーを解析しています [%s]",
|
||||
"93": "[%d/%d] ドキュメント [%s] に関連するインデックスをクリーンアップしました",
|
||||
"94": "アップロードに失敗しました: %s",
|
||||
|
@ -1429,7 +1429,7 @@
|
|||
"119": "ネットワークファイルをダウンロードしています [%s]",
|
||||
"120": "合計 [%d] ファイルのダウンロードが完了しました",
|
||||
"121": "このドキュメントにはネットワークファイルがありません",
|
||||
"122": "プラグインに付属するサイドバー機能はデスクトップで設定する必要があります。設定が完了したら、SiYuanを再起動してください(モバイル端末のユーザーは、プラグインを初めて使用する前にデスクトップからマーケットプレイスを信頼する必要があります)",
|
||||
"122": "プラグインに付属するサイドバー機能はデスクトップで設定する必要があります。設定が完了したら、SiYuan を再起動してください (モバイル端末のユーザーは、プラグインを初めて使用する前にデスクトップからマーケットプレイスを信頼する必要があります)",
|
||||
"123": "同期機能はクラウド同期ディレクトリを追加/選択した後にのみ有効化できます",
|
||||
"124": "[設定] - [クラウド] からクラウド同期を有効にしてください",
|
||||
"125": "自動同期の失敗回数が多すぎます。手動で同期を試みてください。それでも問題が解決しない場合は <a href=\"https://liuyun.io/article/1686530886208\" target=\"_blank\">GitHub Issues</a> から報告してください",
|
||||
|
@ -1488,7 +1488,7 @@
|
|||
"178": "アクセス認証 - SiYuan",
|
||||
"179": "ディスク容量が不足している可能性があります。ワークスペースが存在するディスクの空き容量をデータの2倍以上に保つことを推奨します",
|
||||
"180": "検索コンテンツブロックが存在しません",
|
||||
"181": "ドキュメントはコミュニティに公開されました <a href=\"%s\" target=\"_blank\">クリックして表示</a>",
|
||||
"181": "ドキュメントがコミュニティに公開されました <a href=\"%s\" target=\"_blank\">クリックして表示</a>",
|
||||
"182": "ドキュメントを公開しています。お待ちください...",
|
||||
"183": "インデックスドキュメントツリーを検証中 [%d/%d %s]",
|
||||
"184": "Powered by <a href=\"https://b3log.org/siyuan/en/?lang=en\" target=\"_blank\">SiYuan</a>",
|
||||
|
@ -1505,8 +1505,8 @@
|
|||
"195": "システム時刻が正しくありません。システム時刻を調整してから再試行してください",
|
||||
"196": "サードパーティの同期ディスクにワークスペースのパスを設定しないでください。設定するとデータが破損します (iCloud/OneDrive/Dropbox/Google Drive/Nutstore/Baidu Netdisk/Tencent Weiyun など)",
|
||||
"197": "指定された Word の .docx テンプレート [%s] が見つかりませんでした。[設定] - [エクスポート] - [Word の .docx テンプレートのパスをエクスポート] を確認してください",
|
||||
"198": "これは有効なデータアーカイブではありません。アーカイブが [ドキュメントツリー] からエクスポートされた場合は [ドキュメントツリー] からインポートしてください",
|
||||
"199": "これは有効な .sy.zip アーカイブではありません。アーカイブが [設定] からエクスポートされた場合は [設定] からインポートしてください",
|
||||
"198": "有効なデータアーカイブではありません。アーカイブが [ドキュメントツリー] からエクスポートされた場合は [ドキュメントツリー] からインポートしてください",
|
||||
"199": "有効な .sy.zip アーカイブではありません。アーカイブが [設定] からエクスポートされた場合は [設定] からインポートしてください",
|
||||
"200": "グローバル検索の応答時間が長いため、種類でフィルタするかキーワードで検索範囲を絞ることをお勧めします",
|
||||
"201": "データリポジトリのクリーンアップに失敗しました: %s",
|
||||
"202": "データリポジトリをクリーンアップしています...",
|
||||
|
@ -1541,7 +1541,7 @@
|
|||
"231": "クラウドストレージから未参照のデータオブジェクトを削除しています...",
|
||||
"232": "クラウドデータストレージが消去されました。[%d] 個のスナップショットと [%d] 個のデータオブジェクトが削除され、合計 [%s] のディスク領域が解放されました",
|
||||
"233": "ユーザーガイドを閉じています...",
|
||||
"234": "[%d/%d] ドキュメント [%s] の読み取り可能なパスを [%d] 更新しました",
|
||||
"234": "[%d/%d] 読み取り可能なパス [%d] がドキュメント [%s] に対して更新されました",
|
||||
"235": "[%d/%d] マーケットプレイスパッケージを更新しています...",
|
||||
"236": "[%d/%d] マーケットプレイスパッケージ [%s] を更新しています...",
|
||||
"237": "[%d] 個のマーケットプレイスパッケージがすべて正常に更新されました",
|
||||
|
@ -1549,10 +1549,10 @@
|
|||
"239": "関連する操作が処理中です。後でまた試してください",
|
||||
"240": "コンテナブロック内の見出しは移動できません",
|
||||
"241": "小見出しへのドラッグはサポートされていません",
|
||||
"242": "現在利用可能なスペース [%s]、この操作を実行するには少なくとも [%s] が必要です",
|
||||
"242": "現在利用可能なスペースは [%s] です。この操作を実行するには少なくとも [%s] が必要です",
|
||||
"243": "最初の [%d] 個のタグ (サブタグを含む) のみを表示します。調整が必要な場合は [設定] - [ドキュメントツリー] - [リストする最大数] を変更してください",
|
||||
"244": "前回の使用以降、データのインデックス作成が完了していません。[ドキュメント ツリー - インデックスの再構築]を一度実行してください。今後は、コンピューターをシャットダウンする前にプログラムを完全に終了してください。",
|
||||
"245": "前回の使用以降、データのインデックス作成が完了していません。[ドキュメント ツリー - インデックスの再構築]を一度実行してください。正常に終了するには、右列パネルの[アプリケーションの終了]を使用してください。",
|
||||
"244": "前回の使用以降、データのインデックス作成が完了していません。[ドキュメントツリー] - [インデックスの再構築] を一度実行してください。今後は、コンピューターをシャットダウンする前にプログラムを完全に終了してください。",
|
||||
"245": "前回の使用以降、データのインデックス作成が完了していません。[ドキュメントツリー] - [インデックスの再構築] を一度実行してください。正常に終了するには、右側のパネルから [アプリケーションの終了] を使用してください。",
|
||||
"246": "ドキュメントのタイトルに / を含めることはできません。_ に置き換えられました",
|
||||
"247": "ファイル [%s] は制限サイズ [%s] を超えているためアップロードされませんでした",
|
||||
"248": "目標の見出しがコンテナブロック内にあるためドロップできません"
|
||||
|
|
|
@ -1380,7 +1380,7 @@
|
|||
"70": "Przetwarzanie [%s], proszę czekać...",
|
||||
"71": "Nie udało się wstawić pliku zasobu, proszę ponownie otworzyć dokument",
|
||||
"72": "Zawartość została skopiowana do systemowego schowka, proszę przejść do SiYuan, aby wkleić",
|
||||
"73": "Importowanie, proszę czekać...",
|
||||
"73": "Importowanie danych...",
|
||||
"74": "Jądro nie zostało w pełni uruchomione [%d%%], proszę spróbować ponownie później",
|
||||
"75": "Nie udało się uzyskać dostępu do pliku",
|
||||
"76": "Weryfikacja łączności sieciowej dostawcy usługi przechowywania w chmurze jest nieprawidłowa, proszę sprawdzić konfigurację sieci",
|
||||
|
|
|
@ -1380,7 +1380,7 @@
|
|||
"70": "Обработка [%s], пожалуйста, подождите...",
|
||||
"71": "Не удалось вставить файл ресурса, пожалуйста, повторно откройте документ",
|
||||
"72": "Содержимое было скопировано в буфер обмена системы, пожалуйста, перейдите в SiYuan для вставки",
|
||||
"73": "Импорт, пожалуйста, подождите...",
|
||||
"73": "Импорт данных...",
|
||||
"74": "Ядро еще не полностью запущено [%d%%], пожалуйста, попробуйте позже",
|
||||
"75": "Попытка доступа к файлу не удалась",
|
||||
"76": "Проверка сетевого подключения поставщика облачного хранилища аномальная, пожалуйста, проверьте сетевую конфигурацию",
|
||||
|
|
|
@ -39,8 +39,8 @@
|
|||
"enterKey": "回車",
|
||||
"doubleClick": "雙擊",
|
||||
"click": "點擊",
|
||||
"allowHTMLBLockScript": "允許執行 HTML 區塊內腳本",
|
||||
"allowHTMLBLockScriptTip": "啟用後將不對 HTML 區塊中的程式碼進行安全過濾,請注意潛在的 XSS 攻擊風險",
|
||||
"allowHTMLBLockScript": "允許執行 HTML 塊內腳本",
|
||||
"allowHTMLBLockScriptTip": "啟用後將不對 HTML 塊中的程式碼進行安全過濾,請注意潛在的 XSS 攻擊風險",
|
||||
"autoLaunchMode0": "不自動啟動",
|
||||
"autoLaunchMode1": "開機自動啟動",
|
||||
"autoLaunchMode2": "開機後自動啟動並最小化主介面",
|
||||
|
@ -57,10 +57,10 @@
|
|||
"editorMarkdownInlineUnderscore": "Markdown 行級底線語法",
|
||||
"editorMarkdownInlineUnderscoreTip": "啟用後將支援 <code class='fn__code'>_foo_</code> 傾斜語法和 <code class='fn__code'>__foo__</code> 加粗語法輸入",
|
||||
"currentNotebook": "目前筆記本",
|
||||
"containerBlockTip1": "啟用容器區塊後會導致搜尋結果重複",
|
||||
"containerBlockTip2": "啟用文件區塊目前僅支援搜尋文件名稱",
|
||||
"containerBlockTip1": "啟用容器塊後會導致搜尋結果重複",
|
||||
"containerBlockTip2": "啟用文件塊目前僅支援搜尋文件名稱",
|
||||
"copyAsPNG": "複製為 PNG",
|
||||
"unbindBlock": "取消綁定區塊",
|
||||
"unbindBlock": "取消綁定塊",
|
||||
"showTitle": "顯示資料庫標題",
|
||||
"fillCreated": "預設填滿創建時間",
|
||||
"removeCard": "移除閃卡",
|
||||
|
@ -89,7 +89,7 @@
|
|||
"year": "年",
|
||||
"pastDate": "前",
|
||||
"nextDate": "後",
|
||||
"listInvalidRefBlocks": "列出引用失效的區塊",
|
||||
"listInvalidRefBlocks": "列出引用失效的塊",
|
||||
"listItemDotNumberClickFocus": "清單項目圓點/數字點選聚焦",
|
||||
"listItemDotNumberClickFocusTip": "啟用後點選清單項目的圓點/數字將進入聚焦",
|
||||
"reviewMode": "複習模式",
|
||||
|
@ -97,7 +97,7 @@
|
|||
"reviewMode0": "新舊混合",
|
||||
"reviewMode1": "新卡優先",
|
||||
"reviewMode2": "舊卡優先",
|
||||
"fileAnnoRefPlaceholder": "請輸入區塊 ID",
|
||||
"fileAnnoRefPlaceholder": "請輸入塊 ID",
|
||||
"addToDatabase": "新增至資料庫",
|
||||
"clearContext": "清空上下文",
|
||||
"cloudStoragePurge": "清理雲端儲存",
|
||||
|
@ -137,9 +137,9 @@
|
|||
"tag": "標籤",
|
||||
"u": "底線",
|
||||
"docTitle": "文檔標題",
|
||||
"codeBlock": "程式碼區塊",
|
||||
"mathBlock": "公式區塊",
|
||||
"htmlBlock": "HTML 區塊"
|
||||
"codeBlock": "程式碼塊",
|
||||
"mathBlock": "公式塊",
|
||||
"htmlBlock": "HTML 塊"
|
||||
},
|
||||
"selected": "已選擇",
|
||||
"loadMore": "載入更多",
|
||||
|
@ -524,10 +524,10 @@
|
|||
"syncConfGuide4": "立即同步?",
|
||||
"syncConfGuide5": "如果資料量較大,第一次同步會比較慢,請耐心等待<br>iOS/iPad 端在同步時請勿切換應用並保持螢幕恆亮",
|
||||
"copyPlainText": "複製純文字",
|
||||
"findInDoc": "${x} 個文件中符合 ${y} 個區塊",
|
||||
"jumpToParentNext": "跳到父區塊的下一個區塊",
|
||||
"jumpToParentPrev": "跳到父區塊的上一個區塊",
|
||||
"jumpToParent": "跳到父區塊",
|
||||
"findInDoc": "${x} 個文件中符合 ${y} 個塊",
|
||||
"jumpToParentNext": "跳到父塊的下一個塊",
|
||||
"jumpToParentPrev": "跳到父塊的上一個塊",
|
||||
"jumpToParent": "跳到父塊",
|
||||
"initRepoKeyTip": "如果其他設備上已經初始化過密鑰,請使用 [導入密鑰] 或者通過相同的密碼生成密鑰,否則無法雲端同步資料,所以請務必在所有設備上使用相同的密鑰",
|
||||
"crossKeepLazyLoad": "跨頁多選需在更多菜單中選中【保持已載入內容】",
|
||||
"keepLazyLoad": "保持已載入的內容",
|
||||
|
@ -1090,7 +1090,7 @@
|
|||
"appearance": "外觀",
|
||||
"export0": "原始文字",
|
||||
"export1": "引述塊",
|
||||
"export2": "錨文字區塊鏈",
|
||||
"export2": "錨文字塊鏈",
|
||||
"export3": "僅錨文字",
|
||||
"export4": "註腳",
|
||||
"export5": "PDF 標註引用",
|
||||
|
@ -1380,7 +1380,7 @@
|
|||
"70": "正在處理 [%s],請稍等...",
|
||||
"71": "插入資料檔失敗,請重新打開文檔",
|
||||
"72": "內容已經複製到系統剪貼簿,請到思源中進行貼上",
|
||||
"73": "正在導入,請稍等...",
|
||||
"73": "導入數據中...",
|
||||
"74": "kernel尚未完全啟動 [%d%%],請稍後再試",
|
||||
"75": "嘗試訪問資料檔失敗",
|
||||
"76": "雲端存儲服務提供商網絡連通性校驗異常,請檢查網絡配置",
|
||||
|
@ -1547,7 +1547,7 @@
|
|||
"237": "[%d] 個市集包已經全部更新成功",
|
||||
"238": "市集包 [%s] 更新失敗,請稍後再試",
|
||||
"239": "相關操作正在處理中,請稍後再試",
|
||||
"240": "目前拖曳標題位於容器區塊中,無法進行拖曳操作",
|
||||
"240": "目前拖曳標題位於容器塊中,無法進行拖曳操作",
|
||||
"241": "不支持拖曳為自己的子標題",
|
||||
"242": "目前可用空間 [%s],至少需要 [%s] 才能執行該動作",
|
||||
"243": "僅列出前 [%d] 個標籤(含子標籤),如需調整請修改 [設置 - 文檔樹 - 最大列出數量]",
|
||||
|
@ -1555,6 +1555,6 @@
|
|||
"245": "上次使用後未完成資料索引,請執行一次 [文檔樹 - 重建索引]。以後請使用右側欄面板中的 [退出應用] 進行正常退出",
|
||||
"246": "文件標題不能包含 /,已經使用 _ 替換",
|
||||
"247": "檔案 [%s] 大於最大限制 [%s],已忽略上傳至社群圖床",
|
||||
"248": "目標標題位於容器區塊中,無法作為放置點"
|
||||
"248": "目標標題位於容器塊中,無法作為放置點"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1380,7 +1380,7 @@
|
|||
"70": "正在处理 [%s],请稍等...",
|
||||
"71": "插入资源文件失败,请重新打开文档",
|
||||
"72": "内容已经复制到系统剪切板,请到思源中进行粘贴",
|
||||
"73": "正在导入,请稍等...",
|
||||
"73": "导入数据中...",
|
||||
"74": "内核尚未完全启动 [%d%%],请稍后再试",
|
||||
"75": "尝试访问文件失败",
|
||||
"76": "云端存储服务提供商网络连通性校验异常,请检查网络配置",
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"title": "Please Start Here",
|
||||
"title-img": "background-color:#556;background-image: linear-gradient(30deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(150deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(30deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(150deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(60deg, #99a 25%, transparent 25.5%, transparent 75%, #99a 75%, #99a),linear-gradient(60deg, #99a 25%, transparent 25.5%, transparent 75%, #99a 75%, #99a);background-size:80px 140px;background-position: 0 0, 0 0, 40px 70px, 40px 70px, 0 0, 40px 70px;",
|
||||
"type": "doc",
|
||||
"updated": "20240612234733"
|
||||
"updated": "20241018102340"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -16,7 +16,7 @@
|
|||
"Type": "NodeSuperBlock",
|
||||
"Properties": {
|
||||
"id": "20210528120135-bznvpp6",
|
||||
"updated": "20240508004007"
|
||||
"updated": "20241018102340"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -31,7 +31,7 @@
|
|||
"Type": "NodeSuperBlock",
|
||||
"Properties": {
|
||||
"id": "20210528120142-hprb4ja",
|
||||
"updated": "20230728103732"
|
||||
"updated": "20241018102340"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -47,7 +47,7 @@
|
|||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20201225220954-keui8uy",
|
||||
"updated": "20210601233810"
|
||||
"updated": "20241018102340"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -62,7 +62,7 @@
|
|||
"ListData": {},
|
||||
"Properties": {
|
||||
"id": "20201225220954-dlgzk1o",
|
||||
"updated": "20230728103732"
|
||||
"updated": "20241018102340"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -74,7 +74,7 @@
|
|||
},
|
||||
"Properties": {
|
||||
"id": "20201225220954-e913snx",
|
||||
"updated": "20230728103732"
|
||||
"updated": "20241018102340"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -82,12 +82,21 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20210131161940-kfs31q6",
|
||||
"updated": "20230728103732"
|
||||
"updated": "20241018102340"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "Create a new notebook in the doc tree panel, and create a new doc under the notebook"
|
||||
"Data": "Create a new notebook in the "
|
||||
},
|
||||
{
|
||||
"Type": "NodeTextMark",
|
||||
"TextMarkType": "kbd",
|
||||
"TextMarkTextContent": "More"
|
||||
},
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": " menu of the doc tree panel, and create a new doc under the notebook"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"id": "20201210233038-3xr19g5",
|
||||
"title": "Conversion of Document and Heading",
|
||||
"type": "doc",
|
||||
"updated": "20240415092701"
|
||||
"updated": "20241018105907"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -445,7 +445,7 @@
|
|||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20210104091550-fualfrs",
|
||||
"updated": "20210104091550"
|
||||
"updated": "20241018105626"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -534,6 +534,102 @@
|
|||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018105907-fja873w",
|
||||
"Type": "NodeHeading",
|
||||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20241018105907-fja873w",
|
||||
"updated": "20241018105907"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "Convert List Item block to Document block"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018105907-kbn7z2a",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018105907-kbn7z2a",
|
||||
"updated": "20241018105907"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "In addition to converting heading blocks to document blocks, you can also convert list item blocks (not list blocks) to document blocks. Press and hold the block icon of the list item block, and then drag it to the document tree for conversion. After the list item block is converted to a document block:"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018105907-m783fzm",
|
||||
"Type": "NodeList",
|
||||
"ListData": {},
|
||||
"Properties": {
|
||||
"id": "20241018105907-m783fzm",
|
||||
"updated": "20241018105907"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018105907-grua5xf",
|
||||
"Type": "NodeListItem",
|
||||
"ListData": {
|
||||
"BulletChar": 42,
|
||||
"Marker": "Kg=="
|
||||
},
|
||||
"Properties": {
|
||||
"id": "20241018105907-grua5xf",
|
||||
"updated": "20241018105907"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018105907-iempctf",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018105907-iempctf",
|
||||
"updated": "20241018105907"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "The content of the first sub-block of the list item block will become the document title"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018105907-ayck4c3",
|
||||
"Type": "NodeListItem",
|
||||
"ListData": {
|
||||
"BulletChar": 42,
|
||||
"Marker": "Kg=="
|
||||
},
|
||||
"Properties": {
|
||||
"id": "20241018105907-ayck4c3",
|
||||
"updated": "20241018105907"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018105907-xna1wua",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018105907-xna1wua",
|
||||
"updated": "20241018105907"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "The sub-blocks of the list item block will remain unchanged"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -8,7 +8,7 @@
|
|||
"title": "请从这里开始",
|
||||
"title-img": "background-color:#556;background-image: linear-gradient(30deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(150deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(30deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(150deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(60deg, #99a 25%, transparent 25.5%, transparent 75%, #99a 75%, #99a),linear-gradient(60deg, #99a 25%, transparent 25.5%, transparent 75%, #99a 75%, #99a);background-size:80px 140px;background-position: 0 0, 0 0, 40px 70px, 40px 70px, 0 0, 40px 70px;",
|
||||
"type": "doc",
|
||||
"updated": "20240612234646"
|
||||
"updated": "20241018102134"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -16,7 +16,7 @@
|
|||
"Type": "NodeSuperBlock",
|
||||
"Properties": {
|
||||
"id": "20210528115012-vst5lwt",
|
||||
"updated": "20240507235007"
|
||||
"updated": "20241018102134"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -31,7 +31,7 @@
|
|||
"Type": "NodeSuperBlock",
|
||||
"Properties": {
|
||||
"id": "20210528115021-oj6gzg7",
|
||||
"updated": "20230728103645"
|
||||
"updated": "20241018102134"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -47,7 +47,7 @@
|
|||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20201225220955-f8lsff2",
|
||||
"updated": "20210601233041"
|
||||
"updated": "20241018102134"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -62,7 +62,7 @@
|
|||
"ListData": {},
|
||||
"Properties": {
|
||||
"id": "20201225220955-l154bn4",
|
||||
"updated": "20230728103645"
|
||||
"updated": "20241018102134"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -74,7 +74,7 @@
|
|||
},
|
||||
"Properties": {
|
||||
"id": "20201225220955-2nn1mns",
|
||||
"updated": "20230728103645"
|
||||
"updated": "20241018102134"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -82,12 +82,21 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20210131155408-3t627wc",
|
||||
"updated": "20230728103645"
|
||||
"updated": "20241018102134"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "在文档树面板中新建笔记本,在笔记本下新建文档"
|
||||
"Data": "在文档树面板的 "
|
||||
},
|
||||
{
|
||||
"Type": "NodeTextMark",
|
||||
"TextMarkType": "kbd",
|
||||
"TextMarkTextContent": "更多"
|
||||
},
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": " 菜单中新建笔记本,在笔记本下新建文档"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"id": "20201210103036-1x3vm8t",
|
||||
"title": "文档块和标题块的转换",
|
||||
"type": "doc",
|
||||
"updated": "20240415092415"
|
||||
"updated": "20241018104534"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -441,7 +441,8 @@
|
|||
"Type": "NodeHeading",
|
||||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20210104090801-s48mpeu"
|
||||
"id": "20210104090801-s48mpeu",
|
||||
"updated": "20241018104534"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -459,12 +460,12 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20210104090801-9kyqggg",
|
||||
"updated": "20240415092405"
|
||||
"updated": "20241018104534"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "在编辑器页签中选择需要转换的标题块,按住该标题块标识图标,然后就可以将其拖拽到文档树上转换了,标题块转换为文档块后:"
|
||||
"Data": "在编辑器页签中选择需要转换的标题块,按住该标题块的块标,然后就可以将其拖拽到文档树上转换了,标题块转换为文档块后:"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -532,6 +533,102 @@
|
|||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018104519-pb6ln2k",
|
||||
"Type": "NodeHeading",
|
||||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20241018104519-pb6ln2k",
|
||||
"updated": "20241018104519"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "将列表项块转换为文档块"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018104519-a4rvy3v",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018104519-a4rvy3v",
|
||||
"updated": "20241018104519"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "除了将标题块转换为文档块,还可以将列表项块转换为文档块(是列表项块,不是列表块),按住该列表项块的块标,然后就可以将其拖拽到文档树上转换了,列表项块转换为文档块后:"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018104519-kr24kek",
|
||||
"Type": "NodeList",
|
||||
"ListData": {},
|
||||
"Properties": {
|
||||
"id": "20241018104519-kr24kek",
|
||||
"updated": "20241018104519"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018104519-1kegugk",
|
||||
"Type": "NodeListItem",
|
||||
"ListData": {
|
||||
"BulletChar": 42,
|
||||
"Marker": "Kg=="
|
||||
},
|
||||
"Properties": {
|
||||
"id": "20241018104519-1kegugk",
|
||||
"updated": "20241018104519"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018104519-cb7isjy",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018104519-cb7isjy",
|
||||
"updated": "20241018104519"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "列表项块的首个子块的内容将变为文档名"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018104519-y2qhagm",
|
||||
"Type": "NodeListItem",
|
||||
"ListData": {
|
||||
"BulletChar": 42,
|
||||
"Marker": "Kg=="
|
||||
},
|
||||
"Properties": {
|
||||
"id": "20241018104519-y2qhagm",
|
||||
"updated": "20241018104519"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018104519-nfdaro6",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018104519-nfdaro6",
|
||||
"updated": "20241018104519"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "列表项块的子块保持原样"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -8,7 +8,7 @@
|
|||
"title": "請從這裡開始",
|
||||
"title-img": "background-color:#556;background-image: linear-gradient(30deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(150deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(30deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(150deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(60deg, #99a 25%, transparent 25.5%, transparent 75%, #99a 75%, #99a),linear-gradient(60deg, #99a 25%, transparent 25.5%, transparent 75%, #99a 75%, #99a);background-size:80px 140px;background-position: 0 0, 0 0, 40px 70px, 40px 70px, 0 0, 40px 70px;",
|
||||
"type": "doc",
|
||||
"updated": "20240612234708"
|
||||
"updated": "20241018105300"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -16,7 +16,7 @@
|
|||
"Type": "NodeSuperBlock",
|
||||
"Properties": {
|
||||
"id": "20211226115745-rorv31l",
|
||||
"updated": "20240508002520"
|
||||
"updated": "20241018102255"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -31,7 +31,7 @@
|
|||
"Type": "NodeSuperBlock",
|
||||
"Properties": {
|
||||
"id": "20211226115745-mwd9by9",
|
||||
"updated": "20230728103709"
|
||||
"updated": "20241018102255"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -47,7 +47,7 @@
|
|||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20211226115745-zr6pkjl",
|
||||
"updated": "20211225212423"
|
||||
"updated": "20241018102255"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -62,7 +62,7 @@
|
|||
"ListData": {},
|
||||
"Properties": {
|
||||
"id": "20211226115745-f8vrixq",
|
||||
"updated": "20230728103709"
|
||||
"updated": "20241018102255"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -74,7 +74,7 @@
|
|||
},
|
||||
"Properties": {
|
||||
"id": "20211226115745-5043oh9",
|
||||
"updated": "20230728103709"
|
||||
"updated": "20241018102255"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -82,12 +82,21 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20211226115745-n838dky",
|
||||
"updated": "20230728103709"
|
||||
"updated": "20241018102255"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "在文檔樹面板中新建筆記本,在筆記本下新建文檔"
|
||||
"Data": "在文檔樹面板的 "
|
||||
},
|
||||
{
|
||||
"Type": "NodeTextMark",
|
||||
"TextMarkType": "kbd",
|
||||
"TextMarkTextContent": "更多"
|
||||
},
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": " 選單中新筆記本,在筆記本下新建文檔"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -560,7 +569,7 @@
|
|||
"Type": "NodeSuperBlock",
|
||||
"Properties": {
|
||||
"id": "20240508002937-5bjgjq8",
|
||||
"updated": "20240508002937"
|
||||
"updated": "20241018105300"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -575,7 +584,7 @@
|
|||
"Type": "NodeSuperBlock",
|
||||
"Properties": {
|
||||
"id": "20240508002640-v70zcaf",
|
||||
"updated": "20240508002937"
|
||||
"updated": "20241018105300"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -593,7 +602,7 @@
|
|||
"bookmark": "✨",
|
||||
"id": "20211226115745-mwqouic",
|
||||
"style": "background-color: var(--b3-font-background5);",
|
||||
"updated": "20240508002640"
|
||||
"updated": "20241018105300"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -607,7 +616,7 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20211226115745-bygtonj",
|
||||
"updated": "20240508002640"
|
||||
"updated": "20241018105300"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -634,7 +643,7 @@
|
|||
},
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "。通過排版格式即可形成內容塊,這樣我們就能在區塊級上對思緒和知識進行整理,同時也能方便長文閱讀和輸出。"
|
||||
"Data": "。通過排版格式即可形成內容塊,這樣我們就能在塊級上對思緒和知識進行整理,同時也能方便長文閱讀和輸出。"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"id": "20211226120147-ib6yy3i",
|
||||
"title": "內容塊類型",
|
||||
"type": "doc",
|
||||
"updated": "20240818175953"
|
||||
"updated": "20241018105334"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -1525,7 +1525,7 @@
|
|||
"HeadingLevel": 3,
|
||||
"Properties": {
|
||||
"id": "20220429114938-37kksd9",
|
||||
"updated": "20220429114945"
|
||||
"updated": "20241018105334"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -1611,7 +1611,7 @@
|
|||
"ListData": {},
|
||||
"Properties": {
|
||||
"id": "20240427230732-snprakd",
|
||||
"updated": "20240427230732"
|
||||
"updated": "20241018105334"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -1623,7 +1623,7 @@
|
|||
},
|
||||
"Properties": {
|
||||
"id": "20240427230732-tgvmt21",
|
||||
"updated": "20240427230732"
|
||||
"updated": "20241018105334"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -1631,12 +1631,12 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20240427230732-p75fah5",
|
||||
"updated": "20240427230732"
|
||||
"updated": "20241018105334"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "使用 HTML 區塊時預設會對其中的程式碼進行安全過濾,如果不需要過濾,請開啟 "
|
||||
"Data": "使用 HTML 塊時預設會對其中的程式碼進行安全過濾,如果不需要過濾,請開啟 "
|
||||
},
|
||||
{
|
||||
"Type": "NodeTextMark",
|
||||
|
@ -1659,7 +1659,7 @@
|
|||
{
|
||||
"Type": "NodeTextMark",
|
||||
"TextMarkType": "kbd",
|
||||
"TextMarkTextContent": "允許執行 HTML 區塊內腳本"
|
||||
"TextMarkTextContent": "允許執行 HTML 塊內腳本"
|
||||
},
|
||||
{
|
||||
"Type": "NodeText",
|
||||
|
@ -1678,7 +1678,7 @@
|
|||
},
|
||||
"Properties": {
|
||||
"id": "20240427230732-dhlczme",
|
||||
"updated": "20240427230732"
|
||||
"updated": "20241018105314"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -1686,12 +1686,12 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20240427230732-an8u8ps",
|
||||
"updated": "20240427230732"
|
||||
"updated": "20241018105314"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "因為 Markdown 規範對 HTML 區塊解析規則較為複雜,建議使用 "
|
||||
"Data": "因為 Markdown 規範對 HTML 塊解析規則較為複雜,建議使用 "
|
||||
},
|
||||
{
|
||||
"Type": "NodeTextMark",
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
"id": "20211226120422-bkzsd2e",
|
||||
"title": "文檔塊和標題塊的轉換",
|
||||
"type": "doc",
|
||||
"updated": "20240415092439"
|
||||
"updated": "20241018105510"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -384,7 +384,7 @@
|
|||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20211226120500-hi5u5jt",
|
||||
"updated": "20211225234143"
|
||||
"updated": "20241018105510"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -398,12 +398,12 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20240415092439-6is1c68",
|
||||
"updated": "20240415092439"
|
||||
"updated": "20241018105006"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "在編輯器頁簽中選擇需要轉換的標題塊,按住該標題塊標識圖標,然後就可以將其拖曳到文檔樹上轉換了,標題塊轉換為文檔塊後:"
|
||||
"Data": "在編輯器頁簽中選擇需要轉換的標題塊,按住該標題塊的塊標,然後就可以將其拖曳到文檔樹上轉換了,標題塊轉換為文檔塊後:"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -413,7 +413,7 @@
|
|||
"ListData": {},
|
||||
"Properties": {
|
||||
"id": "20240415092439-ffkmd1j",
|
||||
"updated": "20240415092439"
|
||||
"updated": "20241018105510"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -453,7 +453,7 @@
|
|||
},
|
||||
"Properties": {
|
||||
"id": "20240415092439-smqxbga",
|
||||
"updated": "20240415092439"
|
||||
"updated": "20241018105510"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -461,12 +461,12 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20240415092439-t6bu4l9",
|
||||
"updated": "20240415092439"
|
||||
"updated": "20241018105510"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "原標題區塊下方如果有子標題,則會依照這些子標題中最大的層級作為新文件中二級標題,其餘子標題會根據相對層級進行調整,例如原標題區塊下方包含了三、四、五 層級子標題,則轉換為文件區塊後會將這些子標題轉換為二、三、四級標題"
|
||||
"Data": "原標題塊下方如果有子標題,則會依照這些子標題中最大的層級作為新文件中二級標題,其餘子標題會根據相對層級進行調整,例如原標題塊下方包含了三、四、五 層級子標題,則轉換為文檔塊後會將這些子標題轉換為二、三、四級標題"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -475,12 +475,100 @@
|
|||
]
|
||||
},
|
||||
{
|
||||
"ID": "20211226120500-8o1jmk7",
|
||||
"ID": "20241018104604-vokj7e6",
|
||||
"Type": "NodeHeading",
|
||||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20241018104604-vokj7e6",
|
||||
"updated": "20241018105050"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "將列表項塊轉換為文檔塊"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018104604-tjb0e1m",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20211226120500-8o1jmk7",
|
||||
"updated": "20211225234143"
|
||||
}
|
||||
"id": "20241018104604-tjb0e1m",
|
||||
"updated": "20241018105050"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "除了將標題塊轉換為文檔塊,還可以將列表項塊轉換為文檔塊(是列表項塊,不是列表塊),按住列表項塊的塊標,然後就可以將其拖曳到文檔樹上轉換了,列表項塊轉換為文檔塊後:"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018104604-53lc1kw",
|
||||
"Type": "NodeList",
|
||||
"ListData": {},
|
||||
"Properties": {
|
||||
"id": "20241018104604-53lc1kw",
|
||||
"updated": "20241018104901"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018104604-9na2y62",
|
||||
"Type": "NodeListItem",
|
||||
"ListData": {
|
||||
"BulletChar": 42,
|
||||
"Marker": "Kg=="
|
||||
},
|
||||
"Properties": {
|
||||
"id": "20241018104604-9na2y62",
|
||||
"updated": "20241018104901"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018104604-p6wr23d",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018104604-p6wr23d",
|
||||
"updated": "20241018104901"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "列表項塊的首個子塊的內容將變成文檔名"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018104604-194ukvr",
|
||||
"Type": "NodeListItem",
|
||||
"ListData": {
|
||||
"BulletChar": 42,
|
||||
"Marker": "Kg=="
|
||||
},
|
||||
"Properties": {
|
||||
"id": "20241018104604-194ukvr",
|
||||
"updated": "20241018104604"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018104604-e1qzuat",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018104604-e1qzuat",
|
||||
"updated": "20241018104604"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "列表項塊的子塊保持原樣"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -8,7 +8,7 @@
|
|||
"title": "排版元素",
|
||||
"title-img": "background-color: hsl(2, 57%, 40%);background-image: repeating-linear-gradient(transparent, transparent 50px, rgba(0,0,0,.4) 50px, rgba(0,0,0,.4) 53px, transparent 53px, transparent 63px, rgba(0,0,0,.4) 63px, rgba(0,0,0,.4) 66px, transparent 66px, transparent 116px, rgba(0,0,0,.5) 116px, rgba(0,0,0,.5) 166px, rgba(255,255,255,.2) 166px, rgba(255,255,255,.2) 169px, rgba(0,0,0,.5) 169px, rgba(0,0,0,.5) 179px, rgba(255,255,255,.2) 179px, rgba(255,255,255,.2) 182px, rgba(0,0,0,.5) 182px, rgba(0,0,0,.5) 232px, transparent 232px),repeating-linear-gradient(270deg, transparent, transparent 50px, rgba(0,0,0,.4) 50px, rgba(0,0,0,.4) 53px, transparent 53px, transparent 63px, rgba(0,0,0,.4) 63px, rgba(0,0,0,.4) 66px, transparent 66px, transparent 116px, rgba(0,0,0,.5) 116px, rgba(0,0,0,.5) 166px, rgba(255,255,255,.2) 166px, rgba(255,255,255,.2) 169px, rgba(0,0,0,.5) 169px, rgba(0,0,0,.5) 179px, rgba(255,255,255,.2) 179px, rgba(255,255,255,.2) 182px, rgba(0,0,0,.5) 182px, rgba(0,0,0,.5) 232px, transparent 232px),repeating-linear-gradient(125deg, transparent, transparent 2px, rgba(0,0,0,.2) 2px, rgba(0,0,0,.2) 3px, transparent 3px, transparent 5px, rgba(0,0,0,.2) 5px);",
|
||||
"type": "doc",
|
||||
"updated": "20240702222119"
|
||||
"updated": "20241018105327"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -2251,7 +2251,7 @@
|
|||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20220312004712-5dfiars",
|
||||
"updated": "20220312004723"
|
||||
"updated": "20241018105327"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -2274,7 +2274,7 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20220312122707-8258e11",
|
||||
"updated": "20240427231052"
|
||||
"updated": "20241018105327"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -2286,7 +2286,7 @@
|
|||
"TextMarkType": "block-ref",
|
||||
"TextMarkBlockRefID": "20240427230732-snprakd",
|
||||
"TextMarkBlockRefSubtype": "s",
|
||||
"TextMarkTextContent": "HTML 區塊注意"
|
||||
"TextMarkTextContent": "HTML 塊注意"
|
||||
},
|
||||
{
|
||||
"Type": "NodeText",
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"id": "20211226122549-jktxego",
|
||||
"title": "快捷鍵",
|
||||
"type": "doc",
|
||||
"updated": "20241009230052"
|
||||
"updated": "20241018105254"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -3122,7 +3122,7 @@
|
|||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20211226122652-htptsmh",
|
||||
"updated": "20240524085750"
|
||||
"updated": "20241018105254"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -3137,7 +3137,7 @@
|
|||
"HeadingLevel": 3,
|
||||
"Properties": {
|
||||
"id": "20211226122652-xp1hi60",
|
||||
"updated": "20240524085750"
|
||||
"updated": "20241018105254"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -3157,7 +3157,7 @@
|
|||
"Properties": {
|
||||
"colgroup": "||",
|
||||
"id": "20240112151141-ggglv0f",
|
||||
"updated": "20240524085750"
|
||||
"updated": "20241018105254"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -3577,7 +3577,7 @@
|
|||
},
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "跳到父區塊的下一個區塊"
|
||||
"Data": "跳到父塊的下一個塊"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -3644,7 +3644,7 @@
|
|||
},
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "跳到父區塊的上一個區塊"
|
||||
"Data": "跳到父塊的上一個塊"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -3704,7 +3704,7 @@
|
|||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "跳到父區塊"
|
||||
"Data": "跳到父塊"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -3892,7 +3892,7 @@
|
|||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "選擇內容時為設定區塊命名"
|
||||
"Data": "選擇內容時為設定塊命名"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
@ -7149,7 +7149,7 @@
|
|||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "對於資料庫區塊是 "
|
||||
"Data": "對於資料庫塊是 "
|
||||
},
|
||||
{
|
||||
"Type": "NodeTextMark",
|
||||
|
@ -7203,7 +7203,7 @@
|
|||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "僅對資料庫區塊可用,可前往 "
|
||||
"Data": "僅對資料庫塊可用,可前往 "
|
||||
},
|
||||
{
|
||||
"Type": "NodeTextMark",
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"id": "20221223221501-mops33i",
|
||||
"title": "閃卡",
|
||||
"type": "doc",
|
||||
"updated": "20240326165451"
|
||||
"updated": "20241018105514"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -522,7 +522,7 @@
|
|||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20240128111751-bb41541",
|
||||
"updated": "20240128111854"
|
||||
"updated": "20241018105514"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -536,7 +536,7 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20240128111910-2n2j702",
|
||||
"updated": "20240224103933"
|
||||
"updated": "20241018105514"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -577,7 +577,7 @@
|
|||
},
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": " 可以使用文件區塊自訂屬性進行覆寫:"
|
||||
"Data": " 可以使用文檔塊自訂屬性進行覆寫:"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"id": "20240208171522-y7dxcno",
|
||||
"title": "資料庫",
|
||||
"type": "doc",
|
||||
"updated": "20240818174636"
|
||||
"updated": "20241018105422"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -45,7 +45,7 @@
|
|||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20240208171620-hbecr4u",
|
||||
"updated": "20240208171620"
|
||||
"updated": "20241018105422"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -60,7 +60,7 @@
|
|||
"ListData": {},
|
||||
"Properties": {
|
||||
"id": "20240208171620-r36g6d4",
|
||||
"updated": "20240208171621"
|
||||
"updated": "20241018105422"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -137,7 +137,7 @@
|
|||
},
|
||||
"Properties": {
|
||||
"id": "20240208171620-b1b1l10",
|
||||
"updated": "20240208171620"
|
||||
"updated": "20241018105422"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -160,7 +160,7 @@
|
|||
"ListData": {},
|
||||
"Properties": {
|
||||
"id": "20240208171620-o6mi24d",
|
||||
"updated": "20240208171620"
|
||||
"updated": "20241018105422"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -200,7 +200,7 @@
|
|||
},
|
||||
"Properties": {
|
||||
"id": "20240208171620-ks66a38",
|
||||
"updated": "20240208171620"
|
||||
"updated": "20241018105422"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -208,12 +208,12 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20240208171620-eo37wp1",
|
||||
"updated": "20240208171620"
|
||||
"updated": "20241018105422"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "內容塊:透過拖曳到表格新增的行,或透過區塊標選單 "
|
||||
"Data": "內容塊:透過拖曳到表格新增的行,或透過塊標選單 "
|
||||
},
|
||||
{
|
||||
"Type": "NodeTextMark",
|
||||
|
@ -296,7 +296,7 @@
|
|||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20240208171620-kdmsvx8",
|
||||
"updated": "20240208171620"
|
||||
"updated": "20241018105418"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -310,12 +310,12 @@
|
|||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20240208171620-3oc3qf5",
|
||||
"updated": "20240208171621"
|
||||
"updated": "20241018105418"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "複製資料庫區塊後貼上將形成鏡像資料庫,即這些資料庫區塊共享相同的資料庫數據,修改任何一個資料庫區塊的資料會同步到其他所有鏡像中。"
|
||||
"Data": "複製資料庫塊後貼上將形成鏡像資料庫,即這些資料庫塊共享相同的資料庫數據,修改任何一個資料庫塊的資料會同步到其他所有鏡像中。"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
"title": "スタートガイド",
|
||||
"title-img": "background-color:#556;background-image: linear-gradient(30deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(150deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(30deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(150deg, #445 12%, transparent 12.5%, transparent 87%, #445 87.5%, #445),linear-gradient(60deg, #99a 25%, transparent 25.5%, transparent 75%, #99a 75%, #99a),linear-gradient(60deg, #99a 25%, transparent 25.5%, transparent 75%, #99a 75%, #99a);background-size:80px 140px;background-position: 0 0, 0 0, 40px 70px, 40px 70px, 0 0, 40px 70px;",
|
||||
"type": "doc",
|
||||
"updated": "20240612234804"
|
||||
"updated": "20241018102426"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -18,7 +18,7 @@
|
|||
"Properties": {
|
||||
"ID": "20240530101000-bw4rbw9",
|
||||
"id": "20240530101000-x3xk6o7",
|
||||
"updated": "20240530101000"
|
||||
"updated": "20241018102426"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -34,7 +34,7 @@
|
|||
"Properties": {
|
||||
"ID": "20240530101000-wuwb451",
|
||||
"id": "20240530101000-wzoxemv",
|
||||
"updated": "20240530101000"
|
||||
"updated": "20241018102426"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -51,7 +51,7 @@
|
|||
"Properties": {
|
||||
"ID": "20240530101000-1pmo5nw",
|
||||
"id": "20240530101000-ocvz556",
|
||||
"updated": "20240530101000"
|
||||
"updated": "20241018102426"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -67,7 +67,7 @@
|
|||
"Properties": {
|
||||
"ID": "20240530101000-2p15cvs",
|
||||
"id": "20240530101000-jrj1ipn",
|
||||
"updated": "20240530101000"
|
||||
"updated": "20241018102426"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -80,21 +80,29 @@
|
|||
"Properties": {
|
||||
"ID": "20240530101000-a3cojva",
|
||||
"id": "20240530101000-kocadwy",
|
||||
"updated": "20240530101000"
|
||||
"updated": "20241018102426"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20240530101000-ohhb34s",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"ID": "20240530101000-xldcivl",
|
||||
"id": "20240530101000-ohhb34s",
|
||||
"updated": "20240530101000"
|
||||
"updated": "20241018102426"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "ドキュメントツリーパネルで新しいノートブックを作成し、その中に新しいドキュメントを作成します"
|
||||
"Data": "ドキュメント ツリー パネルの "
|
||||
},
|
||||
{
|
||||
"Type": "NodeTextMark",
|
||||
"TextMarkType": "kbd",
|
||||
"TextMarkTextContent": "その他"
|
||||
},
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": " メニューで新しいノートブックを作成し、そのノートブックの下に新しいドキュメントを作成します"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
"id": "20240530101000-dro2zi9",
|
||||
"title": "ドキュメントと見出しの変換",
|
||||
"type": "doc",
|
||||
"updated": "20240530101000"
|
||||
"updated": "20241018110150"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -501,7 +501,7 @@
|
|||
"Properties": {
|
||||
"ID": "20240530101000-5vxf106",
|
||||
"id": "20240530101000-0zk926s",
|
||||
"updated": "20240530101000"
|
||||
"updated": "20241018110150"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
|
@ -626,6 +626,116 @@
|
|||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018110150-w9cib6e",
|
||||
"Type": "NodeHeading",
|
||||
"HeadingLevel": 2,
|
||||
"Properties": {
|
||||
"id": "20241018110150-w9cib6e",
|
||||
"updated": "20241018110150"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "リストアイテムブロックからドキュメントブロックへの変換"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018110150-xld5f58",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018110150-xld5f58",
|
||||
"updated": "20241018110150"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "見出しブロックをドキュメントブロックに変換することに加えて、リストアイテムブロックをドキュメントブロックに変換することもできます(ここで言うリストアイテムブロックはリストブロックではありません)。対象のリストアイテムブロックを選択し、ブロックアイコンをドキュメントツリーにドラッグ&ドロップすると、リストアイテムブロックがドキュメントブロックに変換されます。"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018110150-r0km996",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018110150-r0km996",
|
||||
"updated": "20241018110150"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "リストアイテムブロックがドキュメントブロックに変換されると:"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018110150-0u2apch",
|
||||
"Type": "NodeList",
|
||||
"ListData": {},
|
||||
"Properties": {
|
||||
"id": "20241018110150-0u2apch",
|
||||
"updated": "20241018110150"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018110150-f842c4j",
|
||||
"Type": "NodeListItem",
|
||||
"ListData": {
|
||||
"BulletChar": 42,
|
||||
"Marker": "Kg=="
|
||||
},
|
||||
"Properties": {
|
||||
"id": "20241018110150-f842c4j",
|
||||
"updated": "20241018110150"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018110150-pljtq8j",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018110150-pljtq8j",
|
||||
"updated": "20241018110150"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "リストアイテムブロックの最初のサブブロックの内容がドキュメントの名前になります"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"ID": "20241018110150-lta3vv6",
|
||||
"Type": "NodeListItem",
|
||||
"ListData": {
|
||||
"BulletChar": 42,
|
||||
"Marker": "Kg=="
|
||||
},
|
||||
"Properties": {
|
||||
"id": "20241018110150-lta3vv6",
|
||||
"updated": "20241018110150"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"ID": "20241018110150-r699zi0",
|
||||
"Type": "NodeParagraph",
|
||||
"Properties": {
|
||||
"id": "20241018110150-r699zi0",
|
||||
"updated": "20241018110150"
|
||||
},
|
||||
"Children": [
|
||||
{
|
||||
"Type": "NodeText",
|
||||
"Data": "リストアイテムブロックのサブブロックはそのまま保持されます"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
2
app/stage/protyle/js/lute/lute.min.js
vendored
2
app/stage/protyle/js/lute/lute.min.js
vendored
File diff suppressed because one or more lines are too long
|
@ -23,6 +23,7 @@ import (
|
|||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
|
@ -30,6 +31,7 @@ import (
|
|||
"github.com/88250/lute/parse"
|
||||
"github.com/88250/lute/render"
|
||||
jsoniter "github.com/json-iterator/go"
|
||||
"github.com/panjf2000/ants/v2"
|
||||
"github.com/siyuan-note/filelock"
|
||||
"github.com/siyuan-note/logging"
|
||||
"github.com/siyuan-note/siyuan/kernel/cache"
|
||||
|
@ -53,7 +55,7 @@ func LoadTrees(ids []string) (ret map[string]*parse.Tree) {
|
|||
blockIDs[bt.RootID] = append(blockIDs[bt.RootID], bt.ID)
|
||||
}
|
||||
|
||||
trees, errs := BatchLoadTrees(boxIDs, paths, luteEngine)
|
||||
trees, errs := batchLoadTrees(boxIDs, paths, luteEngine)
|
||||
for i := range trees {
|
||||
tree := trees[i]
|
||||
err := errs[i]
|
||||
|
@ -82,9 +84,25 @@ func LoadTree(boxID, p string, luteEngine *lute.Lute) (ret *parse.Tree, err erro
|
|||
return
|
||||
}
|
||||
|
||||
func BatchLoadTrees(boxIDs, paths []string, luteEngine *lute.Lute) (ret []*parse.Tree, errs []error) {
|
||||
var wg sync.WaitGroup
|
||||
func batchLoadTrees(boxIDs, paths []string, luteEngine *lute.Lute) (ret []*parse.Tree, errs []error) {
|
||||
waitGroup := sync.WaitGroup{}
|
||||
lock := sync.Mutex{}
|
||||
poolSize := runtime.NumCPU()
|
||||
if 8 < poolSize {
|
||||
poolSize = 8
|
||||
}
|
||||
p, _ := ants.NewPoolWithFunc(poolSize, func(arg interface{}) {
|
||||
defer waitGroup.Done()
|
||||
|
||||
i := arg.(int)
|
||||
boxID := boxIDs[i]
|
||||
path := paths[i]
|
||||
tree, err := LoadTree(boxID, path, luteEngine)
|
||||
lock.Lock()
|
||||
ret = append(ret, tree)
|
||||
errs = append(errs, err)
|
||||
lock.Unlock()
|
||||
})
|
||||
loaded := map[string]bool{}
|
||||
for i := range paths {
|
||||
if loaded[boxIDs[i]+paths[i]] {
|
||||
|
@ -92,21 +110,12 @@ func BatchLoadTrees(boxIDs, paths []string, luteEngine *lute.Lute) (ret []*parse
|
|||
}
|
||||
|
||||
loaded[boxIDs[i]+paths[i]] = true
|
||||
wg.Add(1)
|
||||
|
||||
go func(i int) {
|
||||
defer wg.Done()
|
||||
|
||||
boxID := boxIDs[i]
|
||||
path := paths[i]
|
||||
tree, err := LoadTree(boxID, path, luteEngine)
|
||||
lock.Lock()
|
||||
ret = append(ret, tree)
|
||||
errs = append(errs, err)
|
||||
lock.Unlock()
|
||||
}(i)
|
||||
waitGroup.Add(1)
|
||||
p.Invoke(i)
|
||||
}
|
||||
wg.Wait()
|
||||
waitGroup.Wait()
|
||||
p.Release()
|
||||
return
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ require (
|
|||
github.com/88250/epub v0.0.0-20230830085737-c19055cd1f48
|
||||
github.com/88250/go-humanize v0.0.0-20240424102817-4f78fac47ea7
|
||||
github.com/88250/gulu v1.2.3-0.20240612035750-c9cf5f7a4d02
|
||||
github.com/88250/lute v1.7.7-0.20241014033420-59a8c9c122ff
|
||||
github.com/88250/lute v1.7.7-0.20241018092725-a6a8f3976fe7
|
||||
github.com/88250/pdfcpu v0.3.14-0.20230401044135-c7369a99720c
|
||||
github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1
|
||||
github.com/ClarkThan/ahocorasick v0.0.0-20231011042242-30d1ef1347f4
|
||||
|
|
|
@ -14,8 +14,8 @@ github.com/88250/go-sqlite3 v1.14.13-0.20231214121541-e7f54c482950 h1:Pa5hMiBceT
|
|||
github.com/88250/go-sqlite3 v1.14.13-0.20231214121541-e7f54c482950/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
|
||||
github.com/88250/gulu v1.2.3-0.20240612035750-c9cf5f7a4d02 h1:3e5+yobj655pTeKOYMbJrnc1mE51ZkbXIxquTYZuYCY=
|
||||
github.com/88250/gulu v1.2.3-0.20240612035750-c9cf5f7a4d02/go.mod h1:MUfzyfmbPrRDZLqxc7aPrVYveatTHRfoUa5TynPS0i8=
|
||||
github.com/88250/lute v1.7.7-0.20241014033420-59a8c9c122ff h1:yh3HI5oER2KXHG4UtAW6zJmeGPTsP+RkaOKpYmhIzy4=
|
||||
github.com/88250/lute v1.7.7-0.20241014033420-59a8c9c122ff/go.mod h1:VDAzL8b+oCh+e3NAlmwwLzC53ten0rZlS8NboB7ljtk=
|
||||
github.com/88250/lute v1.7.7-0.20241018092725-a6a8f3976fe7 h1:e+C0PFFJd5EW2fefghuPzho+6Tx7GqWYNQ0To8bq1+w=
|
||||
github.com/88250/lute v1.7.7-0.20241018092725-a6a8f3976fe7/go.mod h1:VDAzL8b+oCh+e3NAlmwwLzC53ten0rZlS8NboB7ljtk=
|
||||
github.com/88250/pdfcpu v0.3.14-0.20230401044135-c7369a99720c h1:Dl/8S9iLyPMTElnWIBxmjaLiWrkI5P4a21ivwAn5pU0=
|
||||
github.com/88250/pdfcpu v0.3.14-0.20230401044135-c7369a99720c/go.mod h1:S5YT38L/GCjVjmB4PB84PymA1qfopjEhfhTNQilLpv4=
|
||||
github.com/88250/vitess-sqlparser v0.0.0-20210205111146-56a2ded2aba1 h1:48T899JQDwyyRu9yXHePYlPdHtpJfrJEUGBMH3SMBWY=
|
||||
|
|
|
@ -144,11 +144,10 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
|
|||
|
||||
luteEngine := util.NewLute()
|
||||
blockIDs := map[string]string{}
|
||||
avBlockIDs := map[string]string{}
|
||||
trees := map[string]*parse.Tree{}
|
||||
|
||||
// 重新生成块 ID
|
||||
for _, syPath := range syPaths {
|
||||
for i, syPath := range syPaths {
|
||||
data, readErr := os.ReadFile(syPath)
|
||||
if nil != readErr {
|
||||
logging.LogErrorf("read .sy [%s] failed: %s", syPath, readErr)
|
||||
|
@ -170,28 +169,19 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
|
|||
// Keep original creation time when importing .sy.zip https://github.com/siyuan-note/siyuan/issues/9923
|
||||
newNodeID := util.TimeFromID(n.ID) + "-" + util.RandString(7)
|
||||
blockIDs[n.ID] = newNodeID
|
||||
oldNodeID := n.ID
|
||||
n.ID = newNodeID
|
||||
n.SetIALAttr("id", newNodeID)
|
||||
|
||||
// 重新指向数据库属性值
|
||||
for _, kv := range n.KramdownIAL {
|
||||
if 2 > len(kv) {
|
||||
continue
|
||||
}
|
||||
if strings.HasPrefix(kv[0], av.NodeAttrNameAvs) {
|
||||
avBlockIDs[oldNodeID] = newNodeID
|
||||
}
|
||||
}
|
||||
return ast.WalkContinue
|
||||
})
|
||||
tree.ID = tree.Root.ID
|
||||
tree.Path = filepath.ToSlash(strings.TrimPrefix(syPath, unzipRootPath))
|
||||
trees[tree.ID] = tree
|
||||
util.PushEndlessProgress(Conf.language(73) + " " + fmt.Sprintf(Conf.language(70), fmt.Sprintf("%d/%d", i+1, len(syPaths))))
|
||||
}
|
||||
|
||||
// 引用和嵌入指向重新生成的块 ID
|
||||
for _, tree := range trees {
|
||||
util.PushEndlessProgress(Conf.language(73) + " " + fmt.Sprintf(Conf.language(70), tree.Root.IALAttr("title")))
|
||||
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
|
||||
if !entering {
|
||||
return ast.WalkContinue
|
||||
|
@ -220,6 +210,12 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
|
|||
})
|
||||
}
|
||||
|
||||
var replacements []string
|
||||
for oldID, newID := range blockIDs {
|
||||
replacements = append(replacements, oldID, newID)
|
||||
}
|
||||
blockIDReplacer := strings.NewReplacer(replacements...)
|
||||
|
||||
// 将关联的数据库文件移动到 data/storage/av/ 下
|
||||
storage := filepath.Join(unzipRootPath, "storage")
|
||||
storageAvDir := filepath.Join(storage, "av")
|
||||
|
@ -249,14 +245,12 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
|
|||
return nil
|
||||
}
|
||||
|
||||
// 将数据库文件中的块 ID 替换为新的块 ID
|
||||
// 将数据库文件中的 ID 替换为新的 ID
|
||||
newData := data
|
||||
for oldAvID, newAvID := range avIDs {
|
||||
for oldID, newID := range avBlockIDs {
|
||||
newData = bytes.ReplaceAll(newData, []byte(oldID), []byte(newID))
|
||||
}
|
||||
newData = bytes.ReplaceAll(newData, []byte(oldAvID), []byte(newAvID))
|
||||
}
|
||||
newData = []byte(blockIDReplacer.Replace(string(newData)))
|
||||
if !bytes.Equal(data, newData) {
|
||||
if writeErr := os.WriteFile(oldPath, newData, 0644); nil != writeErr {
|
||||
logging.LogErrorf("write av file [%s] failed: %s", oldPath, writeErr)
|
||||
|
@ -277,6 +271,7 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
|
|||
|
||||
// 重新指向数据库属性值
|
||||
for _, tree := range trees {
|
||||
util.PushEndlessProgress(Conf.language(73) + " " + fmt.Sprintf(Conf.language(70), tree.Root.IALAttr("title")))
|
||||
ast.Walk(tree.Root, func(n *ast.Node, entering bool) ast.WalkStatus {
|
||||
if !entering || "" == n.ID {
|
||||
return ast.WalkContinue
|
||||
|
@ -370,6 +365,7 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
|
|||
|
||||
// 写回 .sy
|
||||
for _, tree := range trees {
|
||||
util.PushEndlessProgress(Conf.language(73) + " " + fmt.Sprintf(Conf.language(70), tree.Root.IALAttr("title")))
|
||||
syPath := filepath.Join(unzipRootPath, tree.Path)
|
||||
if "" == tree.Root.Spec {
|
||||
parse.NestedInlines2FlattedSpans(tree, false)
|
||||
|
@ -595,6 +591,7 @@ func ImportSY(zipPath, boxID, toPath string) (err error) {
|
|||
|
||||
treenode.IndexBlockTree(tree)
|
||||
sql.IndexTreeQueue(tree)
|
||||
util.PushEndlessProgress(Conf.language(73) + " " + fmt.Sprintf(Conf.language(70), tree.Root.IALAttr("title")))
|
||||
}
|
||||
|
||||
IncSync()
|
||||
|
|
|
@ -176,6 +176,16 @@ func RenderAttributeViewTable(attrView *av.AttributeView, view *av.View, query s
|
|||
ret.Rows = append(ret.Rows, &tableRow)
|
||||
}
|
||||
|
||||
// 批量获取块属性以提升性能
|
||||
var ialIDs []string
|
||||
for _, row := range ret.Rows {
|
||||
block := row.GetBlockValue()
|
||||
if nil != block && !block.IsDetached {
|
||||
ialIDs = append(ialIDs, row.ID)
|
||||
}
|
||||
}
|
||||
ials := BatchGetBlockAttrs(ialIDs)
|
||||
|
||||
// 渲染自动生成的列值,比如关联列、汇总列、创建时间列和更新时间列
|
||||
for _, row := range ret.Rows {
|
||||
for _, cell := range row.Cells {
|
||||
|
@ -266,11 +276,11 @@ func RenderAttributeViewTable(attrView *av.AttributeView, view *av.View, query s
|
|||
keyValues = append(keyValues, &av.KeyValues{Key: createdKey, Values: []*av.Value{{ID: cell.Value.ID, KeyID: createdKey.ID, BlockID: row.ID, Type: av.KeyTypeCreated, Created: cell.Value.Created}}})
|
||||
rows[row.ID] = keyValues
|
||||
case av.KeyTypeUpdated: // 渲染更新时间
|
||||
ial := map[string]string{}
|
||||
block := row.GetBlockValue()
|
||||
if nil != block && !block.IsDetached {
|
||||
ial = GetBlockAttrs(row.ID)
|
||||
ial := ials[row.ID]
|
||||
if nil == ial {
|
||||
ial = map[string]string{}
|
||||
}
|
||||
block := row.GetBlockValue()
|
||||
updatedStr := ial["updated"]
|
||||
if "" == updatedStr && nil != block {
|
||||
cell.Value.Updated = av.NewFormattedValueUpdated(block.Block.Updated, 0, av.UpdatedFormatNone)
|
||||
|
@ -302,10 +312,9 @@ func RenderAttributeViewTable(attrView *av.AttributeView, view *av.View, query s
|
|||
switch cell.ValueType {
|
||||
case av.KeyTypeTemplate: // 渲染模板列
|
||||
keyValues := rows[row.ID]
|
||||
ial := map[string]string{}
|
||||
block := row.GetBlockValue()
|
||||
if nil != block && !block.IsDetached {
|
||||
ial = GetBlockAttrs(row.ID)
|
||||
ial := ials[row.ID]
|
||||
if nil == ial {
|
||||
ial = map[string]string{}
|
||||
}
|
||||
content, renderErr := RenderTemplateCol(ial, keyValues, cell.Value.Template.Content)
|
||||
cell.Value.Template.Content = content
|
||||
|
@ -415,6 +424,20 @@ func RenderTemplateCol(ial map[string]string, rowValues []*av.KeyValues, tplCont
|
|||
if nil == parseErr {
|
||||
dataModel["created"] = created
|
||||
} else {
|
||||
errMsg := parseErr.Error()
|
||||
//logging.LogWarnf("parse created [%s] failed: %s", createdStr, errMsg)
|
||||
if strings.Contains(errMsg, "minute out of range") {
|
||||
// parsing time "20240709158553": minute out of range
|
||||
// 将分秒部分置为 0000
|
||||
createdStr = createdStr[:len("2006010215")] + "0000"
|
||||
} else if strings.Contains(errMsg, "second out of range") {
|
||||
// parsing time "20240709154592": second out of range
|
||||
// 将秒部分置为 00
|
||||
createdStr = createdStr[:len("200601021504")] + "00"
|
||||
}
|
||||
created, parseErr = time.ParseInLocation("20060102150405", createdStr, time.Local)
|
||||
}
|
||||
if nil != parseErr {
|
||||
logging.LogWarnf("parse created [%s] failed: %s", createdStr, parseErr)
|
||||
dataModel["created"] = time.Now()
|
||||
}
|
||||
|
|
|
@ -290,8 +290,6 @@ func BatchGetBlockAttrs(ids []string) (ret map[string]map[string]string) {
|
|||
}
|
||||
|
||||
func GetBlockAttrs(id string) (ret map[string]string) {
|
||||
ret = map[string]string{}
|
||||
|
||||
ret = map[string]string{}
|
||||
if cached := cache.GetBlockIAL(id); nil != cached {
|
||||
ret = cached
|
||||
|
|
Loading…
Add table
Reference in a new issue