journal: real markdown editor (EasyMDE) with live preview toggle, fix default template
- Replace the plain textarea with EasyMDE (vendored locally, no CDN) for markdown authoring: syntax highlighting, smart list continuation, and a custom text-based toolbar (built-in EasyMDE toolbar icons require Font Awesome from a CDN, which this app doesn't use). unorderedListStyle is set to "-" to match the app's own template convention. - Add a preview/edit toggle button that swaps the editor for the exact same server-rendered markdown (via /journal/preview) shown after saving, instead of always showing both. - Fix create/edit entry routes to verify the submitted category_id actually belongs to the current user before inserting -- every other write path in this app already checked ownership; this one didn't (found while manually testing the new editor with a typo'd category id that happened to belong to someone else's category, which surfaced as an IntegrityError 500 instead of a clean 404-equivalent). - Fix the default "일상" category template: bare "-" bullet lines don't parse as list items in the markdown renderer (they need a trailing space), and the content_template validator was silently stripping that trailing space off on every save. Backfill migration updates any category still holding the old, broken template text. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -34,27 +34,27 @@ ALLOWED_IMAGE_TYPES = {"image/jpeg", "image/png", "image/webp", "image/gif"}
|
||||
ALLOWED_VIDEO_TYPES = {"video/mp4", "video/quicktime"}
|
||||
THUMBNAIL_WIDTH = 400
|
||||
DEFAULT_CATEGORY_NAME = "일상"
|
||||
DEFAULT_CATEGORY_TEMPLATE = """**1. Story : 오늘 무슨 일이 있었나요?**
|
||||
|
||||
-
|
||||
|
||||
**2. Feelings : 오늘 들었던 생각과 나의 감정은?**
|
||||
|
||||
-
|
||||
|
||||
**3. Decisions : 오늘 내가 내린 결정이 있나요?**
|
||||
|
||||
-
|
||||
|
||||
**4. Insights : 나에 대해 새롭게 알게된 사실이 있나요?**
|
||||
|
||||
-
|
||||
|
||||
→ 나에 대한 인사이트는 메타인지를 키워주는 **소중한 기록**입니다. 꼭 보관하세요.
|
||||
|
||||
**5. Actions : 내가 다음에 할 행동은 무엇인가요?**
|
||||
|
||||
- """
|
||||
# 목록 기호("- ") 뒤에 공백이 없으면(그냥 "-"만 있으면) markdown 라이브러리가 목록으로 안 잡고
|
||||
# 그냥 문단 텍스트로 렌더링한다 — 그래서 다섯 줄 다 "- "(대시+공백)로 통일해야 실제로
|
||||
# 빈 체크리스트 항목(<li></li>)이 만들어진다. 제목 줄과 "-" 사이에 빈 줄이 없으면 markdown이
|
||||
# 그 "-"를 목록이 아니라 제목 밑줄(setext heading)로 오인해서 제목 자체가 사라지므로 빈 줄도 필수.
|
||||
_BULLET = "- " # 뒤 공백이 핵심 — 트리플쿼트 문자열 끝의 trailing space는 도구를 거치며 잘려나가서
|
||||
# 여기서는 따옴표 "안쪽"에 명시적으로 넣어 안 잘리게 한다.
|
||||
DEFAULT_CATEGORY_TEMPLATE = "\n\n".join(
|
||||
[
|
||||
"**1. Story : 오늘 무슨 일이 있었나요?**",
|
||||
_BULLET,
|
||||
"**2. Feelings : 오늘 들었던 생각과 나의 감정은?**",
|
||||
_BULLET,
|
||||
"**3. Decisions : 오늘 내가 내린 결정이 있나요?**",
|
||||
_BULLET,
|
||||
"**4. Insights : 나에 대해 새롭게 알게된 사실이 있나요?**",
|
||||
_BULLET,
|
||||
"→ 나에 대한 인사이트는 메타인지를 키워주는 **소중한 기록**입니다. 꼭 보관하세요.",
|
||||
"**5. Actions : 내가 다음에 할 행동은 무엇인가요?**",
|
||||
_BULLET,
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
# ---- 카테고리 ----
|
||||
|
||||
Reference in New Issue
Block a user