Let users download shared notes as Markdown
The shared notes had no way out: everything lived in the SQLite row and the
only reader was the panel itself. Add two export endpoints and buttons for
them at the bottom of the note panel.
GET /api/notes/{page_id}/export returns one page as .md, and
GET /api/notes/export returns every page as a zip laid out as
<section>/<NN>_<title>.md. Pages are not concatenated into a single file on
purpose - the headings inside a page would collide with whatever heading
level we used as a page separator, so each page stays a verbatim file and the
numeric prefix carries the tab order instead.
Titles reach the filesystem here, so strip the Windows-forbidden characters
and control characters, cap the length, and send Content-Disposition with an
RFC 5987 filename* so Japanese titles survive. The front end deliberately
omits the anchor's download attribute to let that name win.
notes store: flush() now returns a promise so the download can wait for
pending edits to be saved before asking the server for the file.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+22
@@ -187,6 +187,28 @@ SSE でストリーミング応答を返す。
|
||||
|
||||
---
|
||||
|
||||
### GET /api/notes/export
|
||||
全ページを ZIP でダウンロードさせる(`Content-Disposition: attachment`)。
|
||||
1 ページ 1 ファイルの Markdown で、本文はそのまま。エントリ名は `<セクション>/<通し番号>_<タイトル>.md`
|
||||
(セクション無しのページは ZIP 直下)。通し番号は `position` 順なのでタブの並びが残る。
|
||||
ファイル名は `notes_YYYYMMDD.zip`。
|
||||
|
||||
---
|
||||
|
||||
### GET /api/notes/{page_id}/export
|
||||
1 ページを Markdown ファイルとしてダウンロードさせる。本文はそのままで、ファイル名がタイトルになる。
|
||||
ページが存在しない場合は `404`。
|
||||
|
||||
日本語タイトルを扱うため `Content-Disposition` には RFC 5987 形式を併記する:
|
||||
|
||||
```
|
||||
attachment; filename="______.md"; filename*=UTF-8''%E8%B2%B7%E3%81%84%E7%89%A9%E3%83%AA%E3%82%B9%E3%83%88.md
|
||||
```
|
||||
|
||||
ファイル名に使えない文字(`\ / : * ? " < > |` と制御文字)は `_` に置き換え、80 文字で切る。
|
||||
|
||||
---
|
||||
|
||||
## ログ
|
||||
|
||||
### GET /logs
|
||||
|
||||
Reference in New Issue
Block a user