docxodus 12.3.0 → 12.4.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 +31 -6
- package/dist/core.d.ts +924 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +2094 -0
- package/dist/core.js.map +1 -0
- package/dist/editor.bundle.js +1206 -27
- package/dist/editor.d.ts +10 -1
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +48 -16
- package/dist/editor.js.map +1 -1
- package/dist/embed.bundle.js +12371 -11779
- package/dist/embed.d.ts +5 -2
- package/dist/embed.d.ts.map +1 -1
- package/dist/embed.iife.js +12282 -11690
- package/dist/embed.js +10 -3
- package/dist/embed.js.map +1 -1
- package/dist/export-assets.json +39 -39
- package/dist/history-checkpoints.d.ts +2 -0
- package/dist/history-checkpoints.d.ts.map +1 -1
- package/dist/history-checkpoints.js +2 -0
- package/dist/history-checkpoints.js.map +1 -1
- package/dist/history-controls.d.ts +6 -3
- package/dist/history-controls.d.ts.map +1 -1
- package/dist/history-controls.js +71 -29
- package/dist/history-controls.js.map +1 -1
- package/dist/index.d.ts +3 -923
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2093
- package/dist/index.js.map +1 -1
- package/dist/ribbon-chrome.d.ts +1 -1
- package/dist/ribbon-chrome.d.ts.map +1 -1
- package/dist/ribbon-chrome.js +6 -3
- package/dist/ribbon-chrome.js.map +1 -1
- package/dist/ribbon-history.d.ts +85 -0
- package/dist/ribbon-history.d.ts.map +1 -0
- package/dist/ribbon-history.js +508 -0
- package/dist/ribbon-history.js.map +1 -0
- package/dist/ribbon.d.ts +6 -0
- package/dist/ribbon.d.ts.map +1 -1
- package/dist/ribbon.js +47 -18
- package/dist/ribbon.js.map +1 -1
- package/dist/viewport.d.ts +3 -1
- package/dist/viewport.d.ts.map +1 -1
- package/dist/viewport.js +14 -0
- package/dist/viewport.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.Collections.Concurrent.wasm +0 -0
- package/dist/wasm/_framework/System.Collections.Concurrent.wasm.br +0 -0
- package/dist/wasm/_framework/System.Collections.Immutable.wasm +0 -0
- package/dist/wasm/_framework/System.Collections.Immutable.wasm.br +0 -0
- package/dist/wasm/_framework/System.Collections.NonGeneric.wasm +0 -0
- package/dist/wasm/_framework/System.Collections.NonGeneric.wasm.br +0 -0
- package/dist/wasm/_framework/System.Collections.Specialized.wasm +0 -0
- package/dist/wasm/_framework/System.Collections.Specialized.wasm.br +0 -0
- package/dist/wasm/_framework/System.Collections.wasm +0 -0
- package/dist/wasm/_framework/System.Collections.wasm.br +0 -0
- package/dist/wasm/_framework/System.ComponentModel.Primitives.wasm +0 -0
- package/dist/wasm/_framework/System.ComponentModel.Primitives.wasm.br +0 -0
- package/dist/wasm/_framework/System.ComponentModel.TypeConverter.wasm +0 -0
- package/dist/wasm/_framework/System.ComponentModel.TypeConverter.wasm.br +0 -0
- package/dist/wasm/_framework/System.ComponentModel.wasm +0 -0
- package/dist/wasm/_framework/System.ComponentModel.wasm.br +0 -0
- package/dist/wasm/_framework/System.Console.wasm +0 -0
- package/dist/wasm/_framework/System.Console.wasm.br +0 -0
- package/dist/wasm/_framework/System.IO.Compression.wasm +0 -0
- package/dist/wasm/_framework/System.IO.Compression.wasm.br +0 -0
- package/dist/wasm/_framework/System.IO.Pipelines.wasm +0 -0
- package/dist/wasm/_framework/System.IO.Pipelines.wasm.br +0 -0
- package/dist/wasm/_framework/System.Linq.Expressions.wasm +0 -0
- package/dist/wasm/_framework/System.Linq.Expressions.wasm.br +0 -0
- package/dist/wasm/_framework/System.Linq.wasm +0 -0
- package/dist/wasm/_framework/System.Linq.wasm.br +0 -0
- package/dist/wasm/_framework/System.Memory.wasm +0 -0
- package/dist/wasm/_framework/System.Memory.wasm.br +0 -0
- package/dist/wasm/_framework/System.Net.Http.wasm +0 -0
- package/dist/wasm/_framework/System.Net.Http.wasm.br +0 -0
- package/dist/wasm/_framework/System.Net.Primitives.wasm +0 -0
- package/dist/wasm/_framework/System.Net.Primitives.wasm.br +0 -0
- package/dist/wasm/_framework/System.ObjectModel.wasm +0 -0
- package/dist/wasm/_framework/System.ObjectModel.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/System.Private.Uri.wasm +0 -0
- package/dist/wasm/_framework/System.Private.Uri.wasm.br +0 -0
- package/dist/wasm/_framework/System.Private.Xml.Linq.wasm +0 -0
- package/dist/wasm/_framework/System.Private.Xml.Linq.wasm.br +0 -0
- package/dist/wasm/_framework/System.Private.Xml.wasm +0 -0
- package/dist/wasm/_framework/System.Private.Xml.wasm.br +0 -0
- package/dist/wasm/_framework/System.Runtime.InteropServices.JavaScript.wasm +0 -0
- package/dist/wasm/_framework/System.Runtime.InteropServices.JavaScript.wasm.br +0 -0
- package/dist/wasm/_framework/System.Runtime.wasm +0 -0
- package/dist/wasm/_framework/System.Runtime.wasm.br +0 -0
- package/dist/wasm/_framework/System.Security.Cryptography.wasm +0 -0
- package/dist/wasm/_framework/System.Security.Cryptography.wasm.br +0 -0
- package/dist/wasm/_framework/System.Text.Encodings.Web.wasm +0 -0
- package/dist/wasm/_framework/System.Text.Encodings.Web.wasm.br +0 -0
- package/dist/wasm/_framework/System.Text.Json.wasm +0 -0
- package/dist/wasm/_framework/System.Text.Json.wasm.br +0 -0
- package/dist/wasm/_framework/System.Text.RegularExpressions.wasm +0 -0
- package/dist/wasm/_framework/System.Text.RegularExpressions.wasm.br +0 -0
- package/dist/wasm/_framework/System.Xml.Linq.wasm +0 -0
- package/dist/wasm/_framework/System.Xml.Linq.wasm.br +0 -0
- package/dist/wasm/_framework/System.Xml.XDocument.wasm +0 -0
- package/dist/wasm/_framework/System.Xml.XDocument.wasm.br +0 -0
- package/dist/wasm/_framework/System.wasm +0 -0
- package/dist/wasm/_framework/System.wasm.br +0 -0
- package/dist/wasm/_framework/dotnet.boot.js +34 -34
- package/dist/wasm/_framework/dotnet.boot.js.br +0 -0
- package/dist/wasm/_framework/dotnet.js +1 -1
- package/dist/wasm/_framework/dotnet.js.br +0 -0
- package/dist/wasm/_framework/dotnet.native.js +3 -3
- package/dist/wasm/_framework/dotnet.native.js.br +0 -0
- package/dist/wasm/_framework/dotnet.native.wasm +0 -0
- package/dist/wasm/_framework/dotnet.native.wasm.br +0 -0
- package/dist/wasm/_framework/dotnet.runtime.js +1 -1
- package/dist/wasm/_framework/dotnet.runtime.js.br +0 -0
- package/package.json +14 -8
|
@@ -0,0 +1,508 @@
|
|
|
1
|
+
import { HistoryCheckpoints } from './history-checkpoints.js';
|
|
2
|
+
import { mountHistoryControls, historyControlError } from './history-controls.js';
|
|
3
|
+
import { openIndexedDbHistoryStore } from './history-indexeddb.js';
|
|
4
|
+
import { DocxHistoryError, MAX_HISTORY_ARCHIVE_BYTES } from './history.js';
|
|
5
|
+
/** Shared ribbon lifecycle, browser persistence and separate previews. No autosave or network sync. */
|
|
6
|
+
export class RibbonHistory {
|
|
7
|
+
constructor(ribbon, options) {
|
|
8
|
+
this.ribbon = ribbon;
|
|
9
|
+
this.options = options;
|
|
10
|
+
this.events = new AbortController();
|
|
11
|
+
this.identity = { id: crypto.randomUUID(), name: 'Untitled.docx' };
|
|
12
|
+
this.destroyed = false;
|
|
13
|
+
this.installing = false;
|
|
14
|
+
this.dirty = false;
|
|
15
|
+
this.generation = 0;
|
|
16
|
+
this.captured = -1;
|
|
17
|
+
this.savedVersion = null;
|
|
18
|
+
this.observedVersion = null;
|
|
19
|
+
this.capturedVersion = null;
|
|
20
|
+
const doc = ribbon.element.ownerDocument;
|
|
21
|
+
this.prefix = `docxodus:versions:${options.storageName ?? 'docxodus-editor'}:document:`;
|
|
22
|
+
this.lastKey = `docxodus:versions:${options.storageName ?? 'docxodus-editor'}:workspace:${options.workspaceId ?? crypto.randomUUID()}`;
|
|
23
|
+
const style = doc.createElement('style');
|
|
24
|
+
style.textContent = HISTORY_DRAWER_CSS;
|
|
25
|
+
this.dialog = doc.createElement('dialog');
|
|
26
|
+
this.dialog.className = 'dxr-history-dialog';
|
|
27
|
+
this.dialog.setAttribute('aria-label', 'Version history');
|
|
28
|
+
const header = doc.createElement('div');
|
|
29
|
+
header.className = 'dxr-history-header';
|
|
30
|
+
this.dialog.append(header);
|
|
31
|
+
const close = this.button('Close version history', () => this.dialog.close(), header);
|
|
32
|
+
close.className = 'dxr-history-close';
|
|
33
|
+
close.textContent = 'Close ✕';
|
|
34
|
+
this.source = doc.createElement('p');
|
|
35
|
+
this.source.className = 'dxr-history-source';
|
|
36
|
+
this.status = doc.createElement('p');
|
|
37
|
+
this.status.setAttribute('role', 'status');
|
|
38
|
+
this.status.className = 'dxr-history-status';
|
|
39
|
+
const recentLabel = doc.createElement('label');
|
|
40
|
+
recentLabel.textContent = 'Saved documents on this device';
|
|
41
|
+
this.recent = doc.createElement('select');
|
|
42
|
+
this.recent.setAttribute('aria-label', recentLabel.textContent);
|
|
43
|
+
recentLabel.append(this.recent);
|
|
44
|
+
this.recent.addEventListener('change', () => this.command(async () => {
|
|
45
|
+
const selectedId = this.recent.value;
|
|
46
|
+
this.recent.value = this.identity.id;
|
|
47
|
+
const selected = this.readIdentity(localStorage.getItem(this.prefix + selectedId));
|
|
48
|
+
if (!selected || !this.confirmReplace())
|
|
49
|
+
return;
|
|
50
|
+
await this.loadSaved(selected);
|
|
51
|
+
await this.mountPanel();
|
|
52
|
+
this.updateRecent();
|
|
53
|
+
}), { signal: this.events.signal });
|
|
54
|
+
this.dialog.append(this.source, this.status, recentLabel);
|
|
55
|
+
this.resumeButton = this.button('Continue editing this document', () => this.command(() => this.importArchive()), this.dialog);
|
|
56
|
+
this.back = this.button('Back to my document', () => this.command(async () => {
|
|
57
|
+
await this.closeArchive();
|
|
58
|
+
await this.mountPanel();
|
|
59
|
+
}), this.dialog);
|
|
60
|
+
this.body = doc.createElement('div');
|
|
61
|
+
this.dialog.append(this.body);
|
|
62
|
+
this.previewDialog = doc.createElement('dialog');
|
|
63
|
+
this.previewDialog.className = 'dxr-version-preview';
|
|
64
|
+
this.previewDialog.setAttribute('aria-label', 'Version preview');
|
|
65
|
+
this.panelObserver = new MutationObserver(() => this.syncBusy());
|
|
66
|
+
ribbon.element.append(style, this.dialog, this.previewDialog);
|
|
67
|
+
for (const dialog of [this.dialog, this.previewDialog]) {
|
|
68
|
+
dialog.addEventListener('keydown', event => event.stopPropagation(), { signal: this.events.signal });
|
|
69
|
+
dialog.addEventListener('click', event => {
|
|
70
|
+
if (event.target === dialog) {
|
|
71
|
+
const rect = dialog.getBoundingClientRect();
|
|
72
|
+
if (event.clientX < rect.left || event.clientX > rect.right || event.clientY < rect.top || event.clientY > rect.bottom)
|
|
73
|
+
dialog.close();
|
|
74
|
+
}
|
|
75
|
+
}, { signal: this.events.signal });
|
|
76
|
+
}
|
|
77
|
+
this.dialog.addEventListener('close', () => ribbon.control('history')?.focus(), { signal: this.events.signal });
|
|
78
|
+
ribbon.control('history')?.addEventListener('click', () => { void this.show(); }, { signal: this.events.signal });
|
|
79
|
+
doc.defaultView?.addEventListener('beforeunload', event => {
|
|
80
|
+
if (this.hasUnsavedChanges || this.busy)
|
|
81
|
+
event.preventDefault();
|
|
82
|
+
}, { signal: this.events.signal });
|
|
83
|
+
doc.defaultView?.addEventListener('pagehide', event => {
|
|
84
|
+
if (!event.persisted)
|
|
85
|
+
void this.destroy();
|
|
86
|
+
}, { signal: this.events.signal });
|
|
87
|
+
}
|
|
88
|
+
get busy() { return !!this.active || this.panel?.element.getAttribute('aria-busy') === 'true'; }
|
|
89
|
+
get hasUnsavedChanges() {
|
|
90
|
+
return this.dirty || (this.ribbon.editor?.version ?? null) !== this.savedVersion;
|
|
91
|
+
}
|
|
92
|
+
/** Called by the ribbon before a programmatic replacement. */
|
|
93
|
+
beforeOpen() {
|
|
94
|
+
if (!this.installing && this.busy)
|
|
95
|
+
throw new DocxHistoryError('Busy', 'Finish the version action before opening another document.');
|
|
96
|
+
}
|
|
97
|
+
/** A new DOCX is a new document identity, even if its filename matches another document. */
|
|
98
|
+
documentOpened(name) {
|
|
99
|
+
if (this.installing)
|
|
100
|
+
return;
|
|
101
|
+
this.identity = { id: crypto.randomUUID(), name };
|
|
102
|
+
this.draft = undefined;
|
|
103
|
+
this.dirty = false;
|
|
104
|
+
this.generation++;
|
|
105
|
+
this.savedVersion = this.observedVersion = this.ribbon.editor?.version ?? null;
|
|
106
|
+
this.dialog.close();
|
|
107
|
+
this.previewDialog.close();
|
|
108
|
+
void this.closeArchive();
|
|
109
|
+
}
|
|
110
|
+
edited() {
|
|
111
|
+
const version = this.ribbon.editor?.version ?? null;
|
|
112
|
+
if (version !== null && version === this.observedVersion)
|
|
113
|
+
return;
|
|
114
|
+
this.observedVersion = version;
|
|
115
|
+
this.dirty = true;
|
|
116
|
+
this.generation++;
|
|
117
|
+
}
|
|
118
|
+
/** Restores a saved workspace only when requested by the host, before exposing the editor. */
|
|
119
|
+
async resume() {
|
|
120
|
+
if (!this.options.workspaceId)
|
|
121
|
+
return;
|
|
122
|
+
try {
|
|
123
|
+
const previous = this.readIdentity(localStorage.getItem(this.lastKey));
|
|
124
|
+
if (previous)
|
|
125
|
+
await this.run(() => this.loadSaved(previous));
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
// Storage denial/corruption must not prevent an ordinary document from opening.
|
|
129
|
+
this.ribbon.setStatus('Your document is open. Version history is unavailable on this device.');
|
|
130
|
+
this.status.textContent = this.explain(error);
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
async show() {
|
|
134
|
+
if (this.destroyed)
|
|
135
|
+
return;
|
|
136
|
+
if (!this.dialog.open)
|
|
137
|
+
this.dialog.showModal();
|
|
138
|
+
if (this.busy)
|
|
139
|
+
return;
|
|
140
|
+
await this.run(async () => { await this.mountPanel(); this.updateRecent(); }).catch(() => { });
|
|
141
|
+
}
|
|
142
|
+
async openFile(file) {
|
|
143
|
+
await this.run(async () => {
|
|
144
|
+
if (/\.docxhistory$/i.test(file.name)) {
|
|
145
|
+
if (file.size > MAX_HISTORY_ARCHIVE_BYTES)
|
|
146
|
+
throw new DocxHistoryError('ResourceLimit', 'History file is too large.');
|
|
147
|
+
const bytes = new Uint8Array(await file.arrayBuffer());
|
|
148
|
+
const reader = await this.options.openArchive(bytes);
|
|
149
|
+
try {
|
|
150
|
+
await reader.read();
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
reader.close();
|
|
154
|
+
throw error;
|
|
155
|
+
}
|
|
156
|
+
await this.closeArchive();
|
|
157
|
+
this.archive = { reader, bytes, name: file.name };
|
|
158
|
+
if (!this.dialog.open)
|
|
159
|
+
this.dialog.showModal();
|
|
160
|
+
await this.mountPanel();
|
|
161
|
+
this.updateRecent();
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
if (!/\.docx$/i.test(file.name))
|
|
165
|
+
throw new Error('Choose a Word document or a document with version history.');
|
|
166
|
+
if (!this.confirmReplace())
|
|
167
|
+
return;
|
|
168
|
+
const bytes = new Uint8Array(await file.arrayBuffer());
|
|
169
|
+
this.install(bytes, { id: crypto.randomUUID(), name: file.name });
|
|
170
|
+
this.draft = undefined;
|
|
171
|
+
this.dirty = true;
|
|
172
|
+
await this.closeArchive();
|
|
173
|
+
this.dialog.close();
|
|
174
|
+
}
|
|
175
|
+
}).catch(() => { });
|
|
176
|
+
}
|
|
177
|
+
async newDocument() {
|
|
178
|
+
await this.run(async () => {
|
|
179
|
+
if (!this.confirmReplace())
|
|
180
|
+
return;
|
|
181
|
+
this.installing = true;
|
|
182
|
+
try {
|
|
183
|
+
this.ribbon.openBlank('Untitled.docx');
|
|
184
|
+
}
|
|
185
|
+
finally {
|
|
186
|
+
this.installing = false;
|
|
187
|
+
}
|
|
188
|
+
this.identity = { id: crypto.randomUUID(), name: 'Untitled.docx' };
|
|
189
|
+
this.draft = undefined;
|
|
190
|
+
this.dirty = false;
|
|
191
|
+
this.generation++;
|
|
192
|
+
this.savedVersion = this.observedVersion = this.ribbon.editor?.version ?? null;
|
|
193
|
+
// Choosing New survives a reload instead of silently reopening the previous document.
|
|
194
|
+
try {
|
|
195
|
+
localStorage.removeItem(this.lastKey);
|
|
196
|
+
}
|
|
197
|
+
catch { /* editing does not require storage */ }
|
|
198
|
+
await this.closeArchive();
|
|
199
|
+
this.dialog.close();
|
|
200
|
+
}).catch(() => { });
|
|
201
|
+
}
|
|
202
|
+
async destroy() {
|
|
203
|
+
if (this.destroyed)
|
|
204
|
+
return;
|
|
205
|
+
this.destroyed = true;
|
|
206
|
+
this.events.abort();
|
|
207
|
+
this.dialog.remove();
|
|
208
|
+
this.previewDialog.remove();
|
|
209
|
+
this.panelObserver.disconnect();
|
|
210
|
+
await this.active?.catch(() => { });
|
|
211
|
+
await this.closeArchive();
|
|
212
|
+
this.preview?.destroy();
|
|
213
|
+
this.client?.close();
|
|
214
|
+
this.store?.close();
|
|
215
|
+
}
|
|
216
|
+
async ensureStorage() {
|
|
217
|
+
if (this.client)
|
|
218
|
+
return;
|
|
219
|
+
const store = await openIndexedDbHistoryStore(this.options.storageName ?? 'docxodus-editor');
|
|
220
|
+
try {
|
|
221
|
+
this.client = this.options.openHistory(store.storage);
|
|
222
|
+
this.store = store;
|
|
223
|
+
}
|
|
224
|
+
catch (error) {
|
|
225
|
+
store.close();
|
|
226
|
+
throw error;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
async ensureDraft() {
|
|
230
|
+
await this.ensureStorage();
|
|
231
|
+
if (!this.draft) {
|
|
232
|
+
const document = this.client.document(this.identity.id);
|
|
233
|
+
this.draft = { ...this.identity, checkpoints: await HistoryCheckpoints.open(document, this.store.journal(this.identity.id)) };
|
|
234
|
+
}
|
|
235
|
+
return this.draft;
|
|
236
|
+
}
|
|
237
|
+
async loadSaved(identity) {
|
|
238
|
+
await this.ensureStorage();
|
|
239
|
+
const document = this.client.document(identity.id);
|
|
240
|
+
const checkpoints = await HistoryCheckpoints.open(document, this.store.journal(identity.id));
|
|
241
|
+
const pending = checkpoints.pendingRequest;
|
|
242
|
+
const view = checkpoints.view;
|
|
243
|
+
if (!view && pending?.kind !== 'save')
|
|
244
|
+
throw new Error('This saved document is no longer on this device.');
|
|
245
|
+
const bytes = pending?.kind === 'save' ? pending.bytes : await document.exportDocx(view.version.id);
|
|
246
|
+
this.install(bytes, identity);
|
|
247
|
+
this.draft = { ...identity, checkpoints };
|
|
248
|
+
this.dirty = pending?.kind === 'save';
|
|
249
|
+
if (pending?.kind === 'save')
|
|
250
|
+
this.captureState(pending.bytes);
|
|
251
|
+
await this.closeArchive();
|
|
252
|
+
this.remember();
|
|
253
|
+
}
|
|
254
|
+
install(bytes, identity) {
|
|
255
|
+
if (this.destroyed)
|
|
256
|
+
throw new DocxHistoryError('Closed', 'The editor is closed.');
|
|
257
|
+
this.installing = true;
|
|
258
|
+
try {
|
|
259
|
+
this.ribbon.open(bytes, identity.name);
|
|
260
|
+
}
|
|
261
|
+
finally {
|
|
262
|
+
this.installing = false;
|
|
263
|
+
}
|
|
264
|
+
this.identity = identity;
|
|
265
|
+
this.dirty = false;
|
|
266
|
+
this.generation++;
|
|
267
|
+
this.savedVersion = this.observedVersion = this.ribbon.editor?.version ?? null;
|
|
268
|
+
}
|
|
269
|
+
async mountPanel() {
|
|
270
|
+
const current = this.archive ?? await this.ensureDraft();
|
|
271
|
+
const writable = 'checkpoints' in current;
|
|
272
|
+
const holder = this.body.ownerDocument.createElement('div');
|
|
273
|
+
const panel = mountHistoryControls(holder, {
|
|
274
|
+
reader: writable ? current.checkpoints.document : current.reader,
|
|
275
|
+
checkpoints: writable ? current.checkpoints : undefined,
|
|
276
|
+
author: this.options.author, documentName: current.name,
|
|
277
|
+
capture: writable ? () => {
|
|
278
|
+
const bytes = this.ribbon.save();
|
|
279
|
+
if (!bytes)
|
|
280
|
+
throw new Error('Open a document first.');
|
|
281
|
+
// Remember the identity before publication, so uncertain saves can recover after reload.
|
|
282
|
+
this.remember();
|
|
283
|
+
this.captureState(bytes);
|
|
284
|
+
return bytes;
|
|
285
|
+
} : undefined,
|
|
286
|
+
confirmRestore: writable ? title => this.confirm(`Restore ${title}?${this.hasUnsavedChanges ? '\n\nYour unsaved changes will be replaced.' : ''}\n\nAll saved versions will be kept.`) : undefined,
|
|
287
|
+
onCheckpoint: async (view, action, request) => {
|
|
288
|
+
if (this.destroyed)
|
|
289
|
+
return;
|
|
290
|
+
const savedCapture = action === 'save' || (action === 'retry' && request?.kind === 'save'
|
|
291
|
+
&& this.capturedBytes && sameBytes(this.capturedBytes, request.bytes));
|
|
292
|
+
if (savedCapture && this.captured === this.generation && this.capturedVersion === (this.ribbon.editor?.version ?? null)) {
|
|
293
|
+
this.dirty = false;
|
|
294
|
+
this.savedVersion = this.capturedVersion;
|
|
295
|
+
}
|
|
296
|
+
this.captured = -1;
|
|
297
|
+
this.capturedBytes = undefined;
|
|
298
|
+
if ((action === 'restore' || (action === 'retry' && request?.kind === 'restore')) && writable)
|
|
299
|
+
this.install(await current.checkpoints.document.exportDocx(view.version.id), this.identity);
|
|
300
|
+
this.remember();
|
|
301
|
+
this.updateRecent();
|
|
302
|
+
},
|
|
303
|
+
restoreUpdatesDraft: true,
|
|
304
|
+
preview: (bytes, title) => this.showPreview(bytes, title),
|
|
305
|
+
});
|
|
306
|
+
try {
|
|
307
|
+
await panel.ready;
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
await panel.destroy();
|
|
311
|
+
throw error;
|
|
312
|
+
}
|
|
313
|
+
if (this.destroyed) {
|
|
314
|
+
await panel.destroy();
|
|
315
|
+
return;
|
|
316
|
+
}
|
|
317
|
+
await this.panel?.destroy();
|
|
318
|
+
this.panel = panel;
|
|
319
|
+
this.body.replaceChildren(holder);
|
|
320
|
+
this.panelObserver.disconnect();
|
|
321
|
+
this.panelObserver.observe(panel.element, { attributes: true, attributeFilter: ['aria-busy'] });
|
|
322
|
+
this.source.textContent = current.name;
|
|
323
|
+
this.resumeButton.hidden = this.back.hidden = writable;
|
|
324
|
+
this.status.textContent = writable
|
|
325
|
+
? 'Your saved versions stay on this device.'
|
|
326
|
+
: 'You’re browsing a history file. Your open document is safe.';
|
|
327
|
+
}
|
|
328
|
+
async showPreview(bytes, title) {
|
|
329
|
+
const doc = this.previewDialog.ownerDocument;
|
|
330
|
+
const holder = doc.createElement('div');
|
|
331
|
+
holder.className = 'dxr-version-paper';
|
|
332
|
+
const preview = await this.options.preview(holder, bytes);
|
|
333
|
+
if (this.destroyed) {
|
|
334
|
+
preview.destroy();
|
|
335
|
+
return;
|
|
336
|
+
}
|
|
337
|
+
const heading = doc.createElement('h2');
|
|
338
|
+
heading.textContent = title;
|
|
339
|
+
const actions = doc.createElement('div');
|
|
340
|
+
actions.className = 'dxr-version-actions';
|
|
341
|
+
this.button('Back to version history', () => this.previewDialog.close(), actions);
|
|
342
|
+
if (!this.archive)
|
|
343
|
+
this.button('Use as draft', () => this.command(async () => {
|
|
344
|
+
if (!this.confirmReplace())
|
|
345
|
+
return;
|
|
346
|
+
this.install(bytes, this.identity);
|
|
347
|
+
this.dirty = true;
|
|
348
|
+
this.previewDialog.close();
|
|
349
|
+
this.dialog.close();
|
|
350
|
+
}), actions);
|
|
351
|
+
this.button('Download this version', () => download(bytes, 'version.docx', doc), actions);
|
|
352
|
+
this.preview?.destroy();
|
|
353
|
+
this.preview = preview;
|
|
354
|
+
this.previewDialog.replaceChildren(heading, actions, holder);
|
|
355
|
+
if (!this.previewDialog.open)
|
|
356
|
+
this.previewDialog.showModal();
|
|
357
|
+
}
|
|
358
|
+
async importArchive() {
|
|
359
|
+
if (!this.archive || !this.confirmReplace())
|
|
360
|
+
return;
|
|
361
|
+
await this.ensureStorage();
|
|
362
|
+
const imported = await this.client.importHistoryArchive(this.archive.bytes);
|
|
363
|
+
const identity = { id: imported.archive.documentId, name: this.archive.name.replace(/\.docxhistory$/i, '.docx') };
|
|
364
|
+
const document = this.client.document(identity.id);
|
|
365
|
+
const checkpoints = await HistoryCheckpoints.open(document, this.store.journal(identity.id), imported.view);
|
|
366
|
+
this.install(await document.exportDocx(imported.view.version.id), identity);
|
|
367
|
+
this.draft = { ...identity, checkpoints };
|
|
368
|
+
this.remember();
|
|
369
|
+
await this.closeArchive();
|
|
370
|
+
await this.mountPanel();
|
|
371
|
+
this.updateRecent();
|
|
372
|
+
}
|
|
373
|
+
async closeArchive() {
|
|
374
|
+
this.panelObserver.disconnect();
|
|
375
|
+
const panel = this.panel;
|
|
376
|
+
this.panel = undefined;
|
|
377
|
+
const archive = this.archive;
|
|
378
|
+
this.archive = undefined;
|
|
379
|
+
await panel?.destroy();
|
|
380
|
+
archive?.reader.close();
|
|
381
|
+
}
|
|
382
|
+
remember() {
|
|
383
|
+
localStorage.setItem(this.prefix + this.identity.id, JSON.stringify(this.identity));
|
|
384
|
+
localStorage.setItem(this.lastKey, JSON.stringify(this.identity));
|
|
385
|
+
}
|
|
386
|
+
readIdentity(value) {
|
|
387
|
+
if (!value)
|
|
388
|
+
return null;
|
|
389
|
+
const identity = JSON.parse(value);
|
|
390
|
+
if (typeof identity?.id !== 'string' || !identity.id || typeof identity?.name !== 'string')
|
|
391
|
+
return null;
|
|
392
|
+
return { id: identity.id, name: identity.name };
|
|
393
|
+
}
|
|
394
|
+
updateRecent() {
|
|
395
|
+
this.recent.replaceChildren(new Option('Choose a saved document…', ''));
|
|
396
|
+
for (let i = 0; i < localStorage.length; i++) {
|
|
397
|
+
const key = localStorage.key(i);
|
|
398
|
+
if (!key.startsWith(this.prefix))
|
|
399
|
+
continue;
|
|
400
|
+
try {
|
|
401
|
+
const identity = this.readIdentity(localStorage.getItem(key));
|
|
402
|
+
if (identity)
|
|
403
|
+
this.recent.append(new Option(identity.name, identity.id));
|
|
404
|
+
}
|
|
405
|
+
catch { /* a damaged catalog entry does not hide other saved documents */ }
|
|
406
|
+
}
|
|
407
|
+
this.recent.value = this.identity.id;
|
|
408
|
+
this.recent.parentElement.hidden = this.recent.options.length <= 1;
|
|
409
|
+
}
|
|
410
|
+
confirm(message) { return this.dialog.ownerDocument.defaultView?.confirm(message) ?? false; }
|
|
411
|
+
captureState(bytes) {
|
|
412
|
+
this.captured = this.generation;
|
|
413
|
+
this.capturedVersion = this.ribbon.editor?.version ?? null;
|
|
414
|
+
this.capturedBytes = bytes.slice();
|
|
415
|
+
}
|
|
416
|
+
confirmReplace() { return !this.hasUnsavedChanges || this.confirm('Replace your open document? Save a version or download it first to keep your unsaved changes.'); }
|
|
417
|
+
explain(error) { return historyControlError(error, this.draft?.checkpoints.hasPending); }
|
|
418
|
+
command(action) { void this.run(action).catch(() => { }); }
|
|
419
|
+
syncBusy() {
|
|
420
|
+
const busy = this.busy;
|
|
421
|
+
// Closing the drawer while publication runs must not enable edits that a restore would replace.
|
|
422
|
+
this.ribbon.surface.inert = busy;
|
|
423
|
+
const chrome = this.ribbon.element.querySelector('.dxr-chrome');
|
|
424
|
+
if (chrome)
|
|
425
|
+
chrome.inert = busy;
|
|
426
|
+
this.recent.disabled = this.resumeButton.disabled = this.back.disabled = busy;
|
|
427
|
+
const file = this.ribbon.control('file');
|
|
428
|
+
if (file)
|
|
429
|
+
file.disabled = busy;
|
|
430
|
+
const create = this.ribbon.control('new');
|
|
431
|
+
if (create)
|
|
432
|
+
create.disabled = busy;
|
|
433
|
+
}
|
|
434
|
+
async run(action) {
|
|
435
|
+
if (this.destroyed || this.busy)
|
|
436
|
+
return;
|
|
437
|
+
const work = Promise.resolve().then(action);
|
|
438
|
+
this.active = work;
|
|
439
|
+
this.dialog.setAttribute('aria-busy', 'true');
|
|
440
|
+
this.body.inert = true;
|
|
441
|
+
this.syncBusy();
|
|
442
|
+
this.ribbon.element.querySelector('.dxr-chrome').inert = true;
|
|
443
|
+
this.ribbon.surface.inert = true;
|
|
444
|
+
try {
|
|
445
|
+
await work;
|
|
446
|
+
}
|
|
447
|
+
catch (error) {
|
|
448
|
+
this.status.textContent = this.explain(error);
|
|
449
|
+
this.ribbon.setStatus(this.explain(error));
|
|
450
|
+
throw error;
|
|
451
|
+
}
|
|
452
|
+
finally {
|
|
453
|
+
this.active = undefined;
|
|
454
|
+
this.body.inert = false;
|
|
455
|
+
this.dialog.setAttribute('aria-busy', 'false');
|
|
456
|
+
this.syncBusy();
|
|
457
|
+
this.ribbon.element.querySelector('.dxr-chrome')?.removeAttribute('inert');
|
|
458
|
+
this.ribbon.surface.inert = false;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
button(label, action, parent) {
|
|
462
|
+
const button = parent.ownerDocument.createElement('button');
|
|
463
|
+
button.type = 'button';
|
|
464
|
+
button.textContent = label;
|
|
465
|
+
button.setAttribute('aria-label', label);
|
|
466
|
+
button.addEventListener('click', action, { signal: this.events.signal });
|
|
467
|
+
parent.append(button);
|
|
468
|
+
return button;
|
|
469
|
+
}
|
|
470
|
+
}
|
|
471
|
+
function download(bytes, name, doc) {
|
|
472
|
+
const url = URL.createObjectURL(new Blob([bytes.slice()], { type: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' }));
|
|
473
|
+
const link = doc.createElement('a');
|
|
474
|
+
link.href = url;
|
|
475
|
+
link.download = name;
|
|
476
|
+
link.click();
|
|
477
|
+
setTimeout(() => URL.revokeObjectURL(url), 1000);
|
|
478
|
+
}
|
|
479
|
+
function sameBytes(left, right) {
|
|
480
|
+
return left.length === right.length && left.every((value, index) => value === right[index]);
|
|
481
|
+
}
|
|
482
|
+
const HISTORY_DRAWER_CSS = `
|
|
483
|
+
.dxr-history-dialog,.dxr-version-preview{box-sizing:border-box;color:#243b42;background:#fff;border:1px solid #dce5e5;box-shadow:0 24px 80px #163f4033;font:14px/1.5 system-ui,sans-serif;padding:24px;overscroll-behavior:contain}
|
|
484
|
+
.dxr-history-dialog{width:min(420px,calc(100vw - 24px));max-height:calc(100dvh - 24px);margin:12px 12px 12px auto;border-radius:18px}
|
|
485
|
+
.dxr-history-dialog::backdrop,.dxr-version-preview::backdrop{background:#16323333;backdrop-filter:blur(2px)}
|
|
486
|
+
.dxr-history-dialog [hidden],.dxr-version-preview [hidden]{display:none!important}
|
|
487
|
+
.dxr-history-dialog button,.dxr-version-preview button{font:inherit;color:inherit;border:1px solid #cbd9d9;background:#fff;border-radius:9px;min-height:40px;padding:8px 12px;cursor:pointer}
|
|
488
|
+
.dxr-history-dialog button:hover,.dxr-version-preview button:hover{background:#eff8f6}
|
|
489
|
+
.dxr-history-dialog :focus-visible,.dxr-version-preview :focus-visible{outline:3px solid #0f766e;outline-offset:3px}
|
|
490
|
+
.dxr-history-header{display:flex;justify-content:flex-end;position:sticky;top:0;z-index:2;background:#fff;box-shadow:0 0 0 6px #fff}
|
|
491
|
+
.dxr-history-dialog .dxr-history-close{border:0;font-size:13px;background:#fff}
|
|
492
|
+
.dxr-history-source{font-weight:600;overflow-wrap:anywhere;margin:12px 0 4px}
|
|
493
|
+
.dxr-history-status{color:#597273;margin:4px 0 18px}
|
|
494
|
+
.dxr-history-dialog>label{display:block;font-size:12px;color:#597273;margin:12px 0}
|
|
495
|
+
.dxr-history-dialog>label select{display:block;width:100%;font:inherit;padding:8px;border:1px solid #cbd9d9;border-radius:8px;background:#fff;color:#243b42}
|
|
496
|
+
.dxr-history-dialog .dx-history{padding:0;border:0;border-radius:0;background:transparent}
|
|
497
|
+
.dxr-history-dialog .dx-history h2{font-size:24px;letter-spacing:-.6px;margin:12px 0}
|
|
498
|
+
.dxr-history-dialog .dx-history button[data-history-action=save]{background:#0f766e;border-color:#0f766e;color:#fff;font-weight:600}
|
|
499
|
+
.dxr-history-dialog .dx-history select{border-radius:9px;background:#f8fbfa}
|
|
500
|
+
.dxr-history-dialog .dx-history option{padding:10px;font-size:13px}
|
|
501
|
+
.dxr-version-preview{width:min(1080px,calc(100vw - 24px));max-height:calc(100dvh - 24px);border-radius:18px}
|
|
502
|
+
.dxr-version-preview h2{font-size:20px;margin:0 0 12px;overflow-wrap:anywhere}
|
|
503
|
+
.dxr-version-actions{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
|
|
504
|
+
.dxr-version-paper{max-height:70dvh;overflow:auto;background:#f2f6f5;padding:20px;border-radius:10px}
|
|
505
|
+
@media(max-width:520px){.dxr-history-dialog,.dxr-version-preview{padding:16px}.dxr-version-paper{padding:8px}}
|
|
506
|
+
@media(prefers-reduced-motion:no-preference){.dxr-history-dialog[open]{animation:dxr-history-in .16s ease-out}@keyframes dxr-history-in{from{opacity:0;transform:translateX(16px)}to{opacity:1;transform:translateX(0)}}}
|
|
507
|
+
`;
|
|
508
|
+
//# sourceMappingURL=ribbon-history.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ribbon-history.js","sourceRoot":"","sources":["../src/ribbon-history.ts"],"names":[],"mappings":"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"}
|
package/dist/ribbon.d.ts
CHANGED
|
@@ -26,6 +26,9 @@
|
|
|
26
26
|
*/
|
|
27
27
|
import { DocxEditor } from "./editor.js";
|
|
28
28
|
import type { DocxEditorExports, DocxEditorOptions } from "./editor.js";
|
|
29
|
+
import { RibbonHistory } from './ribbon-history.js';
|
|
30
|
+
import type { RibbonHistoryBinding } from './ribbon-history.js';
|
|
31
|
+
export type { RibbonHistoryBinding, RibbonHistoryOptions } from './ribbon-history.js';
|
|
29
32
|
export { DocxEditor } from "./editor.js";
|
|
30
33
|
export type { DocxEditorExports, DocxEditorOptions } from "./editor.js";
|
|
31
34
|
/** Which layout the chrome uses. "auto" measures the root and switches at `compactBreakpoint`. */
|
|
@@ -62,6 +65,8 @@ export interface RibbonLoaderOptions {
|
|
|
62
65
|
onRetry?: () => void;
|
|
63
66
|
}
|
|
64
67
|
export interface RibbonOptions extends DocxEditorOptions {
|
|
68
|
+
/** Optional version-history services. createRibbonEditor accepts history: true to wire browser storage. */
|
|
69
|
+
history?: RibbonHistoryBinding;
|
|
65
70
|
/** WASM exports. Omit to mount chrome first (showing the loader) and call `setExports` later. */
|
|
66
71
|
exports?: DocxEditorExports;
|
|
67
72
|
/** Layout density. Default "auto". */
|
|
@@ -120,6 +125,7 @@ export interface RibbonLoader {
|
|
|
120
125
|
fail(error: unknown): void;
|
|
121
126
|
}
|
|
122
127
|
export interface RibbonEditor {
|
|
128
|
+
readonly history: RibbonHistory | null;
|
|
123
129
|
/** The mounted root element (carries `data-state` and `data-chrome`). */
|
|
124
130
|
readonly element: HTMLElement;
|
|
125
131
|
/** The element the document renders into. */
|
package/dist/ribbon.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ribbon.d.ts","sourceRoot":"","sources":["../src/ribbon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAIlB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ribbon.d.ts","sourceRoot":"","sources":["../src/ribbon.ts"],"names":[],"mappings":"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"}
|