크라우니 오피스 슬라이드 punch #2 — 발표자 노트 편집 영속화
개요
크라우니 오피스 Slides 모듈의 발표자 노트: "표시"는 실작동(
{{ note }}=slides[cur].note 바인딩)이나 편집 writeback이 없어 편집이 모델에 저장 안 됨(전환 후 복귀 시 원복)이던 것을 편집 영속화로 완성. crownyBridge.js §20 installSlideBridge(punch #1) 확장. 앱 번들 무수정.
무엇을 했는지
- 노트 writeback (crownyBridge.js §20)
-
commitField에
field==='note' 분기 추가 →
slides[cur].note 반영.
-
findNoteEl(): 이전 형제 라벨이 "발표자 노트"로 시작 + contentEditable + 가시(offsetParent≠null) 인 div 식별(편집 모드 notesWrap 노트만, 발표자 뷰 표시노트·캔버스 제목/본문과 무충돌).
-
applyNoteData(): 노트 div를
wireEditable(el,'note',false)로 input/blur 배선(punch #1 패턴 재사용, 멱등 guard=data-crowny-slot).
fixupNow에 통합(150ms 폴링·scheduleFixup 버스트 공유 → 중복 리스너 없음).
- 표시-편집 정합 (실측으로 발견한 함정 해소)
- 노트 표시는
{{ note }} 바인딩이 있어 편집
전엔 슬라이드 전환에 따라 갱신되나, 사용자가 노트 contentEditable을 편집한
뒤로는 DCLogic 프레임워크가 그 노드 텍스트를 재렌더에서 더 이상 덮지 않아 전환 시 편집한 노트가 그대로 남음(예: slide0 편집 후 slide1 가면 slide0 노트 표시).
- → 캔버스 제목/본문(바인딩 부재)을 applyCanvasData가 모델 구동하듯, 노트 표시도 브릿지가
slides[cur].note로 직접 setText 구동(서명 guard
data-crowny-note-sig=cur+note, 전환/모델변경 시에만·편집중 skip으로 커서 유지).
- 슬라이드별 독립·전환보존·복제 note: writeback이 curIndex(라이브)만 대상 → slide[i]≠slide[j]. 복제는 원본 앱
th.dup의 {...arr[i]} 스프레드가 note까지 복제(라이브 실작동) — 재사용.
- 한선씨 정본:
bundle/office/bridge/슬라이드노트.한선 신규 — 4필드 레코드(종류|제목|본문|노트) note writeback·슬롯노트편집·슬라이드복제(note복제)·빈슬라이드. hanseonc_high 자체시험 16/16.
게이트 결과
- hanseonc_high: 슬라이드노트.한선 16/16, 슬라이드편집.한선(punch #1) 20/20 무회귀.
- JS:
node --check crownyBridge.js SYNTAX OK.
- CDP :9334 실측 5/5: ①노트 편집 "★노트편집★" 모델+표시 영속 ②slide1 갔다 복귀 시 slide0 노트 유지 + slide1은 자기 노트 표시(정합) ③독립(slide0=★노트편집★, slide1=자기시드) ④복제가 note까지 복제(len 4→5, dupNote=★노트편집★, 제목 "(복제)") ⑤발표자 모드 노트=★노트편집★.
- 문서 회귀 27/27 PASS(bridge 변경 후 재실행).
- 슬라이드 punch #1 무회귀: 캔버스 제목 편집→모델+표시 영속, 전환 시 per-slide 제목 정합, 복귀 유지 실측 PASS.
- 앱 번들·crowny-browser.m·crowny-shell.m·Makefile·시트 §19 무수정(bridge는 런타임 WKUserScript 로드 — 네이티브 바이너리 무변경).
관련 파일
/Users/ef/CrownyBrowser/bundle/office/bridge/crownyBridge.js §20 (commitField note분기 + findNoteEl/applyNoteData + fixupNow 통합 + 헤더주석)
/Users/ef/CrownyBrowser/bundle/office/bridge/슬라이드노트.한선 (신규 정본, 16/16)
/Users/ef/CrownyBrowser/spec/슬라이드기능-판정표.md (발표자 노트 편집 → 실작동 갱신)
잔여 이슈
- 다중행 노트: setText(textContent) 표시라 편집 시 개행은 모델엔 보존되나 표시 재구동 시 개행이 시각적으로 접힐 수 있음(시드 노트는 단일행 — 실사용 영향 미미, 필요 시 white-space:pre-wrap).
- 다음 punch: #3 슬라이드 순서변경(드래그), #4 레이아웃 실적용.