diff --git a/app/static/js/journal-editor.js b/app/static/js/journal-editor.js index 5c19d11..8ced382 100644 --- a/app/static/js/journal-editor.js +++ b/app/static/js/journal-editor.js @@ -22,6 +22,16 @@ // 서버 렌더링(app/markdown_utils.py)은 -/*/+ 전부 동일하게 처리하니 렌더링과는 무관하고 // 순수하게 에디터가 새로 만들어주는 글머리 기호에 대한 취향 설정이다. unorderedListStyle: "-", + // CodeMirror(EasyMDE 내부 엔진)는 User-Agent로 모바일 여부를 판단해 입력 모드를 + // textarea/contenteditable 중 하나로 자동으로 고른다. iPadOS 13+는 기본 설정에서 + // 데스크톱 Safari인 척하는 UA를 보내기 때문에(Mac으로 오인) 이 자동 감지가 실패해서 + // 더 취약한 textarea 모드로 떨어지고, 한글처럼 여러 keystroke를 조합해 한 글자를 + // 완성하는 IME 입력 중에 CodeMirror가 화면을 다시 그리면서 조합 버퍼를 끊어버려 + // 자소가 분리된 채로 남는 현상(자소분리)이 생긴다. contenteditable 모드를 생성 시점에 + // 명시적으로 강제해 이 오감지를 우회한다 — inputStyle은 CodeMirror 생성 이후에는 + // 바꿀 수 없는 옵션이라(런타임에 setOption을 호출하면 에러) 반드시 여기서 지정해야 + // 한다. iPhone은 원래도 정상 감지되지만 동일하게 명시해서 일관되게 둔다. + inputStyle: "contenteditable", }); // CodeMirror는 원본 textarea와 실시간으로 값이 동기화되지 않는다(.save()를 명시적으로