docxodus 8.0.0 → 9.0.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/README.md +65 -24
- package/dist/editor-headerfooter.d.ts +39 -3
- package/dist/editor-headerfooter.d.ts.map +1 -1
- package/dist/editor-headerfooter.js +118 -2
- package/dist/editor-headerfooter.js.map +1 -1
- package/dist/editor-reconcile.d.ts +75 -0
- package/dist/editor-reconcile.d.ts.map +1 -0
- package/dist/editor-reconcile.js +125 -0
- package/dist/editor-reconcile.js.map +1 -0
- package/dist/editor.bundle.js +799 -42
- package/dist/editor.d.ts +121 -5
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +572 -31
- package/dist/editor.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/page-number-format.d.ts +22 -0
- package/dist/page-number-format.d.ts.map +1 -0
- package/dist/page-number-format.js +60 -0
- package/dist/page-number-format.js.map +1 -0
- package/dist/pagination.bundle.js +158 -21
- package/dist/pagination.d.ts +38 -0
- package/dist/pagination.d.ts.map +1 -1
- package/dist/pagination.js +181 -29
- package/dist/pagination.js.map +1 -1
- package/dist/session.bundle.js +226 -4
- package/dist/session.d.ts +147 -6
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +187 -4
- package/dist/session.js.map +1 -1
- package/dist/types.d.ts +191 -4
- 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/DocxodusWasm.wasm +0 -0
- package/dist/wasm/_framework/System.IO.Compression.wasm +0 -0
- package/dist/wasm/_framework/System.Linq.wasm +0 -0
- package/dist/wasm/_framework/System.Private.CoreLib.wasm +0 -0
- package/dist/wasm/_framework/System.Private.Xml.Linq.wasm +0 -0
- package/dist/wasm/_framework/System.Runtime.wasm +0 -0
- package/dist/wasm/_framework/System.Text.RegularExpressions.wasm +0 -0
- package/dist/wasm/_framework/dotnet.boot.js +10 -10
- package/dist/wasm/_framework/dotnet.native.js.symbols +2102 -2101
- package/dist/wasm/_framework/dotnet.native.wasm +0 -0
- package/package.json +17 -4
package/README.md
CHANGED
|
@@ -1,34 +1,75 @@
|
|
|
1
1
|
# Docxodus
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
Docxodus brings professional-grade document comparison (redlining) to JavaScript applications. Compare two Word documents and get tracked changes, or convert DOCX files to HTML - all running entirely in the browser with no server required.
|
|
6
|
-
|
|
7
|
-
## Features
|
|
8
|
-
|
|
9
|
-
- **Document Comparison**: Compare two DOCX files and generate a redlined document with tracked changes
|
|
10
|
-
- **Move Detection**: Automatically identifies relocated content (not just deleted/re-inserted)
|
|
11
|
-
- **Format Change Detection**: Detects formatting-only changes (bold, italic, font size, etc.)
|
|
12
|
-
- **HTML Conversion**: Convert DOCX documents to HTML for display in the browser
|
|
13
|
-
- Comment rendering (endnote-style, inline, or margin)
|
|
14
|
-
- Paginated output mode for PDF-like viewing
|
|
15
|
-
- Headers, footers, footnotes, and endnotes support
|
|
16
|
-
- Custom annotation rendering
|
|
17
|
-
- **Document Metadata**: Fast metadata extraction for lazy loading and pagination
|
|
18
|
-
- **Revision Extraction**: Get structured data about all revisions in a compared document
|
|
19
|
-
- **OpenContracts Export**: Export documents to OpenContracts format for NLP/document analysis
|
|
20
|
-
- **External Annotations**: Store annotations externally without modifying the DOCX
|
|
21
|
-
- **100% Client-Side**: All processing happens in the browser using WebAssembly
|
|
22
|
-
- **Web Worker Support**: Non-blocking WASM execution via Web Workers
|
|
23
|
-
- **React Hooks**: Ready-to-use hooks for React applications
|
|
24
|
-
- **TypeScript Support**: Full type definitions included
|
|
25
|
-
|
|
26
|
-
## Installation
|
|
3
|
+
**View, edit, and diff Word `.docx` files in the browser.** No server, no upload, no conversion
|
|
4
|
+
round-trip — a real OOXML engine compiled to WebAssembly, wrapped in TypeScript.
|
|
27
5
|
|
|
28
6
|
```bash
|
|
29
7
|
npm install docxodus
|
|
30
8
|
```
|
|
31
9
|
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Diff two documents into a redline Word will open
|
|
13
|
+
|
|
14
|
+
`compareDocuments()` returns a `.docx` carrying **native Word tracked changes** — `w:ins`, `w:del`,
|
|
15
|
+
and true move markup — not a text diff with highlighting. Open it in Word and accept/reject as usual.
|
|
16
|
+
|
|
17
|
+

|
|
18
|
+
|
|
19
|
+
*Real output. One frame: a struck definition, an inserted definition, word-level substitutions inside
|
|
20
|
+
an untouched sentence, and a clause **moved** — struck in purple at the bottom, re-inserted at the top,
|
|
21
|
+
linked as one operation instead of reported as an unrelated delete and insert.*
|
|
22
|
+
|
|
23
|
+
`getRevisions()` gives you the same changes as structured data — typed, with move pairing and stable
|
|
24
|
+
`kind:scope:unid` anchors — so you can drive a review UI without parsing OOXML.
|
|
25
|
+
|
|
26
|
+
## Render a document faithfully
|
|
27
|
+
|
|
28
|
+
`convertDocxToHtml()` keeps what naive converters drop: justification, style inheritance, legal
|
|
29
|
+
numbering, tables, images, comments, headers and footers, and real footnotes with back-references.
|
|
30
|
+
|
|
31
|
+

|
|
32
|
+
|
|
33
|
+
Paginated mode flows content into real page boxes with per-page numbers and page-anchored footnotes —
|
|
34
|
+
a print-accurate preview in the browser.
|
|
35
|
+
|
|
36
|
+
## Edit it in place
|
|
37
|
+
|
|
38
|
+
`DocxEditor` is a framework-agnostic block editor over the live document. Edits go through a
|
|
39
|
+
`DocxSession`, and **only the changed block re-renders**, so structural operations cost ~90–360 ms on
|
|
40
|
+
a 346-block, 94-footnote filing template. `save()` returns lossless bytes.
|
|
41
|
+
|
|
42
|
+

|
|
43
|
+
|
|
44
|
+
```ts
|
|
45
|
+
import { DocxEditor } from 'docxodus';
|
|
46
|
+
const editor = DocxEditor.open(container, docxBytes, exports);
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
See [`examples/editor.html`](https://github.com/JSv4/Docxodus/blob/main/npm/examples/editor.html) for
|
|
50
|
+
a complete ribbon implementation.
|
|
51
|
+
|
|
52
|
+
## Project it for an LLM
|
|
53
|
+
|
|
54
|
+
`convertWmlToMarkdown()` renders the document as markdown where **every block carries a stable id**,
|
|
55
|
+
so an agent can point at a clause and edit it — and `openDocxSession()` writes back to that same id.
|
|
56
|
+
|
|
57
|
+

|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## Everything else
|
|
62
|
+
|
|
63
|
+
- **Move detection** — relocated content is identified as a move, not a delete plus an insert
|
|
64
|
+
- **Format change detection** — formatting-only changes (bold, italic, font size, …)
|
|
65
|
+
- **Comment rendering** — endnote-style, inline, or margin
|
|
66
|
+
- **Document metadata** — fast extraction for lazy loading and pagination
|
|
67
|
+
- **OpenContracts export** — for NLP and document-analysis pipelines
|
|
68
|
+
- **External annotations** — overlay annotations without modifying the DOCX
|
|
69
|
+
- **Web Worker support** — non-blocking WASM execution off the main thread
|
|
70
|
+
- **React hooks** — `useDocxodus`, `useConversion`, `useComparison`
|
|
71
|
+
- **TypeScript** — full type definitions included
|
|
72
|
+
|
|
32
73
|
## Quick Start
|
|
33
74
|
|
|
34
75
|
### Basic Usage
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* all accept a `p:hdr1:<unid>` anchor. The editor wires band blocks with the same `wireBlock` it
|
|
20
20
|
* uses for the body, which is why the whole ribbon works inside a band with no new command code.
|
|
21
21
|
*/
|
|
22
|
-
import type { HeaderFooterKind } from "./types.js";
|
|
22
|
+
import type { HeaderFooterKind, NumberFormat } from "./types.js";
|
|
23
23
|
/** Which of the two bands an operation targets. */
|
|
24
24
|
export type BandWhich = "header" | "footer";
|
|
25
25
|
/** The bridge slice the region needs. Structurally satisfied by `DocxEditorExports.DocxSessionBridge`;
|
|
@@ -29,8 +29,10 @@ export interface HeaderFooterBridge {
|
|
|
29
29
|
GetSectionInfo: (handle: number, anchorId: string) => string;
|
|
30
30
|
SetHeaderText: (handle: number, anchor: string, kind: string, markdown: string) => string;
|
|
31
31
|
SetFooterText: (handle: number, anchor: string, kind: string, markdown: string) => string;
|
|
32
|
-
InsertPageNumberField: (handle: number, anchor: string, field: string) => string;
|
|
32
|
+
InsertPageNumberField: (handle: number, anchor: string, field: string, format: string) => string;
|
|
33
33
|
EnsureHeaderFooterVisible: (handle: number, anchor: string, kind: string) => string;
|
|
34
|
+
SetPageNumbering: (handle: number, anchor: string, opJson: string) => string;
|
|
35
|
+
ClearPageNumbering: (handle: number, anchor: string) => string;
|
|
34
36
|
RenderBlockHtml: (handle: number, anchorId: string, cssPrefix: string, fabricateClasses: boolean) => string;
|
|
35
37
|
}
|
|
36
38
|
export interface HeaderFooterRegionCallbacks {
|
|
@@ -72,8 +74,42 @@ export declare class HeaderFooterRegion {
|
|
|
72
74
|
setKind(which: BandWhich, kind: HeaderFooterKind): void;
|
|
73
75
|
/** The kind a band is currently editing. */
|
|
74
76
|
kindOf(which: BandWhich): HeaderFooterKind;
|
|
75
|
-
/** Append a PAGE / NUMPAGES field to the story paragraph addressed by `anchorId`.
|
|
77
|
+
/** Append a PAGE / NUMPAGES field to the story paragraph addressed by `anchorId`.
|
|
78
|
+
* Deliberately a PLAIN field (no `\*` switch), exactly as Word inserts one, so it follows the
|
|
79
|
+
* section's page-number format — see {@link setPageNumbering}. Stamping the section's current
|
|
80
|
+
* format as a switch here would silently WIN over any later format change. */
|
|
76
81
|
insertPageNumber(which: BandWhich, anchorId: string, field: "currentPage" | "totalPages"): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Set this section's page numbering (`w:pgNumType`) — Word's *Format Page Numbers…*. Omitted
|
|
84
|
+
* fields are left alone, so the format and the start are independently settable. Both bands then
|
|
85
|
+
* repaint, because the values belong to the section rather than to either story.
|
|
86
|
+
*
|
|
87
|
+
* The rendered page numbers in the editor do not change: a page-number field's cached result is
|
|
88
|
+
* what the browser shows, and Word recomputes it on open. Paginated mode substitutes the real
|
|
89
|
+
* per-page number, so it does reflect the format immediately.
|
|
90
|
+
*/
|
|
91
|
+
setPageNumbering(op: {
|
|
92
|
+
start?: number;
|
|
93
|
+
format?: NumberFormat;
|
|
94
|
+
}): boolean;
|
|
95
|
+
/** This section's page numbering as the live document states it. Fields are absent, not
|
|
96
|
+
* defaulted — "continues the previous section" is not the same claim as "starts at 1". */
|
|
97
|
+
pageNumbering(): {
|
|
98
|
+
start?: number;
|
|
99
|
+
format?: NumberFormat;
|
|
100
|
+
};
|
|
101
|
+
/** Remove this section's page-numbering start/format — it reverts to continuing the previous
|
|
102
|
+
* section's numbering in Word's default `1, 2, 3`. */
|
|
103
|
+
clearPageNumbering(): boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Re-read the section from the live document and repaint BOTH bands.
|
|
106
|
+
*
|
|
107
|
+
* `refreshAll` only repaints — it deliberately does not re-read, because its callers (remount,
|
|
108
|
+
* undo/redo) already refreshed the section. A section-property write has no such caller, and
|
|
109
|
+
* repainting from the stale snapshot would leave the chrome reporting the value the document had
|
|
110
|
+
* before the edit.
|
|
111
|
+
*/
|
|
112
|
+
private reloadSection;
|
|
77
113
|
/** Insert a page number into a band's own target paragraph (focused, else last). Seeds the
|
|
78
114
|
* story first if the band's selected kind has none, so the command is never a silent no-op. */
|
|
79
115
|
insertPageNumberInBand(which: BandWhich, field: "currentPage" | "totalPages"): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-headerfooter.d.ts","sourceRoot":"","sources":["../src/editor-headerfooter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"editor-headerfooter.d.ts","sourceRoot":"","sources":["../src/editor-headerfooter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAEjE,mDAAmD;AACnD,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5C;+EAC+E;AAC/E,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACpC,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7D,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1F,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1F,qBAAqB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IACjG,yBAAyB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACpF,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC7E,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/D,eAAe,EAAE,CACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,OAAO,KACtB,MAAM,CAAC;CACb;AAED,MAAM,WAAW,2BAA2B;IAC1C,2FAA2F;IAC3F,SAAS,EAAE,CAAC,EAAE,EAAE,WAAW,KAAK,IAAI,CAAC;IACrC,iGAAiG;IACjG,gBAAgB,EAAE,MAAM,IAAI,CAAC;CAC9B;AAED,MAAM,WAAW,yBAAyB;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;CAC3B;AAmED,qBAAa,kBAAkB;IAC7B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC;IAEjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA8B;IAExD,2FAA2F;IAC3F,OAAO,CAAC,YAAY,CAAuB;IAC3C,OAAO,CAAC,WAAW,CAAgC;IACnD,0FAA0F;IAC1F,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA6B;IAE7D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAGpB;gBAGA,MAAM,EAAE,kBAAkB,EAC1B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,yBAAyB,EAClC,SAAS,EAAE,2BAA2B;IAYxC;;;;;OAKG;IACH,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAgB7C,8CAA8C;IAC9C,OAAO,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI;IAK/B,gGAAgG;IAChG,UAAU,IAAI,IAAI;IAKlB,uFAAuF;IACvF,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI;IAiBvD,4CAA4C;IAC5C,MAAM,CAAC,KAAK,EAAE,SAAS,GAAG,gBAAgB;IAI1C;;;mFAG+E;IAC/E,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,GAAG,OAAO;IAOlG;;;;;;;;OAQG;IACH,gBAAgB,CAAC,EAAE,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,YAAY,CAAA;KAAE,GAAG,OAAO;IAUxE;+FAC2F;IAC3F,aAAa,IAAI;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,YAAY,CAAA;KAAE;IAO1D;2DACuD;IACvD,kBAAkB,IAAI,OAAO;IAQ7B;;;;;;;OAOG;IACH,OAAO,CAAC,aAAa;IAKrB;oGACgG;IAChG,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,aAAa,GAAG,YAAY,GAAG,OAAO;IAStF,mDAAmD;IACnD,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI;IAM7C,6EAA6E;IAC7E,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,WAAW,GAAG,IAAI;IAKlD,qEAAqE;IACrE,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO;IAIpC,0EAA0E;IAC1E,OAAO,CAAC,IAAI,EAAE,WAAW,GAAG,SAAS;IAMrC,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,OAAO;IAMf,iGAAiG;IACjG,OAAO,CAAC,MAAM;IAId,4FAA4F;IAC5F,OAAO,CAAC,UAAU;IAIlB,oFAAoF;IACpF,OAAO,CAAC,YAAY;IAcpB;;;;OAIG;IACH,OAAO,CAAC,SAAS;IAYjB,OAAO,CAAC,OAAO;IAIf,OAAO,CAAC,SAAS;IAmHjB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,UAAU;IAwDlB;;;;;OAKG;IACH,UAAU,CAAC,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAcnD,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,WAAW;IASnB;;;;;;;OAOG;IACH,OAAO,CAAC,iBAAiB;CA0B1B"}
|
|
@@ -19,6 +19,17 @@
|
|
|
19
19
|
* all accept a `p:hdr1:<unid>` anchor. The editor wires band blocks with the same `wireBlock` it
|
|
20
20
|
* uses for the body, which is why the whole ribbon works inside a band with no new command code.
|
|
21
21
|
*/
|
|
22
|
+
/** The page-number formats Word's *Format Page Numbers…* dialog offers, in its order. The blank
|
|
23
|
+
* entry means "leave the section's format alone" — not "decimal", which would write an attribute
|
|
24
|
+
* the document may never have had. */
|
|
25
|
+
const PAGE_FORMAT_LABELS = [
|
|
26
|
+
{ value: "", label: "Format…" },
|
|
27
|
+
{ value: "decimal", label: "1, 2, 3" },
|
|
28
|
+
{ value: "lowerLetter", label: "a, b, c" },
|
|
29
|
+
{ value: "upperLetter", label: "A, B, C" },
|
|
30
|
+
{ value: "lowerRoman", label: "i, ii, iii" },
|
|
31
|
+
{ value: "upperRoman", label: "I, II, III" },
|
|
32
|
+
];
|
|
22
33
|
const KIND_LABELS = [
|
|
23
34
|
{ value: "default", label: "Default" },
|
|
24
35
|
{ value: "first", label: "First page" },
|
|
@@ -117,14 +128,66 @@ export class HeaderFooterRegion {
|
|
|
117
128
|
kindOf(which) {
|
|
118
129
|
return this.kinds[which];
|
|
119
130
|
}
|
|
120
|
-
/** Append a PAGE / NUMPAGES field to the story paragraph addressed by `anchorId`.
|
|
131
|
+
/** Append a PAGE / NUMPAGES field to the story paragraph addressed by `anchorId`.
|
|
132
|
+
* Deliberately a PLAIN field (no `\*` switch), exactly as Word inserts one, so it follows the
|
|
133
|
+
* section's page-number format — see {@link setPageNumbering}. Stamping the section's current
|
|
134
|
+
* format as a switch here would silently WIN over any later format change. */
|
|
121
135
|
insertPageNumber(which, anchorId, field) {
|
|
122
|
-
const res = parseResult(this.bridge.InsertPageNumberField(this.handle, anchorId, field));
|
|
136
|
+
const res = parseResult(this.bridge.InsertPageNumberField(this.handle, anchorId, field, ""));
|
|
123
137
|
if (!res.success)
|
|
124
138
|
return false;
|
|
125
139
|
this.refresh(which);
|
|
126
140
|
return true;
|
|
127
141
|
}
|
|
142
|
+
/**
|
|
143
|
+
* Set this section's page numbering (`w:pgNumType`) — Word's *Format Page Numbers…*. Omitted
|
|
144
|
+
* fields are left alone, so the format and the start are independently settable. Both bands then
|
|
145
|
+
* repaint, because the values belong to the section rather than to either story.
|
|
146
|
+
*
|
|
147
|
+
* The rendered page numbers in the editor do not change: a page-number field's cached result is
|
|
148
|
+
* what the browser shows, and Word recomputes it on open. Paginated mode substitutes the real
|
|
149
|
+
* per-page number, so it does reflect the format immediately.
|
|
150
|
+
*/
|
|
151
|
+
setPageNumbering(op) {
|
|
152
|
+
if (!this.bodyAnchorId)
|
|
153
|
+
return false;
|
|
154
|
+
const res = parseResult(this.bridge.SetPageNumbering(this.handle, this.bodyAnchorId, JSON.stringify(op)));
|
|
155
|
+
if (!res.success)
|
|
156
|
+
return false;
|
|
157
|
+
this.reloadSection();
|
|
158
|
+
return true;
|
|
159
|
+
}
|
|
160
|
+
/** This section's page numbering as the live document states it. Fields are absent, not
|
|
161
|
+
* defaulted — "continues the previous section" is not the same claim as "starts at 1". */
|
|
162
|
+
pageNumbering() {
|
|
163
|
+
return {
|
|
164
|
+
start: this.sectionInfo?.pageNumberStart,
|
|
165
|
+
format: this.sectionInfo?.pageNumberFormat,
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
/** Remove this section's page-numbering start/format — it reverts to continuing the previous
|
|
169
|
+
* section's numbering in Word's default `1, 2, 3`. */
|
|
170
|
+
clearPageNumbering() {
|
|
171
|
+
if (!this.bodyAnchorId)
|
|
172
|
+
return false;
|
|
173
|
+
const res = parseResult(this.bridge.ClearPageNumbering(this.handle, this.bodyAnchorId));
|
|
174
|
+
if (!res.success)
|
|
175
|
+
return false;
|
|
176
|
+
this.reloadSection();
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Re-read the section from the live document and repaint BOTH bands.
|
|
181
|
+
*
|
|
182
|
+
* `refreshAll` only repaints — it deliberately does not re-read, because its callers (remount,
|
|
183
|
+
* undo/redo) already refreshed the section. A section-property write has no such caller, and
|
|
184
|
+
* repainting from the stale snapshot would leave the chrome reporting the value the document had
|
|
185
|
+
* before the edit.
|
|
186
|
+
*/
|
|
187
|
+
reloadSection() {
|
|
188
|
+
this.sectionInfo = this.bodyAnchorId ? this.readSectionInfo(this.bodyAnchorId) : null;
|
|
189
|
+
this.refreshAll();
|
|
190
|
+
}
|
|
128
191
|
/** Insert a page number into a band's own target paragraph (focused, else last). Seeds the
|
|
129
192
|
* story first if the band's selected kind has none, so the command is never a silent no-op. */
|
|
130
193
|
insertPageNumberInBand(which, field) {
|
|
@@ -258,6 +321,49 @@ export class HeaderFooterRegion {
|
|
|
258
321
|
this.insertPageNumber(which, target, field);
|
|
259
322
|
});
|
|
260
323
|
chrome.appendChild(pageNum);
|
|
324
|
+
// Word's "Format Page Numbers…": these are SECTION properties (w:pgNumType), not properties of
|
|
325
|
+
// this band's story, so both bands show the same values and either can set them. An inserted
|
|
326
|
+
// page-number field is plain, so it renders through whatever is chosen here.
|
|
327
|
+
const pageFmt = document.createElement("select");
|
|
328
|
+
pageFmt.setAttribute("data-hf-pagefmt", "");
|
|
329
|
+
pageFmt.title = "Page-number format for this section";
|
|
330
|
+
for (const o of PAGE_FORMAT_LABELS) {
|
|
331
|
+
const opt = document.createElement("option");
|
|
332
|
+
opt.value = o.value;
|
|
333
|
+
opt.textContent = o.label;
|
|
334
|
+
pageFmt.appendChild(opt);
|
|
335
|
+
}
|
|
336
|
+
pageFmt.addEventListener("change", () => {
|
|
337
|
+
if (pageFmt.value === "")
|
|
338
|
+
return;
|
|
339
|
+
this.setPageNumbering({ format: pageFmt.value });
|
|
340
|
+
});
|
|
341
|
+
chrome.appendChild(pageFmt);
|
|
342
|
+
const pageStart = document.createElement("input");
|
|
343
|
+
pageStart.setAttribute("data-hf-pagestart", "");
|
|
344
|
+
pageStart.type = "number";
|
|
345
|
+
pageStart.min = "0";
|
|
346
|
+
pageStart.placeholder = "Start at";
|
|
347
|
+
pageStart.title = "Restart this section's page numbering at this number";
|
|
348
|
+
// Commit on blur/Enter, not on every keystroke: typing "12" would otherwise apply a start of 1
|
|
349
|
+
// first, and each apply is an undo step.
|
|
350
|
+
const commitStart = () => {
|
|
351
|
+
const raw = pageStart.value.trim();
|
|
352
|
+
if (raw === "")
|
|
353
|
+
return;
|
|
354
|
+
const start = Number(raw);
|
|
355
|
+
if (!Number.isInteger(start) || start < 0)
|
|
356
|
+
return;
|
|
357
|
+
this.setPageNumbering({ start });
|
|
358
|
+
};
|
|
359
|
+
pageStart.addEventListener("blur", commitStart);
|
|
360
|
+
pageStart.addEventListener("keydown", (e) => {
|
|
361
|
+
if (e.key === "Enter") {
|
|
362
|
+
e.preventDefault();
|
|
363
|
+
commitStart();
|
|
364
|
+
}
|
|
365
|
+
});
|
|
366
|
+
chrome.appendChild(pageStart);
|
|
261
367
|
const inheritedNote = document.createElement("span");
|
|
262
368
|
inheritedNote.className = "docx-hf-inherited";
|
|
263
369
|
inheritedNote.setAttribute("data-hf-inherited-note", "");
|
|
@@ -298,6 +404,16 @@ export class HeaderFooterRegion {
|
|
|
298
404
|
const select = band.querySelector("[data-hf-kind]");
|
|
299
405
|
if (select && select.value !== kind)
|
|
300
406
|
select.value = kind;
|
|
407
|
+
// Section-level page numbering — the same values on both bands, seeded from the live sectPr so
|
|
408
|
+
// the chrome reports what the document says rather than what was last clicked.
|
|
409
|
+
const pageFmt = band.querySelector("[data-hf-pagefmt]");
|
|
410
|
+
if (pageFmt)
|
|
411
|
+
pageFmt.value = this.sectionInfo?.pageNumberFormat ?? "";
|
|
412
|
+
const pageStart = band.querySelector("[data-hf-pagestart]");
|
|
413
|
+
if (pageStart && document.activeElement !== pageStart) {
|
|
414
|
+
const start = this.sectionInfo?.pageNumberStart;
|
|
415
|
+
pageStart.value = start === undefined ? "" : String(start);
|
|
416
|
+
}
|
|
301
417
|
// A section that declares no reference of this kind shows the story it inherits from an
|
|
302
418
|
// earlier section. Say so: editing it changes BOTH sections, because they share one part.
|
|
303
419
|
const inherited = this.refFor(which, kind)?.inherited === true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-headerfooter.js","sourceRoot":"","sources":["../src/editor-headerfooter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAwDH,MAAM,WAAW,GAAsD;IACrE,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;IACtC,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE;IACvC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE;CACvC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,YAAY,GAChB,mFAAmF;IACnF,0FAA0F;IAC1F,uBAAuB,CAAC;AAE1B;;;;GAIG;AACH,MAAM,aAAa,GACjB,yFAAyF;IACzF,mEAAmE,CAAC;AAEtE,8EAA8E;AAC9E,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;AAEpD,MAAM,OAAO,kBAAkB;IAoB7B,YACE,MAA0B,EAC1B,MAAc,EACd,OAAkC,EAClC,SAAsC;QAfxC,2FAA2F;QACnF,iBAAY,GAAkB,IAAI,CAAC;QACnC,gBAAW,GAA2B,IAAI,CAAC;QACnD,0FAA0F;QACzE,oBAAe,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE5C,UAAK,GAAwC;YAC5D,MAAM,EAAE,SAAS;YACjB,MAAM,EAAE,SAAS;SAClB,CAAC;QAQA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED,wEAAwE;IAExE;;;;;OAKG;IACH,UAAU,CAAC,YAA2B;QACpC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACtD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,CAAC,WAAW,EAAE,WAAW,EAAE,CAAC;YACrE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC,CAAC,4CAA4C;YAC9E,OAAO;QACT,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,iEAAiE;QACpF,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC,WAAW,EAAE,WAAW,CAAC;QACnE,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,OAAO;YAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IACjC,CAAC;IAED,8CAA8C;IAC9C,OAAO,CAAC,KAAgB;QACtB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtF,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IAED,gGAAgG;IAChG,UAAU;QACR,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1B,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,uFAAuF;IACvF,OAAO,CAAC,KAAgB,EAAE,IAAsB;QAC9C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACzB,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,aAAa,CAAoB,gBAAgB,CAAC,CAAC;QACtF,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI;YAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QAEzD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC/D,8FAA8F;QAC9F,8FAA8F;QAC9F,+FAA+F;QAC/F,4FAA4F;QAC5F,kEAAkE;QAClE,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC5C,IAAI,CAAC,MAAM,CAAC,yBAAyB,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC9E,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,4CAA4C;IAC5C,MAAM,CAAC,KAAgB;QACrB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,qFAAqF;IACrF,gBAAgB,CAAC,KAAgB,EAAE,QAAgB,EAAE,KAAmC;QACtF,MAAM,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QACzF,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAO,KAAK,CAAC;QAC/B,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;oGACgG;IAChG,sBAAsB,CAAC,KAAgB,EAAE,KAAmC;QAC1E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YACzC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACtE,CAAC;IAED,mDAAmD;IACnD,MAAM,CAAC,IAAiB;QACtB,MAAM,EAAE,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAE,IAAoB,CAAC,CAAC,CAAC,IAAI,EAAE,aAAa,IAAI,IAAI,CAAC;QAC7F,MAAM,IAAI,GAAG,EAAE,EAAE,OAAO,CAAc,gBAAgB,CAAC,IAAI,IAAI,CAAC;QAChE,OAAO,IAAI,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5E,CAAC;IAED,6EAA6E;IAC7E,WAAW,CAAC,IAAiB;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAc,gBAAgB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACzE,CAAC;IAED,qEAAqE;IACrE,QAAQ,CAAC,IAAiB;QACxB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC;IACpC,CAAC;IAED,0EAA0E;IAC1E,OAAO,CAAC,IAAiB;QACvB,OAAO,IAAI,KAAK,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IACxD,CAAC;IAED,wEAAwE;IAEhE,eAAe,CAAC,YAAoB;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YAClE,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA2B,CAAC;YACzD,OAAO,MAAM,IAAI,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;QAC1E,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAEO,OAAO,CAAC,KAAgB;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAC9B,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,OAAO,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;IAED,iGAAiG;IACzF,MAAM,CAAC,KAAgB,EAAE,IAAsB;QACrD,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;IAClE,CAAC;IAED,4FAA4F;IACpF,UAAU,CAAC,KAAgB,EAAE,IAAsB;QACzD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;IACnD,CAAC;IAED,oFAAoF;IAC5E,YAAY,CAAC,OAAe;QAClC,IAAI,KAAsC,CAAC;QAC3C,IAAI,CAAC;YACH,KAAK,GAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAElD,CAAC,WAAW,CAAC;QACjB,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;aACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACzE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACK,SAAS,CAAC,KAAgB,EAAE,IAAsB;QACxD,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAO;QAC/B,MAAM,GAAG,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;QACvF,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,OAAO;QACzB,wFAAwF;QACxF,IAAI,CAAC,SAAS,CAAC,gBAAgB,EAAE,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC7D,CAAC;IAED,wEAAwE;IAEhE,OAAO,CAAC,KAAgB;QAC9B,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IAChE,CAAC;IAEO,SAAS,CAAC,KAAgB;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAEzC,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC7C,MAAM,CAAC,SAAS,GAAG,gBAAgB,CAAC;QAEpC,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QAC7C,KAAK,CAAC,SAAS,GAAG,eAAe,CAAC;QAClC,KAAK,CAAC,WAAW,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7D,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE1B,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACpD,UAAU,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QAC5C,UAAU,CAAC,KAAK,GAAG,mCAAmC,CAAC;QACvD,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7C,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YACpB,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC;YAC1B,UAAU,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9B,CAAC;QACD,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE,CACzC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,KAAyB,CAAC,CAC1D,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAE/B,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QACjD,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,KAAK,GAAG,6DAA6D,CAAC;QAC9E,KAAK,MAAM,CAAC,IAAI;YACd,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE;YAC/B,EAAE,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,EAAE;YAC9C,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,aAAa,EAAE;SAC9C,EAAE,CAAC;YACF,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC7C,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YACpB,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC;YAC1B,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QACD,0FAA0F;QAC1F,uFAAuF;QACvF,OAAO,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;YAC5B,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;YACnB,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,KAAK,YAAY;gBAAE,OAAO;YAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAC5C,IAAI,MAAM;gBAAE,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE5B,MAAM,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACrD,aAAa,CAAC,SAAS,GAAG,mBAAmB,CAAC;QAC9C,aAAa,CAAC,YAAY,CAAC,wBAAwB,EAAE,EAAE,CAAC,CAAC;QACzD,aAAa,CAAC,MAAM,GAAG,IAAI,CAAC;QAC5B,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAElC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEzB,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,GAAG,iBAAiB,CAAC;QACtC,OAAO,CAAC,YAAY,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAE1B,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,cAAc,CAAC;QAChC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAEvB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACK,gBAAgB,CAAC,KAAgB;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,aAAa,CAAc,gBAAgB,CAAC,CAAC;QAC9E,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAc,0CAA0C,CAAC,CAAC;QAC5F,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAc,kBAAkB,CAAC,CAAC,CAAC;QAClF,MAAM,MAAM,GAAG,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACpD,OAAO,MAAM,EAAE,YAAY,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC;IACxD,CAAC;IAEO,UAAU,CAAC,KAAgB;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAc,gBAAgB,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI;YAAE,OAAO;QAElB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAoB,gBAAgB,CAAC,CAAC;QACvE,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI;YAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC;QAEzD,wFAAwF;QACxF,0FAA0F;QAC1F,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;QAC/D,IAAI,CAAC,eAAe,CAAC,mBAAmB,EAAE,SAAS,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAc,0BAA0B,CAAC,CAAC;QACzE,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,MAAM,GAAG,CAAC,SAAS,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,CAAC;QAED,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE9B,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;YAC3C,OAAO;QACT,CAAC;QACD,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;QAEtC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;QAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAChD,OAAO;QACT,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,EAAE;gBAAE,SAAS;YAClB,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YACrB,yFAAyF;YACzF,sFAAsF;YACtF,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC9B,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,EAAe,EAAE,QAAgB;QAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,IAAI;YAAE,OAAO;QAClB,EAAE,CAAC,YAAY,CAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC5C,IAAI,EAAE,CAAC,OAAO,CAAC,SAAS,KAAK,MAAM;YAAE,OAAO;QAC5C,EAAE,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,CAAC;QAC9B,EAAE,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAChC,IAAI;iBACD,gBAAgB,CAAC,mBAAmB,CAAC;iBACrC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC5D,EAAE,CAAC,YAAY,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,gBAAgB,CAAC,QAAgB;QACvC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CACtC,IAAI,CAAC,MAAM,EACX,QAAQ,EACR,IAAI,CAAC,OAAO,CAAC,SAAS,EACtB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAC9B,CAAC;QACF,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,kBAAkB;YAAE,OAAO,IAAI,CAAC;QAChE,OAAO,IAAI,SAAS,EAAE,CAAC,eAAe,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC,IAAI;aAC3D,iBAAuC,CAAC;IAC7C,CAAC;IAEO,WAAW,CAAC,KAAgB,EAAE,IAAsB;QAC1D,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QACzC,EAAE,CAAC,SAAS,GAAG,qBAAqB,CAAC;QACrC,EAAE,CAAC,YAAY,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC;QACvE,EAAE,CAAC,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,+BAA+B,CAAC;QACnF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;;;;;OAOG;IACK,iBAAiB,CAAC,KAAgB;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,OAAO,GAAG,IAAI,CAAC,aAAa,CAAc,mBAAmB,CAAC,CAAC;QACrE,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;YACzB,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAc,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;QAClE,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;QACvB,OAAO,CAAC,WAAW,GAAG,GAAG,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,GAAG,CAAC;QAC3E,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC;YAAE,OAAO,CAAC,wCAAwC;QAElF,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC7C,GAAG,CAAC,IAAI,GAAG,QAAQ,CAAC;QACpB,GAAG,CAAC,YAAY,CAAC,yBAAyB,EAAE,EAAE,CAAC,CAAC;QAChD,GAAG,CAAC,WAAW,GAAG,iBAAiB,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC;QAC/F,GAAG,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACjC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1B,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;QACH,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;CACF;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAyB,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"editor-headerfooter.js","sourceRoot":"","sources":["../src/editor-headerfooter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit-sequence diff for the editor's incremental structural repaint.
|
|
3
|
+
*
|
|
4
|
+
* After a structural op (insert table/row, footnote, delete block, undo/redo)
|
|
5
|
+
* the editor fetches the session's {@link RenderPlan} (`ListBlocks`) and diffs
|
|
6
|
+
* each container's unit sequence against the DOM's, so unchanged blocks keep
|
|
7
|
+
* their DOM nodes and only changed/created units re-render — replacing the
|
|
8
|
+
* whole-document remount that cost seconds on large documents.
|
|
9
|
+
*
|
|
10
|
+
* Pure functions only: DOM walking, rendering, and fallback policy live in
|
|
11
|
+
* `editor.ts` (`DocxEditor.reconcile`).
|
|
12
|
+
*/
|
|
13
|
+
/** One top-level render unit: a body block (`p`/`h`/`li`), one whole table
|
|
14
|
+
* (`tbl`), or one footnote/endnote definition (`fn`/`en`). Mirrors the wire
|
|
15
|
+
* shape of `DocxSessionBridge.ListBlocks`. `sig` (container units only) is a
|
|
16
|
+
* content signature: a table or note keeps its unid when content INSIDE it
|
|
17
|
+
* changes, so the diff tokens must include it or a changed container would be
|
|
18
|
+
* kept stale. */
|
|
19
|
+
export interface RenderUnit {
|
|
20
|
+
id: string;
|
|
21
|
+
kind: string;
|
|
22
|
+
sig?: string;
|
|
23
|
+
}
|
|
24
|
+
/** The diff token for a unit: unid plus the container content signature. The DOM
|
|
25
|
+
* side composes the same token from a node's `data-anchor` + `data-render-sig`
|
|
26
|
+
* stamp, so a container whose inside changed diffs as an in-place substitution. */
|
|
27
|
+
export declare function tokenOf(unit: RenderUnit): string;
|
|
28
|
+
/** Per-container render plan — the wire shape of `DocxSessionBridge.ListBlocks`. */
|
|
29
|
+
export interface RenderPlan {
|
|
30
|
+
body: RenderUnit[];
|
|
31
|
+
footnotes: RenderUnit[];
|
|
32
|
+
endnotes: RenderUnit[];
|
|
33
|
+
}
|
|
34
|
+
export interface UnitDiff {
|
|
35
|
+
/** newIndex → oldIndex for units that keep their existing DOM node. */
|
|
36
|
+
keep: Map<number, number>;
|
|
37
|
+
/** Indices into the OLD DOM sequence whose nodes must be removed. */
|
|
38
|
+
removed: number[];
|
|
39
|
+
/** Indices into the NEW plan that need a fresh render. */
|
|
40
|
+
added: number[];
|
|
41
|
+
/**
|
|
42
|
+
* added/removed pairs that are an IN-PLACE change (same number of kept units
|
|
43
|
+
* on each side) — e.g. a text edit re-hashing a block's content-addressed
|
|
44
|
+
* unid. A substituted list item keeps its list position, so it renumbers no
|
|
45
|
+
* siblings and may reconcile where a pure li insert/remove may not.
|
|
46
|
+
*/
|
|
47
|
+
substituted: Array<{
|
|
48
|
+
oldIndex: number;
|
|
49
|
+
newIndex: number;
|
|
50
|
+
}>;
|
|
51
|
+
}
|
|
52
|
+
/** unid ("a1b2…") from a full anchor id ("p:body:a1b2…"). */
|
|
53
|
+
export declare function unidOf(id: string): string;
|
|
54
|
+
/**
|
|
55
|
+
* LCS diff of the DOM's unit-token sequence against the new plan's. Old entries
|
|
56
|
+
* are tokens (see {@link tokenOf} — bare unids for leaf blocks, `unid|sig` for
|
|
57
|
+
* containers). Equal tokens are interchangeable (content-addressed: equal token
|
|
58
|
+
* ⇒ equal content ⇒ equal rendering, up to position-dependent chrome the caller
|
|
59
|
+
* handles). O(n·m) — sequences are document block counts, a few hundred.
|
|
60
|
+
*/
|
|
61
|
+
export declare function diffUnits(oldUnids: string[], newUnits: RenderUnit[]): UnitDiff;
|
|
62
|
+
/**
|
|
63
|
+
* Whether this diff must fall back to a full remount:
|
|
64
|
+
* - a PURE li insert or removal (not an in-place substitution) — sibling list
|
|
65
|
+
* items renumber without their own XML changing, which a unit diff cannot see;
|
|
66
|
+
* - total churn above `threshold` (a remount is cheaper and simpler than
|
|
67
|
+
* rendering half the document block-by-block).
|
|
68
|
+
*
|
|
69
|
+
* `oldKinds[i]` is the kind of the old sequence's i-th unit (the DOM knows it).
|
|
70
|
+
* An li substitution deliberately does NOT force a remount — its list position
|
|
71
|
+
* is unchanged; the CALLER must still verify its list facts (numId/ilvl)
|
|
72
|
+
* survived, and remount when they changed.
|
|
73
|
+
*/
|
|
74
|
+
export declare function needsRemount(diff: UnitDiff, newUnits: RenderUnit[], oldKinds: string[], threshold?: number): boolean;
|
|
75
|
+
//# sourceMappingURL=editor-reconcile.d.ts.map
|
|
@@ -0,0 +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,CA8D9E;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"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit-sequence diff for the editor's incremental structural repaint.
|
|
3
|
+
*
|
|
4
|
+
* After a structural op (insert table/row, footnote, delete block, undo/redo)
|
|
5
|
+
* the editor fetches the session's {@link RenderPlan} (`ListBlocks`) and diffs
|
|
6
|
+
* each container's unit sequence against the DOM's, so unchanged blocks keep
|
|
7
|
+
* their DOM nodes and only changed/created units re-render — replacing the
|
|
8
|
+
* whole-document remount that cost seconds on large documents.
|
|
9
|
+
*
|
|
10
|
+
* Pure functions only: DOM walking, rendering, and fallback policy live in
|
|
11
|
+
* `editor.ts` (`DocxEditor.reconcile`).
|
|
12
|
+
*/
|
|
13
|
+
/** The diff token for a unit: unid plus the container content signature. The DOM
|
|
14
|
+
* side composes the same token from a node's `data-anchor` + `data-render-sig`
|
|
15
|
+
* stamp, so a container whose inside changed diffs as an in-place substitution. */
|
|
16
|
+
export function tokenOf(unit) {
|
|
17
|
+
return unidOf(unit.id) + (unit.sig ? "|" + unit.sig : "");
|
|
18
|
+
}
|
|
19
|
+
/** unid ("a1b2…") from a full anchor id ("p:body:a1b2…"). */
|
|
20
|
+
export function unidOf(id) {
|
|
21
|
+
return id.substring(id.lastIndexOf(":") + 1);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* LCS diff of the DOM's unit-token sequence against the new plan's. Old entries
|
|
25
|
+
* are tokens (see {@link tokenOf} — bare unids for leaf blocks, `unid|sig` for
|
|
26
|
+
* containers). Equal tokens are interchangeable (content-addressed: equal token
|
|
27
|
+
* ⇒ equal content ⇒ equal rendering, up to position-dependent chrome the caller
|
|
28
|
+
* handles). O(n·m) — sequences are document block counts, a few hundred.
|
|
29
|
+
*/
|
|
30
|
+
export function diffUnits(oldUnids, newUnits) {
|
|
31
|
+
const n = oldUnids.length;
|
|
32
|
+
const m = newUnits.length;
|
|
33
|
+
const newUnids = newUnits.map(tokenOf);
|
|
34
|
+
// lcs[i][j] = LCS length of oldUnids[i..] vs newUnids[j..]
|
|
35
|
+
const lcs = Array.from({ length: n + 1 }, () => new Int32Array(m + 1));
|
|
36
|
+
for (let i = n - 1; i >= 0; i--) {
|
|
37
|
+
for (let j = m - 1; j >= 0; j--) {
|
|
38
|
+
lcs[i][j] =
|
|
39
|
+
oldUnids[i] === newUnids[j]
|
|
40
|
+
? lcs[i + 1][j + 1] + 1
|
|
41
|
+
: Math.max(lcs[i + 1][j], lcs[i][j + 1]);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const keep = new Map();
|
|
45
|
+
const removed = [];
|
|
46
|
+
const added = [];
|
|
47
|
+
let i = 0;
|
|
48
|
+
let j = 0;
|
|
49
|
+
while (i < n && j < m) {
|
|
50
|
+
if (oldUnids[i] === newUnids[j]) {
|
|
51
|
+
keep.set(j, i);
|
|
52
|
+
i++;
|
|
53
|
+
j++;
|
|
54
|
+
}
|
|
55
|
+
else if (lcs[i + 1][j] >= lcs[i][j + 1]) {
|
|
56
|
+
removed.push(i++);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
added.push(j++);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
while (i < n)
|
|
63
|
+
removed.push(i++);
|
|
64
|
+
while (j < m)
|
|
65
|
+
added.push(j++);
|
|
66
|
+
// Substitutions: an added index and a removed index with the same number of
|
|
67
|
+
// kept units before them — an in-place change of one unit.
|
|
68
|
+
const keptBeforeOld = (oi) => {
|
|
69
|
+
let c = 0;
|
|
70
|
+
for (const v of keep.values())
|
|
71
|
+
if (v < oi)
|
|
72
|
+
c++;
|
|
73
|
+
return c;
|
|
74
|
+
};
|
|
75
|
+
const keptBeforeNew = (nj) => {
|
|
76
|
+
let c = 0;
|
|
77
|
+
for (const k of keep.keys())
|
|
78
|
+
if (k < nj)
|
|
79
|
+
c++;
|
|
80
|
+
return c;
|
|
81
|
+
};
|
|
82
|
+
const substituted = [];
|
|
83
|
+
const usedRemoved = new Set();
|
|
84
|
+
for (const nj of added) {
|
|
85
|
+
const target = keptBeforeNew(nj);
|
|
86
|
+
for (const oi of removed) {
|
|
87
|
+
if (usedRemoved.has(oi))
|
|
88
|
+
continue;
|
|
89
|
+
if (keptBeforeOld(oi) === target) {
|
|
90
|
+
substituted.push({ oldIndex: oi, newIndex: nj });
|
|
91
|
+
usedRemoved.add(oi);
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return { keep, removed, added, substituted };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Whether this diff must fall back to a full remount:
|
|
100
|
+
* - a PURE li insert or removal (not an in-place substitution) — sibling list
|
|
101
|
+
* items renumber without their own XML changing, which a unit diff cannot see;
|
|
102
|
+
* - total churn above `threshold` (a remount is cheaper and simpler than
|
|
103
|
+
* rendering half the document block-by-block).
|
|
104
|
+
*
|
|
105
|
+
* `oldKinds[i]` is the kind of the old sequence's i-th unit (the DOM knows it).
|
|
106
|
+
* An li substitution deliberately does NOT force a remount — its list position
|
|
107
|
+
* is unchanged; the CALLER must still verify its list facts (numId/ilvl)
|
|
108
|
+
* survived, and remount when they changed.
|
|
109
|
+
*/
|
|
110
|
+
export function needsRemount(diff, newUnits, oldKinds, threshold = 40) {
|
|
111
|
+
if (diff.added.length + diff.removed.length > threshold)
|
|
112
|
+
return true;
|
|
113
|
+
const subNew = new Set(diff.substituted.map((s) => s.newIndex));
|
|
114
|
+
const subOld = new Set(diff.substituted.map((s) => s.oldIndex));
|
|
115
|
+
for (const j of diff.added) {
|
|
116
|
+
if (!subNew.has(j) && newUnits[j]?.kind === "li")
|
|
117
|
+
return true;
|
|
118
|
+
}
|
|
119
|
+
for (const i of diff.removed) {
|
|
120
|
+
if (!subOld.has(i) && oldKinds[i] === "li")
|
|
121
|
+
return true;
|
|
122
|
+
}
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=editor-reconcile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"editor-reconcile.js","sourceRoot":"","sources":["../src/editor-reconcile.ts"],"names":[],"mappings":"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"}
|