docxodus 9.3.0 → 9.4.0
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/editor.bundle.js +87 -21
- package/dist/editor.d.ts +26 -0
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +113 -34
- package/dist/editor.js.map +1 -1
- package/dist/embed.bundle.js +112 -22
- package/dist/embed.iife.js +112 -22
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/session.bundle.js +25 -1
- package/dist/session.d.ts +20 -2
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +23 -1
- package/dist/session.js.map +1 -1
- package/dist/types.d.ts +8 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +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/System.Private.CoreLib.wasm +0 -0
- package/dist/wasm/_framework/System.Private.CoreLib.wasm.br +0 -0
- package/dist/wasm/_framework/dotnet.boot.js +5 -5
- package/dist/wasm/_framework/dotnet.boot.js.br +0 -0
- package/dist/wasm/_framework/dotnet.native.wasm +0 -0
- package/dist/wasm/_framework/dotnet.native.wasm.br +0 -0
- package/package.json +1 -1
package/dist/editor.bundle.js
CHANGED
|
@@ -4914,6 +4914,12 @@ var DocxodusEditor = (() => {
|
|
|
4914
4914
|
/** Anchors the current drag source may legally move next to, per the engine's own rules.
|
|
4915
4915
|
* Null when the bridge predates ValidMoveTargets — then every block is offered, as before. */
|
|
4916
4916
|
this.blockMoveTargets = null;
|
|
4917
|
+
/** Memoized `ValidMoveTargets` answers, keyed by source anchor and dropped whenever an edit
|
|
4918
|
+
* lands. The legal-target set is a property of the document, so hovering back and forth over
|
|
4919
|
+
* the same blocks between edits must not re-ask the engine. */
|
|
4920
|
+
this.blockMoveTargetCache = /* @__PURE__ */ new Map();
|
|
4921
|
+
/** Cancels the pending idle prefetch of the hovered block's targets — see `showBlockHandle`. */
|
|
4922
|
+
this.blockMoveTargetPrefetch = null;
|
|
4917
4923
|
/** Why the last move was refused, verbatim from the engine — diagnostics, not announcement copy. */
|
|
4918
4924
|
this.lastMoveError = null;
|
|
4919
4925
|
/**
|
|
@@ -5214,8 +5220,7 @@ var DocxodusEditor = (() => {
|
|
|
5214
5220
|
return true;
|
|
5215
5221
|
}
|
|
5216
5222
|
const destination = res.created?.[0] ?? res.modified?.[0];
|
|
5217
|
-
|
|
5218
|
-
else this.reconcile();
|
|
5223
|
+
this.reconcile();
|
|
5219
5224
|
const moved = destination ? this.bodyUnitNodes().find((el) => el.getAttribute("data-anchor") === destination.unid) : null;
|
|
5220
5225
|
if (moved) {
|
|
5221
5226
|
moved.classList.add("docx-block-move-flash");
|
|
@@ -5240,7 +5245,12 @@ var DocxodusEditor = (() => {
|
|
|
5240
5245
|
const node = target instanceof Node ? target : null;
|
|
5241
5246
|
const el = node?.nodeType === Node.ELEMENT_NODE ? node : node?.parentElement;
|
|
5242
5247
|
if (!el || !this.editRoot.contains(el)) return null;
|
|
5243
|
-
|
|
5248
|
+
let unit = null;
|
|
5249
|
+
for (let candidate = el.closest("[data-anchor]"); candidate && this.editRoot.contains(candidate); candidate = candidate.parentElement?.closest("[data-anchor]") ?? null) {
|
|
5250
|
+
unit = candidate;
|
|
5251
|
+
}
|
|
5252
|
+
if (!unit || unit.closest("section.footnotes, section.endnotes")) return null;
|
|
5253
|
+
return unit;
|
|
5244
5254
|
}
|
|
5245
5255
|
isMovableBlockUnit(unit) {
|
|
5246
5256
|
if (!unit || !this.anchorIdOf(unit)) return false;
|
|
@@ -5262,18 +5272,18 @@ var DocxodusEditor = (() => {
|
|
|
5262
5272
|
if (!handle || !this.isMovableBlockUnit(unit)) return;
|
|
5263
5273
|
const changed = unit !== this.blockDragSource;
|
|
5264
5274
|
this.blockDragSource = unit;
|
|
5265
|
-
|
|
5266
|
-
if (
|
|
5275
|
+
const known = this.blockMoveTargetsFor(unit, { cachedOnly: true });
|
|
5276
|
+
if (known?.size === 0) {
|
|
5267
5277
|
handle.style.display = "none";
|
|
5268
5278
|
return;
|
|
5269
5279
|
}
|
|
5280
|
+
if (changed && known === void 0) this.prefetchBlockMoveTargets(unit);
|
|
5270
5281
|
const rect = unit.getBoundingClientRect();
|
|
5271
5282
|
handle.style.display = "flex";
|
|
5272
5283
|
handle.style.left = `${Math.max(4, rect.left - 32)}px`;
|
|
5273
5284
|
handle.style.top = `${Math.max(4, rect.top + (unit.tagName === "TABLE" ? 6 : Math.max(0, (rect.height - 28) / 2)))}px`;
|
|
5274
5285
|
const preview = (unit.textContent ?? "").trim().replace(/\s+/g, " ").slice(0, 48);
|
|
5275
5286
|
handle.setAttribute("aria-label", preview ? `Move block: ${preview}` : "Move block");
|
|
5276
|
-
if (changed) this.refreshBlockDropTargets();
|
|
5277
5287
|
}
|
|
5278
5288
|
hideBlockHandle() {
|
|
5279
5289
|
if (this.blockDragging || this.blockMoveMenu?.style.display === "block") return;
|
|
@@ -5310,19 +5320,52 @@ var DocxodusEditor = (() => {
|
|
|
5310
5320
|
* behaviour this replaces. Null (no bridge support) keeps the previous offer-everything path.
|
|
5311
5321
|
*/
|
|
5312
5322
|
refreshBlockMoveTargets(source) {
|
|
5323
|
+
this.blockMoveTargets = source ? this.blockMoveTargetsFor(source) ?? null : null;
|
|
5324
|
+
}
|
|
5325
|
+
/**
|
|
5326
|
+
* This block's legal destinations, from the memo when it is there. Returns `undefined` — not
|
|
5327
|
+
* `null` — for "not asked yet", so a caller can tell an unknown answer from the engine's
|
|
5328
|
+
* "no bridge support, offer everything" one.
|
|
5329
|
+
*/
|
|
5330
|
+
blockMoveTargetsFor(source, options = {}) {
|
|
5313
5331
|
const bridge = this.exports.DocxSessionBridge;
|
|
5314
|
-
const sourceId =
|
|
5315
|
-
if (!sourceId || typeof bridge.ValidMoveTargets !== "function")
|
|
5316
|
-
|
|
5317
|
-
|
|
5318
|
-
|
|
5332
|
+
const sourceId = this.anchorIdOf(source);
|
|
5333
|
+
if (!sourceId || typeof bridge.ValidMoveTargets !== "function") return null;
|
|
5334
|
+
if (this.blockMoveTargetCache.has(sourceId)) return this.blockMoveTargetCache.get(sourceId);
|
|
5335
|
+
if (options.cachedOnly) return void 0;
|
|
5336
|
+
let targets;
|
|
5319
5337
|
try {
|
|
5320
|
-
const
|
|
5321
|
-
|
|
5322
|
-
targets.map((t) => [t.anchorId, { before: t.before, after: t.after }])
|
|
5323
|
-
);
|
|
5338
|
+
const parsed = JSON.parse(bridge.ValidMoveTargets(this.handle, sourceId));
|
|
5339
|
+
targets = new Map(parsed.map((t) => [t.anchorId, { before: t.before, after: t.after }]));
|
|
5324
5340
|
} catch {
|
|
5325
|
-
|
|
5341
|
+
targets = null;
|
|
5342
|
+
}
|
|
5343
|
+
this.blockMoveTargetCache.set(sourceId, targets);
|
|
5344
|
+
return targets;
|
|
5345
|
+
}
|
|
5346
|
+
/**
|
|
5347
|
+
* Ask for the hovered block's destinations off the interaction path, and hide the handle if
|
|
5348
|
+
* the answer comes back empty and that block is still the one under the pointer. The handle
|
|
5349
|
+
* therefore appears immediately on hover and withdraws a beat later on the rare immovable
|
|
5350
|
+
* block, instead of every hover paying for the query up front.
|
|
5351
|
+
*/
|
|
5352
|
+
prefetchBlockMoveTargets(source) {
|
|
5353
|
+
const view = this.container.ownerDocument.defaultView;
|
|
5354
|
+
if (!view) return;
|
|
5355
|
+
this.blockMoveTargetPrefetch?.();
|
|
5356
|
+
const run = () => {
|
|
5357
|
+
this.blockMoveTargetPrefetch = null;
|
|
5358
|
+
if (this.closed || !source.isConnected || this.blockDragSource !== source) return;
|
|
5359
|
+
if (this.blockMoveTargetsFor(source)?.size === 0 && this.blockDragHandle)
|
|
5360
|
+
this.blockDragHandle.style.display = "none";
|
|
5361
|
+
};
|
|
5362
|
+
const idle = view;
|
|
5363
|
+
if (idle.requestIdleCallback && idle.cancelIdleCallback) {
|
|
5364
|
+
const id = idle.requestIdleCallback(run, { timeout: 500 });
|
|
5365
|
+
this.blockMoveTargetPrefetch = () => idle.cancelIdleCallback(id);
|
|
5366
|
+
} else {
|
|
5367
|
+
const id = view.setTimeout(run, 0);
|
|
5368
|
+
this.blockMoveTargetPrefetch = () => view.clearTimeout(id);
|
|
5326
5369
|
}
|
|
5327
5370
|
}
|
|
5328
5371
|
/**
|
|
@@ -5412,7 +5455,8 @@ var DocxodusEditor = (() => {
|
|
|
5412
5455
|
const index = units.indexOf(source);
|
|
5413
5456
|
if (index < 0) return null;
|
|
5414
5457
|
const position = action === "up" || action === "top" ? "before" : "after";
|
|
5415
|
-
const
|
|
5458
|
+
const side = position === "before" ? units.slice(0, index) : units.slice(index + 1);
|
|
5459
|
+
const candidates = side.filter((el) => this.isValidMoveTarget(el, position));
|
|
5416
5460
|
if (candidates.length === 0) return null;
|
|
5417
5461
|
if (action === "up") return { target: candidates[candidates.length - 1], position };
|
|
5418
5462
|
if (action === "down") return { target: candidates[0], position };
|
|
@@ -5592,6 +5636,9 @@ var DocxodusEditor = (() => {
|
|
|
5592
5636
|
this.refreshBlockDropTargets();
|
|
5593
5637
|
}
|
|
5594
5638
|
teardownBlockDrag() {
|
|
5639
|
+
this.blockMoveTargetPrefetch?.();
|
|
5640
|
+
this.blockMoveTargetPrefetch = null;
|
|
5641
|
+
this.blockMoveTargetCache.clear();
|
|
5595
5642
|
for (const cleanup of this.blockDragTargetCleanup.splice(0)) cleanup();
|
|
5596
5643
|
for (const cleanup of this.blockDragCleanup.splice(0)) cleanup();
|
|
5597
5644
|
this.blockDragHandle?.remove();
|
|
@@ -6109,11 +6156,22 @@ var DocxodusEditor = (() => {
|
|
|
6109
6156
|
}
|
|
6110
6157
|
parseEdit(json) {
|
|
6111
6158
|
try {
|
|
6112
|
-
|
|
6159
|
+
const result = JSON.parse(json);
|
|
6160
|
+
if (result.success) this.invalidateBlockMoveTargets();
|
|
6161
|
+
return result;
|
|
6113
6162
|
} catch {
|
|
6114
6163
|
return { success: false };
|
|
6115
6164
|
}
|
|
6116
6165
|
}
|
|
6166
|
+
/**
|
|
6167
|
+
* Drop the memoized `ValidMoveTargets` answers. Which blocks a block may move next to is a
|
|
6168
|
+
* fact about the DOCUMENT, so it survives hovering but not editing — and the two places a
|
|
6169
|
+
* document changes are `parseEdit` (every mutation that returns an `EditResult`) and
|
|
6170
|
+
* undo/redo, which return a bare boolean and so cannot go through it.
|
|
6171
|
+
*/
|
|
6172
|
+
invalidateBlockMoveTargets() {
|
|
6173
|
+
this.blockMoveTargetCache.clear();
|
|
6174
|
+
}
|
|
6117
6175
|
// ─── M5: formatting commands (ribbon) ────────────────────────────────
|
|
6118
6176
|
// ─── Multi-block selection helpers (format a whole stack of paragraphs at once) ──────
|
|
6119
6177
|
/**
|
|
@@ -6667,12 +6725,16 @@ var DocxodusEditor = (() => {
|
|
|
6667
6725
|
/** Undo the last edit (incremental repaint; falls back to a full re-render). */
|
|
6668
6726
|
undo() {
|
|
6669
6727
|
if (this.closed) return;
|
|
6670
|
-
if (this.exports.DocxSessionBridge.Undo(this.handle))
|
|
6728
|
+
if (!this.exports.DocxSessionBridge.Undo(this.handle)) return;
|
|
6729
|
+
this.invalidateBlockMoveTargets();
|
|
6730
|
+
this.reconcile();
|
|
6671
6731
|
}
|
|
6672
6732
|
/** Redo the last undone edit (incremental repaint; falls back to a full re-render). */
|
|
6673
6733
|
redo() {
|
|
6674
6734
|
if (this.closed) return;
|
|
6675
|
-
if (this.exports.DocxSessionBridge.Redo(this.handle))
|
|
6735
|
+
if (!this.exports.DocxSessionBridge.Redo(this.handle)) return;
|
|
6736
|
+
this.invalidateBlockMoveTargets();
|
|
6737
|
+
this.reconcile();
|
|
6676
6738
|
}
|
|
6677
6739
|
// ─── Header/footer region commands (no-ops unless `headerFooter` is on) ───────────────
|
|
6678
6740
|
/**
|
|
@@ -6901,7 +6963,11 @@ var DocxodusEditor = (() => {
|
|
|
6901
6963
|
const oldTokens = oldNodes.map(_DocxEditor.domTokenOf);
|
|
6902
6964
|
const oldKinds = oldNodes.map(_DocxEditor.domKindOf);
|
|
6903
6965
|
const bodyDiff = diffUnits(oldTokens, plan.body);
|
|
6904
|
-
if (needsRemount(bodyDiff, plan.body, oldKinds))
|
|
6966
|
+
if (needsRemount(bodyDiff, plan.body, oldKinds)) {
|
|
6967
|
+
return this.bail(
|
|
6968
|
+
`needsRemount (li change or churn): +${bodyDiff.added.length} -${bodyDiff.removed.length} ~${bodyDiff.substituted.length} moved=${bodyDiff.moved.length} of ${plan.body.length}`
|
|
6969
|
+
);
|
|
6970
|
+
}
|
|
6905
6971
|
const fnState = this.notesDiff("footnotes", plan.footnotes);
|
|
6906
6972
|
const enState = this.notesDiff("endnotes", plan.endnotes);
|
|
6907
6973
|
if (fnState === null || enState === null) return this.bail("notes container unstampable/missing");
|
package/dist/editor.d.ts
CHANGED
|
@@ -164,6 +164,12 @@ export declare class DocxEditor {
|
|
|
164
164
|
/** Anchors the current drag source may legally move next to, per the engine's own rules.
|
|
165
165
|
* Null when the bridge predates ValidMoveTargets — then every block is offered, as before. */
|
|
166
166
|
private blockMoveTargets;
|
|
167
|
+
/** Memoized `ValidMoveTargets` answers, keyed by source anchor and dropped whenever an edit
|
|
168
|
+
* lands. The legal-target set is a property of the document, so hovering back and forth over
|
|
169
|
+
* the same blocks between edits must not re-ask the engine. */
|
|
170
|
+
private blockMoveTargetCache;
|
|
171
|
+
/** Cancels the pending idle prefetch of the hovered block's targets — see `showBlockHandle`. */
|
|
172
|
+
private blockMoveTargetPrefetch;
|
|
167
173
|
/** Why the last move was refused, verbatim from the engine — diagnostics, not announcement copy. */
|
|
168
174
|
lastMoveError: string | null;
|
|
169
175
|
/**
|
|
@@ -280,6 +286,19 @@ export declare class DocxEditor {
|
|
|
280
286
|
* behaviour this replaces. Null (no bridge support) keeps the previous offer-everything path.
|
|
281
287
|
*/
|
|
282
288
|
private refreshBlockMoveTargets;
|
|
289
|
+
/**
|
|
290
|
+
* This block's legal destinations, from the memo when it is there. Returns `undefined` — not
|
|
291
|
+
* `null` — for "not asked yet", so a caller can tell an unknown answer from the engine's
|
|
292
|
+
* "no bridge support, offer everything" one.
|
|
293
|
+
*/
|
|
294
|
+
private blockMoveTargetsFor;
|
|
295
|
+
/**
|
|
296
|
+
* Ask for the hovered block's destinations off the interaction path, and hide the handle if
|
|
297
|
+
* the answer comes back empty and that block is still the one under the pointer. The handle
|
|
298
|
+
* therefore appears immediately on hover and withdraws a beat later on the rare immovable
|
|
299
|
+
* block, instead of every hover paying for the query up front.
|
|
300
|
+
*/
|
|
301
|
+
private prefetchBlockMoveTargets;
|
|
283
302
|
/**
|
|
284
303
|
* Whether `unit` is a legal destination for the current drag source — for a SPECIFIC side when
|
|
285
304
|
* one is given. A cross-block range or a section break between the blocks can make one side
|
|
@@ -407,6 +426,13 @@ export declare class DocxEditor {
|
|
|
407
426
|
/** The editable block immediately before `el` within its own root, or null. */
|
|
408
427
|
private previousEditable;
|
|
409
428
|
private parseEdit;
|
|
429
|
+
/**
|
|
430
|
+
* Drop the memoized `ValidMoveTargets` answers. Which blocks a block may move next to is a
|
|
431
|
+
* fact about the DOCUMENT, so it survives hovering but not editing — and the two places a
|
|
432
|
+
* document changes are `parseEdit` (every mutation that returns an `EditResult`) and
|
|
433
|
+
* undo/redo, which return a bare boolean and so cannot go through it.
|
|
434
|
+
*/
|
|
435
|
+
private invalidateBlockMoveTargets;
|
|
410
436
|
/**
|
|
411
437
|
* Restore a cross-block selection after a native toolbar control took focus. The bookmark uses
|
|
412
438
|
* stable anchor ids and content offsets, so it also survives incremental block swaps.
|
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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"}
|
package/dist/editor.js
CHANGED
|
@@ -565,6 +565,12 @@ export class DocxEditor {
|
|
|
565
565
|
/** Anchors the current drag source may legally move next to, per the engine's own rules.
|
|
566
566
|
* Null when the bridge predates ValidMoveTargets — then every block is offered, as before. */
|
|
567
567
|
this.blockMoveTargets = null;
|
|
568
|
+
/** Memoized `ValidMoveTargets` answers, keyed by source anchor and dropped whenever an edit
|
|
569
|
+
* lands. The legal-target set is a property of the document, so hovering back and forth over
|
|
570
|
+
* the same blocks between edits must not re-ask the engine. */
|
|
571
|
+
this.blockMoveTargetCache = new Map();
|
|
572
|
+
/** Cancels the pending idle prefetch of the hovered block's targets — see `showBlockHandle`. */
|
|
573
|
+
this.blockMoveTargetPrefetch = null;
|
|
568
574
|
/** Why the last move was refused, verbatim from the engine — diagnostics, not announcement copy. */
|
|
569
575
|
this.lastMoveError = null;
|
|
570
576
|
/**
|
|
@@ -890,13 +896,12 @@ export class DocxEditor {
|
|
|
890
896
|
return true;
|
|
891
897
|
}
|
|
892
898
|
const destination = res.created?.[0] ?? res.modified?.[0];
|
|
893
|
-
//
|
|
894
|
-
//
|
|
895
|
-
//
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
this.reconcile();
|
|
899
|
+
// Both modes reconcile. A direct move relocates the existing element, so the reconciler moves
|
|
900
|
+
// the exact DOM node it already has. Review rendering additionally rewrites the SOURCE in
|
|
901
|
+
// place — it becomes the move-from half — and that is visible to the diff because the plan
|
|
902
|
+
// signs every unit with a content hash, so the source diffs as an in-place substitution.
|
|
903
|
+
// This used to remount, which on a real charter is seconds for a one-block change.
|
|
904
|
+
this.reconcile();
|
|
900
905
|
const moved = destination
|
|
901
906
|
? this.bodyUnitNodes().find((el) => el.getAttribute("data-anchor") === destination.unid)
|
|
902
907
|
: null;
|
|
@@ -928,7 +933,15 @@ export class DocxEditor {
|
|
|
928
933
|
: node?.parentElement;
|
|
929
934
|
if (!el || !this.editRoot.contains(el))
|
|
930
935
|
return null;
|
|
931
|
-
|
|
936
|
+
// Climb rather than scan: this runs on every pointer move over the document, and listing
|
|
937
|
+
// every anchored node to find the one containing the pointer is linear in the document.
|
|
938
|
+
let unit = null;
|
|
939
|
+
for (let candidate = el.closest("[data-anchor]"); candidate && this.editRoot.contains(candidate); candidate = candidate.parentElement?.closest("[data-anchor]") ?? null) {
|
|
940
|
+
unit = candidate;
|
|
941
|
+
}
|
|
942
|
+
if (!unit || unit.closest("section.footnotes, section.endnotes"))
|
|
943
|
+
return null;
|
|
944
|
+
return unit;
|
|
932
945
|
}
|
|
933
946
|
isMovableBlockUnit(unit) {
|
|
934
947
|
if (!unit || !this.anchorIdOf(unit))
|
|
@@ -956,23 +969,27 @@ export class DocxEditor {
|
|
|
956
969
|
return;
|
|
957
970
|
const changed = unit !== this.blockDragSource;
|
|
958
971
|
this.blockDragSource = unit;
|
|
959
|
-
if (changed)
|
|
960
|
-
this.refreshBlockMoveTargets(unit);
|
|
961
972
|
// A block the engine will not move anywhere — one owning a section break, or already carrying
|
|
962
973
|
// revision markup a tracked move would have to re-wrap — gets no handle rather than a handle
|
|
963
|
-
// that always fails.
|
|
964
|
-
|
|
974
|
+
// that always fails. Asking costs an engine round trip, so hovering only ever CONSUMES a
|
|
975
|
+
// cached answer and schedules the ask for idle time; the drag start and the menu ask for
|
|
976
|
+
// real. Merely moving the pointer across the document must not run document-scale work.
|
|
977
|
+
const known = this.blockMoveTargetsFor(unit, { cachedOnly: true });
|
|
978
|
+
if (known?.size === 0) {
|
|
965
979
|
handle.style.display = "none";
|
|
966
980
|
return;
|
|
967
981
|
}
|
|
982
|
+
if (changed && known === undefined)
|
|
983
|
+
this.prefetchBlockMoveTargets(unit);
|
|
968
984
|
const rect = unit.getBoundingClientRect();
|
|
969
985
|
handle.style.display = "flex";
|
|
970
986
|
handle.style.left = `${Math.max(4, rect.left - 32)}px`;
|
|
971
987
|
handle.style.top = `${Math.max(4, rect.top + (unit.tagName === "TABLE" ? 6 : Math.max(0, (rect.height - 28) / 2)))}px`;
|
|
972
988
|
const preview = (unit.textContent ?? "").trim().replace(/\s+/g, " ").slice(0, 48);
|
|
973
989
|
handle.setAttribute("aria-label", preview ? `Move block: ${preview}` : "Move block");
|
|
974
|
-
|
|
975
|
-
|
|
990
|
+
// Drop targets are registered when a drag actually begins (and once at mount), not on
|
|
991
|
+
// hover: re-registering one listener per body block every time the pointer crosses a
|
|
992
|
+
// paragraph boundary is work no drop can use.
|
|
976
993
|
}
|
|
977
994
|
hideBlockHandle() {
|
|
978
995
|
if (this.blockDragging || this.blockMoveMenu?.style.display === "block")
|
|
@@ -1013,18 +1030,60 @@ export class DocxEditor {
|
|
|
1013
1030
|
* behaviour this replaces. Null (no bridge support) keeps the previous offer-everything path.
|
|
1014
1031
|
*/
|
|
1015
1032
|
refreshBlockMoveTargets(source) {
|
|
1033
|
+
this.blockMoveTargets = source ? this.blockMoveTargetsFor(source) ?? null : null;
|
|
1034
|
+
}
|
|
1035
|
+
/**
|
|
1036
|
+
* This block's legal destinations, from the memo when it is there. Returns `undefined` — not
|
|
1037
|
+
* `null` — for "not asked yet", so a caller can tell an unknown answer from the engine's
|
|
1038
|
+
* "no bridge support, offer everything" one.
|
|
1039
|
+
*/
|
|
1040
|
+
blockMoveTargetsFor(source, options = {}) {
|
|
1016
1041
|
const bridge = this.exports.DocxSessionBridge;
|
|
1017
|
-
const sourceId =
|
|
1018
|
-
if (!sourceId || typeof bridge.ValidMoveTargets !== "function")
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1042
|
+
const sourceId = this.anchorIdOf(source);
|
|
1043
|
+
if (!sourceId || typeof bridge.ValidMoveTargets !== "function")
|
|
1044
|
+
return null;
|
|
1045
|
+
if (this.blockMoveTargetCache.has(sourceId))
|
|
1046
|
+
return this.blockMoveTargetCache.get(sourceId);
|
|
1047
|
+
if (options.cachedOnly)
|
|
1048
|
+
return undefined;
|
|
1049
|
+
let targets;
|
|
1022
1050
|
try {
|
|
1023
|
-
const
|
|
1024
|
-
|
|
1051
|
+
const parsed = JSON.parse(bridge.ValidMoveTargets(this.handle, sourceId));
|
|
1052
|
+
targets = new Map(parsed.map((t) => [t.anchorId, { before: t.before, after: t.after }]));
|
|
1025
1053
|
}
|
|
1026
1054
|
catch {
|
|
1027
|
-
|
|
1055
|
+
targets = null;
|
|
1056
|
+
}
|
|
1057
|
+
this.blockMoveTargetCache.set(sourceId, targets);
|
|
1058
|
+
return targets;
|
|
1059
|
+
}
|
|
1060
|
+
/**
|
|
1061
|
+
* Ask for the hovered block's destinations off the interaction path, and hide the handle if
|
|
1062
|
+
* the answer comes back empty and that block is still the one under the pointer. The handle
|
|
1063
|
+
* therefore appears immediately on hover and withdraws a beat later on the rare immovable
|
|
1064
|
+
* block, instead of every hover paying for the query up front.
|
|
1065
|
+
*/
|
|
1066
|
+
prefetchBlockMoveTargets(source) {
|
|
1067
|
+
const view = this.container.ownerDocument.defaultView;
|
|
1068
|
+
if (!view)
|
|
1069
|
+
return;
|
|
1070
|
+
this.blockMoveTargetPrefetch?.();
|
|
1071
|
+
const run = () => {
|
|
1072
|
+
this.blockMoveTargetPrefetch = null;
|
|
1073
|
+
// The pointer has moved on (or the DOM was repainted) — the answer is no longer wanted.
|
|
1074
|
+
if (this.closed || !source.isConnected || this.blockDragSource !== source)
|
|
1075
|
+
return;
|
|
1076
|
+
if (this.blockMoveTargetsFor(source)?.size === 0 && this.blockDragHandle)
|
|
1077
|
+
this.blockDragHandle.style.display = "none";
|
|
1078
|
+
};
|
|
1079
|
+
const idle = view;
|
|
1080
|
+
if (idle.requestIdleCallback && idle.cancelIdleCallback) {
|
|
1081
|
+
const id = idle.requestIdleCallback(run, { timeout: 500 });
|
|
1082
|
+
this.blockMoveTargetPrefetch = () => idle.cancelIdleCallback(id);
|
|
1083
|
+
}
|
|
1084
|
+
else {
|
|
1085
|
+
const id = view.setTimeout(run, 0);
|
|
1086
|
+
this.blockMoveTargetPrefetch = () => view.clearTimeout(id);
|
|
1028
1087
|
}
|
|
1029
1088
|
}
|
|
1030
1089
|
/**
|
|
@@ -1126,11 +1185,8 @@ export class DocxEditor {
|
|
|
1126
1185
|
// Only pairs the engine accepts: a target can be reachable on one side and refused on the
|
|
1127
1186
|
// other, so the SIDE is part of what makes a candidate valid.
|
|
1128
1187
|
const position = action === "up" || action === "top" ? "before" : "after";
|
|
1129
|
-
const
|
|
1130
|
-
|
|
1131
|
-
.filter((el) => (position === "before"
|
|
1132
|
-
? units.indexOf(el) < index
|
|
1133
|
-
: units.indexOf(el) > index));
|
|
1188
|
+
const side = position === "before" ? units.slice(0, index) : units.slice(index + 1);
|
|
1189
|
+
const candidates = side.filter((el) => this.isValidMoveTarget(el, position));
|
|
1134
1190
|
if (candidates.length === 0)
|
|
1135
1191
|
return null;
|
|
1136
1192
|
if (action === "up")
|
|
@@ -1316,6 +1372,9 @@ export class DocxEditor {
|
|
|
1316
1372
|
this.refreshBlockDropTargets();
|
|
1317
1373
|
}
|
|
1318
1374
|
teardownBlockDrag() {
|
|
1375
|
+
this.blockMoveTargetPrefetch?.();
|
|
1376
|
+
this.blockMoveTargetPrefetch = null;
|
|
1377
|
+
this.blockMoveTargetCache.clear();
|
|
1319
1378
|
for (const cleanup of this.blockDragTargetCleanup.splice(0))
|
|
1320
1379
|
cleanup();
|
|
1321
1380
|
for (const cleanup of this.blockDragCleanup.splice(0))
|
|
@@ -1951,12 +2010,24 @@ export class DocxEditor {
|
|
|
1951
2010
|
}
|
|
1952
2011
|
parseEdit(json) {
|
|
1953
2012
|
try {
|
|
1954
|
-
|
|
2013
|
+
const result = JSON.parse(json);
|
|
2014
|
+
if (result.success)
|
|
2015
|
+
this.invalidateBlockMoveTargets();
|
|
2016
|
+
return result;
|
|
1955
2017
|
}
|
|
1956
2018
|
catch {
|
|
1957
2019
|
return { success: false };
|
|
1958
2020
|
}
|
|
1959
2021
|
}
|
|
2022
|
+
/**
|
|
2023
|
+
* Drop the memoized `ValidMoveTargets` answers. Which blocks a block may move next to is a
|
|
2024
|
+
* fact about the DOCUMENT, so it survives hovering but not editing — and the two places a
|
|
2025
|
+
* document changes are `parseEdit` (every mutation that returns an `EditResult`) and
|
|
2026
|
+
* undo/redo, which return a bare boolean and so cannot go through it.
|
|
2027
|
+
*/
|
|
2028
|
+
invalidateBlockMoveTargets() {
|
|
2029
|
+
this.blockMoveTargetCache.clear();
|
|
2030
|
+
}
|
|
1960
2031
|
// ─── M5: formatting commands (ribbon) ────────────────────────────────
|
|
1961
2032
|
// ─── Multi-block selection helpers (format a whole stack of paragraphs at once) ──────
|
|
1962
2033
|
/**
|
|
@@ -2544,15 +2615,19 @@ export class DocxEditor {
|
|
|
2544
2615
|
undo() {
|
|
2545
2616
|
if (this.closed)
|
|
2546
2617
|
return;
|
|
2547
|
-
if (this.exports.DocxSessionBridge.Undo(this.handle))
|
|
2548
|
-
|
|
2618
|
+
if (!this.exports.DocxSessionBridge.Undo(this.handle))
|
|
2619
|
+
return;
|
|
2620
|
+
this.invalidateBlockMoveTargets();
|
|
2621
|
+
this.reconcile();
|
|
2549
2622
|
}
|
|
2550
2623
|
/** Redo the last undone edit (incremental repaint; falls back to a full re-render). */
|
|
2551
2624
|
redo() {
|
|
2552
2625
|
if (this.closed)
|
|
2553
2626
|
return;
|
|
2554
|
-
if (this.exports.DocxSessionBridge.Redo(this.handle))
|
|
2555
|
-
|
|
2627
|
+
if (!this.exports.DocxSessionBridge.Redo(this.handle))
|
|
2628
|
+
return;
|
|
2629
|
+
this.invalidateBlockMoveTargets();
|
|
2630
|
+
this.reconcile();
|
|
2556
2631
|
}
|
|
2557
2632
|
// ─── Header/footer region commands (no-ops unless `headerFooter` is on) ───────────────
|
|
2558
2633
|
/**
|
|
@@ -2783,8 +2858,12 @@ export class DocxEditor {
|
|
|
2783
2858
|
const oldTokens = oldNodes.map(DocxEditor.domTokenOf);
|
|
2784
2859
|
const oldKinds = oldNodes.map(DocxEditor.domKindOf);
|
|
2785
2860
|
const bodyDiff = diffUnits(oldTokens, plan.body);
|
|
2786
|
-
if (needsRemount(bodyDiff, plan.body, oldKinds))
|
|
2787
|
-
|
|
2861
|
+
if (needsRemount(bodyDiff, plan.body, oldKinds)) {
|
|
2862
|
+
// Name the shape, not just the verdict: "churn" and "a list item moved in or out" are very
|
|
2863
|
+
// different findings when a repaint unexpectedly costs a whole-document render.
|
|
2864
|
+
return this.bail(`needsRemount (li change or churn): +${bodyDiff.added.length} -${bodyDiff.removed.length} ` +
|
|
2865
|
+
`~${bodyDiff.substituted.length} moved=${bodyDiff.moved.length} of ${plan.body.length}`);
|
|
2866
|
+
}
|
|
2788
2867
|
const fnState = this.notesDiff("footnotes", plan.footnotes);
|
|
2789
2868
|
const enState = this.notesDiff("endnotes", plan.endnotes);
|
|
2790
2869
|
if (fnState === null || enState === null)
|