관리자 블록 에디터 범위 선택 보완 및 복사 시 네이티브 우선(v1.0.8)
블록 범위가 있어도 contenteditable 비접힘 선택·textarea/input 선택 시 copy 가로채기 생략. 문서·버전 v1.0.8 반영.
This commit is contained in:
@@ -1,5 +1,23 @@
|
||||
# 의사결정 이력
|
||||
|
||||
## 2026-05-13 v1.0.8
|
||||
|
||||
### 블록 범위 복사와 부분 텍스트 선택
|
||||
|
||||
블록 인덱스 범위가 잡힌 상태에서 사용자가 한 블록 안에서 드래그로 일부 문자만 선택해 복사하는 경우가 있다. 루트 `copy` 캡처로 항상 구간 마크다운을 넣으면 기대와 어긋나므로, 비접힘 DOM 선택이 해당 행의 `contenteditable` 호스트에 있거나 `textarea`/`input`에 선택 구간이 있으면 `preventDefault`를 하지 않고 네이티브 클립보드 동작을 유지한다.
|
||||
|
||||
## 2026-05-14 v1.0.7
|
||||
|
||||
### 블록 단위 범위 선택과 마크다운 전용 복사
|
||||
|
||||
다중 `contenteditable` 구조에서는 브라우저가 블록 경계를 넘는 선택을 제공하지 않는다. 붙여넣기 분할과 전체 Cmd+A 클립보드 복사만으로는 구간 복사 흐름이 부족하므로, 핸들 옆 좁은 레인에서 포인터 드래그와 Shift 조합으로 블록 인덱스 구간을 잡고, 복사 파이프는 `text/plain` 마크다운으로만 통일했다. 문자 단위 범위는 다음 단계로 남긴다. 범위는 인덱스 쌍이므로 블록 삭제·이동·분할 붙여넣기 등 배열이 바뀌는 경로마다 해제해 stale 상태를 막는다.
|
||||
|
||||
## 2026-05-14 v1.0.6
|
||||
|
||||
### 블록 에디터 붙여넣기·전체 선택 UX
|
||||
|
||||
블록마다 `contenteditable`을 두면 브라우저가 편집 호스트 경계를 넘는 선택을 허용하지 않아 Cmd+A가 한 블록에만 먹고, 여러 줄 마크다운을 붙여넣으면 한 블록 안에 줄바꿈 문자만 들어가 저장 구조와 어긋난다. 완전한 단일 편집면(ProseMirror 등)으로 바꾸지 않는 한, 붙여넣기 경로에서 `parseMarkdownToBlocks`로 분할 삽입하고, Cmd/Ctrl+A는 전체 마크다운을 클립보드에 복사하는 보완으로 실사용 복사·이동 요구를 맞춘다.
|
||||
|
||||
## 2026-05-14 v1.0.5
|
||||
|
||||
### Docker 런타임 환경 변수 우선
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
|------|-----------|
|
||||
| components/admin/AdminPostForm.vue | 관리자 글 작성/수정 폼, Ghost 스타일 전체 화면 에디터, 변경사항 기반 저장 버튼 활성화, 저장 클릭 시 전체 화면 발행 모달(행 접기/펼침, Ghost 동일 SVG 아이콘, 상태 요약 후 발행/초안/비공개 선택, 발행 시에만 시점 행·즉시/예약·datetime-local), 좌우 분할 설정 패널, 설정 패널 전환 애니메이션, Post URL 보기 액션, 중립 톤 삭제 액션, 대표 이미지 hover 액션과 업로드/미디어 선택 확정, 제목 IME Enter 가드, SVG 닫기 아이콘 배지형 태그 입력(한글 유지), 로컬 자동 저장(툴바 상태 옆 복원·무시), 미저장 변경사항 이탈 확인, 검색 노출 제외(noindex), 저장 시 제목·요약을 SEO 메타로 반영, 미리보기 요청 |
|
||||
| components/admin/AdminPageForm.vue | 관리자 페이지 작성/수정 폼, 대표 이미지 선택 |
|
||||
| components/admin/AdminBlockEditor.vue | 관리자 글 블록형 에디터, 이미지/갤러리/콜아웃/토글/임베드 블록, 콜아웃 Emoji on/off·이모지 프리셋·배경 프리셋 선택(우측 고정 설정 패널), 갤러리 복수 미디어 선택·이미지 수별 열 배치·삽입 위치 표시 드래그 순서 변경, 한글 조합 입력 처리, Shift+Enter 줄바꿈, 코드 블록 단축 변환, AFFiNE 참고 세로 막대형 블록 핸들 선택/삭제/드래그 이동과 삽입선 표시, 하단 빈 입력 블록 유지, 본문 placeholder 표시 |
|
||||
| components/admin/AdminBlockEditor.vue | 관리자 글 블록형 에디터, 이미지/갤러리/콜아웃/토글/임베드 블록, 콜아웃 Emoji on/off·이모지 프리셋·배경 프리셋 선택(우측 고정 설정 패널), 갤러리 복수 미디어 선택·이미지 수별 열 배치·삽입 위치 표시 드래그 순서 변경, 한글 조합 입력 처리, Shift+Enter 줄바꿈, 코드 블록 단축 변환, AFFiNE 참고 세로 막대형 블록 핸들 선택/삭제/드래그 이동과 삽입선 표시, 하단 빈 입력 블록 유지, 본문 placeholder 표시, 여러 줄·마크다운 붙여넣기 시 블록 분할, 블록 단위 범위 선택(레인 드래그·Shift+클릭·Shift+↑↓·Escape, 레인 aria-label) 및 선택 구간 마크다운 복사(단 contenteditable 비접힘 선택·textarea/input 선택 시 복사는 네이티브)·범위 있을 때 Cmd/Ctrl+A는 구간만 복사, 블록 삭제·이동·분할 붙여넣기 등 배열 변경 시 범위 자동 해제, 범위 없을 때 Cmd/Ctrl+A는 전체 MD 복사 안내 |
|
||||
| components/admin/AdminNavPrimaryBranch.vue | 관리자 상단 네비 트리(테이블·태그와 동일한 행 드래그 하이라이트, 하위·삭제) |
|
||||
| components/admin/AdminTagForm.vue | 관리자 태그 생성/수정 폼(이름/슬러그/설명/색상만 편집) |
|
||||
| components/admin/AdminMemberForm.vue | 관리자 멤버 추가/수정 폼(Ghost형 3분할, 요약 1fr·입력 2fr, 원형 썸네일 hover 등록·변경·삭제, 기본 정보·레이블·관리자 노트·활동 요약, 설정 메뉴의 비밀번호 변경·멤버 삭제 모달, 미저장 변경사항 이탈 확인) |
|
||||
|
||||
@@ -440,7 +440,10 @@ components/content/
|
||||
|
||||
### 관리자 글 편집
|
||||
|
||||
- 글 작성/수정 화면은 Ghost 스타일을 참고한 블록형 에디터를 사용한다.
|
||||
- 글 작성/수정 화면은 Ghost 스타일을 참고한 블록형 에디터를 사용한다. 텍스트 블록마다 별도 `contenteditable`을 쓰므로, 브라우저는 **편집 호스트 경계를 넘는 드래그 선택**을 허용하지 않는다(한 블록 안에서만 연속 선택).
|
||||
- **Cmd/Ctrl+A**(Mac은 Cmd, Windows/Linux는 Ctrl)는 현재 블록만 전체 선택되는 대신, **저장 형식인 전체 본문 마크다운**을 클립보드에 복사하고 짧은 안내 문구를 표시한다. 다른 편집기·파일로 옮길 때 사용한다.
|
||||
- **여러 줄**이거나 제목·인용·목록·펜스 코드·콜아웃/갤러리 등 **마크다운으로 인식되는 한 줄**을 텍스트 블록에 붙여넣으면, 기본 한 블록 삽입 대신 `parseMarkdownToBlocks`로 나눈 **여러 블록**을 현재 커서 위치에 끼워 넣는다. 클립보드에 파일이 있으면 기본 붙여넣기(이미지 등)를 유지한다.
|
||||
- **블록 단위 범위 선택**: 각 행 왼쪽(핸들 오른쪽) **좁은 레인**에서 포인터 드래그로 시작·끝 블록을 지정하거나, **Shift+클릭**으로 끝 블록을 지정한다. 텍스트 블록에서 **Shift+↑/↓**는 경계에 있을 때 범위를 시작하거나, 이미 범위가 있으면 **포커스 쪽 끝 블록 인덱스**를 한 칸씩 늘리거나 줄인다. **Escape**로 범위를 해제한다. 범위가 있을 때 **Cmd/Ctrl+C** 또는 복사(`copy`)는 `text/plain`에 **선택 구간만** 마크다운으로 넣는다. 다만 **한 블록의 contenteditable 안에서 비접힘 텍스트 선택**이 있거나 **textarea/input에 선택 구간**이 있으면 복사는 브라우저 기본 동작(선택된 문자열 등)을 따른다. 범위가 있을 때 **Cmd/Ctrl+A**는 전체가 아니라 **선택 구간** 마크다운을 클립보드에 복사한다. 블록 삭제·드래그 순서 변경·마크다운 분할 붙여넣기 등으로 `editorBlocks` 순서가 바뀌면 범위 선택은 자동으로 해제된다.
|
||||
- 저장 데이터는 기존 `content` 필드의 마크다운 문자열을 유지한다.
|
||||
- `/` 입력 시 블록 선택 메뉴를 표시한다.
|
||||
- `/` 명령 메뉴는 화면 하단 공간이 부족하면 현재 블록 위쪽으로 표시한다.
|
||||
|
||||
@@ -1,5 +1,24 @@
|
||||
# 업데이트 이력
|
||||
|
||||
## v1.0.8
|
||||
|
||||
- 관리자 블록 에디터에서 블록 범위 선택이 있어도, contenteditable 안 비접힘 텍스트 선택 또는 textarea/input 선택 구간이 있으면 복사는 브라우저 기본 동작으로 두고 마크다운 가로채기를 하지 않음.
|
||||
- 패키지 버전 `1.0.8`으로 갱신.
|
||||
|
||||
## v1.0.7
|
||||
|
||||
- 관리자 블록 에디터에 블록 단위 범위 선택 추가(핸들 오른쪽 레인 드래그·Shift+클릭, Shift+↑↓ 확장, Escape 해제).
|
||||
- 범위 선택 시 Cmd/Ctrl+C 및 복사 동작은 `text/plain` 마크다운으로만 반영. 범위가 있을 때 Cmd/Ctrl+A는 선택 구간만 클립보드에 복사.
|
||||
- 블록 삭제·드래그 이동·마크다운 붙여넣기 분할·활성 전환 시 미사용 구조형 블록 제거 등으로 배열이 바뀔 때 범위 선택을 해제해 인덱스 불일치를 방지.
|
||||
- 범위 선택 레인에 `aria-label`·`role="button"` 추가.
|
||||
- 패키지 버전 `1.0.7`으로 갱신.
|
||||
|
||||
## v1.0.6
|
||||
|
||||
- 관리자 블록 에디터에서 여러 줄·마크다운 붙여넣기 시 한 블록에 몰리지 않고 파싱된 여러 블록으로 삽입되도록 처리.
|
||||
- 블록별 contenteditable 한계로 문서 전체 드래그 선택이 불가한 점을 보완하기 위해 Cmd/Ctrl+A로 전체 본문 마크다운을 클립보드에 복사하고 안내 문구를 표시하도록 추가.
|
||||
- 패키지 버전 `1.0.6`으로 갱신.
|
||||
|
||||
## v1.0.5
|
||||
|
||||
- Docker 운영 이미지에서 빌드 시점 `runtimeConfig`가 비어도 컨테이너 런타임 환경 변수(`DATABASE_URL`, `ADMIN_EMAIL`, `ADMIN_PASSWORD`, `MEMBER_SESSION_SECRET`, Resend 설정)를 우선 읽도록 수정.
|
||||
|
||||
Reference in New Issue
Block a user