편집, 블록 단위로
편집은 위키백과에서 오타를 고치는 방식 그대로 동작합니다: 페이지 전체를 담은 거대한 텍스트 영역이 아니라, 지금 보고 있는 그 문단을 편집합니다. 편집 모드(npm run wiki 명령)에서 로그인한 뒤, 어느 노트든 — 이 노트도 포함해서 — 아무 블록에나 마우스를 올려 ✎ 버튼을 클릭해 보십시오.
§1.1편집 루프
렌더링된 블록이 숨고, 그 자리에 CodeMirror 편집기가 그 블록의 Markdown 소스를 담은 채 펼쳐집니다. 입력하는 동안 아래에서 라이브 미리보기가 렌더링됩니다 — 엔진의 방언에 사이트가 inkbrush({ markdown }) 호출로 넘긴 플러그인을 더한, 페이지 파이프라인이 올리는 것과 정확히 같은 규칙 세트를 통해서요. 그래서 미리보기와 페이지는 결코 어긋날 수 없습니다. ⌘/Ctrl + Enter 조합이 저장하고, Esc 키가 취소합니다.
frontmatter도 하나의 블록입니다: 이 정원 모든 노트 상단의 분류 스트립은 전용 ✎ 버튼을 지니고, 그것이 노트의 YAML을 엽니다 — 상태나 날짜를 바꾸면 헤더가 갱신된 frontmatter로부터 다시 렌더링됩니다.
§1.2두 겹의 안전망
낙관적 잠금. 블록마다 자신이 잘려 나온 소스의 해시를 지니고 다닙니다. 다른 사람이 그사이 파일을 바꿔 두었다면, 저장은 남의 작업을 소리 없이 덮어쓰는 대신 충돌로 거부됩니다 — 새로 고침하고 다시 시도하면 됩니다.
빌드 관문. 디스크에 무엇이든 쓰이기 전에, 파일 전체가 사이트의 Markdown 파이프라인을 통과합니다 — 방언, 콘텐츠 가드, 사이트 자신의 플러그인, 그리고 .mdx 파일이라면 MDX 컴파일러까지. 페이지를 깨뜨릴 저장 — 짝을 맺지 못한 ** 표시, 닫히지 않은 컴포넌트 태그, 잘못된 표현식 — 은 정확한 오류 메시지와 함께 거부되고, 디스크의 파일은 손대지 않은 채 남습니다. 가드의 거부 목록 전체는 전 요소 시연 끝에서 시연됩니다.
§1.3저장은 어디로 가는가
저장은 Markdown 파일을 쓰고, autocommit 옵션이 켜져 있으면 로그인한 사용자 명의의 git 커밋이 됩니다. 데이터베이스는 어디에도 없습니다: 콘텐츠 파일이 유일한 진실의 원천이고, git이 오래가는 이력입니다. 수정 이력을 움직이는 블록 단위의 촘촘한 일지는 그 위에 얹혀 갑니다.
방언 자체 — CJK 친화적 강조 규칙을 더한 GFM, 그리고 조용한 변형을 일으키는 Markdown을 거부하는 콘텐츠 가드 — 는 엔진 안에 한 번만 정의되어, 페이지 렌더러와 이 편집기의 미리보기와 check-content CLI가 공유합니다(다섯 가지 검사). 문법은 하나, 소비자는 셋, 어긋남은 없습니다.