← 목록
기타 2026-05-19 3KB 읽기 3분

CrownyDoc 협업 약점 #85 + #77 구현

개요

CrownyDoc Office Suite 협업 관련 약점 2개를 수정했다.
  • #85 파일 히스토리 타임라인 없음 (HIGH / large effort) → done
  • #77 오프라인 편집/동기화 없음 (HIGH / large effort) → done

무엇을 했는지

#85 — CrownyHistory (파일 히스토리 타임라인)

collab-client.js 끝에 CrownyHistory 생성자 함수 추가.

  • saveVersion(docId, content, author, message) — localStorage에 최대 50개 버전 저장 (용량 초과 시 10개로 자동 축소)
  • getVersions(docId) — 최신순 버전 목록 반환
  • restoreVersion(docId, version) — 특정 버전 내용 복원
  • diffVersions(docId, v1, v2) — 라인별 diff (add/remove/change)
  • showHistoryPanel(docId) — 우측 300px 패널 UI
  • 세로선 + 원형 노드 타임라인
  • 각 노드: 버전번호, 시간(YYYY-MM-DD HH:mm), 작성자, 메시지, 글자수
  • 클릭: 상단 미리보기(최대 300자), 더블클릭: 확인 후 에디터에 복원
  • #77 — CrownyOffline (오프라인 편집/동기화)

    collab-client.js 끝에 CrownyOffline 생성자 함수 추가.

    • init() — 네트워크 이벤트 바인딩 + 이미 오프라인이면 표시줄 즉시 노출
    • isOnline()navigator.onLine 기반 상태 확인
    • saveOffline(docId, content) — localStorage에 {docId, content, savedAt, synced:false} 저장; 문서 목록 키(crowny-offline-docs)도 관리
    • getOfflineChanges()synced:false 인 레코드만 반환
    • syncOnReconnect()POST /api/sync-offline 으로 각 레코드 전송; 200-299 응답 시 synced:true 갱신 후 성공 토스트
    • _showOfflineIndicator() — 상단 빨간 고정 바 "오프라인 — 변경 사항은 자동 저장되며 온라인 복귀 시 동기화됩니다."
    • _hideOfflineIndicator() — 바 제거
    • _bindNetworkEvents()window offline/online 이벤트 리스너; 온라인 복귀 시 syncOnReconnect() 자동 호출

    관련 파일 경로

    • /Users/ef/CrownyDoc/한선씨/정적/collab-client.js — JS 구현 (165줄→481줄)
    • /Users/ef/CrownyDoc/한선씨/협업/히스토리오프라인.한선 — 한선씨 동반 파일 (220줄, 신규)
    • /Users/ef/CrownyDoc/benchmark-weaknesses.json — #85, #77 status: done

    잔여 이슈

    • 서버 측 /api/sync-offline 엔드포인트가 아직 없음 → server-docs.js에 추가 필요
    • Service Worker 기반 오프라인 캐싱은 미구현 (현재 localStorage만 사용)
    • showHistoryPanel 에서 에디터 셀렉터(contenteditable, textarea#editor, #editor)가 실제 에디터 DOM과 맞는지 앱 통합 시 확인 필요