@file-viewer/renderer-word 2.2.5 → 2.2.6

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.
@@ -1,6 +1,10 @@
1
1
  import type { Options, renderAsync } from '@file-viewer/docx';
2
- import { type FileRenderContext, type FileViewerRenderedInstance as AppWrapper } from '@file-viewer/core';
2
+ import { type FileRenderContext, type FileViewerDocxOptions, type FileViewerRenderedInstance as AppWrapper } from '@file-viewer/core';
3
3
  type DocxRenderAsync = typeof renderAsync;
4
+ type DocxExternalLinkPolicy = NonNullable<FileViewerDocxOptions['externalLinkPolicy']>;
5
+ type DocxRenderOptions = Partial<Options> & {
6
+ externalLinkPolicy: DocxExternalLinkPolicy;
7
+ };
4
8
  export declare const isMissingDocxHeaderFooterRootError: (error: unknown) => boolean;
5
9
  /**
6
10
  * Some malformed or partially generated DOCX files reference a header/footer
@@ -16,6 +20,8 @@ export declare const renderDocxWithHeaderFooterFallback: (render: DocxRenderAsyn
16
20
  */
17
21
  export declare const resolveDocxPageBackgroundImage: (buffer: ArrayBuffer, createXmlParser?: () => Pick<DOMParser, "parseFromString">) => Promise<string | undefined>;
18
22
  export declare const applyDocxPageBackgroundImage: (target: HTMLDivElement, imageUrl: string | undefined) => number;
23
+ export declare const applyDocxExternalLinkPolicy: (target: Pick<ParentNode, "querySelectorAll">, policy: DocxExternalLinkPolicy) => number;
24
+ export declare const createDocxOptions: (target: HTMLDivElement, context: FileRenderContext | undefined, notifyProgressiveRender: () => void) => DocxRenderOptions;
19
25
  /**
20
26
  * 渲染docx文件
21
27
  */
package/dist/wordDocx.js CHANGED
@@ -260,8 +260,27 @@ const appendDocxVendorAssetVersion = (url, explicitUrl) => {
260
260
  }
261
261
  return `${url}${url.includes('?') ? '&' : '?'}file-viewer-docx=${DOCX_VENDOR_ASSET_VERSION}`;
262
262
  };
263
- const createDocxOptions = (target, context, notifyProgressiveRender) => {
264
- var _a, _b;
263
+ export const applyDocxExternalLinkPolicy = (target, policy) => {
264
+ if (policy === 'allow') {
265
+ return 0;
266
+ }
267
+ let blocked = 0;
268
+ target.querySelectorAll('a[href]').forEach(anchor => {
269
+ const href = anchor.getAttribute('href');
270
+ if (!href || href.startsWith('#')) {
271
+ return;
272
+ }
273
+ if (!anchor.hasAttribute('data-docx-external-href')) {
274
+ anchor.setAttribute('data-docx-external-href', href);
275
+ }
276
+ anchor.removeAttribute('href');
277
+ anchor.setAttribute('aria-disabled', 'true');
278
+ blocked += 1;
279
+ });
280
+ return blocked;
281
+ };
282
+ export const createDocxOptions = (target, context, notifyProgressiveRender) => {
283
+ var _a, _b, _c;
265
284
  const docxOptions = (_a = context === null || context === void 0 ? void 0 : context.options) === null || _a === void 0 ? void 0 : _a.docx;
266
285
  const documentBaseUrl = resolveFileViewerRuntimeAssetBaseUrl(target.ownerDocument);
267
286
  const useWorker = shouldUseDocxWorker(target, docxOptions);
@@ -272,12 +291,19 @@ const createDocxOptions = (target, context, notifyProgressiveRender) => {
272
291
  notifyProgressiveRender();
273
292
  }
274
293
  };
294
+ const externalLinkPolicy = (_b = docxOptions === null || docxOptions === void 0 ? void 0 : docxOptions.externalLinkPolicy) !== null && _b !== void 0 ? _b : 'block';
275
295
  const options = {
276
296
  useWorker,
277
297
  breakPages: usePagedLayout,
278
- ignoreLastRenderedPageBreak: (_b = docxOptions === null || docxOptions === void 0 ? void 0 : docxOptions.ignoreLastRenderedPageBreak) !== null && _b !== void 0 ? _b : !usePagedLayout,
298
+ ignoreLastRenderedPageBreak: (_c = docxOptions === null || docxOptions === void 0 ? void 0 : docxOptions.ignoreLastRenderedPageBreak) !== null && _c !== void 0 ? _c : !usePagedLayout,
299
+ externalLinkPolicy,
279
300
  darkMode,
280
- progress
301
+ progress: event => {
302
+ if (event.phase === 'render' || event.phase === 'layout' || event.phase === 'done') {
303
+ applyDocxExternalLinkPolicy(target, externalLinkPolicy);
304
+ }
305
+ progress(event);
306
+ }
281
307
  };
282
308
  if (useWorker) {
283
309
  options.workerUrl = appendDocxVendorAssetVersion(resolveFileViewerDocxWorkerUrl(docxOptions, documentBaseUrl), !!(docxOptions === null || docxOptions === void 0 ? void 0 : docxOptions.workerUrl));
@@ -692,6 +718,7 @@ export default async function (buffer, target, context) {
692
718
  ...defaultOptions,
693
719
  ...docxOptions
694
720
  });
721
+ applyDocxExternalLinkPolicy(target, docxOptions.externalLinkPolicy);
695
722
  target.dataset.docxHeaderFooterFallback = usedHeaderFooterFallback ? 'true' : 'false';
696
723
  target.dataset.docxPageBackground =
697
724
  applyDocxPageBackgroundImage(target, pageBackgroundImage) > 0 ? 'true' : 'false';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@file-viewer/renderer-word",
3
- "version": "2.2.5",
3
+ "version": "2.2.6",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Standalone Word and compatible document renderer plugin for File Viewer powered by @file-viewer/docx, @file-viewer/doc, and RTF/ODF parsing.",
@@ -57,8 +57,8 @@
57
57
  "LICENSE"
58
58
  ],
59
59
  "dependencies": {
60
- "@file-viewer/core": "2.2.5",
61
- "@file-viewer/doc": "2.2.5",
60
+ "@file-viewer/core": "2.2.6",
61
+ "@file-viewer/doc": "2.2.6",
62
62
  "@file-viewer/docx": "^0.3.26",
63
63
  "jszip": "^3.10.1",
64
64
  "rtf.js": "^3.0.9"