@tenjuu99/blog 0.3.5 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/dev-server +3 -1
- package/bin/server +8 -1
- package/docs/develop.md +36 -6
- package/docs/dictionary.json +1806 -0
- package/lib/dir.js +3 -0
- package/lib/distribute.js +19 -5
- package/lib/files.js +2 -0
- package/lib/filter.js +7 -0
- package/lib/generate.js +5 -0
- package/lib/helper.js +3 -0
- package/lib/imageDistributor.js +59 -0
- package/lib/indexer.js +3 -0
- package/lib/pageData.js +7 -0
- package/lib/render.js +5 -0
- package/lib/replaceVariablesFilter.js +5 -0
- package/lib/server/helper/parseRequestBody.js +46 -0
- package/lib/server.js +7 -3
- package/lib/tryServer.js +3 -1
- package/package.json +8 -5
- package/packages/breadcrumbs/helper/breadcrumbs.js +3 -0
- package/packages/category/helper/category.js +13 -0
- package/packages/category/helper/categoryIndexer.js +12 -0
- package/packages/category/helper/pagination.js +5 -0
- package/packages/editor/css/editor.css +98 -10
- package/packages/editor/helper/sidebarTree.js +11 -0
- package/packages/editor/js/autoPreviewInitializer.js +11 -0
- package/packages/editor/js/autoSaveInitializer.js +15 -0
- package/packages/editor/js/debouncer.js +21 -0
- package/packages/editor/js/editor.js +370 -45
- package/packages/editor/js/frontmatter_template.js +67 -0
- package/packages/editor/js/imageReferenceExtractor.js +19 -0
- package/packages/editor/js/image_upload.js +12 -0
- package/packages/editor/js/tree.js +81 -0
- package/packages/editor/server/changeReflector.js +47 -0
- package/packages/editor/server/converters/sharp.js +14 -0
- package/packages/editor/server/createConverter.js +26 -0
- package/packages/editor/server/get_editor_target.js +2 -2
- package/packages/editor/server/get_frontmatter_templates.js +22 -0
- package/packages/editor/server/get_publication_status.js +29 -0
- package/packages/editor/server/get_sidebar.js +51 -0
- package/packages/editor/server/image_upload.js +122 -0
- package/packages/editor/server/preview.js +49 -19
- package/packages/editor/server/publicationStatus.js +27 -0
- package/packages/editor/server/publish.js +135 -0
- package/packages/editor/server/publishTargetCollector.js +19 -0
- package/packages/editor/server/save.js +97 -0
- package/packages/editor/server/sidebarStatusCollector.js +17 -0
- package/packages/editor/template/editor.html +28 -22
- package/src-sample/converters/webp.js +20 -0
- package/src-sample/helper/add.js +2 -0
- package/src-sample/helper/index.js +9 -0
- package/src-sample/image/test.jpg +0 -0
- package/packages/editor/server/editor.js +0 -43
|
@@ -0,0 +1,1806 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "1",
|
|
3
|
+
"contexts": [
|
|
4
|
+
{
|
|
5
|
+
"dir": "ssg-core",
|
|
6
|
+
"name": "SSGコア",
|
|
7
|
+
"description": "Markdownソースファイルから静的HTMLサイトを生成すること",
|
|
8
|
+
"primary_users": "SSGエンジンを開発・保守する技術者",
|
|
9
|
+
"in_scope": "ページのフロントマター解析、テンプレート適用、Markdown→HTMLレンダリング、全ページのインデックス化、ビルド出力、パッケージシステム(キャッシュ機構)",
|
|
10
|
+
"out_of_scope": "誰がどうコンテンツを編集するか(エディタ)、ページをどのカテゴリーに分類するか(カテゴリー)、HTTPサーバーとしての動作(サーバー)、ファイル監視・ホットリロード(開発サーバー)"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"dir": "server",
|
|
14
|
+
"name": "サーバー",
|
|
15
|
+
"description": "HTTPリクエストをハンドラースクリプトに振り分ける拡張機構。`src/server/` にスクリプトを配置することでAPIエンドポイントを追加できる",
|
|
16
|
+
"primary_users": "エディタ等のパッケージ開発者、サーバーサイド機能を追加したいユーザー",
|
|
17
|
+
"in_scope": "ハンドラースクリプトの登録・ディスパッチ、サーバーディレクトリ規約",
|
|
18
|
+
"out_of_scope": "ページのHTMLレンダリング(SSGコア)、開発時のファイル監視・ホットリロード(開発サーバー)"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"dir": "dev-server",
|
|
22
|
+
"name": "開発サーバー",
|
|
23
|
+
"description": "ソースファイルの変更を検知して自動再ビルドし、ブラウザへホットリロードで反映する開発支援環境",
|
|
24
|
+
"primary_users": "ブログの開発者・コンテンツ作成者(`npx server` で起動)",
|
|
25
|
+
"in_scope": "ファイル監視、変更時の再ビルドトリガー、ホットリロード通知",
|
|
26
|
+
"out_of_scope": "ページのHTMLレンダリング(SSGコア)、HTTPリクエストのディスパッチ(サーバー)"
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"dir": "editor",
|
|
30
|
+
"name": "エディタ",
|
|
31
|
+
"description": "ブラウザUIで非技術者がコンテンツを作成・編集・公開すること",
|
|
32
|
+
"primary_users": "ターミナルを使わないコンテンツ作成者",
|
|
33
|
+
"in_scope": "ファイルの選択と表示、テキスト編集、プレビュー、保存、公開(git push)、AIへの相談、画像アップロード、サイドバーナビゲーション",
|
|
34
|
+
"out_of_scope": "ファイルがHTMLにどう変換されるか(SSGコア)、カテゴリー階層の生成(カテゴリー)"
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"dir": "category",
|
|
38
|
+
"name": "カテゴリー",
|
|
39
|
+
"description": "ページをディレクトリ階層に基づいて分類し、カテゴリーページとして一覧表示すること",
|
|
40
|
+
"primary_users": "サイト構造を設計する人(カテゴリーを設定し、閲覧者がナビゲートする)",
|
|
41
|
+
"in_scope": "カテゴリー定義、階層構造、カテゴリーページの自動生成、ページのカテゴリーへの割り当て、ページネーション",
|
|
42
|
+
"out_of_scope": "ページの内容をどう描画するか(SSGコア)、編集UI(エディタ)"
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"entries": [
|
|
46
|
+
{
|
|
47
|
+
"name": "ページ",
|
|
48
|
+
"en": null,
|
|
49
|
+
"context": "ssg-core",
|
|
50
|
+
"domain": "application",
|
|
51
|
+
"definition": "Markdownソースファイルを起点に生成されるコンテンツの単位。#フロントマター と本文から成り、#テンプレート を通じてHTMLとして出力される。",
|
|
52
|
+
"relations": [
|
|
53
|
+
{
|
|
54
|
+
"type": "references",
|
|
55
|
+
"target": "フロントマター"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"type": "references",
|
|
59
|
+
"target": "テンプレート"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"type": "references",
|
|
63
|
+
"target": "ページインデックス"
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
"src": null
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "フロントマター",
|
|
70
|
+
"en": null,
|
|
71
|
+
"context": "ssg-core",
|
|
72
|
+
"domain": "application",
|
|
73
|
+
"definition": "ページ冒頭の `---` または `<!--` で囲んだメタデータ領域。タイトル・URL・公開日・テンプレート名など、#ページ の属性を定義する。",
|
|
74
|
+
"relations": [
|
|
75
|
+
{
|
|
76
|
+
"type": "references",
|
|
77
|
+
"target": "ページ"
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
"type": "references",
|
|
81
|
+
"target": "テンプレート"
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"type": "references",
|
|
85
|
+
"target": "ページインデックス"
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
"src": null
|
|
89
|
+
},
|
|
90
|
+
{
|
|
91
|
+
"name": "テンプレート",
|
|
92
|
+
"en": null,
|
|
93
|
+
"context": "ssg-core",
|
|
94
|
+
"domain": "application",
|
|
95
|
+
"definition": "#ページ のHTML構造を定義するファイル。変数展開・条件分岐・ #SSGスクリプト を記述でき、#フロントマター の値を参照してHTMLを生成する。",
|
|
96
|
+
"relations": [
|
|
97
|
+
{
|
|
98
|
+
"type": "references",
|
|
99
|
+
"target": "ページ"
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
"type": "references",
|
|
103
|
+
"target": "フロントマター"
|
|
104
|
+
},
|
|
105
|
+
{
|
|
106
|
+
"type": "references",
|
|
107
|
+
"target": "ヘルパー関数"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
"type": "references",
|
|
111
|
+
"target": "SSGスクリプト"
|
|
112
|
+
}
|
|
113
|
+
],
|
|
114
|
+
"src": null
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
"name": "ヘルパー関数",
|
|
118
|
+
"en": null,
|
|
119
|
+
"context": "ssg-core",
|
|
120
|
+
"domain": "application",
|
|
121
|
+
"definition": "#テンプレート や #SSGスクリプト から呼び出せる拡張関数。#ページインデックス へのアクセス・日付フォーマット・一覧生成など、テンプレートエンジンの組み込み機能を超えた処理を担う。#パッケージ が自動提供することがある。",
|
|
122
|
+
"relations": [
|
|
123
|
+
{
|
|
124
|
+
"type": "references",
|
|
125
|
+
"target": "テンプレート"
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
"type": "references",
|
|
129
|
+
"target": "ページインデックス"
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
"type": "references",
|
|
133
|
+
"target": "パッケージ"
|
|
134
|
+
}
|
|
135
|
+
],
|
|
136
|
+
"src": null
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "ページインデックス",
|
|
140
|
+
"en": null,
|
|
141
|
+
"context": "ssg-core",
|
|
142
|
+
"domain": "application",
|
|
143
|
+
"definition": "全 #ページ の #フロントマター データを収めたコレクション(`allData`)。一覧ページや関連ページの生成、カテゴリー分類など、複数ページにまたがる処理の参照源となる。#ビルド 時に全ページをスキャンして生成される。",
|
|
144
|
+
"relations": [
|
|
145
|
+
{
|
|
146
|
+
"type": "references",
|
|
147
|
+
"target": "ページ"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"type": "references",
|
|
151
|
+
"target": "フロントマター"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"type": "references",
|
|
155
|
+
"target": "ヘルパー関数"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"type": "references",
|
|
159
|
+
"target": "SSGスクリプト"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"type": "references",
|
|
163
|
+
"target": "ビルド"
|
|
164
|
+
}
|
|
165
|
+
],
|
|
166
|
+
"src": null
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"name": "SSGスクリプト",
|
|
170
|
+
"en": null,
|
|
171
|
+
"context": "ssg-core",
|
|
172
|
+
"domain": "application",
|
|
173
|
+
"definition": "#テンプレート 内の `<script type=\"ssg\">` ブロックに記述し、#ビルド 時に実行されるJavaScriptコード。`return` で返した値がHTMLに展開される。#ページインデックス や #ヘルパー関数 を参照できる。",
|
|
174
|
+
"relations": [
|
|
175
|
+
{
|
|
176
|
+
"type": "references",
|
|
177
|
+
"target": "テンプレート"
|
|
178
|
+
},
|
|
179
|
+
{
|
|
180
|
+
"type": "references",
|
|
181
|
+
"target": "ヘルパー関数"
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"type": "references",
|
|
185
|
+
"target": "ページインデックス"
|
|
186
|
+
}
|
|
187
|
+
],
|
|
188
|
+
"src": null
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
"name": "パッケージ",
|
|
192
|
+
"en": null,
|
|
193
|
+
"context": "ssg-core",
|
|
194
|
+
"domain": "application",
|
|
195
|
+
"definition": "#ヘルパー関数 ・ #テンプレート ・CSSをひとまとめにした拡張モジュール。`blog.json` で有効化することでSSGの機能を拡張する。パッケージのファイルはユーザーコードで上書きできる。",
|
|
196
|
+
"relations": [
|
|
197
|
+
{
|
|
198
|
+
"type": "references",
|
|
199
|
+
"target": "ヘルパー関数"
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
"type": "references",
|
|
203
|
+
"target": "テンプレート"
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
"type": "references",
|
|
207
|
+
"target": "ページインデックス"
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
"type": "references",
|
|
211
|
+
"target": "ビルド"
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"type": "references",
|
|
215
|
+
"target": "キャッシュ"
|
|
216
|
+
}
|
|
217
|
+
],
|
|
218
|
+
"src": null
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
"name": "キャッシュ",
|
|
222
|
+
"en": "Cache",
|
|
223
|
+
"context": "ssg-core",
|
|
224
|
+
"domain": "application",
|
|
225
|
+
"definition": "#ビルド 前にソースファイルと #パッケージ のファイルを集積するステージングディレクトリ(`.cache/`)。#パッケージ のファイルが先に展開され、その後ユーザーの `src/` が上書きコピーされる。ビルドエンジンはこのディレクトリを実際の処理対象とする。",
|
|
226
|
+
"relations": [
|
|
227
|
+
{
|
|
228
|
+
"type": "references",
|
|
229
|
+
"target": "パッケージ"
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
"type": "references",
|
|
233
|
+
"target": "ビルド"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"type": "references",
|
|
237
|
+
"target": "サーバーハンドラー",
|
|
238
|
+
"context": "server",
|
|
239
|
+
"note": "の配置先でもある"
|
|
240
|
+
}
|
|
241
|
+
],
|
|
242
|
+
"src": null
|
|
243
|
+
},
|
|
244
|
+
{
|
|
245
|
+
"name": "ビルド",
|
|
246
|
+
"en": null,
|
|
247
|
+
"context": "ssg-core",
|
|
248
|
+
"domain": "application",
|
|
249
|
+
"definition": "全ソースファイルをスキャンして #ページインデックス を構築し、各 #ページ に #テンプレート を適用してHTMLを出力するプロセス。`npx generate` または開発サーバーが担う。",
|
|
250
|
+
"relations": [
|
|
251
|
+
{
|
|
252
|
+
"type": "references",
|
|
253
|
+
"target": "ページインデックス"
|
|
254
|
+
},
|
|
255
|
+
{
|
|
256
|
+
"type": "references",
|
|
257
|
+
"target": "テンプレート"
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
"type": "references",
|
|
261
|
+
"target": "ページ"
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
"type": "references",
|
|
265
|
+
"target": "パッケージ"
|
|
266
|
+
}
|
|
267
|
+
],
|
|
268
|
+
"src": null
|
|
269
|
+
},
|
|
270
|
+
{
|
|
271
|
+
"name": "フィルター",
|
|
272
|
+
"en": "Filter",
|
|
273
|
+
"context": "ssg-core",
|
|
274
|
+
"domain": "solution",
|
|
275
|
+
"definition": "#テンプレート テキストを処理する変換関数の総称。変数展開・条件分岐(`{if}`)・ #SSGスクリプト 実行の各処理が独立したフィルターとして実装され、パイプライン状に適用される。",
|
|
276
|
+
"relations": [
|
|
277
|
+
{
|
|
278
|
+
"type": "references",
|
|
279
|
+
"target": "テンプレート"
|
|
280
|
+
},
|
|
281
|
+
{
|
|
282
|
+
"type": "references",
|
|
283
|
+
"target": "SSGスクリプト"
|
|
284
|
+
}
|
|
285
|
+
],
|
|
286
|
+
"src": "lib/filter.js, lib/replaceVariablesFilter.js, lib/includeFilter.js"
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
"name": "ビルド画像配布器",
|
|
290
|
+
"en": "BuildImageDistributor",
|
|
291
|
+
"context": "ssg-core",
|
|
292
|
+
"domain": "solution",
|
|
293
|
+
"definition": "ビルドコマンド実行時に、変換設定に従い画像を dist ディレクトリに出力する装置。変換設定がある場合は各画像ファイルを #コンバーターファクトリー が解決した変換ドライバーに通し、ない場合はそのままコピーする。",
|
|
294
|
+
"relations": [
|
|
295
|
+
{
|
|
296
|
+
"type": "references",
|
|
297
|
+
"target": "コンバーターファクトリー",
|
|
298
|
+
"context": "editor",
|
|
299
|
+
"note": "解決済みの変換関数 `{ fn, ext }` を受け取る"
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"type": "references",
|
|
303
|
+
"target": "ビルド",
|
|
304
|
+
"note": "ビルドの一部として実行される"
|
|
305
|
+
}
|
|
306
|
+
],
|
|
307
|
+
"src": "lib/imageDistributor.js"
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
"name": "サーバーハンドラー",
|
|
311
|
+
"en": "ServerHandler",
|
|
312
|
+
"context": "server",
|
|
313
|
+
"domain": "application",
|
|
314
|
+
"definition": "`path` とHTTPメソッド関数(`get`・`post` 等)をエクスポートするスクリプト。#サーバーディレクトリ に配置することで自動登録され、対応するURLへのリクエストを処理する。",
|
|
315
|
+
"relations": [
|
|
316
|
+
{
|
|
317
|
+
"type": "references",
|
|
318
|
+
"target": "サーバーディレクトリ"
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
"type": "references",
|
|
322
|
+
"target": "ハンドラー登録"
|
|
323
|
+
}
|
|
324
|
+
],
|
|
325
|
+
"src": null
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
"name": "サーバーディレクトリ",
|
|
329
|
+
"en": "ServerDir",
|
|
330
|
+
"context": "server",
|
|
331
|
+
"domain": "application",
|
|
332
|
+
"definition": "#サーバーハンドラー スクリプトを配置するディレクトリ。#キャッシュ (SSGコア)の `.cache/server/` が実際の参照先で、`src/server/` の内容が #パッケージ (SSGコア)の仕組みで展開される。",
|
|
333
|
+
"relations": [
|
|
334
|
+
{
|
|
335
|
+
"type": "references",
|
|
336
|
+
"target": "サーバーハンドラー"
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
"type": "references",
|
|
340
|
+
"target": "ハンドラー登録"
|
|
341
|
+
},
|
|
342
|
+
{
|
|
343
|
+
"type": "references",
|
|
344
|
+
"target": "キャッシュ",
|
|
345
|
+
"context": "ssg-core"
|
|
346
|
+
},
|
|
347
|
+
{
|
|
348
|
+
"type": "references",
|
|
349
|
+
"target": "パッケージ",
|
|
350
|
+
"context": "ssg-core"
|
|
351
|
+
}
|
|
352
|
+
],
|
|
353
|
+
"src": null
|
|
354
|
+
},
|
|
355
|
+
{
|
|
356
|
+
"name": "ハンドラー登録",
|
|
357
|
+
"en": "HandlerRegistration",
|
|
358
|
+
"context": "server",
|
|
359
|
+
"domain": "solution",
|
|
360
|
+
"definition": "#サーバーディレクトリ のスクリプトを動的ロードし、各スクリプトの `path` エクスポートをキーにして #サーバーハンドラー を登録する仕組み。初回リクエスト時に一度だけ実行される。",
|
|
361
|
+
"relations": [
|
|
362
|
+
{
|
|
363
|
+
"type": "references",
|
|
364
|
+
"target": "サーバーディレクトリ"
|
|
365
|
+
},
|
|
366
|
+
{
|
|
367
|
+
"type": "references",
|
|
368
|
+
"target": "サーバーハンドラー"
|
|
369
|
+
}
|
|
370
|
+
],
|
|
371
|
+
"src": "lib/tryServer.js"
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
"name": "ウォッチャー",
|
|
375
|
+
"en": "Watcher",
|
|
376
|
+
"context": "dev-server",
|
|
377
|
+
"domain": "application",
|
|
378
|
+
"definition": "ソースファイルの変更・追加・削除を監視し、登録されたコールバックをトリガーする機構。複数のウォッチャーを優先度付きで登録でき、優先ウォッチャーが先に実行される。",
|
|
379
|
+
"relations": [
|
|
380
|
+
{
|
|
381
|
+
"type": "references",
|
|
382
|
+
"target": "ビルド",
|
|
383
|
+
"context": "ssg-core",
|
|
384
|
+
"note": "変更検知時に再実行をトリガーする"
|
|
385
|
+
}
|
|
386
|
+
],
|
|
387
|
+
"src": "lib/watcher.js"
|
|
388
|
+
},
|
|
389
|
+
{
|
|
390
|
+
"name": "ホットリロード",
|
|
391
|
+
"en": "HotReload",
|
|
392
|
+
"context": "dev-server",
|
|
393
|
+
"domain": "application",
|
|
394
|
+
"definition": "ファイル変更検知後に自動再ビルドを実行し、ブラウザを更新する一連の動作。#ウォッチャー が変更を検知して #ビルド を再実行し、結果をブラウザに反映する。",
|
|
395
|
+
"relations": [
|
|
396
|
+
{
|
|
397
|
+
"type": "references",
|
|
398
|
+
"target": "ウォッチャー"
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
"type": "references",
|
|
402
|
+
"target": "ビルド",
|
|
403
|
+
"context": "ssg-core"
|
|
404
|
+
}
|
|
405
|
+
],
|
|
406
|
+
"src": null
|
|
407
|
+
},
|
|
408
|
+
{
|
|
409
|
+
"name": "サイドバー",
|
|
410
|
+
"en": null,
|
|
411
|
+
"context": "editor",
|
|
412
|
+
"domain": "application",
|
|
413
|
+
"definition": "エディタ左部に表示されるナビゲーション領域。ファイルの一覧を表示し、目的のファイルへ移動する起点となる。",
|
|
414
|
+
"relations": [
|
|
415
|
+
{
|
|
416
|
+
"type": "references",
|
|
417
|
+
"target": "ディレクトリツリー"
|
|
418
|
+
}
|
|
419
|
+
],
|
|
420
|
+
"src": null
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
"name": "ファイルリスト",
|
|
424
|
+
"en": null,
|
|
425
|
+
"context": "editor",
|
|
426
|
+
"domain": "application",
|
|
427
|
+
"definition": "ファイルパスを一次元配列として表現したファイルの一覧。ディレクトリ構造を無視してフラットに並べた形式。#ツリービルダー が #ネスト変換 する際の入力データとなる。",
|
|
428
|
+
"relations": [
|
|
429
|
+
{
|
|
430
|
+
"type": "references",
|
|
431
|
+
"target": "ツリービルダー"
|
|
432
|
+
},
|
|
433
|
+
{
|
|
434
|
+
"type": "references",
|
|
435
|
+
"target": "ネスト変換"
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
"type": "references",
|
|
439
|
+
"target": "ディレクトリツリー"
|
|
440
|
+
}
|
|
441
|
+
],
|
|
442
|
+
"src": null
|
|
443
|
+
},
|
|
444
|
+
{
|
|
445
|
+
"name": "ディレクトリツリー",
|
|
446
|
+
"en": null,
|
|
447
|
+
"context": "editor",
|
|
448
|
+
"domain": "application",
|
|
449
|
+
"definition": "#ファイルリスト を置き換えて #サイドバー に表示される、ファイルをディレクトリ階層に従って整理した木構造の表示。",
|
|
450
|
+
"relations": [
|
|
451
|
+
{
|
|
452
|
+
"type": "references",
|
|
453
|
+
"target": "サイドバー"
|
|
454
|
+
},
|
|
455
|
+
{
|
|
456
|
+
"type": "references",
|
|
457
|
+
"target": "ディレクトリノード"
|
|
458
|
+
},
|
|
459
|
+
{
|
|
460
|
+
"type": "references",
|
|
461
|
+
"target": "ファイルノード"
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
"type": "references",
|
|
465
|
+
"target": "ツリービルダー"
|
|
466
|
+
},
|
|
467
|
+
{
|
|
468
|
+
"type": "references",
|
|
469
|
+
"target": "ツリーレンダラー"
|
|
470
|
+
}
|
|
471
|
+
],
|
|
472
|
+
"src": null
|
|
473
|
+
},
|
|
474
|
+
{
|
|
475
|
+
"name": "ディレクトリノード",
|
|
476
|
+
"en": null,
|
|
477
|
+
"context": "editor",
|
|
478
|
+
"domain": "application",
|
|
479
|
+
"definition": "#ディレクトリツリー を構成する枝要素。配下の #ファイルノード や子 #ディレクトリノード を含み、#展開状態 を持つ。",
|
|
480
|
+
"relations": [
|
|
481
|
+
{
|
|
482
|
+
"type": "references",
|
|
483
|
+
"target": "ディレクトリツリー"
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
"type": "references",
|
|
487
|
+
"target": "ファイルノード"
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
"type": "references",
|
|
491
|
+
"target": "展開状態"
|
|
492
|
+
},
|
|
493
|
+
{
|
|
494
|
+
"type": "references",
|
|
495
|
+
"target": "ツリーレンダラー"
|
|
496
|
+
}
|
|
497
|
+
],
|
|
498
|
+
"src": null
|
|
499
|
+
},
|
|
500
|
+
{
|
|
501
|
+
"name": "ファイルノード",
|
|
502
|
+
"en": null,
|
|
503
|
+
"context": "editor",
|
|
504
|
+
"domain": "application",
|
|
505
|
+
"definition": "#ディレクトリツリー の葉要素。エディタで開くファイルへのリンクを提供する。#アクティブファイル のファイルノードは他と区別して表示される。",
|
|
506
|
+
"relations": [
|
|
507
|
+
{
|
|
508
|
+
"type": "references",
|
|
509
|
+
"target": "ディレクトリノード"
|
|
510
|
+
},
|
|
511
|
+
{
|
|
512
|
+
"type": "references",
|
|
513
|
+
"target": "アクティブファイル"
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
"type": "references",
|
|
517
|
+
"target": "ツリーレンダラー"
|
|
518
|
+
}
|
|
519
|
+
],
|
|
520
|
+
"src": null
|
|
521
|
+
},
|
|
522
|
+
{
|
|
523
|
+
"name": "アクティブファイル",
|
|
524
|
+
"en": null,
|
|
525
|
+
"context": "editor",
|
|
526
|
+
"domain": "application",
|
|
527
|
+
"definition": "現在エディタで開いているファイル。URLパラメータ `?md=` で識別される。#サイドバー 初期化時に参照され、対応する #ファイルノード をハイライトし、その親 #ディレクトリノード を自動展開する。",
|
|
528
|
+
"relations": [
|
|
529
|
+
{
|
|
530
|
+
"type": "references",
|
|
531
|
+
"target": "ファイルノード"
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
"type": "references",
|
|
535
|
+
"target": "ディレクトリノード"
|
|
536
|
+
}
|
|
537
|
+
],
|
|
538
|
+
"src": null
|
|
539
|
+
},
|
|
540
|
+
{
|
|
541
|
+
"name": "展開状態",
|
|
542
|
+
"en": null,
|
|
543
|
+
"context": "editor",
|
|
544
|
+
"domain": "application",
|
|
545
|
+
"definition": "#ディレクトリノード が開いているか閉じているかの状態。localStorage を通じてセッション間で永続化される。",
|
|
546
|
+
"relations": [
|
|
547
|
+
{
|
|
548
|
+
"type": "references",
|
|
549
|
+
"target": "ディレクトリノード"
|
|
550
|
+
},
|
|
551
|
+
{
|
|
552
|
+
"type": "references",
|
|
553
|
+
"target": "アクティブファイル"
|
|
554
|
+
}
|
|
555
|
+
],
|
|
556
|
+
"src": null
|
|
557
|
+
},
|
|
558
|
+
{
|
|
559
|
+
"name": "保存",
|
|
560
|
+
"en": null,
|
|
561
|
+
"context": "editor",
|
|
562
|
+
"domain": "application",
|
|
563
|
+
"definition": "テキストエリアの内容をローカルファイルシステムに書き込む操作。#自動保存 によって実行されるか、手動操作によって実行される。save ボタンが削除されるため、通常は自動保存が担う。",
|
|
564
|
+
"relations": [
|
|
565
|
+
{
|
|
566
|
+
"type": "references",
|
|
567
|
+
"target": "ページ",
|
|
568
|
+
"context": "ssg-core"
|
|
569
|
+
},
|
|
570
|
+
{
|
|
571
|
+
"type": "references",
|
|
572
|
+
"target": "公開する",
|
|
573
|
+
"note": "保存はローカル変更のみ、公開は外部への反映"
|
|
574
|
+
}
|
|
575
|
+
],
|
|
576
|
+
"src": null
|
|
577
|
+
},
|
|
578
|
+
{
|
|
579
|
+
"name": "プレビュー",
|
|
580
|
+
"en": null,
|
|
581
|
+
"context": "editor",
|
|
582
|
+
"domain": "application",
|
|
583
|
+
"definition": "テキストエリアの Markdown を HTML レンダリングしてリアルタイムに表示する領域。開発サーバーが生成した HTML が `<iframe>` 内に埋め込まれる。",
|
|
584
|
+
"relations": [
|
|
585
|
+
{
|
|
586
|
+
"type": "references",
|
|
587
|
+
"target": "ページ",
|
|
588
|
+
"context": "ssg-core"
|
|
589
|
+
},
|
|
590
|
+
{
|
|
591
|
+
"type": "references",
|
|
592
|
+
"target": "テンプレート",
|
|
593
|
+
"context": "ssg-core"
|
|
594
|
+
}
|
|
595
|
+
],
|
|
596
|
+
"src": null
|
|
597
|
+
},
|
|
598
|
+
{
|
|
599
|
+
"name": "インライン画像挿入",
|
|
600
|
+
"en": null,
|
|
601
|
+
"context": "editor",
|
|
602
|
+
"domain": "application",
|
|
603
|
+
"definition": "ドラッグ&ドロップで画像をアップロードし、本文カーソル位置に `` 形式の Markdown 画像構文を挿入する操作。フロントマターへのURL挿入など他の画像参照ユースケースとは区別される。",
|
|
604
|
+
"relations": [
|
|
605
|
+
{
|
|
606
|
+
"type": "references",
|
|
607
|
+
"target": "保存",
|
|
608
|
+
"note": "テキスト保存とは別操作"
|
|
609
|
+
},
|
|
610
|
+
{
|
|
611
|
+
"type": "references",
|
|
612
|
+
"target": "ドロップレシーバー",
|
|
613
|
+
"note": "起点となる装置"
|
|
614
|
+
},
|
|
615
|
+
{
|
|
616
|
+
"type": "references",
|
|
617
|
+
"target": "画像アップローダー",
|
|
618
|
+
"note": "アップロードを担う装置"
|
|
619
|
+
},
|
|
620
|
+
{
|
|
621
|
+
"type": "references",
|
|
622
|
+
"target": "アップロードエンドポイント",
|
|
623
|
+
"note": "サーバー側の処理を担う装置"
|
|
624
|
+
},
|
|
625
|
+
{
|
|
626
|
+
"type": "references",
|
|
627
|
+
"target": "Markdown挿入器",
|
|
628
|
+
"note": "挿入を担う装置"
|
|
629
|
+
},
|
|
630
|
+
{
|
|
631
|
+
"type": "references",
|
|
632
|
+
"target": "画像保存先パス",
|
|
633
|
+
"note": "自動決定される"
|
|
634
|
+
},
|
|
635
|
+
{
|
|
636
|
+
"type": "references",
|
|
637
|
+
"target": "リアルタイムプレビュー更新",
|
|
638
|
+
"note": "挿入完了が即時更新のトリガーとなる"
|
|
639
|
+
}
|
|
640
|
+
],
|
|
641
|
+
"src": null
|
|
642
|
+
},
|
|
643
|
+
{
|
|
644
|
+
"name": "画像保存先パス",
|
|
645
|
+
"en": null,
|
|
646
|
+
"context": "editor",
|
|
647
|
+
"domain": "application",
|
|
648
|
+
"definition": "編集中のMarkdownファイルパスから自動決定される、画像の配置先。例: `book/painting/claude-monet.md` を編集中なら `src/image/book/painting/claude-monet/` 配下。",
|
|
649
|
+
"relations": [
|
|
650
|
+
{
|
|
651
|
+
"type": "belongs_to",
|
|
652
|
+
"target": "インライン画像挿入",
|
|
653
|
+
"note": "インライン画像挿入の際に自動決定される"
|
|
654
|
+
},
|
|
655
|
+
{
|
|
656
|
+
"type": "references",
|
|
657
|
+
"target": "パスリゾルバー",
|
|
658
|
+
"note": "パスリゾルバーが導出する"
|
|
659
|
+
}
|
|
660
|
+
],
|
|
661
|
+
"src": null
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
"name": "リアルタイムプレビュー更新",
|
|
665
|
+
"en": null,
|
|
666
|
+
"context": "editor",
|
|
667
|
+
"domain": "application",
|
|
668
|
+
"definition": "テキストエリアへの入力や画像挿入を契機に、ボタン操作なしにプレビューペインが自動更新される機能。「書く」行為の流れを中断せずに #プレビュー を確認できる状態を指す。",
|
|
669
|
+
"relations": [
|
|
670
|
+
{
|
|
671
|
+
"type": "references",
|
|
672
|
+
"target": "プレビュー"
|
|
673
|
+
},
|
|
674
|
+
{
|
|
675
|
+
"type": "references",
|
|
676
|
+
"target": "テキスト入力",
|
|
677
|
+
"note": "テキスト入力の停止がトリガーとなる"
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
"type": "references",
|
|
681
|
+
"target": "インライン画像挿入",
|
|
682
|
+
"note": "挿入完了が即時トリガーとなる"
|
|
683
|
+
}
|
|
684
|
+
],
|
|
685
|
+
"src": null
|
|
686
|
+
},
|
|
687
|
+
{
|
|
688
|
+
"name": "テキスト入力",
|
|
689
|
+
"en": null,
|
|
690
|
+
"context": "editor",
|
|
691
|
+
"domain": "application",
|
|
692
|
+
"definition": "テキストエリアへのキーボード入力。連続入力の停止(入力が止まった状態)が #リアルタイムプレビュー更新 のトリガーとなる。",
|
|
693
|
+
"relations": [
|
|
694
|
+
{
|
|
695
|
+
"type": "references",
|
|
696
|
+
"target": "リアルタイムプレビュー更新",
|
|
697
|
+
"note": "入力停止が更新トリガーとなる"
|
|
698
|
+
},
|
|
699
|
+
{
|
|
700
|
+
"type": "references",
|
|
701
|
+
"target": "デバウンサー",
|
|
702
|
+
"note": "「停止」を検知する装置"
|
|
703
|
+
}
|
|
704
|
+
],
|
|
705
|
+
"src": null
|
|
706
|
+
},
|
|
707
|
+
{
|
|
708
|
+
"name": "公開ステータス",
|
|
709
|
+
"en": "PublicationStatus",
|
|
710
|
+
"context": "editor",
|
|
711
|
+
"domain": "application",
|
|
712
|
+
"definition": "ファイルごとのリモート反映状態を表す状態機械。未公開(ローカルのみ存在)・更新あり(リモートと差分あり)・公開済み(ローカルとリモートが一致)の3ステートをとる。",
|
|
713
|
+
"relations": [
|
|
714
|
+
{
|
|
715
|
+
"type": "references",
|
|
716
|
+
"target": "公開する",
|
|
717
|
+
"note": "未公開 → 公開済み の遷移アクション"
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
"type": "references",
|
|
721
|
+
"target": "更新する",
|
|
722
|
+
"note": "更新あり → 公開済み の遷移アクション"
|
|
723
|
+
},
|
|
724
|
+
{
|
|
725
|
+
"type": "references",
|
|
726
|
+
"target": "非公開にする",
|
|
727
|
+
"note": "公開済み/更新あり → 未公開 の遷移アクション(将来実装)"
|
|
728
|
+
},
|
|
729
|
+
{
|
|
730
|
+
"type": "references",
|
|
731
|
+
"target": "削除する",
|
|
732
|
+
"note": "任意 → 未存在 の遷移アクション(将来実装)"
|
|
733
|
+
},
|
|
734
|
+
{
|
|
735
|
+
"type": "references",
|
|
736
|
+
"target": "公開ステータス判定器",
|
|
737
|
+
"note": "現在のステートを導出する"
|
|
738
|
+
}
|
|
739
|
+
],
|
|
740
|
+
"src": null
|
|
741
|
+
},
|
|
742
|
+
{
|
|
743
|
+
"name": "公開する",
|
|
744
|
+
"en": "Publish",
|
|
745
|
+
"context": "editor",
|
|
746
|
+
"domain": "application",
|
|
747
|
+
"definition": "#公開ステータス の `未公開 → 公開済み` 遷移を起動するアクション。Publishボタンで実行される。#保存 とは別操作(保存はローカル書き込みのみ)。コミットメッセージの入力なしに完結する。",
|
|
748
|
+
"relations": [
|
|
749
|
+
{
|
|
750
|
+
"type": "references",
|
|
751
|
+
"target": "公開ステータス"
|
|
752
|
+
},
|
|
753
|
+
{
|
|
754
|
+
"type": "references",
|
|
755
|
+
"target": "公開対象",
|
|
756
|
+
"note": "自動収集した公開対象セットを対象とする"
|
|
757
|
+
},
|
|
758
|
+
{
|
|
759
|
+
"type": "references",
|
|
760
|
+
"target": "公開フィードバック",
|
|
761
|
+
"note": "操作結果を通知する"
|
|
762
|
+
},
|
|
763
|
+
{
|
|
764
|
+
"type": "references",
|
|
765
|
+
"target": "デプロイ",
|
|
766
|
+
"note": "公開操作によって起動される"
|
|
767
|
+
}
|
|
768
|
+
],
|
|
769
|
+
"src": "packages/editor/server/changeReflector.js"
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
"name": "更新する",
|
|
773
|
+
"en": "Update",
|
|
774
|
+
"context": "editor",
|
|
775
|
+
"domain": "application",
|
|
776
|
+
"definition": "#公開ステータス の `更新あり → 公開済み` 遷移を起動するアクション。公開済みのファイルに編集が加わった後に実行される。#公開する と同じボタンで実行されるが、意味的に異なる(既存コンテンツの改訂)。",
|
|
777
|
+
"relations": [
|
|
778
|
+
{
|
|
779
|
+
"type": "references",
|
|
780
|
+
"target": "公開ステータス"
|
|
781
|
+
},
|
|
782
|
+
{
|
|
783
|
+
"type": "references",
|
|
784
|
+
"target": "公開対象",
|
|
785
|
+
"note": "自動収集した公開対象セットを対象とする"
|
|
786
|
+
},
|
|
787
|
+
{
|
|
788
|
+
"type": "references",
|
|
789
|
+
"target": "公開フィードバック",
|
|
790
|
+
"note": "操作結果を通知する"
|
|
791
|
+
}
|
|
792
|
+
],
|
|
793
|
+
"src": "packages/editor/server/changeReflector.js"
|
|
794
|
+
},
|
|
795
|
+
{
|
|
796
|
+
"name": "公開済み状態",
|
|
797
|
+
"en": "PublishedState",
|
|
798
|
+
"context": "editor",
|
|
799
|
+
"domain": "application",
|
|
800
|
+
"definition": "リモートリポジトリの現在の内容を参照するための読み取り専用の抽象。この抽象を介して #公開ステータス判定器 がローカルとリモートを対比し、現在のステートを導出する。gitの場合はremote HEADへのアクセス(`existsInRemote`, `diffFromRemote`)にあたる。",
|
|
801
|
+
"relations": [
|
|
802
|
+
{
|
|
803
|
+
"type": "references",
|
|
804
|
+
"target": "公開ステータス判定器",
|
|
805
|
+
"note": "に注入されて使われる"
|
|
806
|
+
}
|
|
807
|
+
],
|
|
808
|
+
"src": null
|
|
809
|
+
},
|
|
810
|
+
{
|
|
811
|
+
"name": "公開フィードバック",
|
|
812
|
+
"en": "PublishFeedback",
|
|
813
|
+
"context": "editor",
|
|
814
|
+
"domain": "application",
|
|
815
|
+
"definition": "#公開する ・ #更新する の実行中・完了・失敗をブラウザ上で知覚できる表示。ターミナルを一切操作せずに操作結果を把握できる状態を指す。ネットワーク到達不能とgit操作失敗を区別して表示する。",
|
|
816
|
+
"relations": [
|
|
817
|
+
{
|
|
818
|
+
"type": "belongs_to",
|
|
819
|
+
"target": "公開する",
|
|
820
|
+
"note": "操作結果を伝える"
|
|
821
|
+
},
|
|
822
|
+
{
|
|
823
|
+
"type": "belongs_to",
|
|
824
|
+
"target": "更新する",
|
|
825
|
+
"note": "操作結果を伝える"
|
|
826
|
+
}
|
|
827
|
+
],
|
|
828
|
+
"src": null
|
|
829
|
+
},
|
|
830
|
+
{
|
|
831
|
+
"name": "公開対象",
|
|
832
|
+
"en": "PublishTarget",
|
|
833
|
+
"context": "editor",
|
|
834
|
+
"domain": "application",
|
|
835
|
+
"definition": "#公開する ・ #更新する 操作で送信するファイルの集合。現在編集中のMarkdownファイルと、そのファイル内の画像リンク(`` 形式)を解析して収集した参照画像ファイルから構成される。ユーザーが明示的に選択するのではなく、編集内容から自動的に決定される。",
|
|
836
|
+
"relations": [
|
|
837
|
+
{
|
|
838
|
+
"type": "references",
|
|
839
|
+
"target": "公開する",
|
|
840
|
+
"note": "送信対象となる"
|
|
841
|
+
},
|
|
842
|
+
{
|
|
843
|
+
"type": "references",
|
|
844
|
+
"target": "更新する",
|
|
845
|
+
"note": "送信対象となる"
|
|
846
|
+
},
|
|
847
|
+
{
|
|
848
|
+
"type": "references",
|
|
849
|
+
"target": "インライン画像挿入",
|
|
850
|
+
"note": "挿入済み画像が自動収集の対象になる"
|
|
851
|
+
}
|
|
852
|
+
],
|
|
853
|
+
"src": null
|
|
854
|
+
},
|
|
855
|
+
{
|
|
856
|
+
"name": "非公開にする",
|
|
857
|
+
"en": "Unpublish",
|
|
858
|
+
"context": "editor",
|
|
859
|
+
"domain": "application",
|
|
860
|
+
"definition": "#公開ステータス の `公開済み → 未公開` または `更新あり → 未公開` 遷移を起動するアクション。リモートからファイルを削除し、ローカルには残す。一度公開したファイルと一度も公開していないファイルは `未公開` として区別しない。",
|
|
861
|
+
"relations": [
|
|
862
|
+
{
|
|
863
|
+
"type": "references",
|
|
864
|
+
"target": "公開ステータス",
|
|
865
|
+
"note": "遷移を起動する"
|
|
866
|
+
}
|
|
867
|
+
],
|
|
868
|
+
"src": null
|
|
869
|
+
},
|
|
870
|
+
{
|
|
871
|
+
"name": "削除する",
|
|
872
|
+
"en": "Delete",
|
|
873
|
+
"context": "editor",
|
|
874
|
+
"domain": "application",
|
|
875
|
+
"definition": "#公開ステータス の任意ステートから `未存在` への遷移を起動するアクション。ローカルおよびリモートからファイルを削除する。`未公開` 状態のファイルはローカルのみ削除。",
|
|
876
|
+
"relations": [
|
|
877
|
+
{
|
|
878
|
+
"type": "references",
|
|
879
|
+
"target": "公開ステータス",
|
|
880
|
+
"note": "遷移を起動する"
|
|
881
|
+
}
|
|
882
|
+
],
|
|
883
|
+
"src": null
|
|
884
|
+
},
|
|
885
|
+
{
|
|
886
|
+
"name": "デプロイ",
|
|
887
|
+
"en": "Deploy",
|
|
888
|
+
"context": "editor",
|
|
889
|
+
"domain": "application",
|
|
890
|
+
"definition": "リモートリポジトリへの送信をトリガーにWebサイトへ変更が反映される一連の自動化フロー。#公開する ・ #更新する によって起動される。CI/CDパイプラインの設定・変更はエディタの範囲外。",
|
|
891
|
+
"relations": [
|
|
892
|
+
{
|
|
893
|
+
"type": "references",
|
|
894
|
+
"target": "公開する",
|
|
895
|
+
"note": "によって起動される"
|
|
896
|
+
},
|
|
897
|
+
{
|
|
898
|
+
"type": "references",
|
|
899
|
+
"target": "更新する",
|
|
900
|
+
"note": "によって起動される"
|
|
901
|
+
}
|
|
902
|
+
],
|
|
903
|
+
"src": null
|
|
904
|
+
},
|
|
905
|
+
{
|
|
906
|
+
"name": "ツリービルダー",
|
|
907
|
+
"en": null,
|
|
908
|
+
"context": "editor",
|
|
909
|
+
"domain": "solution",
|
|
910
|
+
"definition": "フラットな #ファイルリスト を、ディレクトリ階層を反映したネストオブジェクト(ツリーデータ)に変換する装置。#ネスト変換 を核操作として持つ。実装は `buildTree(files)` 関数。",
|
|
911
|
+
"relations": [
|
|
912
|
+
{
|
|
913
|
+
"type": "references",
|
|
914
|
+
"target": "ファイルリスト"
|
|
915
|
+
},
|
|
916
|
+
{
|
|
917
|
+
"type": "references",
|
|
918
|
+
"target": "ディレクトリツリー"
|
|
919
|
+
},
|
|
920
|
+
{
|
|
921
|
+
"type": "references",
|
|
922
|
+
"target": "ツリーレンダラー"
|
|
923
|
+
},
|
|
924
|
+
{
|
|
925
|
+
"type": "references",
|
|
926
|
+
"target": "ネスト変換"
|
|
927
|
+
}
|
|
928
|
+
],
|
|
929
|
+
"src": null
|
|
930
|
+
},
|
|
931
|
+
{
|
|
932
|
+
"name": "ツリーレンダラー",
|
|
933
|
+
"en": null,
|
|
934
|
+
"context": "editor",
|
|
935
|
+
"domain": "solution",
|
|
936
|
+
"definition": "#ツリービルダー が生成したツリーデータを HTML 文字列に変換する装置。#ディレクトリノード を `<details>/<summary>`、#ファイルノード をエディタリンク `<a>` として出力する。#アクティブファイル のノードには `class=\"active\"` を付与する。#公開ステータス を受け取り、各 #ファイルノード に `data-status` 属性を付与する。",
|
|
937
|
+
"relations": [
|
|
938
|
+
{
|
|
939
|
+
"type": "references",
|
|
940
|
+
"target": "ツリービルダー"
|
|
941
|
+
},
|
|
942
|
+
{
|
|
943
|
+
"type": "references",
|
|
944
|
+
"target": "ディレクトリノード"
|
|
945
|
+
},
|
|
946
|
+
{
|
|
947
|
+
"type": "references",
|
|
948
|
+
"target": "ファイルノード"
|
|
949
|
+
},
|
|
950
|
+
{
|
|
951
|
+
"type": "references",
|
|
952
|
+
"target": "アクティブファイル"
|
|
953
|
+
}
|
|
954
|
+
],
|
|
955
|
+
"src": null
|
|
956
|
+
},
|
|
957
|
+
{
|
|
958
|
+
"name": "ネスト変換",
|
|
959
|
+
"en": null,
|
|
960
|
+
"context": "editor",
|
|
961
|
+
"domain": "solution",
|
|
962
|
+
"definition": "フラットな #ファイルリスト を、ディレクトリ階層を反映したネスト構造のオブジェクトに変換する操作。パスを `/` で分割し、各ディレクトリを `dirs` に、最終要素をファイルとして `files` に格納する。",
|
|
963
|
+
"relations": [
|
|
964
|
+
{
|
|
965
|
+
"type": "references",
|
|
966
|
+
"target": "ツリービルダー",
|
|
967
|
+
"note": "が担う核操作"
|
|
968
|
+
},
|
|
969
|
+
{
|
|
970
|
+
"type": "references",
|
|
971
|
+
"target": "ファイルリスト"
|
|
972
|
+
},
|
|
973
|
+
{
|
|
974
|
+
"type": "references",
|
|
975
|
+
"target": "ディレクトリツリー"
|
|
976
|
+
}
|
|
977
|
+
],
|
|
978
|
+
"src": null
|
|
979
|
+
},
|
|
980
|
+
{
|
|
981
|
+
"name": "ディレクトリ",
|
|
982
|
+
"en": null,
|
|
983
|
+
"context": "editor",
|
|
984
|
+
"domain": "solution",
|
|
985
|
+
"definition": "コンテンツファイルを格納するファイルシステム上のフォルダ。#サイドバー の #ディレクトリツリー として表示される階層単位であり、#フロントマターテンプレート の適用単位にもなる。",
|
|
986
|
+
"relations": [
|
|
987
|
+
{
|
|
988
|
+
"type": "references",
|
|
989
|
+
"target": "サイドバー"
|
|
990
|
+
},
|
|
991
|
+
{
|
|
992
|
+
"type": "references",
|
|
993
|
+
"target": "フロントマターテンプレート"
|
|
994
|
+
}
|
|
995
|
+
],
|
|
996
|
+
"src": null
|
|
997
|
+
},
|
|
998
|
+
{
|
|
999
|
+
"name": "フロントマターテンプレート",
|
|
1000
|
+
"en": null,
|
|
1001
|
+
"context": "editor",
|
|
1002
|
+
"domain": "solution",
|
|
1003
|
+
"definition": "特定の #ディレクトリ 配下に新規ページを作るとき、エディタのテキストエリアにあらかじめ挿入される #フロントマター の雛形。変数名とデフォルト値のペアで構成される。",
|
|
1004
|
+
"relations": [
|
|
1005
|
+
{
|
|
1006
|
+
"type": "references",
|
|
1007
|
+
"target": "ディレクトリ"
|
|
1008
|
+
},
|
|
1009
|
+
{
|
|
1010
|
+
"type": "references",
|
|
1011
|
+
"target": "フロントマター",
|
|
1012
|
+
"context": "ssg-core"
|
|
1013
|
+
}
|
|
1014
|
+
],
|
|
1015
|
+
"src": null
|
|
1016
|
+
},
|
|
1017
|
+
{
|
|
1018
|
+
"name": "テンプレート設定",
|
|
1019
|
+
"en": null,
|
|
1020
|
+
"context": "editor",
|
|
1021
|
+
"domain": "solution",
|
|
1022
|
+
"definition": "`blog.json` に記述される、#ディレクトリ と #フロントマターテンプレート の対応関係の定義。`frontmatter_templates` キーとして配列で保持される。",
|
|
1023
|
+
"relations": [
|
|
1024
|
+
{
|
|
1025
|
+
"type": "references",
|
|
1026
|
+
"target": "ディレクトリ"
|
|
1027
|
+
},
|
|
1028
|
+
{
|
|
1029
|
+
"type": "references",
|
|
1030
|
+
"target": "フロントマターテンプレート"
|
|
1031
|
+
}
|
|
1032
|
+
],
|
|
1033
|
+
"src": null
|
|
1034
|
+
},
|
|
1035
|
+
{
|
|
1036
|
+
"name": "フロントマターテンプレートローダー",
|
|
1037
|
+
"en": null,
|
|
1038
|
+
"context": "editor",
|
|
1039
|
+
"domain": "solution",
|
|
1040
|
+
"definition": "ファイルパスと #テンプレート設定 一覧を受け取り、マッチする #フロントマターテンプレート を文字列に変換して返す装置。#テンプレートマッチャー と #テンプレートインジェクター を組み合わせた合成。マッチするテンプレートがない場合は null を返す。",
|
|
1041
|
+
"relations": [
|
|
1042
|
+
{
|
|
1043
|
+
"type": "references",
|
|
1044
|
+
"target": "テンプレートマッチャー"
|
|
1045
|
+
},
|
|
1046
|
+
{
|
|
1047
|
+
"type": "references",
|
|
1048
|
+
"target": "テンプレートインジェクター"
|
|
1049
|
+
}
|
|
1050
|
+
],
|
|
1051
|
+
"src": "packages/editor/js/frontmatter_template.js loadFrontmatterTemplate(filePath, templates)"
|
|
1052
|
+
},
|
|
1053
|
+
{
|
|
1054
|
+
"name": "テンプレートマッチャー",
|
|
1055
|
+
"en": null,
|
|
1056
|
+
"context": "editor",
|
|
1057
|
+
"domain": "solution",
|
|
1058
|
+
"definition": "入力された新規ファイル名のパスを検査して、#テンプレート設定 の中から最もマッチする #フロントマターテンプレート を選択する装置。複数マッチする場合は最も長いプレフィックスを優先する。",
|
|
1059
|
+
"relations": [
|
|
1060
|
+
{
|
|
1061
|
+
"type": "references",
|
|
1062
|
+
"target": "テンプレート設定"
|
|
1063
|
+
},
|
|
1064
|
+
{
|
|
1065
|
+
"type": "references",
|
|
1066
|
+
"target": "フロントマターテンプレート"
|
|
1067
|
+
}
|
|
1068
|
+
],
|
|
1069
|
+
"src": "packages/editor/js/frontmatter_template.js matchTemplate(filePath, templates)"
|
|
1070
|
+
},
|
|
1071
|
+
{
|
|
1072
|
+
"name": "テンプレートレゾルバー",
|
|
1073
|
+
"en": null,
|
|
1074
|
+
"context": "editor",
|
|
1075
|
+
"domain": "solution",
|
|
1076
|
+
"definition": "#テンプレート設定 をサーバーから取得し、#テンプレートマッチャー に渡す調停役。エディタ初期化時に一度だけ呼ばれる。",
|
|
1077
|
+
"relations": [
|
|
1078
|
+
{
|
|
1079
|
+
"type": "references",
|
|
1080
|
+
"target": "テンプレート設定"
|
|
1081
|
+
},
|
|
1082
|
+
{
|
|
1083
|
+
"type": "references",
|
|
1084
|
+
"target": "テンプレートマッチャー"
|
|
1085
|
+
}
|
|
1086
|
+
],
|
|
1087
|
+
"src": "packages/editor/js/editor.js initFrontmatterTemplate() / packages/editor/server/get_frontmatter_templates.js"
|
|
1088
|
+
},
|
|
1089
|
+
{
|
|
1090
|
+
"name": "テンプレートインジェクター",
|
|
1091
|
+
"en": null,
|
|
1092
|
+
"context": "editor",
|
|
1093
|
+
"domain": "solution",
|
|
1094
|
+
"definition": "選択された #フロントマターテンプレート をフロントマター文字列に変換して、エディタのテキストエリアに挿入する装置。ファイル名からタイトルを導出して `title` に埋め、`---` で囲んだ形式で出力する。",
|
|
1095
|
+
"relations": [
|
|
1096
|
+
{
|
|
1097
|
+
"type": "references",
|
|
1098
|
+
"target": "フロントマターテンプレート"
|
|
1099
|
+
}
|
|
1100
|
+
],
|
|
1101
|
+
"src": "packages/editor/js/frontmatter_template.js buildFrontmatterString(template, baseName)"
|
|
1102
|
+
},
|
|
1103
|
+
{
|
|
1104
|
+
"name": "ドロップレシーバー",
|
|
1105
|
+
"en": null,
|
|
1106
|
+
"context": "editor",
|
|
1107
|
+
"domain": "solution",
|
|
1108
|
+
"definition": "テキストエリア上のドロップ操作から画像ファイルを取り出す装置。",
|
|
1109
|
+
"relations": [
|
|
1110
|
+
{
|
|
1111
|
+
"type": "references",
|
|
1112
|
+
"target": "インライン画像挿入",
|
|
1113
|
+
"note": "インライン画像挿入の起点"
|
|
1114
|
+
},
|
|
1115
|
+
{
|
|
1116
|
+
"type": "references",
|
|
1117
|
+
"target": "画像アップローダー",
|
|
1118
|
+
"note": "取り出した画像ファイルを渡す"
|
|
1119
|
+
}
|
|
1120
|
+
],
|
|
1121
|
+
"src": "packages/editor/js/editor.js"
|
|
1122
|
+
},
|
|
1123
|
+
{
|
|
1124
|
+
"name": "画像アップローダー",
|
|
1125
|
+
"en": null,
|
|
1126
|
+
"context": "editor",
|
|
1127
|
+
"domain": "solution",
|
|
1128
|
+
"definition": "画像ファイルをサーバーに送信し、保存後の画像パスを受け取る装置。",
|
|
1129
|
+
"relations": [
|
|
1130
|
+
{
|
|
1131
|
+
"type": "references",
|
|
1132
|
+
"target": "ドロップレシーバー",
|
|
1133
|
+
"note": "画像を受け取る"
|
|
1134
|
+
},
|
|
1135
|
+
{
|
|
1136
|
+
"type": "references",
|
|
1137
|
+
"target": "アップロードエンドポイント",
|
|
1138
|
+
"note": "通信する"
|
|
1139
|
+
},
|
|
1140
|
+
{
|
|
1141
|
+
"type": "references",
|
|
1142
|
+
"target": "Markdown挿入器",
|
|
1143
|
+
"note": "受け取った画像パスを渡す"
|
|
1144
|
+
}
|
|
1145
|
+
],
|
|
1146
|
+
"src": "packages/editor/js/editor.js"
|
|
1147
|
+
},
|
|
1148
|
+
{
|
|
1149
|
+
"name": "アップロードエンドポイント",
|
|
1150
|
+
"en": null,
|
|
1151
|
+
"context": "editor",
|
|
1152
|
+
"domain": "solution",
|
|
1153
|
+
"definition": "画像データを受け取り、保存先を決定して変換・保存し、画像パスを返すHTTPハンドラ。",
|
|
1154
|
+
"relations": [
|
|
1155
|
+
{
|
|
1156
|
+
"type": "references",
|
|
1157
|
+
"target": "画像アップローダー",
|
|
1158
|
+
"note": "リクエストを受け取る"
|
|
1159
|
+
},
|
|
1160
|
+
{
|
|
1161
|
+
"type": "references",
|
|
1162
|
+
"target": "パスリゾルバー",
|
|
1163
|
+
"note": "呼び出す"
|
|
1164
|
+
},
|
|
1165
|
+
{
|
|
1166
|
+
"type": "references",
|
|
1167
|
+
"target": "画像コンバーター",
|
|
1168
|
+
"note": "呼び出す"
|
|
1169
|
+
},
|
|
1170
|
+
{
|
|
1171
|
+
"type": "references",
|
|
1172
|
+
"target": "ファイルライター",
|
|
1173
|
+
"note": "呼び出す"
|
|
1174
|
+
},
|
|
1175
|
+
{
|
|
1176
|
+
"type": "references",
|
|
1177
|
+
"target": "画像保存先パス",
|
|
1178
|
+
"note": "レスポンスで返す"
|
|
1179
|
+
}
|
|
1180
|
+
],
|
|
1181
|
+
"src": "packages/editor/server/image_upload.js post / handleImageUpload"
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
"name": "パスリゾルバー",
|
|
1185
|
+
"en": null,
|
|
1186
|
+
"context": "editor",
|
|
1187
|
+
"domain": "solution",
|
|
1188
|
+
"definition": "編集中MarkdownファイルのパスとファイルURLから、画像の保存先パスとMarkdown埋め込みURLを導出する装置。",
|
|
1189
|
+
"relations": [
|
|
1190
|
+
{
|
|
1191
|
+
"type": "references",
|
|
1192
|
+
"target": "アップロードエンドポイント",
|
|
1193
|
+
"note": "呼び出される"
|
|
1194
|
+
},
|
|
1195
|
+
{
|
|
1196
|
+
"type": "references",
|
|
1197
|
+
"target": "画像保存先パス",
|
|
1198
|
+
"note": "具現化する"
|
|
1199
|
+
}
|
|
1200
|
+
],
|
|
1201
|
+
"src": "packages/editor/server/image_upload.js resolveImagePath"
|
|
1202
|
+
},
|
|
1203
|
+
{
|
|
1204
|
+
"name": "コンバーターファクトリー",
|
|
1205
|
+
"en": null,
|
|
1206
|
+
"context": "editor",
|
|
1207
|
+
"domain": "solution",
|
|
1208
|
+
"definition": "設定(blog.json)の `image_converter` を解釈し #画像コンバーター を生成する装置。ビルトイン名(例: `\"sharp\"`)はパッケージ内の `converters/` から解決し、パス(`.` または `/` で始まる)はプロジェクトルートを起点に #ユーザー提供コンバーターモジュール を解決する。コンバーターが利用不可の場合はパススルーにフォールバックする。",
|
|
1209
|
+
"relations": [
|
|
1210
|
+
{
|
|
1211
|
+
"type": "references",
|
|
1212
|
+
"target": "アップロードエンドポイント",
|
|
1213
|
+
"note": "初期化時に呼ばれる"
|
|
1214
|
+
},
|
|
1215
|
+
{
|
|
1216
|
+
"type": "references",
|
|
1217
|
+
"target": "変換ドライバー",
|
|
1218
|
+
"note": "解決して画像コンバーターに注入する"
|
|
1219
|
+
},
|
|
1220
|
+
{
|
|
1221
|
+
"type": "references",
|
|
1222
|
+
"target": "画像コンバーター",
|
|
1223
|
+
"note": "生成して返す"
|
|
1224
|
+
},
|
|
1225
|
+
{
|
|
1226
|
+
"type": "references",
|
|
1227
|
+
"target": "ユーザー提供コンバーターモジュール",
|
|
1228
|
+
"note": "パス指定時に読み込む"
|
|
1229
|
+
}
|
|
1230
|
+
],
|
|
1231
|
+
"src": "packages/editor/server/createConverter.js createConverter"
|
|
1232
|
+
},
|
|
1233
|
+
{
|
|
1234
|
+
"name": "画像コンバーター",
|
|
1235
|
+
"en": null,
|
|
1236
|
+
"context": "editor",
|
|
1237
|
+
"domain": "solution",
|
|
1238
|
+
"definition": "画像データをWeb向けフォーマットに変換する装置。#変換ドライバー が注入されている場合はそれを使って変換し、注入されていない場合は画像をそのまま通過させる。",
|
|
1239
|
+
"relations": [
|
|
1240
|
+
{
|
|
1241
|
+
"type": "references",
|
|
1242
|
+
"target": "コンバーターファクトリー",
|
|
1243
|
+
"note": "生成される"
|
|
1244
|
+
},
|
|
1245
|
+
{
|
|
1246
|
+
"type": "references",
|
|
1247
|
+
"target": "アップロードエンドポイント",
|
|
1248
|
+
"note": "使用される"
|
|
1249
|
+
},
|
|
1250
|
+
{
|
|
1251
|
+
"type": "references",
|
|
1252
|
+
"target": "変換ドライバー",
|
|
1253
|
+
"note": "注入される"
|
|
1254
|
+
}
|
|
1255
|
+
],
|
|
1256
|
+
"src": "packages/editor/server/createConverter.js createConverter の返り値 fn"
|
|
1257
|
+
},
|
|
1258
|
+
{
|
|
1259
|
+
"name": "変換ドライバー",
|
|
1260
|
+
"en": null,
|
|
1261
|
+
"context": "editor",
|
|
1262
|
+
"domain": "solution",
|
|
1263
|
+
"definition": "#画像コンバーター に差し込む変換処理の実装。sharp 等の画像処理ライブラリをラップする形で提供される。",
|
|
1264
|
+
"relations": [
|
|
1265
|
+
{
|
|
1266
|
+
"type": "references",
|
|
1267
|
+
"target": "コンバーターファクトリー",
|
|
1268
|
+
"note": "生成され画像コンバーターに注入される"
|
|
1269
|
+
},
|
|
1270
|
+
{
|
|
1271
|
+
"type": "references",
|
|
1272
|
+
"target": "画像コンバーター",
|
|
1273
|
+
"note": "注入される"
|
|
1274
|
+
}
|
|
1275
|
+
],
|
|
1276
|
+
"src": "packages/editor/server/converters/sharp.js"
|
|
1277
|
+
},
|
|
1278
|
+
{
|
|
1279
|
+
"name": "ユーザー提供コンバーターモジュール",
|
|
1280
|
+
"en": "UserProvidedConverterModule",
|
|
1281
|
+
"context": "editor",
|
|
1282
|
+
"domain": "solution",
|
|
1283
|
+
"definition": "ユーザーがプロジェクトに配置する JavaScript モジュール。変換関数をデフォルトエクスポートし、出力拡張子を `ext` としてエクスポートする。`blog.json` の `image_converter` にパスを指定することで #コンバーターファクトリー が解決する。",
|
|
1284
|
+
"relations": [
|
|
1285
|
+
{
|
|
1286
|
+
"type": "references",
|
|
1287
|
+
"target": "コンバーターファクトリー",
|
|
1288
|
+
"note": "読み込まれる"
|
|
1289
|
+
},
|
|
1290
|
+
{
|
|
1291
|
+
"type": "references",
|
|
1292
|
+
"target": "変換ドライバー",
|
|
1293
|
+
"note": "の具体的な実装形態"
|
|
1294
|
+
}
|
|
1295
|
+
],
|
|
1296
|
+
"src": "src-sample/converters/webp.js(サンプル実装)"
|
|
1297
|
+
},
|
|
1298
|
+
{
|
|
1299
|
+
"name": "ビルトインコンバーター",
|
|
1300
|
+
"en": "BuiltinConverter",
|
|
1301
|
+
"context": "editor",
|
|
1302
|
+
"domain": "solution",
|
|
1303
|
+
"definition": "`@tenjuu99/blog` パッケージに同梱された #変換ドライバー 。`blog.json` の `image_converter` でビルトイン名(例: `\"sharp\"`)を指定することで #コンバーターファクトリー が解決する。ユーザーが別途ライブラリをインストールしなくても変換が動作することを保証する。",
|
|
1304
|
+
"relations": [
|
|
1305
|
+
{
|
|
1306
|
+
"type": "references",
|
|
1307
|
+
"target": "コンバーターファクトリー",
|
|
1308
|
+
"note": "ビルトイン名から解決される"
|
|
1309
|
+
},
|
|
1310
|
+
{
|
|
1311
|
+
"type": "references",
|
|
1312
|
+
"target": "変換ドライバー",
|
|
1313
|
+
"note": "の一種"
|
|
1314
|
+
}
|
|
1315
|
+
],
|
|
1316
|
+
"src": "packages/editor/server/converters/sharp.js"
|
|
1317
|
+
},
|
|
1318
|
+
{
|
|
1319
|
+
"name": "Markdown挿入器",
|
|
1320
|
+
"en": null,
|
|
1321
|
+
"context": "editor",
|
|
1322
|
+
"domain": "solution",
|
|
1323
|
+
"definition": "テキストエリアのカーソル位置に画像参照文字列を挿入する装置。",
|
|
1324
|
+
"relations": [
|
|
1325
|
+
{
|
|
1326
|
+
"type": "references",
|
|
1327
|
+
"target": "画像アップローダー",
|
|
1328
|
+
"note": "画像パスを受け取った後に呼び出す"
|
|
1329
|
+
}
|
|
1330
|
+
],
|
|
1331
|
+
"src": "packages/editor/js/image_upload.js insertImageMarkdown"
|
|
1332
|
+
},
|
|
1333
|
+
{
|
|
1334
|
+
"name": "ファイルライター",
|
|
1335
|
+
"en": null,
|
|
1336
|
+
"context": "editor",
|
|
1337
|
+
"domain": "solution",
|
|
1338
|
+
"definition": "保存先パスを許可ディレクトリ内に限定して検証し、画像バッファをファイルに書き込む装置。",
|
|
1339
|
+
"relations": [
|
|
1340
|
+
{
|
|
1341
|
+
"type": "references",
|
|
1342
|
+
"target": "アップロードエンドポイント",
|
|
1343
|
+
"note": "呼び出される"
|
|
1344
|
+
},
|
|
1345
|
+
{
|
|
1346
|
+
"type": "references",
|
|
1347
|
+
"target": "画像保存先パス",
|
|
1348
|
+
"note": "パスを受け取り書き込む"
|
|
1349
|
+
}
|
|
1350
|
+
],
|
|
1351
|
+
"src": "packages/editor/server/image_upload.js writeImageFile"
|
|
1352
|
+
},
|
|
1353
|
+
{
|
|
1354
|
+
"name": "プレビュー自動更新器",
|
|
1355
|
+
"en": "AutoPreviewInitializer",
|
|
1356
|
+
"context": "editor",
|
|
1357
|
+
"domain": "solution",
|
|
1358
|
+
"definition": "textareaの入力イベントを購読し、#デバウンサー を通じてプレビュー更新コールバックを起動する装置。",
|
|
1359
|
+
"relations": [
|
|
1360
|
+
{
|
|
1361
|
+
"type": "references",
|
|
1362
|
+
"target": "デバウンサー",
|
|
1363
|
+
"note": "デバウンサーを使用する"
|
|
1364
|
+
},
|
|
1365
|
+
{
|
|
1366
|
+
"type": "references",
|
|
1367
|
+
"target": "ドロップレシーバー拡張",
|
|
1368
|
+
"note": "協調してプレビューの自動更新を実現する"
|
|
1369
|
+
},
|
|
1370
|
+
{
|
|
1371
|
+
"type": "references",
|
|
1372
|
+
"target": "リアルタイムプレビュー更新",
|
|
1373
|
+
"note": "を実現する"
|
|
1374
|
+
}
|
|
1375
|
+
],
|
|
1376
|
+
"src": "packages/editor/js/autoPreviewInitializer.js initAutoPreview"
|
|
1377
|
+
},
|
|
1378
|
+
{
|
|
1379
|
+
"name": "デバウンサー",
|
|
1380
|
+
"en": "Debouncer",
|
|
1381
|
+
"context": "editor",
|
|
1382
|
+
"domain": "solution",
|
|
1383
|
+
"definition": "連続する呼び出しのうち最後の呼び出しから一定時間後のみコールバックを実行する装置。#テキスト入力 の「停止」を検知するために使われる。",
|
|
1384
|
+
"relations": [
|
|
1385
|
+
{
|
|
1386
|
+
"type": "references",
|
|
1387
|
+
"target": "プレビュー自動更新器",
|
|
1388
|
+
"note": "に組み込まれる"
|
|
1389
|
+
},
|
|
1390
|
+
{
|
|
1391
|
+
"type": "references",
|
|
1392
|
+
"target": "テキスト入力",
|
|
1393
|
+
"note": "テキスト入力の停止を検知する"
|
|
1394
|
+
}
|
|
1395
|
+
],
|
|
1396
|
+
"src": "packages/editor/js/debouncer.js createDebounce"
|
|
1397
|
+
},
|
|
1398
|
+
{
|
|
1399
|
+
"name": "ドロップレシーバー拡張",
|
|
1400
|
+
"en": "DropReceiverExtension",
|
|
1401
|
+
"context": "editor",
|
|
1402
|
+
"domain": "solution",
|
|
1403
|
+
"definition": "既存の #ドロップレシーバー に追加される、画像挿入完了後に更新コールバックを呼び出す拡張。#インライン画像挿入 の即時プレビュー更新を実現する。",
|
|
1404
|
+
"relations": [
|
|
1405
|
+
{
|
|
1406
|
+
"type": "references",
|
|
1407
|
+
"target": "ドロップレシーバー",
|
|
1408
|
+
"note": "ドロップレシーバーの拡張"
|
|
1409
|
+
},
|
|
1410
|
+
{
|
|
1411
|
+
"type": "references",
|
|
1412
|
+
"target": "リアルタイムプレビュー更新",
|
|
1413
|
+
"note": "即時トリガー経路を担う"
|
|
1414
|
+
}
|
|
1415
|
+
],
|
|
1416
|
+
"src": "packages/editor/js/editor.js initDropReceiver(修正)"
|
|
1417
|
+
},
|
|
1418
|
+
{
|
|
1419
|
+
"name": "公開ハンドラー",
|
|
1420
|
+
"en": "PublishHandler",
|
|
1421
|
+
"context": "editor",
|
|
1422
|
+
"domain": "solution",
|
|
1423
|
+
"definition": "HTTPリクエストを受け取り、#公開対象コレクター で対象を収集し、#変更反映器 で #公開する または #更新する 遷移を実行し、#公開フィードバック をレスポンスとして返す装置。ファイルの保存も一括して処理する。",
|
|
1424
|
+
"relations": [
|
|
1425
|
+
{
|
|
1426
|
+
"type": "references",
|
|
1427
|
+
"target": "公開対象コレクター",
|
|
1428
|
+
"note": "公開対象を収集させる"
|
|
1429
|
+
},
|
|
1430
|
+
{
|
|
1431
|
+
"type": "references",
|
|
1432
|
+
"target": "変更反映器",
|
|
1433
|
+
"note": "遷移の実行を委譲する"
|
|
1434
|
+
},
|
|
1435
|
+
{
|
|
1436
|
+
"type": "references",
|
|
1437
|
+
"target": "公開フィードバック",
|
|
1438
|
+
"note": "操作結果をレスポンスに変換する"
|
|
1439
|
+
}
|
|
1440
|
+
],
|
|
1441
|
+
"src": "packages/editor/server/publish.js"
|
|
1442
|
+
},
|
|
1443
|
+
{
|
|
1444
|
+
"name": "公開ステータス判定器",
|
|
1445
|
+
"en": "PublicationStatusResolver",
|
|
1446
|
+
"context": "editor",
|
|
1447
|
+
"domain": "solution",
|
|
1448
|
+
"definition": "#公開済み状態 を注入されて、ファイルパスから現在の #公開ステータス (未公開/更新あり/公開済み)を導出する装置。純粋関数として実装され、注入された抽象を介すことでgitなしにテストできる。",
|
|
1449
|
+
"relations": [
|
|
1450
|
+
{
|
|
1451
|
+
"type": "references",
|
|
1452
|
+
"target": "公開済み状態",
|
|
1453
|
+
"note": "注入されるリモート参照抽象"
|
|
1454
|
+
},
|
|
1455
|
+
{
|
|
1456
|
+
"type": "references",
|
|
1457
|
+
"target": "公開ステータス",
|
|
1458
|
+
"note": "導出して返す"
|
|
1459
|
+
}
|
|
1460
|
+
],
|
|
1461
|
+
"src": "packages/editor/server/publicationStatus.js"
|
|
1462
|
+
},
|
|
1463
|
+
{
|
|
1464
|
+
"name": "公開対象コレクター",
|
|
1465
|
+
"en": "PublishTargetCollector",
|
|
1466
|
+
"context": "editor",
|
|
1467
|
+
"domain": "solution",
|
|
1468
|
+
"definition": "現在のファイルパスと本文から #公開対象 を収集する装置。#画像参照抽出器 を使って参照画像パスを取得し、Markdownファイルと合わせたファイルリストを返す。",
|
|
1469
|
+
"relations": [
|
|
1470
|
+
{
|
|
1471
|
+
"type": "references",
|
|
1472
|
+
"target": "公開対象",
|
|
1473
|
+
"note": "収集した結果が公開対象にあたる"
|
|
1474
|
+
},
|
|
1475
|
+
{
|
|
1476
|
+
"type": "references",
|
|
1477
|
+
"target": "画像参照抽出器",
|
|
1478
|
+
"note": "参照画像の収集を委譲する"
|
|
1479
|
+
}
|
|
1480
|
+
],
|
|
1481
|
+
"src": "packages/editor/server/publishTargetCollector.js"
|
|
1482
|
+
},
|
|
1483
|
+
{
|
|
1484
|
+
"name": "画像参照抽出器",
|
|
1485
|
+
"en": "ImageReferenceExtractor",
|
|
1486
|
+
"context": "editor",
|
|
1487
|
+
"domain": "solution",
|
|
1488
|
+
"definition": "Markdown文字列から `` 形式の画像パスを抽出する装置。純粋関数として実装され、ファイルシステムへの依存を持たない。",
|
|
1489
|
+
"relations": [
|
|
1490
|
+
{
|
|
1491
|
+
"type": "references",
|
|
1492
|
+
"target": "公開対象コレクター",
|
|
1493
|
+
"note": "に組み込まれる"
|
|
1494
|
+
}
|
|
1495
|
+
],
|
|
1496
|
+
"src": "packages/editor/js/imageReferenceExtractor.js"
|
|
1497
|
+
},
|
|
1498
|
+
{
|
|
1499
|
+
"name": "変更反映器",
|
|
1500
|
+
"en": "ChangeReflector",
|
|
1501
|
+
"context": "editor",
|
|
1502
|
+
"domain": "solution",
|
|
1503
|
+
"definition": "#公開する または #更新する の遷移イベントを受けて、#公開対象 のファイル群をリモートに反映する装置。遷移の実行体(commit/push)を外部から注入できることで、実際のリモートリポジトリなしにテストが書ける。",
|
|
1504
|
+
"relations": [
|
|
1505
|
+
{
|
|
1506
|
+
"type": "references",
|
|
1507
|
+
"target": "公開対象",
|
|
1508
|
+
"note": "反映する対象を受け取る"
|
|
1509
|
+
}
|
|
1510
|
+
],
|
|
1511
|
+
"src": "packages/editor/server/changeReflector.js"
|
|
1512
|
+
},
|
|
1513
|
+
{
|
|
1514
|
+
"name": "新規作成",
|
|
1515
|
+
"en": "NewFileCreation",
|
|
1516
|
+
"context": "editor",
|
|
1517
|
+
"domain": "application",
|
|
1518
|
+
"definition": "ファイル名を指定して新しいページを作る操作。ファイル選択とは独立した操作として存在し、#フロントマターテンプレート を選択できる。作成されたファイルは #公開ステータス が「未公開」の状態でローカルに #保存 される。",
|
|
1519
|
+
"relations": [
|
|
1520
|
+
{
|
|
1521
|
+
"type": "references",
|
|
1522
|
+
"target": "フロントマターテンプレート",
|
|
1523
|
+
"note": "作成時にテンプレートを選択できる"
|
|
1524
|
+
},
|
|
1525
|
+
{
|
|
1526
|
+
"type": "references",
|
|
1527
|
+
"target": "公開ステータス",
|
|
1528
|
+
"note": "作成直後は「未公開」ステート"
|
|
1529
|
+
},
|
|
1530
|
+
{
|
|
1531
|
+
"type": "references",
|
|
1532
|
+
"target": "保存",
|
|
1533
|
+
"note": "作成と同時にローカル保存が行われる"
|
|
1534
|
+
}
|
|
1535
|
+
],
|
|
1536
|
+
"src": null
|
|
1537
|
+
},
|
|
1538
|
+
{
|
|
1539
|
+
"name": "自動保存",
|
|
1540
|
+
"en": "AutoSave",
|
|
1541
|
+
"context": "editor",
|
|
1542
|
+
"domain": "application",
|
|
1543
|
+
"definition": "テキストエリアへの入力を契機に、saveボタンの操作なしにファイルがローカルに #保存 されること。#リアルタイムプレビュー更新 と同様に「書く」行為の流れを中断しない。",
|
|
1544
|
+
"relations": [
|
|
1545
|
+
{
|
|
1546
|
+
"type": "references",
|
|
1547
|
+
"target": "保存",
|
|
1548
|
+
"note": "保存の自動化された形態"
|
|
1549
|
+
},
|
|
1550
|
+
{
|
|
1551
|
+
"type": "references",
|
|
1552
|
+
"target": "リアルタイムプレビュー更新",
|
|
1553
|
+
"note": "同じトリガー(テキスト入力の停止)で発火する"
|
|
1554
|
+
},
|
|
1555
|
+
{
|
|
1556
|
+
"type": "references",
|
|
1557
|
+
"target": "テキスト入力",
|
|
1558
|
+
"note": "テキスト入力の停止がトリガーとなる"
|
|
1559
|
+
}
|
|
1560
|
+
],
|
|
1561
|
+
"src": null
|
|
1562
|
+
},
|
|
1563
|
+
{
|
|
1564
|
+
"name": "自動保存初期化器",
|
|
1565
|
+
"en": "AutoSaveInitializer",
|
|
1566
|
+
"context": "editor",
|
|
1567
|
+
"domain": "solution",
|
|
1568
|
+
"definition": "テキストエリアへの入力イベントを受け取り、#デバウンサー を介して入力停止を検知し、保存コールバックを呼び出す装置。#プレビュー自動更新器 と同構造だが、保存を担う。",
|
|
1569
|
+
"relations": [
|
|
1570
|
+
{
|
|
1571
|
+
"type": "references",
|
|
1572
|
+
"target": "自動保存",
|
|
1573
|
+
"note": "自動保存の JS 側実現"
|
|
1574
|
+
},
|
|
1575
|
+
{
|
|
1576
|
+
"type": "references",
|
|
1577
|
+
"target": "デバウンサー",
|
|
1578
|
+
"note": "入力停止の検知に使う"
|
|
1579
|
+
}
|
|
1580
|
+
],
|
|
1581
|
+
"src": "packages/editor/js/autoSaveInitializer.js"
|
|
1582
|
+
},
|
|
1583
|
+
{
|
|
1584
|
+
"name": "保存エンドポイント",
|
|
1585
|
+
"en": "SaveEndpoint",
|
|
1586
|
+
"context": "editor",
|
|
1587
|
+
"domain": "solution",
|
|
1588
|
+
"definition": "ファイル名と内容を受け取り、ローカルファイルシステムに書き込む POST エンドポイント(`/save`)。保存後はリダイレクトせず `{success: true}` を返す。#自動保存 と #新規作成 の両方から利用される共有ノード。`server/editor.js` を置き換える。",
|
|
1589
|
+
"relations": [
|
|
1590
|
+
{
|
|
1591
|
+
"type": "references",
|
|
1592
|
+
"target": "自動保存",
|
|
1593
|
+
"note": "自動保存の保存先"
|
|
1594
|
+
},
|
|
1595
|
+
{
|
|
1596
|
+
"type": "references",
|
|
1597
|
+
"target": "新規作成",
|
|
1598
|
+
"note": "新規ファイル作成時の保存先"
|
|
1599
|
+
}
|
|
1600
|
+
],
|
|
1601
|
+
"src": "packages/editor/server/save.js"
|
|
1602
|
+
},
|
|
1603
|
+
{
|
|
1604
|
+
"name": "新規作成UI",
|
|
1605
|
+
"en": "NewFileCreationUI",
|
|
1606
|
+
"context": "editor",
|
|
1607
|
+
"domain": "solution",
|
|
1608
|
+
"definition": "「新規作成」ボタンとダイアログで構成されるブラウザUI。ファイル名の入力と #フロントマターテンプレート の表示・選択を担う。確定時に #保存エンドポイント を呼び出してファイルを作成し、エディタで開く。",
|
|
1609
|
+
"relations": [
|
|
1610
|
+
{
|
|
1611
|
+
"type": "references",
|
|
1612
|
+
"target": "新規作成",
|
|
1613
|
+
"note": "新規作成操作を UI として具現化する"
|
|
1614
|
+
},
|
|
1615
|
+
{
|
|
1616
|
+
"type": "references",
|
|
1617
|
+
"target": "フロントマターテンプレート",
|
|
1618
|
+
"note": "ディレクトリに応じたテンプレートを表示する"
|
|
1619
|
+
},
|
|
1620
|
+
{
|
|
1621
|
+
"type": "references",
|
|
1622
|
+
"target": "保存エンドポイント",
|
|
1623
|
+
"note": "確定時に呼び出す"
|
|
1624
|
+
}
|
|
1625
|
+
],
|
|
1626
|
+
"src": "packages/editor/js/editor.js"
|
|
1627
|
+
},
|
|
1628
|
+
{
|
|
1629
|
+
"name": "カテゴリー",
|
|
1630
|
+
"en": null,
|
|
1631
|
+
"context": "category",
|
|
1632
|
+
"domain": "application",
|
|
1633
|
+
"definition": "#ページ に付与するラベル。階層を持てる(例: `[\"Tech\", \"Frontend\", \"React\"]`)。#ページ の #フロントマター で配列として指定する。",
|
|
1634
|
+
"relations": [
|
|
1635
|
+
{
|
|
1636
|
+
"type": "references",
|
|
1637
|
+
"target": "ページ",
|
|
1638
|
+
"context": "ssg-core"
|
|
1639
|
+
},
|
|
1640
|
+
{
|
|
1641
|
+
"type": "references",
|
|
1642
|
+
"target": "フロントマター",
|
|
1643
|
+
"context": "ssg-core"
|
|
1644
|
+
},
|
|
1645
|
+
{
|
|
1646
|
+
"type": "references",
|
|
1647
|
+
"target": "カテゴリーパス"
|
|
1648
|
+
},
|
|
1649
|
+
{
|
|
1650
|
+
"type": "references",
|
|
1651
|
+
"target": "カテゴリーシステム"
|
|
1652
|
+
}
|
|
1653
|
+
],
|
|
1654
|
+
"src": null
|
|
1655
|
+
},
|
|
1656
|
+
{
|
|
1657
|
+
"name": "カテゴリーパス",
|
|
1658
|
+
"en": null,
|
|
1659
|
+
"context": "category",
|
|
1660
|
+
"domain": "application",
|
|
1661
|
+
"definition": "#カテゴリー の階層を表す文字列の配列(例: `[\"Tech\", \"Frontend\"]`)。先頭が最上位カテゴリー、末尾が最も具体的なカテゴリー。このパスから #カテゴリーページ のURLが導出される。",
|
|
1662
|
+
"relations": [
|
|
1663
|
+
{
|
|
1664
|
+
"type": "references",
|
|
1665
|
+
"target": "カテゴリー"
|
|
1666
|
+
},
|
|
1667
|
+
{
|
|
1668
|
+
"type": "references",
|
|
1669
|
+
"target": "カテゴリーページ"
|
|
1670
|
+
}
|
|
1671
|
+
],
|
|
1672
|
+
"src": null
|
|
1673
|
+
},
|
|
1674
|
+
{
|
|
1675
|
+
"name": "カテゴリーシステム",
|
|
1676
|
+
"en": null,
|
|
1677
|
+
"context": "category",
|
|
1678
|
+
"domain": "application",
|
|
1679
|
+
"definition": "独立した分類の枠組み。`blog.json` の `categories` 配列の各要素として定義し、対象ページの範囲(`path_filter`)とURLプレフィックスを持つ。複数の #カテゴリーシステム は互いに独立して動作する。",
|
|
1680
|
+
"relations": [
|
|
1681
|
+
{
|
|
1682
|
+
"type": "references",
|
|
1683
|
+
"target": "カテゴリーページ",
|
|
1684
|
+
"note": "を生成する"
|
|
1685
|
+
},
|
|
1686
|
+
{
|
|
1687
|
+
"type": "references",
|
|
1688
|
+
"target": "ページ",
|
|
1689
|
+
"context": "ssg-core",
|
|
1690
|
+
"note": "の範囲を絞り込む"
|
|
1691
|
+
},
|
|
1692
|
+
{
|
|
1693
|
+
"type": "references",
|
|
1694
|
+
"target": "カテゴリー",
|
|
1695
|
+
"note": "を分類する単位"
|
|
1696
|
+
}
|
|
1697
|
+
],
|
|
1698
|
+
"src": null
|
|
1699
|
+
},
|
|
1700
|
+
{
|
|
1701
|
+
"name": "サブカテゴリー",
|
|
1702
|
+
"en": null,
|
|
1703
|
+
"context": "category",
|
|
1704
|
+
"domain": "application",
|
|
1705
|
+
"definition": "ある #カテゴリーパス の直下に位置する子カテゴリー。#カテゴリーページ に `category_children` として列挙される。",
|
|
1706
|
+
"relations": [
|
|
1707
|
+
{
|
|
1708
|
+
"type": "references",
|
|
1709
|
+
"target": "カテゴリーパス"
|
|
1710
|
+
},
|
|
1711
|
+
{
|
|
1712
|
+
"type": "references",
|
|
1713
|
+
"target": "カテゴリーページ"
|
|
1714
|
+
}
|
|
1715
|
+
],
|
|
1716
|
+
"src": null
|
|
1717
|
+
},
|
|
1718
|
+
{
|
|
1719
|
+
"name": "カテゴリーページ",
|
|
1720
|
+
"en": null,
|
|
1721
|
+
"context": "category",
|
|
1722
|
+
"domain": "application",
|
|
1723
|
+
"definition": "#カテゴリー に属する #ページ の一覧を表示する、#ビルド 時に自動生成されるページ。#カテゴリーパス に対応するURLに出力される。#ページネーション が有効な場合は複数ページに分割される。",
|
|
1724
|
+
"relations": [
|
|
1725
|
+
{
|
|
1726
|
+
"type": "references",
|
|
1727
|
+
"target": "カテゴリーシステム",
|
|
1728
|
+
"note": "によって自動生成される"
|
|
1729
|
+
},
|
|
1730
|
+
{
|
|
1731
|
+
"type": "references",
|
|
1732
|
+
"target": "カテゴリーパス",
|
|
1733
|
+
"note": "と1対1で対応する"
|
|
1734
|
+
},
|
|
1735
|
+
{
|
|
1736
|
+
"type": "references",
|
|
1737
|
+
"target": "ページインデックス",
|
|
1738
|
+
"context": "ssg-core",
|
|
1739
|
+
"note": "に追加される"
|
|
1740
|
+
},
|
|
1741
|
+
{
|
|
1742
|
+
"type": "references",
|
|
1743
|
+
"target": "ページネーション",
|
|
1744
|
+
"note": "によって分割されることがある"
|
|
1745
|
+
},
|
|
1746
|
+
{
|
|
1747
|
+
"type": "references",
|
|
1748
|
+
"target": "サブカテゴリー",
|
|
1749
|
+
"note": "を表示できる"
|
|
1750
|
+
}
|
|
1751
|
+
],
|
|
1752
|
+
"src": null
|
|
1753
|
+
},
|
|
1754
|
+
{
|
|
1755
|
+
"name": "ページネーション",
|
|
1756
|
+
"en": null,
|
|
1757
|
+
"context": "category",
|
|
1758
|
+
"domain": "application",
|
|
1759
|
+
"definition": "#カテゴリーページ を複数の静的HTMLに分割する仕組み。`per_page` で1ページあたりの件数を指定する。1ページ目のURLはページネーション未設定時と同じで後方互換を保つ。",
|
|
1760
|
+
"relations": [
|
|
1761
|
+
{
|
|
1762
|
+
"type": "references",
|
|
1763
|
+
"target": "カテゴリーページ",
|
|
1764
|
+
"note": "を分割する"
|
|
1765
|
+
},
|
|
1766
|
+
{
|
|
1767
|
+
"type": "references",
|
|
1768
|
+
"target": "カテゴリーシステム",
|
|
1769
|
+
"note": "に設定される"
|
|
1770
|
+
}
|
|
1771
|
+
],
|
|
1772
|
+
"src": null
|
|
1773
|
+
},
|
|
1774
|
+
{
|
|
1775
|
+
"name": "サイドバー取得エンドポイント",
|
|
1776
|
+
"en": "SidebarEndpoint",
|
|
1777
|
+
"context": "editor",
|
|
1778
|
+
"domain": "solution",
|
|
1779
|
+
"definition": "ページディレクトリを直接スキャンし、サイドバーツリーの HTML を返す GET エンドポイント(`/get_sidebar`)。#サイドバー の動的再描画(新規ファイル作成後など)に使われる。",
|
|
1780
|
+
"relations": [
|
|
1781
|
+
{
|
|
1782
|
+
"type": "references",
|
|
1783
|
+
"target": "サイドバー",
|
|
1784
|
+
"note": "サイドバーの HTML を生成して返す"
|
|
1785
|
+
},
|
|
1786
|
+
{
|
|
1787
|
+
"type": "references",
|
|
1788
|
+
"target": "新規作成",
|
|
1789
|
+
"note": "新規作成後のサイドバー更新に呼び出される"
|
|
1790
|
+
}
|
|
1791
|
+
],
|
|
1792
|
+
"src": "packages/editor/server/get_sidebar.js"
|
|
1793
|
+
},
|
|
1794
|
+
{
|
|
1795
|
+
"name": "ファイルステータスコレクター",
|
|
1796
|
+
"en": "SidebarStatusCollector",
|
|
1797
|
+
"context": "editor",
|
|
1798
|
+
"domain": "solution",
|
|
1799
|
+
"definition": "ファイル群の #公開ステータス をまとめて取得できるもの。",
|
|
1800
|
+
"relations": [
|
|
1801
|
+
{ "type": "references", "target": "公開ステータス判定器" }
|
|
1802
|
+
],
|
|
1803
|
+
"src": "packages/editor/server/sidebarStatusCollector.js"
|
|
1804
|
+
}
|
|
1805
|
+
]
|
|
1806
|
+
}
|