← 목록
기타 2026-07-24 4KB 읽기 3분

크라우니캔버스 에디터 — 내용보존 블록변환 (P0-1)

개요

경쟁제품 연구(docs/10-경쟁제품-연구.md §③ P0-1)에 따라, 크라우니캔버스 위키 에디터(1b)에 "문단↔제목↔리스트↔토글↔체크 등 블록 타입 전환 시 내용·자식 무손실" 기능을 추가했다. 기존 슬래시 팔레트 선택 및 (미사용 상태였던) 블록교체 함수는 블록을 통째로 새 객체로 교체해 내용·자식을 항상 날려버리는 구조였다 — 이번 작업으로 텍스트 계열 사이 전환은 내용을 보존하도록 수리하고, 블록 핸들(⋯) 메뉴에 "전환" 서브메뉴를 신설했다.

무엇을 했는지

  1. editor.js
- 블록전환(idx, 파레트키) 신설: 이전종류/새종류가 둘 다 텍스트 계열 (문단/제목1-3/불릿/번호/체크/토글/인용/콜아웃/코드)이면 내용·자식을 그대로 두고 종류만 바꾸고, 종류별 부속 속성(토글=펼침, 체크=완료)만 안전 이관. 비호환 전환(위젯/컬렉션뷰 등)은 기존처럼 새 기본값으로 교체(데이터 성격 불일치 — 명시적). - 기존 미사용 블록교체(idx, 종류)블록전환으로 위임하는 하위호환 별칭으로 축소. - 슬래시 팔레트 항목 선택 핸들러가 블록을 통째로 교체하던 코드를 블록전환 호출로 교체 (슬래시 트리거 텍스트만 제거하고 나머지 내용은 보존). - 블록 행 컨트롤에 "⋯"(더보기) 버튼 추가 → 핸들메뉴열기(anchor, 블록)가 "전환 — 내용 보존" 팝업(문단/제목1-3/불릿/번호/체크/토글/인용/콜아웃 10항목)을 띄우고, 항목 클릭 시 블록전환 호출. 외부 클릭(document mousedown capture)·Escape로 닫힘.

  1. 한선씨/에디터.한선 (동반 파리티, 판정 로직 정본)
- 텍스트계열인가(종류) — 11개 텍스트 계열 종류 판정. - 전환_내용보존되나(이전종류, 새종류) — 1=보존/2=동일종류 무동작/0=비호환 교체. - 전환후_속성유지키(새종류) — 토글→"펼침", 체크→"완료", 그 외 없음. - 셀프테스트 13건 추가(텍스트계열 판정 4 + 전환판정 6 + 속성유지키 3).

검증

  • node --check 앱/화면/editor.js → 통과
  • hanseonc_high STRICT 컴파일 → 경고 0, 12147 큐브 생성
  • crownyc run (환경변수 에디터_셀프테스트=1) → 40/40 PASS (기존 27건 + 신규 13건)
  • 크라우니코드: lookup/search MISS(신규 로직) → 학습 1건 추가(블록전환_내용보존_텍스트계열판정, 별칭 블록전환)

관련 파일

  • /Users/ef/crowny-canvas/앱/화면/editor.js
  • /Users/ef/crowny-canvas/한선씨/에디터.한선
  • /Users/ef/crowny-canvas/docs/10-경쟁제품-연구.md (§③ P0-1 근거)
  • /Users/ef/crowny-canvas/docs/07-앱-계약.md (블록 계약)

잔여 이슈

  • 위젯류(컬렉션뷰/버튼/CAD뷰어 등) ↔ 텍스트 계열 상호 전환은 여전히 데이터 초기화(의도된 동작,
구조 불일치이므로 P0-1 범위 밖). 필요 시 별도 "부분 보존"(예: 텍스트 내용을 위젯 설정 필드로 매핑) 설계는 후속 과제.
  • 블록 핸들 메뉴는 현재 "전환"만 제공 — 삭제/복제/색상 등 다른 항목은 별도 요청 시 추가.
  • LaunchAgent org.crowny.canvas(:9620) 라이브 리로드는 정적 파일 서빙이라 브라우저 새로고침만
하면 반영됨(서버 재기동 불요) — 별도 curl 종단검증은 미실행(요청 범위=에디터.js·에디터.한선 한정).