라이브 코드 블록 패널 상태 수정
This commit is contained in:
@@ -1980,6 +1980,9 @@ const onPreviewInsertAfterLine = ({ afterLine, lines, focusLine }) => {
|
||||
].join('\n')
|
||||
|
||||
activeLogicalLineIndex.value = nextFocusLine
|
||||
isBlockPanelEngaged.value = false
|
||||
lastStableBlockContext.value = null
|
||||
syncBlockPanelState()
|
||||
|
||||
nextTick(() => {
|
||||
previewRendererRef.value?.focusEditableAtLine(nextFocusLine, 0, 'start')
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
# 업데이트 요약
|
||||
|
||||
## v1.5.90
|
||||
|
||||
- 라이브 글쓰기에서 코드블럭을 빠져나온 뒤에도 오른쪽 코드블럭 설정 패널이 남아 있던 문제를 다시 수정했다.
|
||||
- 마지막 코드블럭 아래로 이동해 새 문단을 만들 때 패널 상태가 즉시 일반 문단으로 바뀌도록 보강했다.
|
||||
|
||||
## v1.5.89
|
||||
|
||||
- 코드블럭 안의 `/volume1/...` 같은 경로가 슬래시 명령으로 오인되던 문제를 수정했다.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 배포 가이드
|
||||
|
||||
> 로컬 기준 v1.5.89에서 `npm run lint`, `npm run build` 검증을 통과했다. NAS 실제 컨테이너 기동과 도메인/프록시 접속 검증은 운영 배포 단계에서 진행한다.
|
||||
> 로컬 기준 v1.5.90에서 `npm run lint`, `npm run build` 검증을 통과했다. NAS 실제 컨테이너 기동과 도메인/프록시 접속 검증은 운영 배포 단계에서 진행한다.
|
||||
|
||||
## 빌드 유형
|
||||
|
||||
@@ -16,6 +16,12 @@
|
||||
|
||||
## 로컬 개발
|
||||
|
||||
### v1.5.90 참고
|
||||
|
||||
- 추가 DB 마이그레이션은 없다.
|
||||
- 게시물 작성 라이브 모드에서 코드 블록 아래 일반 문단으로 커서를 이동하면 오른쪽 코드 블록 설정 패널이 닫히는지 확인한다.
|
||||
- 문서 마지막 코드 블록 본문 끝에서 아래 방향키를 눌렀을 때 코드 블록 밖 일반 문단이 생성되고 커서가 이동하는지 확인한다.
|
||||
|
||||
### v1.5.89 참고
|
||||
|
||||
- 추가 DB 마이그레이션은 없다.
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
| lib/external-favicon-url.js | 외부 URL 호스트 기준 Google `s2/favicons` 썸네일 URL 생성(내부 경로는 빈 문자열) |
|
||||
| lib/navigation-editor-tree.js | 관리자 메뉴 UI·서버 `renumberSortOrderByTree`가 쓰는 `buildNavigationEditorTree`, 관리자 상단 네비 평면 표용 `flattenNavigationEditorWrappers` |
|
||||
| lib/markdown-content-normalizer.js | 관리자 Markdown-first 전환 후 레거시 블록 배열·객체 본문 값을 저장용 마크다운 문자열로 변환 |
|
||||
| lib/markdown-block-context.js | 관리자 Markdown textarea·라이브 편집 포커스 위치 기준 이미지·갤러리·임베드·인용·콜아웃·코드·토글 블록 설정 패널 대상 판별 |
|
||||
| lib/markdown-block-context.js | 관리자 Markdown textarea·라이브 편집 포커스 위치 기준 이미지·갤러리·임베드·인용·콜아웃·코드·토글 블록 설정 패널 대상 판별, 코드 fenced 블록 여닫는 펜스 쌍 판별 |
|
||||
| lib/markdown-callout.js | 인용 막대 색상·콜아웃 배경색 옵션, 선언 줄 파싱·직렬화 |
|
||||
| lib/brand-color.js | 사이트 브랜드 컬러 기본값·hex 검증·정규화 |
|
||||
| lib/markdown-image.js | 이미지 마크다운 직렬화·파싱, 단독 이미지 URL 판별 |
|
||||
|
||||
@@ -661,7 +661,7 @@ components/content/
|
||||
- 툴바 `이미지`·`갤러리`는 미디어 모달을 연다. 모달 기본 탭은 **미디어 라이브러리**이며 **업로드** 탭에서 드래그·파일 선택 후 즉시 삽입한다.
|
||||
- 미디어 라이브러리에서 단일 이미지를 선택하면 `` 형식으로 삽입한다.
|
||||
- 미디어 라이브러리에서 여러 이미지를 선택하면 `:::gallery` fenced block으로 삽입한다.
|
||||
- 작성 모드에서 커서가 이미지 마크다운 줄, `:::gallery`, 단독 URL 임베드 줄, 기존 `:::embed`, 인용문, `:::callout`, 코드 fenced 블록, `:::toggle` 블록 안에 있고 textarea(또는 블록 패널)에 포커스가 있으면 게시물 설정 사이드바(420px) 위에 **블록 설정 패널**(`AdminEditorBlockPanel`)이 오른쪽에서 슬라이드 인한다. 본문·패널 바깥을 클릭하면 슬라이드 아웃한다. 라이브 모드 멀티라인 편집기는 실제 커서가 있는 원본 줄을 패널 상태에 반영하며, 커서가 지원 블록 밖으로 이동하면 직전 코드·콜아웃·인용 설정 패널을 닫는다. 갤러리 이미지 추가 미디어 모달을 여는 동안에는 활성 갤러리 컨텍스트와 패널 상태를 유지한다.
|
||||
- 작성 모드에서 커서가 이미지 마크다운 줄, `:::gallery`, 단독 URL 임베드 줄, 기존 `:::embed`, 인용문, `:::callout`, 코드 fenced 블록, `:::toggle` 블록 안에 있고 textarea(또는 블록 패널)에 포커스가 있으면 게시물 설정 사이드바(420px) 위에 **블록 설정 패널**(`AdminEditorBlockPanel`)이 오른쪽에서 슬라이드 인한다. 본문·패널 바깥을 클릭하면 슬라이드 아웃한다. 라이브 모드 멀티라인 편집기는 실제 커서가 있는 원본 줄을 패널 상태에 반영하며, 커서가 지원 블록 밖으로 이동하면 직전 코드·콜아웃·인용 설정 패널을 닫는다. 코드 fenced 블록 판별은 위에서 아래로 여는 펜스와 닫는 펜스를 짝지어 처리해, 닫는 ` ``` ` 줄을 다음 코드 블록 시작으로 오인하지 않는다. 갤러리 이미지 추가 미디어 모달을 여는 동안에는 활성 갤러리 컨텍스트와 패널 상태를 유지한다.
|
||||
- 블록 설정 패널: 이미지·갤러리(캡션, **파일명을 캡션으로 사용** 토글·기본 끔, URL, 갤러리 순서·삭제·추가), 임베드(URL), 인용 배경색, 콜아웃 제목·아이콘·배경색, 코드 언어·줄번호, 토글 기본 펼침 상태. `AdminMarkdownEditor`는 `block-panel` 이벤트로 상태를 `AdminPostForm`에 전달한다.
|
||||
- 미디어 라이브러리 갤러리 다중 선택 시 선택 항목은 **주황(`#ff7a00`) 굵은 테두리**로 표시한다.
|
||||
- 옵시디언식 토큰 숨김/백스페이스 복원 Live Preview는 후속 단계로 둔다.
|
||||
|
||||
@@ -1,5 +1,10 @@
|
||||
# 업데이트 이력
|
||||
|
||||
## v1.5.90
|
||||
|
||||
- 게시물 글쓰기: 라이브 모드에서 닫는 코드 펜스를 다음 코드 블록 시작으로 오인해 일반 문단에서도 코드 블록 설정 패널이 남던 문제 수정.
|
||||
- 게시물 글쓰기: 라이브 모드 코드 블록 아래 새 문단 삽입 시 블록 설정 패널 상태를 즉시 일반 줄 기준으로 초기화하도록 보강.
|
||||
|
||||
## v1.5.89
|
||||
|
||||
- 게시물 글쓰기: 소스 모드 코드 블록 본문에서 `/`로 시작하는 경로가 슬래시 명령 메뉴로 오인되지 않도록 수정.
|
||||
|
||||
@@ -304,34 +304,33 @@ const findCodeFenceEnd = (lines, startLine) => {
|
||||
* @returns {{ kind: 'code', startLine: number, endLine: number, language: string, showLineNumbers: boolean }|null}
|
||||
*/
|
||||
const resolveCodeBlock = (lines, currentLine) => {
|
||||
let codeStart = -1
|
||||
|
||||
for (let index = currentLine; index >= 0; index -= 1) {
|
||||
if ((lines[index] || '').trim().startsWith('```')) {
|
||||
codeStart = index
|
||||
break
|
||||
for (let index = 0; index <= currentLine; index += 1) {
|
||||
if (!(lines[index] || '').trim().startsWith('```')) {
|
||||
continue
|
||||
}
|
||||
|
||||
const codeEnd = findCodeFenceEnd(lines, index)
|
||||
|
||||
if (codeEnd === -1) {
|
||||
return null
|
||||
}
|
||||
|
||||
if (currentLine >= index && currentLine <= codeEnd) {
|
||||
const options = parseCodeFenceLine(lines[index]) || { language: '', showLineNumbers: true }
|
||||
|
||||
return {
|
||||
kind: 'code',
|
||||
startLine: index,
|
||||
endLine: codeEnd,
|
||||
language: options.language,
|
||||
showLineNumbers: options.showLineNumbers
|
||||
}
|
||||
}
|
||||
|
||||
index = codeEnd
|
||||
}
|
||||
|
||||
if (codeStart === -1) {
|
||||
return null
|
||||
}
|
||||
|
||||
const codeEnd = findCodeFenceEnd(lines, codeStart)
|
||||
|
||||
if (codeEnd === -1 || currentLine > codeEnd) {
|
||||
return null
|
||||
}
|
||||
|
||||
const options = parseCodeFenceLine(lines[codeStart]) || { language: '', showLineNumbers: true }
|
||||
|
||||
return {
|
||||
kind: 'code',
|
||||
startLine: codeStart,
|
||||
endLine: codeEnd,
|
||||
language: options.language,
|
||||
showLineNumbers: options.showLineNumbers
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
4
package-lock.json
generated
4
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "sori.studio",
|
||||
"version": "1.5.89",
|
||||
"version": "1.5.90",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "sori.studio",
|
||||
"version": "1.5.89",
|
||||
"version": "1.5.90",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@nuxtjs/tailwindcss": "^6.14.0",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "sori.studio",
|
||||
"version": "1.5.89",
|
||||
"version": "1.5.90",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"imports": {
|
||||
|
||||
Reference in New Issue
Block a user