@hyebook/vue3-adapter 2.3.2 → 2.3.4
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/core/src/player/ebook-player.d.ts +13 -0
- package/dist/core/src/player/ebook-player.d.ts.map +1 -1
- package/dist/core/src/player/ebook-player.js +475 -54
- package/dist/core/src/player/engine.d.ts +1 -0
- package/dist/core/src/player/engine.d.ts.map +1 -1
- package/dist/core/src/player/engine.js +38 -8
- package/dist/core/src/types/player.d.ts +9 -0
- package/dist/core/src/types/player.d.ts.map +1 -1
- package/dist/core/src/workbench/editor-workbench.d.ts +4 -0
- package/dist/core/src/workbench/editor-workbench.d.ts.map +1 -1
- package/dist/core/src/workbench/editor-workbench.js +284 -48
- package/package.json +2 -2
|
@@ -399,12 +399,35 @@ export class PlayerEngine {
|
|
|
399
399
|
return this.doc.pages.findIndex((page) => page.id === pageId);
|
|
400
400
|
}
|
|
401
401
|
normalizeRange(range) {
|
|
402
|
-
const safeStart = Math.max(0, Math.floor(range
|
|
403
|
-
const safeEnd = Math.max(0, Math.floor(range
|
|
402
|
+
const safeStart = Math.max(0, Math.floor(range?.start || 0));
|
|
403
|
+
const safeEnd = Math.max(0, Math.floor(range?.end || 0));
|
|
404
404
|
return safeStart <= safeEnd
|
|
405
405
|
? { start: safeStart, end: safeEnd }
|
|
406
406
|
: { start: safeEnd, end: safeStart };
|
|
407
407
|
}
|
|
408
|
+
normalizeSegments(segments) {
|
|
409
|
+
if (!Array.isArray(segments) || !segments.length) {
|
|
410
|
+
return undefined;
|
|
411
|
+
}
|
|
412
|
+
const normalized = segments
|
|
413
|
+
.map((segment) => {
|
|
414
|
+
const pageId = typeof segment?.pageId === "string" ? segment.pageId : "";
|
|
415
|
+
const blockId = typeof segment?.blockId === "string" ? segment.blockId : "";
|
|
416
|
+
if (!pageId || !blockId) {
|
|
417
|
+
return null;
|
|
418
|
+
}
|
|
419
|
+
return {
|
|
420
|
+
pageId,
|
|
421
|
+
blockId,
|
|
422
|
+
range: this.normalizeRange(segment?.range),
|
|
423
|
+
...(segment?.selectedText !== undefined
|
|
424
|
+
? { selectedText: String(segment.selectedText) }
|
|
425
|
+
: {}),
|
|
426
|
+
};
|
|
427
|
+
})
|
|
428
|
+
.filter((segment) => segment !== null);
|
|
429
|
+
return normalized.length ? normalized : undefined;
|
|
430
|
+
}
|
|
408
431
|
normalizeAnnotations(annotations, bookId) {
|
|
409
432
|
const now = Date.now();
|
|
410
433
|
const highlights = Array.isArray(annotations?.highlights)
|
|
@@ -419,13 +442,16 @@ export class PlayerEngine {
|
|
|
419
442
|
const fallbackId = `highlight-${Date.now()}-${index}`;
|
|
420
443
|
const createdAt = toTimestamp(item.createdAt, now);
|
|
421
444
|
const updatedAt = toTimestamp(item.updatedAt, createdAt);
|
|
445
|
+
const segments = this.normalizeSegments(item.segments);
|
|
446
|
+
const firstSegment = segments?.[0];
|
|
422
447
|
return {
|
|
423
448
|
...clone(item),
|
|
424
449
|
id: item.id || fallbackId,
|
|
425
450
|
bookId: item.bookId || bookId || "",
|
|
426
|
-
pageId: item.pageId || "",
|
|
427
|
-
blockId: item.blockId || "preview-flow-text",
|
|
428
|
-
range: this.normalizeRange(item.range),
|
|
451
|
+
pageId: item.pageId || firstSegment?.pageId || "",
|
|
452
|
+
blockId: item.blockId || firstSegment?.blockId || "preview-flow-text",
|
|
453
|
+
range: this.normalizeRange(item.range || firstSegment?.range),
|
|
454
|
+
...(segments ? { segments } : {}),
|
|
429
455
|
createdAt,
|
|
430
456
|
updatedAt,
|
|
431
457
|
};
|
|
@@ -434,13 +460,17 @@ export class PlayerEngine {
|
|
|
434
460
|
const fallbackId = `note-${Date.now()}-${index}`;
|
|
435
461
|
const createdAt = toTimestamp(item.createdAt, now);
|
|
436
462
|
const updatedAt = toTimestamp(item.updatedAt, createdAt);
|
|
463
|
+
const segments = this.normalizeSegments(item.segments);
|
|
464
|
+
const firstSegment = segments?.[0];
|
|
465
|
+
const resolvedRange = item.range || firstSegment?.range;
|
|
437
466
|
return {
|
|
438
467
|
...clone(item),
|
|
439
468
|
id: item.id || fallbackId,
|
|
440
469
|
bookId: item.bookId || bookId || "",
|
|
441
|
-
pageId: item.pageId || "",
|
|
442
|
-
blockId: item.blockId || "preview-flow-text",
|
|
443
|
-
...(
|
|
470
|
+
pageId: item.pageId || firstSegment?.pageId || "",
|
|
471
|
+
blockId: item.blockId || firstSegment?.blockId || "preview-flow-text",
|
|
472
|
+
...(resolvedRange ? { range: this.normalizeRange(resolvedRange) } : {}),
|
|
473
|
+
...(segments ? { segments } : {}),
|
|
444
474
|
content: item.content || "",
|
|
445
475
|
createdAt,
|
|
446
476
|
updatedAt,
|
|
@@ -9,6 +9,12 @@ export interface ReaderProgress {
|
|
|
9
9
|
zoom: number;
|
|
10
10
|
updatedAt: number;
|
|
11
11
|
}
|
|
12
|
+
export interface ReaderAnnotationSegment {
|
|
13
|
+
pageId: string;
|
|
14
|
+
blockId: string;
|
|
15
|
+
range: ReaderRange;
|
|
16
|
+
selectedText?: string;
|
|
17
|
+
}
|
|
12
18
|
export interface ReaderNote {
|
|
13
19
|
id: string;
|
|
14
20
|
bookId: string;
|
|
@@ -17,6 +23,8 @@ export interface ReaderNote {
|
|
|
17
23
|
range?: ReaderRange;
|
|
18
24
|
content: string;
|
|
19
25
|
color?: string;
|
|
26
|
+
selectedText?: string;
|
|
27
|
+
segments?: ReaderAnnotationSegment[];
|
|
20
28
|
createdAt: number;
|
|
21
29
|
updatedAt: number;
|
|
22
30
|
}
|
|
@@ -28,6 +36,7 @@ export interface ReaderHighlight {
|
|
|
28
36
|
range: ReaderRange;
|
|
29
37
|
selectedText?: string;
|
|
30
38
|
color?: string;
|
|
39
|
+
segments?: ReaderAnnotationSegment[];
|
|
31
40
|
createdAt: number;
|
|
32
41
|
updatedAt: number;
|
|
33
42
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../../../../core/src/types/player.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../../../../core/src/types/player.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAExC,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AACrE,MAAM,MAAM,sBAAsB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,UAAU,GAAG,cAAc,CAAC;AAE7E,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,GAAG,EAAE,iBAAiB,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,GAAG,EAAE,iBAAiB,CAAC;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,UAAU,EAAE,gBAAgB,CAAC;IAC7B,GAAG,EAAE,iBAAiB,CAAC;CACxB;AAED,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,sBAAsB,CAAC;IAC/B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,GAAG,EAAE,iBAAiB,CAAC;IACvB,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,QAAQ,CAAC,EAAE,gBAAgB,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,cAAc,CAAC;CAC3B;AAED,MAAM,WAAW,kCAAkC;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,6BAA6B;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IACjC,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAClE,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,cAAc,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;IACxE,eAAe,CAAC,EAAE,CAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,iBAAiB,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IACtD,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;IAC9D,aAAa,CAAC,EAAE,CACd,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,cAAc,EAAE,KACxB,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,kBAAkB,CAAC;IAC9B,aAAa,CAAC,EAAE,mBAAmB,CAAC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kBAAkB,CAAC,EAAE,iBAAiB,CAAC;IACvC,gBAAgB,CAAC,EAAE,kCAAkC,CAAC;IACtD,WAAW,CAAC,EAAE,6BAA6B,CAAC;CAC7C;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,QAAQ,CAAC;IAC5B,cAAc,EAAE,MAAM,iBAAiB,CAAC;IACxC,aAAa,EAAE,MAAM,eAAe,EAAE,CAAC;IACvC,QAAQ,EAAE,MAAM,UAAU,EAAE,CAAC;IAC7B,YAAY,EAAE,MAAM,cAAc,EAAE,CAAC;IACrC,cAAc,EAAE,CACd,WAAW,EAAE,iBAAiB,EAC9B,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,KACpB,OAAO,CAAC,iBAAiB,CAAC,CAAC;IAChC,iBAAiB,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,CAAC;IACpD,eAAe,EAAE,CACf,SAAS,EAAE,IAAI,CACb,eAAe,EACf,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAC5C,EACD,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,KACpB,OAAO,CAAC,eAAe,CAAC,CAAC;IAC9B,eAAe,EAAE,CACf,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,GAAG,QAAQ,GAAG,WAAW,CAAC,CAAC,EACpE,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,KACpB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACrC,eAAe,EAAE,CACf,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,KACpB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,UAAU,EAAE,CACV,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,GAAG,QAAQ,CAAC,EACnE,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,KACpB,OAAO,CAAC,UAAU,CAAC,CAAC;IACzB,UAAU,EAAE,CACV,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,GAAG,QAAQ,GAAG,WAAW,CAAC,CAAC,EAC/D,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,KACpB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;IAChC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC1E,WAAW,EAAE,CACX,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,KACpB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IACpC,cAAc,EAAE,CACd,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,KACpB,OAAO,CAAC,OAAO,CAAC,CAAC;IACtB,YAAY,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACpD,kBAAkB,EAAE,CAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,KACnD,MAAM,IAAI,CAAC;IAChB,kBAAkB,EAAE,CAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,KACnD,MAAM,IAAI,CAAC;IAChB,kBAAkB,EAAE,CAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,2BAA2B,KAAK,IAAI,KACnD,MAAM,IAAI,CAAC;IAChB,mBAAmB,EAAE,CACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,4BAA4B,KAAK,IAAI,KACpD,MAAM,IAAI,CAAC;CACjB"}
|
|
@@ -41,9 +41,13 @@ export interface EditorWorkbenchExtensionActionButton {
|
|
|
41
41
|
export interface EditorWorkbenchExtensionOptions {
|
|
42
42
|
actions?: EditorWorkbenchExtensionActionButton[];
|
|
43
43
|
}
|
|
44
|
+
export type EditorWorkbenchDebugLevel = "info" | "warn" | "error";
|
|
44
45
|
export interface EditorWorkbenchDebugOptions {
|
|
45
46
|
enabled?: boolean;
|
|
46
47
|
prefix?: string;
|
|
48
|
+
level?: EditorWorkbenchDebugLevel;
|
|
49
|
+
groups?: string[];
|
|
50
|
+
includeWordImportSource?: boolean;
|
|
47
51
|
}
|
|
48
52
|
export interface EditorWorkbenchPreviewAnnotationActions {
|
|
49
53
|
canDelete?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"editor-workbench.d.ts","sourceRoot":"","sources":["../../../../../core/src/workbench/editor-workbench.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EAKR,kBAAkB,EAWnB,MAAM,gBAAgB,CAAC;AA+LxB,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,OAAO,CAAC;IACrB,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAC5C,kBAAkB,CAAC,EAAE,uCAAuC,CAAC;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,gCAAgC,CAAC;IAC9C,SAAS,CAAC,EAAE,+BAA+B,CAAC;IAC5C,KAAK,CAAC,EAAE,OAAO,GAAG,2BAA2B,CAAC;IAC9C,MAAM,CAAC,EAAE,4BAA4B,CAAC;IACtC,UAAU,CAAC,EAAE,gCAAgC,CAAC;IAC9C,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,gBAAgB,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5D;AAED,MAAM,WAAW,gCAAgC;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qCAAqC;IACpD,WAAW,EAAE,MAAM,QAAQ,CAAC;IAC5B,YAAY,EAAE,MAAM,OAAO,CAAC;IAC5B,OAAO,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAC;IACpC,OAAO,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,KAAK,IAAI,CAAC;IAC9C,sBAAsB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7C;AAED,MAAM,WAAW,oCAAoC;IACnD,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,CACR,OAAO,EAAE,qCAAqC,EAC9C,KAAK,EAAE,UAAU,KACd,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AAED,MAAM,WAAW,+BAA+B;IAC9C,OAAO,CAAC,EAAE,oCAAoC,EAAE,CAAC;CAClD;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"editor-workbench.d.ts","sourceRoot":"","sources":["../../../../../core/src/workbench/editor-workbench.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,12 +4,12 @@ const WORKBENCH_STYLE_ID = "hy-ebook-workbench-style";
|
|
|
4
4
|
const WORKBENCH_STYLE_VERSION = "0.3.0";
|
|
5
5
|
const WORKBENCH_CSS = `
|
|
6
6
|
.hyewb-root{font-family:"Noto Sans SC","PingFang SC","Microsoft YaHei",sans-serif;color:#0f172a;background:#f8fbff;border:1px solid #d8e0ea;border-radius:12px;padding:12px;display:grid;gap:10px;position:relative;--hyewb-top-shield-height:0px}
|
|
7
|
-
.hyewb-root::before{content:"";position:absolute;left:0;right:0;top:0;height:var(--hyewb-top-shield-height);background:#f8fbff;z-index:
|
|
7
|
+
.hyewb-root::before{content:"";position:absolute;left:0;right:0;top:0;height:var(--hyewb-top-shield-height);background:#f8fbff;z-index:10030;pointer-events:none}
|
|
8
8
|
.hyewb-header{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}
|
|
9
9
|
.hyewb-title{font-size:14px;font-weight:600}
|
|
10
10
|
.hyewb-header-actions{margin-left:auto;display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap}
|
|
11
11
|
.hyewb-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
|
|
12
|
-
.hyewb-top-control{position:relative;z-index:
|
|
12
|
+
.hyewb-top-control{position:relative;z-index:10040;background:#f8fbff;isolation:isolate}
|
|
13
13
|
.hyewb-btn{border:1px solid #94a3b8;background:#fff;color:#0f172a;border-radius:8px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;padding:0;width:34px;height:34px;flex:0 0 auto}
|
|
14
14
|
.hyewb-btn.hyewb-btn-text{width:auto;min-width:96px;padding:0 12px}
|
|
15
15
|
.hyewb-header-action-btn{height:34px}
|
|
@@ -33,7 +33,7 @@ const WORKBENCH_CSS = `
|
|
|
33
33
|
.hyewb-preview-layout.with-annotation-panel{grid-template-columns:minmax(0,1fr) 300px}
|
|
34
34
|
.hyewb-canvas{position:relative;background:#fff;border:1px solid #d9e3ee;border-radius:8px;min-height:420px;padding:20px 24px;box-shadow:0 6px 16px rgba(15,23,42,.08);margin:16px auto;max-width:100%;box-sizing:border-box;}
|
|
35
35
|
.hyewb-editor{min-height:360px;outline:none;line-height:1.7;font-size:16px;color:#1e293b}
|
|
36
|
-
.hyewb-float{position:fixed;z-index:
|
|
36
|
+
.hyewb-float{position:fixed;z-index:10070;display:none;align-items:center;gap:6px;padding:6px 8px;border-radius:10px;border:1px solid #0f172a;background:rgba(15,23,42,.96);box-shadow:0 10px 24px rgba(15,23,42,.22)}
|
|
37
37
|
.hyewb-float.show{display:inline-flex}
|
|
38
38
|
.hyewb-float .hyewb-btn{border-color:#334155;background:#1e293b;color:#f8fafc;width:30px;height:30px}
|
|
39
39
|
.hyewb-float .hyewb-btn:hover{background:#334155}
|
|
@@ -138,7 +138,7 @@ const WORKBENCH_CSS = `
|
|
|
138
138
|
.hyewb-media-handle[data-handle="w"]{left:-6px;top:calc(50% - 5px);cursor:ew-resize}
|
|
139
139
|
.hyewb-media-list{margin:0;padding-left:18px;color:#334155;font-size:13px;display:grid;gap:4px}
|
|
140
140
|
.hyewb-status{font-size:12px;color:#475569}
|
|
141
|
-
.hyewb-upload-backdrop{position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:rgba(15,23,42,.45);z-index:
|
|
141
|
+
.hyewb-upload-backdrop{position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:rgba(15,23,42,.45);z-index:10100;padding:16px}
|
|
142
142
|
.hyewb-upload-backdrop.show{display:flex}
|
|
143
143
|
.hyewb-upload-dialog{position:relative;width:min(520px,100%);background:#fff;border:1px solid #cbd5e1;border-radius:12px;padding:14px;display:grid;gap:10px;box-shadow:0 16px 34px rgba(15,23,42,.28)}
|
|
144
144
|
.hyewb-upload-title{font-size:14px;font-weight:600;color:#0f172a}
|
|
@@ -147,7 +147,7 @@ const WORKBENCH_CSS = `
|
|
|
147
147
|
.hyewb-upload-progress{height:8px;background:#e2e8f0;border-radius:999px;overflow:hidden}
|
|
148
148
|
.hyewb-upload-progress > span{display:block;height:100%;width:0;background:#0b7285;transition:width .18s ease}
|
|
149
149
|
.hyewb-upload-error{min-height:18px;font-size:12px;color:#b91c1c;margin:0}
|
|
150
|
-
.hyewb-preview-note-backdrop{position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:rgba(15,23,42,.45);z-index:
|
|
150
|
+
.hyewb-preview-note-backdrop{position:fixed;inset:0;display:none;align-items:center;justify-content:center;background:rgba(15,23,42,.45);z-index:10110;padding:16px}
|
|
151
151
|
.hyewb-preview-note-backdrop.show{display:flex}
|
|
152
152
|
.hyewb-preview-note-dialog{width:min(520px,100%);background:#fff;border:1px solid #cbd5e1;border-radius:12px;padding:14px;display:grid;gap:10px;box-shadow:0 16px 34px rgba(15,23,42,.28)}
|
|
153
153
|
.hyewb-preview-note-title{margin:0;font-size:14px;font-weight:600;color:#0f172a}
|
|
@@ -171,7 +171,7 @@ const WORKBENCH_CSS = `
|
|
|
171
171
|
.hyewb-preview-annotation-item:hover .hyewb-preview-annotation-delete{opacity:1;pointer-events:auto}
|
|
172
172
|
.hyewb-preview-annotation-delete svg{width:14px;height:14px}
|
|
173
173
|
.hyewb-preview-annotation-empty{margin:0;color:#64748b;font-size:13px}
|
|
174
|
-
.hyewb-preview-selection-toolbar{position:fixed;z-index:
|
|
174
|
+
.hyewb-preview-selection-toolbar{position:fixed;z-index:10070;display:none;align-items:center;gap:8px;padding:6px 8px;border-radius:10px;border:1px solid #0f172a;background:rgba(15,23,42,.96);box-shadow:0 10px 24px rgba(15,23,42,.22);transform:translate(-50%,-100%)}
|
|
175
175
|
.hyewb-preview-selection-toolbar.show{display:inline-flex}
|
|
176
176
|
.hyewb-preview-selection-btn{width:32px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;border:1px solid #334155;background:#1e293b;color:#f8fafc;border-radius:8px;cursor:pointer}
|
|
177
177
|
.hyewb-preview-selection-btn:hover{background:#334155}
|
|
@@ -425,20 +425,6 @@ export function createDefaultWorkbenchDocument() {
|
|
|
425
425
|
},
|
|
426
426
|
],
|
|
427
427
|
},
|
|
428
|
-
{
|
|
429
|
-
id: "page-2",
|
|
430
|
-
index: 1,
|
|
431
|
-
blocks: [
|
|
432
|
-
{
|
|
433
|
-
id: "video-1",
|
|
434
|
-
type: "video",
|
|
435
|
-
rect: { x: 80, y: 80, width: 520, height: 300 },
|
|
436
|
-
zIndex: 1,
|
|
437
|
-
src: "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
|
|
438
|
-
controls: true,
|
|
439
|
-
},
|
|
440
|
-
],
|
|
441
|
-
},
|
|
442
428
|
],
|
|
443
429
|
};
|
|
444
430
|
}
|
|
@@ -572,11 +558,11 @@ export function mountEditorWorkbench(container, options = {}) {
|
|
|
572
558
|
bgColorInput.append(bgColorChip);
|
|
573
559
|
const lineHeightSelect = document.createElement("select");
|
|
574
560
|
lineHeightSelect.className = "hyewb-select";
|
|
575
|
-
["1.
|
|
561
|
+
["1.0", "1.15", "1.5", "2.0", "2.5", "3.0"].forEach((value) => {
|
|
576
562
|
const optionNode = document.createElement("option");
|
|
577
563
|
optionNode.value = value;
|
|
578
564
|
optionNode.textContent = value;
|
|
579
|
-
if (value === "1.
|
|
565
|
+
if (value === "1.5") {
|
|
580
566
|
optionNode.selected = true;
|
|
581
567
|
}
|
|
582
568
|
lineHeightSelect.append(optionNode);
|
|
@@ -897,20 +883,66 @@ export function mountEditorWorkbench(container, options = {}) {
|
|
|
897
883
|
const status = document.createElement("p");
|
|
898
884
|
status.className = "hyewb-status";
|
|
899
885
|
status.textContent = "已加载默认编辑器能力";
|
|
886
|
+
const debugConfig = typeof options.debug === "object" && options.debug !== null
|
|
887
|
+
? options.debug
|
|
888
|
+
: undefined;
|
|
900
889
|
const debugEnabled = options.debug === true ||
|
|
901
|
-
(
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
const
|
|
890
|
+
Boolean(debugConfig && debugConfig.enabled !== false);
|
|
891
|
+
const debugPrefix = debugConfig?.prefix || "[hyebook:workbench]";
|
|
892
|
+
const normalizeDebugLevel = (level) => {
|
|
893
|
+
if (level === "warn" || level === "error") {
|
|
894
|
+
return level;
|
|
895
|
+
}
|
|
896
|
+
return "info";
|
|
897
|
+
};
|
|
898
|
+
const debugLevel = normalizeDebugLevel(debugConfig?.level);
|
|
899
|
+
const debugLevelRank = {
|
|
900
|
+
info: 1,
|
|
901
|
+
warn: 2,
|
|
902
|
+
error: 3,
|
|
903
|
+
};
|
|
904
|
+
const debugGroups = Array.isArray(debugConfig?.groups) && debugConfig.groups.length
|
|
905
|
+
? new Set(debugConfig.groups
|
|
906
|
+
.map((group) => String(group || "").trim())
|
|
907
|
+
.filter(Boolean))
|
|
908
|
+
: null;
|
|
909
|
+
const shouldLogDebugGroup = (group) => {
|
|
910
|
+
if (!debugGroups || !debugGroups.size || !group) {
|
|
911
|
+
return true;
|
|
912
|
+
}
|
|
913
|
+
return debugGroups.has(group);
|
|
914
|
+
};
|
|
915
|
+
const debugLog = (message, logOptions) => {
|
|
910
916
|
if (!debugEnabled) {
|
|
911
917
|
return;
|
|
912
918
|
}
|
|
913
|
-
|
|
919
|
+
const level = normalizeDebugLevel(logOptions?.level);
|
|
920
|
+
if (debugLevelRank[level] < debugLevelRank[debugLevel]) {
|
|
921
|
+
return;
|
|
922
|
+
}
|
|
923
|
+
if (!shouldLogDebugGroup(logOptions?.group)) {
|
|
924
|
+
return;
|
|
925
|
+
}
|
|
926
|
+
const scopedPrefix = logOptions?.group
|
|
927
|
+
? `${debugPrefix}:${logOptions.group}`
|
|
928
|
+
: debugPrefix;
|
|
929
|
+
const messageText = `${scopedPrefix} ${message}`;
|
|
930
|
+
if (logOptions &&
|
|
931
|
+
Object.prototype.hasOwnProperty.call(logOptions, "payload")) {
|
|
932
|
+
console[level](messageText, logOptions.payload);
|
|
933
|
+
return;
|
|
934
|
+
}
|
|
935
|
+
console[level](messageText);
|
|
936
|
+
};
|
|
937
|
+
const wordImportSourceLoggingEnabled = debugEnabled && (debugConfig?.includeWordImportSource ?? true);
|
|
938
|
+
const debugWordImport = (message, logOptions) => {
|
|
939
|
+
if (!wordImportSourceLoggingEnabled) {
|
|
940
|
+
return;
|
|
941
|
+
}
|
|
942
|
+
debugLog(message, {
|
|
943
|
+
...logOptions,
|
|
944
|
+
group: logOptions?.group || "word-import",
|
|
945
|
+
});
|
|
914
946
|
};
|
|
915
947
|
let lastDebugStatusMessage = "";
|
|
916
948
|
const flushDebugStatus = () => {
|
|
@@ -919,7 +951,7 @@ export function mountEditorWorkbench(container, options = {}) {
|
|
|
919
951
|
return;
|
|
920
952
|
}
|
|
921
953
|
lastDebugStatusMessage = nextMessage;
|
|
922
|
-
debugLog(nextMessage);
|
|
954
|
+
debugLog(nextMessage, { group: "status" });
|
|
923
955
|
};
|
|
924
956
|
const statusObserver = debugEnabled && typeof MutationObserver !== "undefined"
|
|
925
957
|
? new MutationObserver(() => {
|
|
@@ -1356,28 +1388,77 @@ export function mountEditorWorkbench(container, options = {}) {
|
|
|
1356
1388
|
}
|
|
1357
1389
|
};
|
|
1358
1390
|
const importDocxFile = async (file) => {
|
|
1391
|
+
const maxSize = options.importDocx?.maxSizeBytes;
|
|
1392
|
+
debugWordImport("收到 Word 导入请求", {
|
|
1393
|
+
group: "word-import-file",
|
|
1394
|
+
payload: {
|
|
1395
|
+
fileName: file.name,
|
|
1396
|
+
mimeType: file.type || "",
|
|
1397
|
+
sizeBytes: file.size,
|
|
1398
|
+
maxSizeBytes: maxSize ?? null,
|
|
1399
|
+
},
|
|
1400
|
+
});
|
|
1359
1401
|
const isDocx = isDocxMime(file.type) || file.name.toLowerCase().endsWith(".docx");
|
|
1360
1402
|
if (!isDocx) {
|
|
1403
|
+
debugWordImport("文件校验失败:非 docx", {
|
|
1404
|
+
level: "warn",
|
|
1405
|
+
group: "word-import-file",
|
|
1406
|
+
});
|
|
1361
1407
|
status.textContent = "仅支持导入 .docx 文件";
|
|
1362
1408
|
return;
|
|
1363
1409
|
}
|
|
1364
|
-
const maxSize = options.importDocx?.maxSizeBytes;
|
|
1365
1410
|
if (maxSize && file.size > maxSize) {
|
|
1411
|
+
debugWordImport("文件校验失败:超过大小限制", {
|
|
1412
|
+
level: "warn",
|
|
1413
|
+
group: "word-import-file",
|
|
1414
|
+
payload: {
|
|
1415
|
+
sizeBytes: file.size,
|
|
1416
|
+
maxSizeBytes: maxSize,
|
|
1417
|
+
},
|
|
1418
|
+
});
|
|
1366
1419
|
status.textContent = `Word 文件大小不能超过 ${Math.round(maxSize / 1024 / 1024)}MB`;
|
|
1367
1420
|
return;
|
|
1368
1421
|
}
|
|
1369
1422
|
status.textContent = `正在导入 Word:${file.name}`;
|
|
1370
1423
|
let imageUploadIndex = 0;
|
|
1424
|
+
let importRoute = "ooxml";
|
|
1425
|
+
const xmlSourceInfo = createDocxXmlParseDebugInfo();
|
|
1371
1426
|
try {
|
|
1372
1427
|
const mammothNamespace = await import("mammoth");
|
|
1373
1428
|
const mammothModule = resolveMammothModule(mammothNamespace);
|
|
1374
1429
|
const arrayBuffer = await file.arrayBuffer();
|
|
1375
|
-
|
|
1430
|
+
debugWordImport("文件已读取为 ArrayBuffer", {
|
|
1431
|
+
group: "word-import-file",
|
|
1432
|
+
payload: {
|
|
1433
|
+
byteLength: arrayBuffer.byteLength,
|
|
1434
|
+
},
|
|
1435
|
+
});
|
|
1436
|
+
const xmlPreferredFlowBlocks = await parseDocxFlowBlocksFromXml(arrayBuffer, resolveDocxImportMaxFlowBlockWidth(state.doc.settings.page, paperWidth), xmlSourceInfo);
|
|
1437
|
+
debugWordImport("OOXML 源信息摘要", {
|
|
1438
|
+
group: "word-import-xml",
|
|
1439
|
+
payload: xmlSourceInfo,
|
|
1440
|
+
});
|
|
1376
1441
|
if (xmlPreferredFlowBlocks?.length) {
|
|
1442
|
+
debugWordImport("命中 OOXML 高保真解析路径", {
|
|
1443
|
+
group: "word-import-result",
|
|
1444
|
+
payload: {
|
|
1445
|
+
route: "ooxml",
|
|
1446
|
+
flowBlockCount: xmlPreferredFlowBlocks.length,
|
|
1447
|
+
paragraphCount: xmlSourceInfo.paragraphCount,
|
|
1448
|
+
tableCount: xmlSourceInfo.tableCount,
|
|
1449
|
+
},
|
|
1450
|
+
});
|
|
1377
1451
|
syncEditorToDoc();
|
|
1378
1452
|
const nextDoc = clone(state.doc);
|
|
1379
1453
|
const page = getCurrentPage(nextDoc, state.pageIndex);
|
|
1380
1454
|
if (!page) {
|
|
1455
|
+
debugWordImport("导入失败:当前页不存在", {
|
|
1456
|
+
level: "error",
|
|
1457
|
+
group: "word-import-result",
|
|
1458
|
+
payload: {
|
|
1459
|
+
route: "ooxml",
|
|
1460
|
+
},
|
|
1461
|
+
});
|
|
1381
1462
|
status.textContent = "当前页面不存在,导入失败";
|
|
1382
1463
|
return;
|
|
1383
1464
|
}
|
|
@@ -1385,9 +1466,31 @@ export function mountEditorWorkbench(container, options = {}) {
|
|
|
1385
1466
|
nextDoc.meta.updatedAt = new Date().toISOString();
|
|
1386
1467
|
editorRenderKey = "";
|
|
1387
1468
|
updateStateDoc(nextDoc, "Word 导入成功(高保真文本样式)");
|
|
1469
|
+
debugWordImport("Word 导入成功", {
|
|
1470
|
+
group: "word-import-result",
|
|
1471
|
+
payload: {
|
|
1472
|
+
route: "ooxml",
|
|
1473
|
+
flowBlockCount: xmlPreferredFlowBlocks.length,
|
|
1474
|
+
},
|
|
1475
|
+
});
|
|
1388
1476
|
return;
|
|
1389
1477
|
}
|
|
1478
|
+
importRoute = "mammoth";
|
|
1479
|
+
debugWordImport("OOXML 结果为空,回退到 Mammoth 路径", {
|
|
1480
|
+
level: "warn",
|
|
1481
|
+
group: "word-import-xml",
|
|
1482
|
+
payload: {
|
|
1483
|
+
reason: xmlSourceInfo.error || "OOXML parser returned empty result",
|
|
1484
|
+
},
|
|
1485
|
+
});
|
|
1390
1486
|
const defaultTextStyle = await extractDocxDefaultTextStyle(arrayBuffer);
|
|
1487
|
+
debugWordImport("默认文本样式提取结果", {
|
|
1488
|
+
group: "word-import-mammoth",
|
|
1489
|
+
payload: {
|
|
1490
|
+
hasDefaultTextStyle: Boolean(defaultTextStyle),
|
|
1491
|
+
defaultTextStyle: defaultTextStyle || null,
|
|
1492
|
+
},
|
|
1493
|
+
});
|
|
1391
1494
|
const result = await mammothModule.convertToHtml({ arrayBuffer }, {
|
|
1392
1495
|
convertImage: mammothModule.images.imgElement(async (image) => {
|
|
1393
1496
|
const imageUploader = ensureMediaUploader("image");
|
|
@@ -1400,23 +1503,72 @@ export function mountEditorWorkbench(container, options = {}) {
|
|
|
1400
1503
|
const contentType = normalizeDocxImageMime(image.contentType) || "image/png";
|
|
1401
1504
|
const extension = fileExtensionByMime(contentType);
|
|
1402
1505
|
const imageFile = base64ToFile(base64, contentType, `docx-image-${Date.now()}-${imageUploadIndex}.${extension}`);
|
|
1506
|
+
debugWordImport("开始上传内嵌图片", {
|
|
1507
|
+
group: "word-import-mammoth",
|
|
1508
|
+
payload: {
|
|
1509
|
+
index: imageUploadIndex,
|
|
1510
|
+
contentType,
|
|
1511
|
+
fileName: imageFile.name,
|
|
1512
|
+
sizeBytes: imageFile.size,
|
|
1513
|
+
},
|
|
1514
|
+
});
|
|
1403
1515
|
const uploadResult = await uploadMediaFile(imageFile, "image", (percent) => {
|
|
1404
1516
|
status.textContent = `第 ${imageUploadIndex} 张图片上传中:${formatUploadProgress(percent)}%`;
|
|
1405
1517
|
});
|
|
1406
1518
|
if (!uploadResult?.url) {
|
|
1407
1519
|
throw new Error(`第 ${imageUploadIndex} 张图片上传成功但未返回可用地址`);
|
|
1408
1520
|
}
|
|
1521
|
+
debugWordImport("内嵌图片上传完成", {
|
|
1522
|
+
group: "word-import-mammoth",
|
|
1523
|
+
payload: {
|
|
1524
|
+
index: imageUploadIndex,
|
|
1525
|
+
url: uploadResult.url,
|
|
1526
|
+
},
|
|
1527
|
+
});
|
|
1409
1528
|
return {
|
|
1410
1529
|
src: uploadResult.url,
|
|
1411
1530
|
alt: uploadResult.alt || imageFile.name,
|
|
1412
1531
|
};
|
|
1413
1532
|
}),
|
|
1414
1533
|
});
|
|
1534
|
+
const mammothMessages = result.messages || [];
|
|
1535
|
+
if (mammothMessages.length) {
|
|
1536
|
+
debugWordImport("Mammoth 兼容性提示", {
|
|
1537
|
+
level: "warn",
|
|
1538
|
+
group: "word-import-mammoth",
|
|
1539
|
+
payload: mammothMessages.map((item, index) => ({
|
|
1540
|
+
index: index + 1,
|
|
1541
|
+
type: item.type,
|
|
1542
|
+
message: item.message,
|
|
1543
|
+
})),
|
|
1544
|
+
});
|
|
1545
|
+
}
|
|
1546
|
+
else {
|
|
1547
|
+
debugWordImport("Mammoth 未返回兼容性提示", {
|
|
1548
|
+
group: "word-import-mammoth",
|
|
1549
|
+
});
|
|
1550
|
+
}
|
|
1415
1551
|
const flowBlocks = parseRichHTMLToFlowBlocks(result.value || "", defaultTextStyle);
|
|
1552
|
+
debugWordImport("Mammoth HTML 已转换为 FlowBlocks", {
|
|
1553
|
+
group: "word-import-result",
|
|
1554
|
+
payload: {
|
|
1555
|
+
route: importRoute,
|
|
1556
|
+
flowBlockCount: flowBlocks.length,
|
|
1557
|
+
compatibilityMessageCount: mammothMessages.length,
|
|
1558
|
+
embeddedImageCount: imageUploadIndex,
|
|
1559
|
+
},
|
|
1560
|
+
});
|
|
1416
1561
|
syncEditorToDoc();
|
|
1417
1562
|
const nextDoc = clone(state.doc);
|
|
1418
1563
|
const page = getCurrentPage(nextDoc, state.pageIndex);
|
|
1419
1564
|
if (!page) {
|
|
1565
|
+
debugWordImport("导入失败:当前页不存在", {
|
|
1566
|
+
level: "error",
|
|
1567
|
+
group: "word-import-result",
|
|
1568
|
+
payload: {
|
|
1569
|
+
route: importRoute,
|
|
1570
|
+
},
|
|
1571
|
+
});
|
|
1420
1572
|
status.textContent = "当前页面不存在,导入失败";
|
|
1421
1573
|
return;
|
|
1422
1574
|
}
|
|
@@ -1424,11 +1576,31 @@ export function mountEditorWorkbench(container, options = {}) {
|
|
|
1424
1576
|
nextDoc.meta.updatedAt = new Date().toISOString();
|
|
1425
1577
|
editorRenderKey = "";
|
|
1426
1578
|
updateStateDoc(nextDoc, "Word 导入成功");
|
|
1427
|
-
if (
|
|
1428
|
-
status.textContent = `Word 导入成功(${
|
|
1429
|
-
}
|
|
1579
|
+
if (mammothMessages.length) {
|
|
1580
|
+
status.textContent = `Word 导入成功(${mammothMessages.length} 条兼容性提示)`;
|
|
1581
|
+
}
|
|
1582
|
+
debugWordImport("Word 导入成功", {
|
|
1583
|
+
group: "word-import-result",
|
|
1584
|
+
payload: {
|
|
1585
|
+
route: importRoute,
|
|
1586
|
+
flowBlockCount: flowBlocks.length,
|
|
1587
|
+
compatibilityMessageCount: mammothMessages.length,
|
|
1588
|
+
embeddedImageCount: imageUploadIndex,
|
|
1589
|
+
},
|
|
1590
|
+
});
|
|
1430
1591
|
}
|
|
1431
1592
|
catch (error) {
|
|
1593
|
+
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
1594
|
+
debugWordImport("Word 导入失败", {
|
|
1595
|
+
level: "error",
|
|
1596
|
+
group: "word-import-result",
|
|
1597
|
+
payload: {
|
|
1598
|
+
route: importRoute,
|
|
1599
|
+
embeddedImageCount: imageUploadIndex,
|
|
1600
|
+
error: errorMessage,
|
|
1601
|
+
xmlSourceInfo,
|
|
1602
|
+
},
|
|
1603
|
+
});
|
|
1432
1604
|
status.textContent =
|
|
1433
1605
|
error instanceof Error
|
|
1434
1606
|
? `Word 导入失败:${error.message}`
|
|
@@ -5716,25 +5888,89 @@ function resolveMammothModule(namespace) {
|
|
|
5716
5888
|
const candidate = namespace?.default ?? namespace;
|
|
5717
5889
|
return candidate;
|
|
5718
5890
|
}
|
|
5719
|
-
|
|
5891
|
+
function createDocxXmlParseDebugInfo() {
|
|
5892
|
+
return {
|
|
5893
|
+
archiveLoaded: false,
|
|
5894
|
+
hasDocumentXml: false,
|
|
5895
|
+
hasStylesXml: false,
|
|
5896
|
+
hasThemeXml: false,
|
|
5897
|
+
paragraphCount: 0,
|
|
5898
|
+
tableCount: 0,
|
|
5899
|
+
blockCount: 0,
|
|
5900
|
+
};
|
|
5901
|
+
}
|
|
5902
|
+
function countDocxBodyNodeKinds(documentXml) {
|
|
5903
|
+
const parser = new DOMParser();
|
|
5904
|
+
const documentDoc = parser.parseFromString(documentXml, "application/xml");
|
|
5905
|
+
const body = findDescendantByLocalName(documentDoc.documentElement, "body");
|
|
5906
|
+
if (!body) {
|
|
5907
|
+
return {
|
|
5908
|
+
paragraphCount: 0,
|
|
5909
|
+
tableCount: 0,
|
|
5910
|
+
};
|
|
5911
|
+
}
|
|
5912
|
+
let paragraphCount = 0;
|
|
5913
|
+
let tableCount = 0;
|
|
5914
|
+
for (const child of Array.from(body.children)) {
|
|
5915
|
+
const name = xmlLocalName(child);
|
|
5916
|
+
if (name === "p") {
|
|
5917
|
+
paragraphCount += 1;
|
|
5918
|
+
continue;
|
|
5919
|
+
}
|
|
5920
|
+
if (name === "tbl") {
|
|
5921
|
+
tableCount += 1;
|
|
5922
|
+
}
|
|
5923
|
+
}
|
|
5924
|
+
return {
|
|
5925
|
+
paragraphCount,
|
|
5926
|
+
tableCount,
|
|
5927
|
+
};
|
|
5928
|
+
}
|
|
5929
|
+
async function parseDocxFlowBlocksFromXml(arrayBuffer, maxFlowBlockWidth, debugInfo) {
|
|
5720
5930
|
try {
|
|
5721
5931
|
const archive = await loadDocxArchive(arrayBuffer);
|
|
5722
5932
|
if (!archive) {
|
|
5933
|
+
if (debugInfo) {
|
|
5934
|
+
debugInfo.error = "DOCX archive load failed";
|
|
5935
|
+
}
|
|
5723
5936
|
return undefined;
|
|
5724
5937
|
}
|
|
5725
|
-
const
|
|
5726
|
-
|
|
5727
|
-
|
|
5938
|
+
const documentEntry = archive.file("word/document.xml");
|
|
5939
|
+
const stylesEntry = archive.file("word/styles.xml");
|
|
5940
|
+
const themeEntry = archive.file("word/theme/theme1.xml");
|
|
5941
|
+
if (debugInfo) {
|
|
5942
|
+
debugInfo.archiveLoaded = true;
|
|
5943
|
+
debugInfo.hasDocumentXml = Boolean(documentEntry);
|
|
5944
|
+
debugInfo.hasStylesXml = Boolean(stylesEntry);
|
|
5945
|
+
debugInfo.hasThemeXml = Boolean(themeEntry);
|
|
5946
|
+
}
|
|
5947
|
+
const documentXml = await documentEntry?.async("string");
|
|
5728
5948
|
if (!documentXml) {
|
|
5949
|
+
if (debugInfo) {
|
|
5950
|
+
debugInfo.error = "word/document.xml missing or empty";
|
|
5951
|
+
}
|
|
5729
5952
|
return undefined;
|
|
5730
5953
|
}
|
|
5731
|
-
|
|
5732
|
-
|
|
5733
|
-
.
|
|
5734
|
-
|
|
5735
|
-
|
|
5954
|
+
if (debugInfo) {
|
|
5955
|
+
const counts = countDocxBodyNodeKinds(documentXml);
|
|
5956
|
+
debugInfo.paragraphCount = counts.paragraphCount;
|
|
5957
|
+
debugInfo.tableCount = counts.tableCount;
|
|
5958
|
+
}
|
|
5959
|
+
const stylesXml = await stylesEntry?.async("string");
|
|
5960
|
+
const themeXml = await themeEntry?.async("string");
|
|
5961
|
+
const blocks = parseDocxBodyToFlowBlocks(documentXml, stylesXml, themeXml, maxFlowBlockWidth);
|
|
5962
|
+
if (debugInfo) {
|
|
5963
|
+
debugInfo.blockCount = blocks?.length || 0;
|
|
5964
|
+
if (!blocks?.length && !debugInfo.error) {
|
|
5965
|
+
debugInfo.error = "OOXML parser returned no flow blocks";
|
|
5966
|
+
}
|
|
5967
|
+
}
|
|
5968
|
+
return blocks;
|
|
5736
5969
|
}
|
|
5737
|
-
catch {
|
|
5970
|
+
catch (error) {
|
|
5971
|
+
if (debugInfo) {
|
|
5972
|
+
debugInfo.error = error instanceof Error ? error.message : String(error);
|
|
5973
|
+
}
|
|
5738
5974
|
return undefined;
|
|
5739
5975
|
}
|
|
5740
5976
|
}
|