docxodus 9.1.0 → 9.1.1
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/README.md +4 -4
- package/dist/editor-reconcile.d.ts.map +1 -1
- package/dist/editor-reconcile.js +33 -5
- package/dist/editor-reconcile.js.map +1 -1
- package/dist/editor.bundle.js +201 -19
- package/dist/editor.d.ts +34 -3
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +213 -18
- package/dist/editor.js.map +1 -1
- package/dist/embed.bundle.js +201 -19
- package/dist/embed.d.ts +1 -1
- package/dist/embed.iife.js +201 -19
- package/dist/embed.js +1 -1
- package/dist/wasm/_framework/Docxodus.wasm +0 -0
- package/dist/wasm/_framework/Docxodus.wasm.br +0 -0
- package/dist/wasm/_framework/DocxodusWasm.wasm +0 -0
- package/dist/wasm/_framework/DocxodusWasm.wasm.br +0 -0
- package/dist/wasm/_framework/dotnet.boot.js +3 -3
- package/dist/wasm/_framework/dotnet.boot.js.br +0 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -57,7 +57,7 @@ runtime location auto-detected — no build step, no configuration:
|
|
|
57
57
|
```html
|
|
58
58
|
<div id="doc"></div>
|
|
59
59
|
<script type="module">
|
|
60
|
-
import { createEditor } from 'https://cdn.jsdelivr.net/npm/docxodus@9.1.
|
|
60
|
+
import { createEditor } from 'https://cdn.jsdelivr.net/npm/docxodus@9.1.1/dist/embed.bundle.js';
|
|
61
61
|
const editor = await createEditor('#doc', './contract.docx'); // or bytes / Blob / File
|
|
62
62
|
// ...later: const editedBytes = editor.save();
|
|
63
63
|
</script>
|
|
@@ -429,7 +429,7 @@ so a page can embed a full viewer or editor without hosting anything itself.
|
|
|
429
429
|
<div id="editor"></div>
|
|
430
430
|
<script type="module">
|
|
431
431
|
import { createViewer, createEditor }
|
|
432
|
-
from 'https://cdn.jsdelivr.net/npm/docxodus@9.1.
|
|
432
|
+
from 'https://cdn.jsdelivr.net/npm/docxodus@9.1.1/dist/embed.bundle.js';
|
|
433
433
|
|
|
434
434
|
// Choose either factory, or render both into separate containers as shown.
|
|
435
435
|
// Source may be a URL, Uint8Array, ArrayBuffer, Blob, or File.
|
|
@@ -449,7 +449,7 @@ For pages that can't use modules, `dist/embed.iife.js` exposes the same surface
|
|
|
449
449
|
|
|
450
450
|
```html
|
|
451
451
|
<div id="doc"></div>
|
|
452
|
-
<script src="https://cdn.jsdelivr.net/npm/docxodus@9.1.
|
|
452
|
+
<script src="https://cdn.jsdelivr.net/npm/docxodus@9.1.1/dist/embed.iife.js"></script>
|
|
453
453
|
<script>
|
|
454
454
|
Docxodus.createEditor('#doc').then((editor) => { /* ... */ });
|
|
455
455
|
</script>
|
|
@@ -465,7 +465,7 @@ first `<bundle dir>/wasm/`, then `<bundle dir>/` as a fallback. On a CDN that re
|
|
|
465
465
|
|
|
466
466
|
### CDN caveats
|
|
467
467
|
|
|
468
|
-
- **Pin an exact version in production** (`docxodus@9.1.
|
|
468
|
+
- **Pin an exact version in production** (`docxodus@9.1.1`, not `@latest`) — CDN responses are
|
|
469
469
|
cached as immutable, and the wire shapes between the JS wrappers and the WASM assemblies must
|
|
470
470
|
come from the same release.
|
|
471
471
|
- The build patches the .NET loader to fetch with `credentials: "omit"` — required because the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-reconcile.d.ts","sourceRoot":"","sources":["../src/editor-reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;kBAKkB;AAClB,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;oFAEoF;AACpF,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEhD;AAED,oFAAoF;AACpF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,uEAAuE;IACvE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,qEAAqE;IACrE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;OAKG;IACH,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,6DAA6D;AAC7D,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"editor-reconcile.d.ts","sourceRoot":"","sources":["../src/editor-reconcile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH;;;;;kBAKkB;AAClB,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED;;oFAEoF;AACpF,wBAAgB,OAAO,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAEhD;AAED,oFAAoF;AACpF,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,SAAS,EAAE,UAAU,EAAE,CAAC;IACxB,QAAQ,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,uEAAuE;IACvE,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,qEAAqE;IACrE,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB;;;;;OAKG;IACH,WAAW,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC5D;AAED,6DAA6D;AAC7D,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzC;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,QAAQ,CAyF9E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,UAAU,EAAE,EACtB,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,SAAK,GACb,OAAO,CAWT"}
|
package/dist/editor-reconcile.js
CHANGED
|
@@ -63,8 +63,38 @@ export function diffUnits(oldUnids, newUnits) {
|
|
|
63
63
|
removed.push(i++);
|
|
64
64
|
while (j < m)
|
|
65
65
|
added.push(j++);
|
|
66
|
-
// Substitutions: an added index and a removed index
|
|
67
|
-
//
|
|
66
|
+
// Substitutions: an added index and a removed index that are an IN-PLACE change
|
|
67
|
+
// of one unit. Paired by UNID first — a block whose content changed keeps its
|
|
68
|
+
// unid (unids are sticky in-session; only the content signature part of the
|
|
69
|
+
// token moves), so an equal-unid add/remove pair is that block re-rendering in
|
|
70
|
+
// place regardless of how many other units changed around it. Position-based
|
|
71
|
+
// (kept-count) pairing is the fallback for genuine replacements; unid pairing
|
|
72
|
+
// must run first or several same-position changes mispair, e.g. binding an
|
|
73
|
+
// edited paragraph's fresh render to a NEIGHBOR's border-wrapped node — which
|
|
74
|
+
// the DOM patcher can only resolve by bailing to a full remount.
|
|
75
|
+
const bareUnid = (token) => {
|
|
76
|
+
const bar = token.indexOf("|");
|
|
77
|
+
return bar < 0 ? token : token.slice(0, bar);
|
|
78
|
+
};
|
|
79
|
+
const substituted = [];
|
|
80
|
+
const usedRemoved = new Set();
|
|
81
|
+
const removedByUnid = new Map();
|
|
82
|
+
for (const oi of removed) {
|
|
83
|
+
const u = bareUnid(oldUnids[oi]);
|
|
84
|
+
(removedByUnid.get(u) ?? removedByUnid.set(u, []).get(u)).push(oi);
|
|
85
|
+
}
|
|
86
|
+
const unmatchedAdded = [];
|
|
87
|
+
for (const nj of added) {
|
|
88
|
+
const candidates = removedByUnid.get(bareUnid(newUnids[nj]));
|
|
89
|
+
const oi = candidates?.find((i) => !usedRemoved.has(i));
|
|
90
|
+
if (oi !== undefined) {
|
|
91
|
+
substituted.push({ oldIndex: oi, newIndex: nj });
|
|
92
|
+
usedRemoved.add(oi);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
unmatchedAdded.push(nj);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
68
98
|
const keptBeforeOld = (oi) => {
|
|
69
99
|
let c = 0;
|
|
70
100
|
for (const v of keep.values())
|
|
@@ -79,9 +109,7 @@ export function diffUnits(oldUnids, newUnits) {
|
|
|
79
109
|
c++;
|
|
80
110
|
return c;
|
|
81
111
|
};
|
|
82
|
-
const
|
|
83
|
-
const usedRemoved = new Set();
|
|
84
|
-
for (const nj of added) {
|
|
112
|
+
for (const nj of unmatchedAdded) {
|
|
85
113
|
const target = keptBeforeNew(nj);
|
|
86
114
|
for (const oi of removed) {
|
|
87
115
|
if (usedRemoved.has(oi))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-reconcile.js","sourceRoot":"","sources":["../src/editor-reconcile.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"editor-reconcile.js","sourceRoot":"","sources":["../src/editor-reconcile.ts"],"names":[],"mappings":"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"}
|
package/dist/editor.bundle.js
CHANGED
|
@@ -1921,6 +1921,28 @@ var DocxodusEditor = (() => {
|
|
|
1921
1921
|
}
|
|
1922
1922
|
while (i < n) removed.push(i++);
|
|
1923
1923
|
while (j < m) added.push(j++);
|
|
1924
|
+
const bareUnid = (token) => {
|
|
1925
|
+
const bar = token.indexOf("|");
|
|
1926
|
+
return bar < 0 ? token : token.slice(0, bar);
|
|
1927
|
+
};
|
|
1928
|
+
const substituted = [];
|
|
1929
|
+
const usedRemoved = /* @__PURE__ */ new Set();
|
|
1930
|
+
const removedByUnid = /* @__PURE__ */ new Map();
|
|
1931
|
+
for (const oi of removed) {
|
|
1932
|
+
const u = bareUnid(oldUnids[oi]);
|
|
1933
|
+
(removedByUnid.get(u) ?? removedByUnid.set(u, []).get(u)).push(oi);
|
|
1934
|
+
}
|
|
1935
|
+
const unmatchedAdded = [];
|
|
1936
|
+
for (const nj of added) {
|
|
1937
|
+
const candidates = removedByUnid.get(bareUnid(newUnids[nj]));
|
|
1938
|
+
const oi = candidates?.find((i2) => !usedRemoved.has(i2));
|
|
1939
|
+
if (oi !== void 0) {
|
|
1940
|
+
substituted.push({ oldIndex: oi, newIndex: nj });
|
|
1941
|
+
usedRemoved.add(oi);
|
|
1942
|
+
} else {
|
|
1943
|
+
unmatchedAdded.push(nj);
|
|
1944
|
+
}
|
|
1945
|
+
}
|
|
1924
1946
|
const keptBeforeOld = (oi) => {
|
|
1925
1947
|
let c = 0;
|
|
1926
1948
|
for (const v of keep.values()) if (v < oi) c++;
|
|
@@ -1931,9 +1953,7 @@ var DocxodusEditor = (() => {
|
|
|
1931
1953
|
for (const k of keep.keys()) if (k < nj) c++;
|
|
1932
1954
|
return c;
|
|
1933
1955
|
};
|
|
1934
|
-
const
|
|
1935
|
-
const usedRemoved = /* @__PURE__ */ new Set();
|
|
1936
|
-
for (const nj of added) {
|
|
1956
|
+
for (const nj of unmatchedAdded) {
|
|
1937
1957
|
const target = keptBeforeNew(nj);
|
|
1938
1958
|
for (const oi of removed) {
|
|
1939
1959
|
if (usedRemoved.has(oi)) continue;
|
|
@@ -2137,6 +2157,33 @@ var DocxodusEditor = (() => {
|
|
|
2137
2157
|
if (lastText) return { node: lastText, offset: (lastText.textContent ?? "").length };
|
|
2138
2158
|
return { node: el, offset: el.childNodes.length };
|
|
2139
2159
|
}
|
|
2160
|
+
function caretPointFromClient(doc, clientX, clientY) {
|
|
2161
|
+
const caretDoc = doc;
|
|
2162
|
+
const position = caretDoc.caretPositionFromPoint?.(clientX, clientY);
|
|
2163
|
+
if (position) return { node: position.offsetNode, offset: position.offset };
|
|
2164
|
+
const range = caretDoc.caretRangeFromPoint?.(clientX, clientY);
|
|
2165
|
+
return range ? { node: range.startContainer, offset: range.startOffset } : null;
|
|
2166
|
+
}
|
|
2167
|
+
function setSelectionBetween(anchor, focus) {
|
|
2168
|
+
const sel = typeof window !== "undefined" ? window.getSelection() : null;
|
|
2169
|
+
if (!sel || !anchor.node.isConnected || !focus.node.isConnected) return false;
|
|
2170
|
+
try {
|
|
2171
|
+
const probe = document.createRange();
|
|
2172
|
+
probe.setStart(anchor.node, anchor.offset);
|
|
2173
|
+
probe.collapse(true);
|
|
2174
|
+
const focusIsBefore = probe.comparePoint(focus.node, focus.offset) < 0;
|
|
2175
|
+
const range = document.createRange();
|
|
2176
|
+
const start = focusIsBefore ? focus : anchor;
|
|
2177
|
+
const end = focusIsBefore ? anchor : focus;
|
|
2178
|
+
range.setStart(start.node, start.offset);
|
|
2179
|
+
range.setEnd(end.node, end.offset);
|
|
2180
|
+
sel.removeAllRanges();
|
|
2181
|
+
sel.addRange(range);
|
|
2182
|
+
return true;
|
|
2183
|
+
} catch {
|
|
2184
|
+
return false;
|
|
2185
|
+
}
|
|
2186
|
+
}
|
|
2140
2187
|
function placeCaretAtOffset(el, offset) {
|
|
2141
2188
|
const sel = typeof window !== "undefined" ? window.getSelection() : null;
|
|
2142
2189
|
if (!sel) return;
|
|
@@ -2302,6 +2349,15 @@ var DocxodusEditor = (() => {
|
|
|
2302
2349
|
* block, and cleared when a caret is collapsed inside a block (so it never goes stale).
|
|
2303
2350
|
*/
|
|
2304
2351
|
this.lastSelection = null;
|
|
2352
|
+
/**
|
|
2353
|
+
* Stable bookmark for a selection spanning independent editable blocks. Native controls such as
|
|
2354
|
+
* a font-size combobox can take focus and collapse the live DOM selection; block ids + content
|
|
2355
|
+
* offsets let the command restore that same range before applying. This is the multi-block
|
|
2356
|
+
* counterpart to lastSelection above.
|
|
2357
|
+
*/
|
|
2358
|
+
this.lastCrossBlockSelection = null;
|
|
2359
|
+
/** State for the mouse-selection bridge between independent contenteditable block hosts. */
|
|
2360
|
+
this.dragSelection = null;
|
|
2305
2361
|
/** The docked header/footer bands, when `options.headerFooter` is on. */
|
|
2306
2362
|
this.region = null;
|
|
2307
2363
|
/** Why the last reconcile() fell back to a full remount (null = it patched). For
|
|
@@ -2313,24 +2369,92 @@ var DocxodusEditor = (() => {
|
|
|
2313
2369
|
const sel = typeof window !== "undefined" ? window.getSelection() : null;
|
|
2314
2370
|
if (!sel || sel.rangeCount === 0) return;
|
|
2315
2371
|
const range = sel.getRangeAt(0);
|
|
2316
|
-
const
|
|
2372
|
+
const startBlock = this.editableBlockOf(range.startContainer);
|
|
2373
|
+
const endBlock = this.editableBlockOf(range.endContainer);
|
|
2374
|
+
const block = startBlock ?? endBlock;
|
|
2317
2375
|
if (!block) return;
|
|
2318
|
-
const unid = block.getAttribute("data-anchor");
|
|
2319
|
-
if (!unid) return;
|
|
2320
2376
|
if (range.collapsed) {
|
|
2321
2377
|
this.lastSelection = null;
|
|
2378
|
+
this.lastCrossBlockSelection = null;
|
|
2379
|
+
return;
|
|
2380
|
+
}
|
|
2381
|
+
if (startBlock && endBlock && startBlock !== endBlock && this.ownerRoot(startBlock) === this.ownerRoot(endBlock)) {
|
|
2382
|
+
const startUnid = startBlock.getAttribute("data-anchor");
|
|
2383
|
+
const endUnid = endBlock.getAttribute("data-anchor");
|
|
2384
|
+
if (startUnid && endUnid) {
|
|
2385
|
+
this.lastSelection = null;
|
|
2386
|
+
this.lastCrossBlockSelection = {
|
|
2387
|
+
startUnid,
|
|
2388
|
+
startOffset: contentOffsetOf(startBlock, range.startContainer, range.startOffset),
|
|
2389
|
+
endUnid,
|
|
2390
|
+
endOffset: contentOffsetOf(endBlock, range.endContainer, range.endOffset)
|
|
2391
|
+
};
|
|
2392
|
+
}
|
|
2322
2393
|
return;
|
|
2323
2394
|
}
|
|
2395
|
+
const unid = block.getAttribute("data-anchor");
|
|
2396
|
+
if (!unid) return;
|
|
2397
|
+
this.lastCrossBlockSelection = null;
|
|
2324
2398
|
const span = selectionSpanIn(block);
|
|
2325
2399
|
if (span) this.lastSelection = { unid, span };
|
|
2326
2400
|
};
|
|
2401
|
+
/** Start tracking a normal primary-button text drag inside one editable block. */
|
|
2402
|
+
this.onMouseDown = (event) => {
|
|
2403
|
+
if (this.closed || !this.options.editable || event.button !== 0) return;
|
|
2404
|
+
const target = event.target instanceof Node ? event.target : null;
|
|
2405
|
+
const origin = this.editableBlockOf(target);
|
|
2406
|
+
if (!origin || isInMarker(target)) return;
|
|
2407
|
+
const anchor = caretPointFromClient(document, event.clientX, event.clientY);
|
|
2408
|
+
if (!anchor || this.editableBlockOf(anchor.node) !== origin) return;
|
|
2409
|
+
this.dragSelection = { anchor, origin, crossedBlockBoundary: false };
|
|
2410
|
+
};
|
|
2411
|
+
/**
|
|
2412
|
+
* Browsers fence native mouse selection at a contenteditable host boundary. Once a drag reaches
|
|
2413
|
+
* another block in the same OOXML story, take over just that gesture and create the cross-block
|
|
2414
|
+
* Selection the editor's existing multi-block command path consumes. Intra-block selection stays
|
|
2415
|
+
* entirely native, and separate hosts remain intact for safe per-anchor commits.
|
|
2416
|
+
*/
|
|
2417
|
+
this.onMouseMove = (event) => {
|
|
2418
|
+
const drag = this.dragSelection;
|
|
2419
|
+
if (!drag) return;
|
|
2420
|
+
if ((event.buttons & 1) === 0) {
|
|
2421
|
+
this.dragSelection = null;
|
|
2422
|
+
return;
|
|
2423
|
+
}
|
|
2424
|
+
const focus = caretPointFromClient(document, event.clientX, event.clientY);
|
|
2425
|
+
if (!focus || isInMarker(focus.node)) return;
|
|
2426
|
+
const focusBlock = this.editableBlockOf(focus.node);
|
|
2427
|
+
if (!focusBlock || this.ownerRoot(focusBlock) !== this.ownerRoot(drag.origin)) return;
|
|
2428
|
+
if (focusBlock !== drag.origin) drag.crossedBlockBoundary = true;
|
|
2429
|
+
if (!drag.crossedBlockBoundary) return;
|
|
2430
|
+
event.preventDefault();
|
|
2431
|
+
setSelectionBetween(drag.anchor, focus);
|
|
2432
|
+
};
|
|
2433
|
+
/** Commit the final cross-block endpoint before releasing the gesture state. */
|
|
2434
|
+
this.onMouseUp = (event) => {
|
|
2435
|
+
const drag = this.dragSelection;
|
|
2436
|
+
if (!drag) return;
|
|
2437
|
+
if (drag.crossedBlockBoundary) {
|
|
2438
|
+
const focus = caretPointFromClient(document, event.clientX, event.clientY);
|
|
2439
|
+
const focusBlock = focus ? this.editableBlockOf(focus.node) : null;
|
|
2440
|
+
if (focus && focusBlock && this.ownerRoot(focusBlock) === this.ownerRoot(drag.origin)) {
|
|
2441
|
+
event.preventDefault();
|
|
2442
|
+
setSelectionBetween(drag.anchor, focus);
|
|
2443
|
+
}
|
|
2444
|
+
}
|
|
2445
|
+
this.dragSelection = null;
|
|
2446
|
+
};
|
|
2327
2447
|
this.container = container;
|
|
2328
2448
|
this.exports = exports;
|
|
2329
2449
|
this.handle = handle;
|
|
2330
2450
|
this.options = options;
|
|
2331
2451
|
this.editRoot = container;
|
|
2332
|
-
if (typeof document !== "undefined")
|
|
2452
|
+
if (typeof document !== "undefined") {
|
|
2333
2453
|
document.addEventListener("selectionchange", this.onSelectionChange);
|
|
2454
|
+
document.addEventListener("mousedown", this.onMouseDown, true);
|
|
2455
|
+
document.addEventListener("mousemove", this.onMouseMove, true);
|
|
2456
|
+
document.addEventListener("mouseup", this.onMouseUp, true);
|
|
2457
|
+
}
|
|
2334
2458
|
}
|
|
2335
2459
|
/** The editable block (contenteditable [data-anchor]) containing `node`, if any, within this editor.
|
|
2336
2460
|
* Fenced by `container`, not `editRoot`, so header/footer band blocks — which live outside the
|
|
@@ -2410,8 +2534,13 @@ var DocxodusEditor = (() => {
|
|
|
2410
2534
|
close() {
|
|
2411
2535
|
if (this.closed) return;
|
|
2412
2536
|
this.closed = true;
|
|
2413
|
-
if (typeof document !== "undefined")
|
|
2537
|
+
if (typeof document !== "undefined") {
|
|
2414
2538
|
document.removeEventListener("selectionchange", this.onSelectionChange);
|
|
2539
|
+
document.removeEventListener("mousedown", this.onMouseDown, true);
|
|
2540
|
+
document.removeEventListener("mousemove", this.onMouseMove, true);
|
|
2541
|
+
document.removeEventListener("mouseup", this.onMouseUp, true);
|
|
2542
|
+
}
|
|
2543
|
+
this.dragSelection = null;
|
|
2415
2544
|
this.exports.DocxSessionBridge.CloseSession(this.handle);
|
|
2416
2545
|
}
|
|
2417
2546
|
/**
|
|
@@ -2719,8 +2848,7 @@ var DocxodusEditor = (() => {
|
|
|
2719
2848
|
this.options.onEdit?.({ anchorId: second.id, unid: second.unid });
|
|
2720
2849
|
return;
|
|
2721
2850
|
}
|
|
2722
|
-
const firstEl = this.
|
|
2723
|
-
const secondEl = this.renderInto(second.id);
|
|
2851
|
+
const [firstEl, secondEl] = this.renderTwo(first.id, second.id);
|
|
2724
2852
|
if (!firstEl || !secondEl) return;
|
|
2725
2853
|
const inBand = this.isBandBlock(el);
|
|
2726
2854
|
if (!this.replaceNode(el, firstEl, secondEl)) return;
|
|
@@ -2833,6 +2961,34 @@ var DocxodusEditor = (() => {
|
|
|
2833
2961
|
if (html.charCodeAt(0) === 123) return null;
|
|
2834
2962
|
return new DOMParser().parseFromString(html, "text/html").body.firstElementChild;
|
|
2835
2963
|
}
|
|
2964
|
+
/** Render two blocks in ONE batched bridge call when the bundle carries RenderBlocksHtml —
|
|
2965
|
+
* the per-render shell/converter setup is paid once instead of twice, which matters on the
|
|
2966
|
+
* Enter path (split renders both halves synchronously under the keystroke). Falls back to
|
|
2967
|
+
* two per-block renders on older bundles. Output is renderInto-identical per block (both
|
|
2968
|
+
* routes share the same extraction). */
|
|
2969
|
+
renderTwo(a, b) {
|
|
2970
|
+
const bridge = this.exports.DocxSessionBridge;
|
|
2971
|
+
if (typeof bridge.RenderBlocksHtml === "function") {
|
|
2972
|
+
try {
|
|
2973
|
+
const map = JSON.parse(
|
|
2974
|
+
bridge.RenderBlocksHtml(
|
|
2975
|
+
this.handle,
|
|
2976
|
+
JSON.stringify([a, b]),
|
|
2977
|
+
this.options.cssPrefix,
|
|
2978
|
+
this.options.fabricateClasses
|
|
2979
|
+
)
|
|
2980
|
+
);
|
|
2981
|
+
if (!map.error) {
|
|
2982
|
+
const parse = (h) => h ? new DOMParser().parseFromString(h, "text/html").body.firstElementChild : null;
|
|
2983
|
+
const fa = parse(map[a]);
|
|
2984
|
+
const fb = parse(map[b]);
|
|
2985
|
+
if (fa && fb) return [fa, fb];
|
|
2986
|
+
}
|
|
2987
|
+
} catch {
|
|
2988
|
+
}
|
|
2989
|
+
}
|
|
2990
|
+
return [this.renderInto(a), this.renderInto(b)];
|
|
2991
|
+
}
|
|
2836
2992
|
/** The editable block immediately before `el` within its own root, or null. */
|
|
2837
2993
|
previousEditable(el) {
|
|
2838
2994
|
const all = Array.from(
|
|
@@ -2850,12 +3006,34 @@ var DocxodusEditor = (() => {
|
|
|
2850
3006
|
}
|
|
2851
3007
|
// ─── M5: formatting commands (ribbon) ────────────────────────────────
|
|
2852
3008
|
// ─── Multi-block selection helpers (format a whole stack of paragraphs at once) ──────
|
|
3009
|
+
/**
|
|
3010
|
+
* Restore a cross-block selection after a native toolbar control took focus. The bookmark uses
|
|
3011
|
+
* stable anchor ids and content offsets, so it also survives incremental block swaps.
|
|
3012
|
+
*/
|
|
3013
|
+
restoreCrossBlockSelection() {
|
|
3014
|
+
const bookmark = this.lastCrossBlockSelection;
|
|
3015
|
+
const active = this.activeBlock;
|
|
3016
|
+
if (!bookmark || !active) return false;
|
|
3017
|
+
const all = Array.from(
|
|
3018
|
+
this.ownerRoot(active).querySelectorAll('[data-anchor][contenteditable="true"]')
|
|
3019
|
+
);
|
|
3020
|
+
const first = all.find((block) => block.getAttribute("data-anchor") === bookmark.startUnid);
|
|
3021
|
+
const last = all.find((block) => block.getAttribute("data-anchor") === bookmark.endUnid);
|
|
3022
|
+
if (!first || !last || first === last || all.indexOf(first) > all.indexOf(last)) return false;
|
|
3023
|
+
const start = contentPositionIn(first, bookmark.startOffset);
|
|
3024
|
+
const end = contentPositionIn(last, bookmark.endOffset);
|
|
3025
|
+
return setSelectionBetween(start, end);
|
|
3026
|
+
}
|
|
2853
3027
|
/** Editable blocks the current selection covers, in document order. Uses Range.comparePoint
|
|
2854
3028
|
* (robust to a selection boundary that normalized onto a wrapper element rather than a block
|
|
2855
3029
|
* or text node — Range.intersectsNode misses the end block at a `(block, childCount)` boundary).
|
|
2856
3030
|
* A collapsed or single-block selection yields just the active block. */
|
|
2857
3031
|
selectedBlocks() {
|
|
2858
|
-
|
|
3032
|
+
let sel = typeof window !== "undefined" ? window.getSelection() : null;
|
|
3033
|
+
if ((!sel || sel.rangeCount === 0 || sel.isCollapsed) && this.lastCrossBlockSelection) {
|
|
3034
|
+
this.restoreCrossBlockSelection();
|
|
3035
|
+
sel = typeof window !== "undefined" ? window.getSelection() : null;
|
|
3036
|
+
}
|
|
2859
3037
|
const root = this.activeBlock ? this.ownerRoot(this.activeBlock) : this.editRoot;
|
|
2860
3038
|
const all = Array.from(
|
|
2861
3039
|
root.querySelectorAll('[data-anchor][contenteditable="true"]')
|
|
@@ -3634,7 +3812,8 @@ var DocxodusEditor = (() => {
|
|
|
3634
3812
|
);
|
|
3635
3813
|
if (oldMarker !== newMarker) return this.bail("substituted li marker drift");
|
|
3636
3814
|
}
|
|
3637
|
-
|
|
3815
|
+
const bodyApply = this.applyBodyDiff(oldNodes, plan.body, bodyDiff, freshBody);
|
|
3816
|
+
if (bodyApply !== true) return this.bail(`applyBodyDiff bail: ${bodyApply}`);
|
|
3638
3817
|
this.applyNotesDiff("footnotes", plan.footnotes, fnState, rendered);
|
|
3639
3818
|
this.applyNotesDiff("endnotes", plan.endnotes, enState, rendered);
|
|
3640
3819
|
const freshHasMarker = [...freshBody.values()].some(
|
|
@@ -3666,15 +3845,15 @@ var DocxodusEditor = (() => {
|
|
|
3666
3845
|
static anchorElOf(root) {
|
|
3667
3846
|
return root.hasAttribute("data-anchor") ? root : root.querySelector("[data-anchor]");
|
|
3668
3847
|
}
|
|
3669
|
-
/** Insert/remove/swap body unit nodes per the diff. Returns
|
|
3670
|
-
* ambiguity, order violation, wrapper semantics) — the
|
|
3671
|
-
* so bailing just means a full repaint. */
|
|
3848
|
+
/** Insert/remove/swap body unit nodes per the diff. Returns `true` on success or a
|
|
3849
|
+
* bail-reason string (parent ambiguity, order violation, wrapper semantics) — the
|
|
3850
|
+
* session is already correct, so bailing just means a full repaint. */
|
|
3672
3851
|
applyBodyDiff(oldNodes, units, diff, fresh) {
|
|
3673
3852
|
let lastOld = -1;
|
|
3674
3853
|
for (let j = 0; j < units.length; j++) {
|
|
3675
3854
|
const oi = diff.keep.get(j);
|
|
3676
3855
|
if (oi === void 0) continue;
|
|
3677
|
-
if (oi < lastOld) return
|
|
3856
|
+
if (oi < lastOld) return "kept order violation";
|
|
3678
3857
|
lastOld = oi;
|
|
3679
3858
|
}
|
|
3680
3859
|
const subOldByNew = new Map(diff.substituted.map((s) => [s.newIndex, s.oldIndex]));
|
|
@@ -3685,8 +3864,10 @@ var DocxodusEditor = (() => {
|
|
|
3685
3864
|
oldWrapper.replaceWith(freshRoot);
|
|
3686
3865
|
} else if (oldWrapper === oldNodes[oi]) {
|
|
3687
3866
|
oldNodes[oi].replaceWith(freshRoot);
|
|
3867
|
+
} else if (!oldNodes[oi].hasAttribute("data-render-sig") && unidOf(units[nj].id) === oldNodes[oi].getAttribute("data-anchor")) {
|
|
3868
|
+
oldNodes[oi].replaceWith(freshRoot);
|
|
3688
3869
|
} else {
|
|
3689
|
-
return
|
|
3870
|
+
return `leaf render into wrapped slot (unit ${units[nj].id.slice(0, 24)})`;
|
|
3690
3871
|
}
|
|
3691
3872
|
this.wireUnit(freshRoot, units[nj]);
|
|
3692
3873
|
}
|
|
@@ -3713,10 +3894,11 @@ var DocxodusEditor = (() => {
|
|
|
3713
3894
|
}
|
|
3714
3895
|
const prevW = prev ? this.unitWrapperOf(prev) : null;
|
|
3715
3896
|
const nextW = next ? this.unitWrapperOf(next) : null;
|
|
3716
|
-
if (prevW && nextW && prevW.parentElement !== nextW.parentElement)
|
|
3897
|
+
if (prevW && nextW && prevW.parentElement !== nextW.parentElement)
|
|
3898
|
+
return "insert neighbors in different parents";
|
|
3717
3899
|
if (prevW) prevW.after(el);
|
|
3718
3900
|
else if (nextW) nextW.before(el);
|
|
3719
|
-
else return
|
|
3901
|
+
else return "insert with no anchored neighbor";
|
|
3720
3902
|
this.wireUnit(el, units[j]);
|
|
3721
3903
|
}
|
|
3722
3904
|
for (const i of pureRemoved) {
|
package/dist/editor.d.ts
CHANGED
|
@@ -139,6 +139,15 @@ export declare class DocxEditor {
|
|
|
139
139
|
* block, and cleared when a caret is collapsed inside a block (so it never goes stale).
|
|
140
140
|
*/
|
|
141
141
|
private lastSelection;
|
|
142
|
+
/**
|
|
143
|
+
* Stable bookmark for a selection spanning independent editable blocks. Native controls such as
|
|
144
|
+
* a font-size combobox can take focus and collapse the live DOM selection; block ids + content
|
|
145
|
+
* offsets let the command restore that same range before applying. This is the multi-block
|
|
146
|
+
* counterpart to lastSelection above.
|
|
147
|
+
*/
|
|
148
|
+
private lastCrossBlockSelection;
|
|
149
|
+
/** State for the mouse-selection bridge between independent contenteditable block hosts. */
|
|
150
|
+
private dragSelection;
|
|
142
151
|
/** The docked header/footer bands, when `options.headerFooter` is on. */
|
|
143
152
|
private region;
|
|
144
153
|
/** Why the last reconcile() fell back to a full remount (null = it patched). For
|
|
@@ -147,6 +156,17 @@ export declare class DocxEditor {
|
|
|
147
156
|
private constructor();
|
|
148
157
|
/** Track the last meaningful selection so focus-stealing toolbar controls can still target it. */
|
|
149
158
|
private readonly onSelectionChange;
|
|
159
|
+
/** Start tracking a normal primary-button text drag inside one editable block. */
|
|
160
|
+
private readonly onMouseDown;
|
|
161
|
+
/**
|
|
162
|
+
* Browsers fence native mouse selection at a contenteditable host boundary. Once a drag reaches
|
|
163
|
+
* another block in the same OOXML story, take over just that gesture and create the cross-block
|
|
164
|
+
* Selection the editor's existing multi-block command path consumes. Intra-block selection stays
|
|
165
|
+
* entirely native, and separate hosts remain intact for safe per-anchor commits.
|
|
166
|
+
*/
|
|
167
|
+
private readonly onMouseMove;
|
|
168
|
+
/** Commit the final cross-block endpoint before releasing the gesture state. */
|
|
169
|
+
private readonly onMouseUp;
|
|
150
170
|
/** The editable block (contenteditable [data-anchor]) containing `node`, if any, within this editor.
|
|
151
171
|
* Fenced by `container`, not `editRoot`, so header/footer band blocks — which live outside the
|
|
152
172
|
* body edit root by design — also register. The fence still rejects other editors on the page. */
|
|
@@ -266,9 +286,20 @@ export declare class DocxEditor {
|
|
|
266
286
|
private syncBlock;
|
|
267
287
|
/** Render a block by anchor and parse it into a detached element (null on error). */
|
|
268
288
|
private renderInto;
|
|
289
|
+
/** Render two blocks in ONE batched bridge call when the bundle carries RenderBlocksHtml —
|
|
290
|
+
* the per-render shell/converter setup is paid once instead of twice, which matters on the
|
|
291
|
+
* Enter path (split renders both halves synchronously under the keystroke). Falls back to
|
|
292
|
+
* two per-block renders on older bundles. Output is renderInto-identical per block (both
|
|
293
|
+
* routes share the same extraction). */
|
|
294
|
+
private renderTwo;
|
|
269
295
|
/** The editable block immediately before `el` within its own root, or null. */
|
|
270
296
|
private previousEditable;
|
|
271
297
|
private parseEdit;
|
|
298
|
+
/**
|
|
299
|
+
* Restore a cross-block selection after a native toolbar control took focus. The bookmark uses
|
|
300
|
+
* stable anchor ids and content offsets, so it also survives incremental block swaps.
|
|
301
|
+
*/
|
|
302
|
+
private restoreCrossBlockSelection;
|
|
272
303
|
/** Editable blocks the current selection covers, in document order. Uses Range.comparePoint
|
|
273
304
|
* (robust to a selection boundary that normalized onto a wrapper element rather than a block
|
|
274
305
|
* or text node — Range.intersectsNode misses the end block at a `(block, childCount)` boundary).
|
|
@@ -488,9 +519,9 @@ export declare class DocxEditor {
|
|
|
488
519
|
/** The `[data-anchor]` element of a fresh render root (the root itself for a leaf
|
|
489
520
|
* block, its descendant for a wrapper-shaped render like a table's align div). */
|
|
490
521
|
private static anchorElOf;
|
|
491
|
-
/** Insert/remove/swap body unit nodes per the diff. Returns
|
|
492
|
-
* ambiguity, order violation, wrapper semantics) — the
|
|
493
|
-
* so bailing just means a full repaint. */
|
|
522
|
+
/** Insert/remove/swap body unit nodes per the diff. Returns `true` on success or a
|
|
523
|
+
* bail-reason string (parent ambiguity, order violation, wrapper semantics) — the
|
|
524
|
+
* session is already correct, so bailing just means a full repaint. */
|
|
494
525
|
private applyBodyDiff;
|
|
495
526
|
/** Wire a freshly rendered unit root (and its nested blocks) and stamp the unit's
|
|
496
527
|
* content signature on its `[data-anchor]` element — the element the next
|
package/dist/editor.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"editor.d.ts","sourceRoot":"","sources":["../src/editor.ts"],"names":[],"mappings":"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"}
|