@moda-editor/core 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/features/marks.d.ts.map +1 -1
- package/dist/features/marks.js +24 -2
- package/dist/features/marks.js.map +1 -1
- package/dist/fixtures/external-pastes.d.ts +33 -0
- package/dist/fixtures/external-pastes.d.ts.map +1 -0
- package/dist/fixtures/external-pastes.js +134 -0
- package/dist/fixtures/external-pastes.js.map +1 -0
- package/dist/history.d.ts.map +1 -1
- package/dist/history.js +57 -2
- package/dist/history.js.map +1 -1
- package/dist/parse/html.d.ts.map +1 -1
- package/dist/parse/html.js +5 -2
- package/dist/parse/html.js.map +1 -1
- package/dist/view/ime.d.ts +21 -0
- package/dist/view/ime.d.ts.map +1 -1
- package/dist/view/ime.js +101 -72
- package/dist/view/ime.js.map +1 -1
- package/dist/view/input-selection.d.ts.map +1 -1
- package/dist/view/input-selection.js +5 -2
- package/dist/view/input-selection.js.map +1 -1
- package/dist/view/input.d.ts +14 -0
- package/dist/view/input.d.ts.map +1 -1
- package/dist/view/input.js +56 -2
- package/dist/view/input.js.map +1 -1
- package/dist/view/mount.d.ts +7 -0
- package/dist/view/mount.d.ts.map +1 -1
- package/dist/view/mount.js +87 -12
- package/dist/view/mount.js.map +1 -1
- package/package.json +1 -1
package/dist/view/mount.js
CHANGED
|
@@ -2,6 +2,18 @@ import { createEditor } from "../editor/editor.js";
|
|
|
2
2
|
import { renderChildren } from "./render.js";
|
|
3
3
|
import { planAdapterNode } from "./adapter.js";
|
|
4
4
|
import { bindEditorInput } from "./input.js";
|
|
5
|
+
import { PATH_ATTR } from "./dom.js";
|
|
6
|
+
/**
|
|
7
|
+
* 최상위 자식의 경로 마커 — 일반 블록은 자신의 data-me-path이고,
|
|
8
|
+
* 편집 가능 노드 뷰는 래퍼가 마커를 안 쓰고 아울렛(첫 me-path 후손)이
|
|
9
|
+
* 인덱스를 표시한다. 브라우저가 doc을 안 거치고 끼워 넣은 stray 요소는
|
|
10
|
+
* null이나 다른 인덱스를 돌려 정렬 검증에서 걸린다.
|
|
11
|
+
*/
|
|
12
|
+
function topMarker(c) {
|
|
13
|
+
return (c.getAttribute(PATH_ATTR) ??
|
|
14
|
+
c.querySelector(`[${PATH_ATTR}]`)?.getAttribute(PATH_ATTR) ??
|
|
15
|
+
null);
|
|
16
|
+
}
|
|
5
17
|
function toDOM(rn, ctx) {
|
|
6
18
|
// 코어 렌더 계획 — 래퍼/아울렛의 data-me-path·ce·class 계약은
|
|
7
19
|
// planAdapterNode가 결정한다 (view/adapter.ts)
|
|
@@ -93,6 +105,17 @@ export function mountEditor(host, options = {}) {
|
|
|
93
105
|
/** 데코레이션 직렬화 키 — doc 불변으로 AST 참조 비교가 데코 변경을
|
|
94
106
|
* 못 잡으므로(플러그인 상태만 바뀜) 키가 바뀌면 전체 자식을 칠한다 */
|
|
95
107
|
let prevDecoKey = "";
|
|
108
|
+
/**
|
|
109
|
+
* 조합/흡수 창에 미뤄둔 DOM 쓰기 — 브라우저가 DOM을 소유한 동안
|
|
110
|
+
* 리마운트·전체 재구축을 하면 살아있는 조합 세션과 미흡수 커밋이
|
|
111
|
+
* 파괴된다. 흡수 flush 뒤 afterComposition이 render를 다시 호출해
|
|
112
|
+
* 커밋한다 — 흡수가 tr을 안 만들어도(통지 없음) 반드시 도착한다
|
|
113
|
+
*/
|
|
114
|
+
let deferredDom = false;
|
|
115
|
+
const offIdle = binding.afterComposition(() => {
|
|
116
|
+
if (deferredDom)
|
|
117
|
+
render();
|
|
118
|
+
});
|
|
96
119
|
/**
|
|
97
120
|
* 블록 단위 재조정 — doc이 불변이라 oldContent[i] === newContent[i]
|
|
98
121
|
* 면 그 서브트리 DOM을 건드리지 않는다. doc 참조가 같으면 아예
|
|
@@ -106,10 +129,24 @@ export function mountEditor(host, options = {}) {
|
|
|
106
129
|
const next = st.doc;
|
|
107
130
|
const decos = st.decorations();
|
|
108
131
|
const decoKey = decos.length ? JSON.stringify(decos) : "";
|
|
109
|
-
|
|
110
|
-
|
|
132
|
+
// 미뤄둔 DOM 쓰기가 있으면 doc/deco 불변이어도 reconcile을 돌린다 —
|
|
133
|
+
// dirty drain·재구축이 남아 있기 때문이다
|
|
134
|
+
if (next === prevDoc && decoKey === prevDecoKey && !deferredDom) {
|
|
135
|
+
// 조합 창에는 DOM 셀렉션 쓰기도 미룬다 — 외부 tr의 캐럿을 조합
|
|
136
|
+
// 노드 밖에 쓰면 살아있는 세션이 조기 종료된다. 미룬 쓰기로
|
|
137
|
+
// 표시해 흡수 뒤 render가 복원을 재생하게 한다 (프레임워크는
|
|
138
|
+
// 비동기 리마운트의 캐럿 재앵커에 조합 중 복원이 필요하지만,
|
|
139
|
+
// vanilla는 조합 창의 DOM 쓰기를 전부 미루는 완결형이라 다르다)
|
|
140
|
+
if (binding.ime.active) {
|
|
141
|
+
deferredDom = true;
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
binding.restoreSelection();
|
|
145
|
+
}
|
|
111
146
|
return;
|
|
112
147
|
}
|
|
148
|
+
// 이번 렌더가 실제로 미루면 아래에서 다시 세운다
|
|
149
|
+
deferredDom = false;
|
|
113
150
|
const ctx = { nodeViews: options.nodeViews, editor };
|
|
114
151
|
if (prevDoc === null) {
|
|
115
152
|
for (const rn of renderChildren(next, st.schema, decos)) {
|
|
@@ -120,6 +157,19 @@ export function mountEditor(host, options = {}) {
|
|
|
120
157
|
binding.restoreSelection();
|
|
121
158
|
return;
|
|
122
159
|
}
|
|
160
|
+
// 조합/흡수 창에는 브라우저가 DOM을 소유한다 — 이 창의 모든 파괴적
|
|
161
|
+
// 쓰기(블록 교체·전체 재구축·더티 drain·비엘리먼트 정리)를 흡수 뒤로
|
|
162
|
+
// 미룬다. 원격 편집 등 외부 tr이 조합 중인 블록에 떨어져도 DOM을
|
|
163
|
+
// 건드리지 않는다 (PM이 composition 중 DOM 업데이트를 미루는 것과
|
|
164
|
+
// 같은 관례). prevDoc을 갱신하지 않아 diff 기준이 보존되고, 흡수
|
|
165
|
+
// flush 뒤의 afterComposition 콜백이 render를 다시 호출해 커밋한다
|
|
166
|
+
if (binding.ime.active || binding.ime.absorbing) {
|
|
167
|
+
// restoreSelection도 호출하지 않는다 — DOM 셀렉션 쓰기는
|
|
168
|
+
// 브라우저 소유 DOM을 건드리는 파괴적 쓰기와 같은 효과라
|
|
169
|
+
// 미루기 대상이다. 흡수 뒤 render(onIdle 경유)가 재생한다
|
|
170
|
+
deferredDom = true;
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
123
173
|
// 브라우저(IME 등)가 남긴 비엘리먼트 자식을 먼저 정리 — children이
|
|
124
174
|
// doc.content와 1:1이어야 인덱스 재조정이 성립한다
|
|
125
175
|
for (const n of Array.from(editable.childNodes)) {
|
|
@@ -132,17 +182,40 @@ export function mountEditor(host, options = {}) {
|
|
|
132
182
|
// 데코 키가 바뀌면 AST 참조가 같아도 데코가 달라졌을 수 있다 —
|
|
133
183
|
// 인덱스 비교를 우회해 전부 다시 그린다 (데코 변경은 드물다)
|
|
134
184
|
const decoChanged = decoKey !== prevDecoKey;
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
185
|
+
// 정렬 검증 — contenteditable DOM은 렌더러만 만지는 게 아니다.
|
|
186
|
+
// IME 조합 창의 네이티브 블록 분할·머지, deleteFromDocument 등이
|
|
187
|
+
// 최상위 자식을 직접 추가/제거하면 children과 prevContent의 1:1이
|
|
188
|
+
// 깨진다. 어긋난 채 인덱스 재조정하면 없는 요소를 replaceWith해
|
|
189
|
+
// 크래시하거나 stray 요소(중복 data-me-path)가 남아 DOM↔Point
|
|
190
|
+
// 매핑을 오염시킨다 — 정렬이 깨졌으면 전체를 다시 그려 복구한다
|
|
191
|
+
const kids = Array.from(editable.children);
|
|
192
|
+
const aligned = kids.length === prevContent.length &&
|
|
193
|
+
kids.every((c, i) => topMarker(c) === String(i));
|
|
194
|
+
if (!aligned) {
|
|
195
|
+
editable.replaceChildren(...rns.map((rn) => toDOM(rn, ctx)));
|
|
196
|
+
// 전부 새 DOM이라 남은 더티 표시는 이미 소비된 것과 같다
|
|
197
|
+
binding.dirtyPaths.clear();
|
|
143
198
|
}
|
|
144
|
-
|
|
145
|
-
|
|
199
|
+
else {
|
|
200
|
+
const common = Math.min(prevContent.length, nextContent.length);
|
|
201
|
+
for (let i = 0; i < common; i++) {
|
|
202
|
+
// 브라우저가 직접 바꾼(더티) 블록은 AST가 같아도 교체한다 —
|
|
203
|
+
// 프레임워크 어댑터가 DirtyKeyMap 키 범프로 리마운트하는 것과
|
|
204
|
+
// 같은 계약. delete로 소비해 다음 렌더에서 또 교체하지 않는다.
|
|
205
|
+
// 조합 창은 위에서 미뤄졌으므로 여기 도달한 drain은 소비해도 안전
|
|
206
|
+
const dirty = binding.dirtyPaths.delete(String(i));
|
|
207
|
+
if (decoChanged || dirty || prevContent[i] !== nextContent[i]) {
|
|
208
|
+
editable.children[i].replaceWith(toDOM(rns[i], ctx));
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
for (let i = common; i < nextContent.length; i++) {
|
|
212
|
+
// 새로 붙는 블록은 처음부터 새 DOM — 더티 표시만 소비한다
|
|
213
|
+
binding.dirtyPaths.delete(String(i));
|
|
214
|
+
editable.appendChild(toDOM(rns[i], ctx));
|
|
215
|
+
}
|
|
216
|
+
while (editable.children.length > nextContent.length) {
|
|
217
|
+
editable.lastElementChild.remove();
|
|
218
|
+
}
|
|
146
219
|
}
|
|
147
220
|
prevDoc = next;
|
|
148
221
|
prevDecoKey = decoKey;
|
|
@@ -153,8 +226,10 @@ export function mountEditor(host, options = {}) {
|
|
|
153
226
|
return {
|
|
154
227
|
editor,
|
|
155
228
|
rootEl: root,
|
|
229
|
+
binding,
|
|
156
230
|
destroy() {
|
|
157
231
|
unsubscribe();
|
|
232
|
+
offIdle();
|
|
158
233
|
binding.unbind();
|
|
159
234
|
// 외부 에디터는 소유권이 바깥에 있다 — 직접 만든 것만 파괴
|
|
160
235
|
if (!options.editor)
|
package/dist/view/mount.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../../src/view/mount.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../../src/view/mount.ts"],"names":[],"mappings":"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"}
|