
xSlide 에디터 내에서 엑셀이나 파워포인트 수준의 고급 표 편집 기능(셀 드래그 선택, 병합/분할, 개별 스타일링)을 구현하는 것은 충분히 가능합니다. 다만 웹 상에서 이를 안정적으로 구현하려면 상당히 복잡한 로직과 체계적인 구조 설계가 필요합니다.
핵심 요구사항 분석 및 해결 방안
1. 마우스 범위 선택 (Cell Selection)
마우스 드래그를 통해 여러 셀을 한 번에 선택하는 기능입니다.
- 이벤트 처리: 표 영역 내부에서
mousedown,mouseover,mouseup이벤트를 감지하여 선택의 시작 셀과 끝 셀을 파악합니다. - 가상 격자(Virtual Grid) 모델: 표는
rowspan과colspan을 가질 수 있으므로, 단순한 DOM 순서가 아닌 실제 2D 격자 좌표계 상에서의 위치를 추적하는 데이터 모델을 만들어야 합니다. - 선택 영역 보정 (Snapping): 병합된 셀이 선택 영역 가장자리에 걸칠 경우, 선택 영역이 완벽한 직사각형(Rectangle)을 유지하도록 자동으로 전체 영역을 확장시키는 알고리즘이 필요합니다.
- UI 피드백: 선택된 셀(
<td>)들에.selected-cell같은 CSS 클래스를 부여하여 푸른색 반투명 오버레이 효과를 줍니다.
2. 셀 합치기 및 나누기 (Merge / Split)
- 셀 합치기 (Merge):
- 선택된 직사각형 영역 내에서 최좌측-최상단에 위치한 최우선 셀(Master Cell)을 찾습니다.
- Master Cell의
rowspan과colspan속성을 선택된 영역의 높이와 너비만큼 증가시킵니다. - 선택된 나머지 셀들은 DOM에서 제거(삭제)하고, 내부 데이터 모델에서는 '병합되어 숨겨진 상태'로 마킹합니다.
- 셀 나누기 (Split):
- 병합된 셀을 선택하고 나누기를 실행합니다.
- 해당 셀의
rowspan,colspan을 1로 초기화합니다. - 분할되어 빈자리가 된 공간(가상 격자 모델 기반)에 새로운
<td>요소를 생성하여 원래 속해야 할<tr>에 알맞은 순서대로 다시 삽입합니다.
3. 셀 개별 스타일링 (배경 색상, 폰트 등)
- 한 개 또는 여러 개의 셀이 선택된 상태에서 우측 속성 패널(Inspector)이나 플로팅 툴바(Floating Toolbar)를 통해 스타일 변경을 요청하면, 선택된 모든
<td>요소의 인라인 스타일(Inline Style)을 업데이트합니다. - 지원 가능 속성: 배경색(
background-color), 폰트 색상(color), 폰트 패밀리(font-family), 텍스트 정렬(text-align), 텍스트 굵기/크기 등.
💡 사용자 검토 및 결정 필요 사항 (User Review Required)
IMPORTANT
이 기능은 마치 '미니 엑셀'을 브라우저에 구현하는 것과 같이 규모가 큰 작업입니다. 원활한 구현을 위해 다음 설계 방향에 대한 피드백을 부탁드립니다.
- 플로팅 툴바(Floating Toolbar) UX 도입 여부
- 현재 텍스트 수정 시 나타나는 플로팅 툴바처럼, 표의 셀을 드래그하여 선택하면 마우스 포인터 근처에 병합/분할/색상변경 버튼이 있는 작은 툴바가 뜨도록 하는 것이 사용성에 가장 좋습니다. 이 방식을 채택할까요?
- 행/열 크기 조절 (Resizing) 포함 여부
- 마우스로 표 내부의 선(테두리)을 드래그하여 특정 열의 너비나 행의 높이를 조절하는 기능도 표의 핵심입니다. 이 기능도 이번 구현에 함께 포함해서 진행할까요?
- 표 데이터의 저장 방식 개편
- 고급 표를 지원하려면 기존의 단순 HTML 문자열 저장 방식에서 벗어나, 각 셀별 속성/텍스트/병합 상태를 관리할 수 있는 세분화된 JSON 구조(Grid Matrix)로 에디터 상태 관리를 업그레이드해야 합니다.
🚀 제안하는 구현 순서
- Phase 1 (기반 작업): 표 생성 UI 툴박스에 재활성화 및 2D 가상 그리드 데이터 구조 설계
- Phase 2 (선택 기능): 셀 드래그 다중 선택 이벤트 및 직사각형 보정 로직 구현
- Phase 3 (병합 및 스타일): 셀 합치기/나누기 로직 작성 및 셀 개별 폰트/색상 적용 기능
- Phase 4 (리사이징): (원하실 경우) 표 테두리 드래그 크기 조절 기능 추가
위 계획대로 구현을 시작하는 것이 좋을지, 혹은 계획을 수정하거나 확인하시고 싶은 부분이 있다면 말씀해 주세요!
댓글 (0)
댓글 쓰기