@vaadin-component-factory/vcf-pdf-viewer 0.9.0 → 1.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.
Files changed (172) hide show
  1. package/README.md +1 -1
  2. package/package.json +42 -26
  3. package/{src/display → pdfjs/dist}/display_utils.js +344 -139
  4. package/{src/display → pdfjs/dist}/fetch_stream.js +115 -97
  5. package/pdfjs/dist/l10n_utils.js +140 -0
  6. package/{src/shared → pdfjs/dist}/message_handler.js +243 -259
  7. package/{src/display → pdfjs/dist}/network.js +149 -87
  8. package/{src/display/content_disposition.js → pdfjs/dist/network_utils.js} +167 -55
  9. package/{src/display → pdfjs/dist}/node_stream.js +133 -98
  10. package/pdfjs/dist/pdf.js +12778 -0
  11. package/pdfjs/dist/pdf_link_service.js +638 -0
  12. package/pdfjs/dist/pdf_rendering_queue.js +199 -0
  13. package/pdfjs/dist/pdf_thumbnail_viewer.js +819 -0
  14. package/pdfjs/dist/pdf_viewer.js +3598 -0
  15. package/pdfjs/dist/ui_utils.js +1033 -0
  16. package/{src/shared → pdfjs/dist}/util.js +301 -287
  17. package/pdfjs/dist/worker.js +62813 -0
  18. package/src/vcf-pdf-viewer.js +98 -46
  19. package/theme/lumo/vcf-pdf-viewer-styles.js +4 -4
  20. package/theme/material/vcf-pdf-viewer-styles.js +4 -4
  21. package/theme/material/vcf-pdf-viewer.js +2 -2
  22. package/src/core/.eslintrc +0 -13
  23. package/src/core/annotation.js +0 -2948
  24. package/src/core/arithmetic_decoder.js +0 -182
  25. package/src/core/ascii_85_stream.js +0 -98
  26. package/src/core/ascii_hex_stream.js +0 -79
  27. package/src/core/base_stream.js +0 -110
  28. package/src/core/bidi.js +0 -438
  29. package/src/core/calibri_factors.js +0 -308
  30. package/src/core/catalog.js +0 -1459
  31. package/src/core/ccitt.js +0 -1062
  32. package/src/core/ccitt_stream.js +0 -60
  33. package/src/core/cff_font.js +0 -116
  34. package/src/core/cff_parser.js +0 -1949
  35. package/src/core/charsets.js +0 -119
  36. package/src/core/chunked_stream.js +0 -557
  37. package/src/core/cmap.js +0 -1039
  38. package/src/core/colorspace.js +0 -1533
  39. package/src/core/core_utils.js +0 -464
  40. package/src/core/crypto.js +0 -1900
  41. package/src/core/decode_stream.js +0 -170
  42. package/src/core/decrypt_stream.js +0 -59
  43. package/src/core/default_appearance.js +0 -99
  44. package/src/core/document.js +0 -1456
  45. package/src/core/encodings.js +0 -301
  46. package/src/core/evaluator.js +0 -4601
  47. package/src/core/file_spec.js +0 -108
  48. package/src/core/flate_stream.js +0 -402
  49. package/src/core/font_renderer.js +0 -882
  50. package/src/core/fonts.js +0 -3260
  51. package/src/core/fonts_utils.js +0 -221
  52. package/src/core/function.js +0 -1257
  53. package/src/core/glyf.js +0 -706
  54. package/src/core/glyphlist.js +0 -4558
  55. package/src/core/helvetica_factors.js +0 -353
  56. package/src/core/image.js +0 -802
  57. package/src/core/image_utils.js +0 -291
  58. package/src/core/jbig2.js +0 -2572
  59. package/src/core/jbig2_stream.js +0 -73
  60. package/src/core/jpeg_stream.js +0 -105
  61. package/src/core/jpg.js +0 -1416
  62. package/src/core/jpx.js +0 -2343
  63. package/src/core/jpx_stream.js +0 -87
  64. package/src/core/liberationsans_widths.js +0 -221
  65. package/src/core/lzw_stream.js +0 -150
  66. package/src/core/metadata_parser.js +0 -146
  67. package/src/core/metrics.js +0 -2970
  68. package/src/core/murmurhash3.js +0 -139
  69. package/src/core/myriadpro_factors.js +0 -290
  70. package/src/core/name_number_tree.js +0 -153
  71. package/src/core/object_loader.js +0 -149
  72. package/src/core/opentype_file_builder.js +0 -154
  73. package/src/core/operator_list.js +0 -734
  74. package/src/core/parser.js +0 -1416
  75. package/src/core/pattern.js +0 -985
  76. package/src/core/pdf_manager.js +0 -217
  77. package/src/core/predictor_stream.js +0 -238
  78. package/src/core/primitives.js +0 -402
  79. package/src/core/ps_parser.js +0 -272
  80. package/src/core/run_length_stream.js +0 -61
  81. package/src/core/segoeui_factors.js +0 -308
  82. package/src/core/standard_fonts.js +0 -817
  83. package/src/core/stream.js +0 -103
  84. package/src/core/struct_tree.js +0 -335
  85. package/src/core/to_unicode_map.js +0 -103
  86. package/src/core/type1_font.js +0 -421
  87. package/src/core/type1_parser.js +0 -776
  88. package/src/core/unicode.js +0 -1649
  89. package/src/core/worker.js +0 -848
  90. package/src/core/worker_stream.js +0 -135
  91. package/src/core/writer.js +0 -278
  92. package/src/core/xfa/bind.js +0 -652
  93. package/src/core/xfa/builder.js +0 -207
  94. package/src/core/xfa/config.js +0 -1926
  95. package/src/core/xfa/connection_set.js +0 -202
  96. package/src/core/xfa/data.js +0 -82
  97. package/src/core/xfa/datasets.js +0 -76
  98. package/src/core/xfa/factory.js +0 -111
  99. package/src/core/xfa/fonts.js +0 -181
  100. package/src/core/xfa/formcalc_lexer.js +0 -385
  101. package/src/core/xfa/formcalc_parser.js +0 -1340
  102. package/src/core/xfa/html_utils.js +0 -639
  103. package/src/core/xfa/layout.js +0 -383
  104. package/src/core/xfa/locale_set.js +0 -345
  105. package/src/core/xfa/namespaces.js +0 -81
  106. package/src/core/xfa/parser.js +0 -184
  107. package/src/core/xfa/setup.js +0 -38
  108. package/src/core/xfa/signature.js +0 -40
  109. package/src/core/xfa/som.js +0 -338
  110. package/src/core/xfa/stylesheet.js +0 -40
  111. package/src/core/xfa/template.js +0 -6260
  112. package/src/core/xfa/text.js +0 -290
  113. package/src/core/xfa/unknown.js +0 -29
  114. package/src/core/xfa/utils.js +0 -217
  115. package/src/core/xfa/xdp.js +0 -59
  116. package/src/core/xfa/xfa_object.js +0 -1130
  117. package/src/core/xfa/xhtml.js +0 -543
  118. package/src/core/xfa_fonts.js +0 -208
  119. package/src/core/xml_parser.js +0 -507
  120. package/src/core/xref.js +0 -899
  121. package/src/display/annotation_layer.js +0 -2107
  122. package/src/display/annotation_storage.js +0 -113
  123. package/src/display/api.js +0 -3292
  124. package/src/display/base_factory.js +0 -180
  125. package/src/display/canvas.js +0 -2828
  126. package/src/display/font_loader.js +0 -484
  127. package/src/display/metadata.js +0 -41
  128. package/src/display/network_utils.js +0 -100
  129. package/src/display/node_utils.js +0 -83
  130. package/src/display/optional_content_config.js +0 -189
  131. package/src/display/pattern_helper.js +0 -659
  132. package/src/display/svg.js +0 -1709
  133. package/src/display/text_layer.js +0 -847
  134. package/src/display/transport_stream.js +0 -303
  135. package/src/display/worker_options.js +0 -40
  136. package/src/display/xfa_layer.js +0 -204
  137. package/src/doc_helper.js +0 -25
  138. package/src/images/logo.svg +0 -41
  139. package/src/interfaces.js +0 -169
  140. package/src/license_header.js +0 -14
  141. package/src/license_header_libre.js +0 -21
  142. package/src/pdf.image_decoders.js +0 -46
  143. package/src/pdf.js +0 -146
  144. package/src/pdf.sandbox.external.js +0 -181
  145. package/src/pdf.sandbox.js +0 -151
  146. package/src/pdf.scripting.js +0 -25
  147. package/src/pdf.worker.entry.js +0 -19
  148. package/src/pdf.worker.js +0 -23
  149. package/src/scripting_api/aform.js +0 -608
  150. package/src/scripting_api/app.js +0 -621
  151. package/src/scripting_api/color.js +0 -129
  152. package/src/scripting_api/common.js +0 -58
  153. package/src/scripting_api/console.js +0 -38
  154. package/src/scripting_api/constants.js +0 -208
  155. package/src/scripting_api/doc.js +0 -1195
  156. package/src/scripting_api/error.js +0 -23
  157. package/src/scripting_api/event.js +0 -232
  158. package/src/scripting_api/field.js +0 -620
  159. package/src/scripting_api/fullscreen.js +0 -145
  160. package/src/scripting_api/initialization.js +0 -223
  161. package/src/scripting_api/pdf_object.js +0 -24
  162. package/src/scripting_api/print_params.js +0 -146
  163. package/src/scripting_api/proxy.js +0 -139
  164. package/src/scripting_api/thermometer.js +0 -69
  165. package/src/scripting_api/util.js +0 -581
  166. package/src/shared/.eslintrc +0 -13
  167. package/src/shared/cffStandardStrings.js +0 -311
  168. package/src/shared/compatibility.js +0 -114
  169. package/src/shared/fonts_utils.js +0 -429
  170. package/src/shared/is_node.js +0 -27
  171. package/src/shared/scripting_utils.js +0 -85
  172. package/src/worker_loader.js +0 -32
@@ -0,0 +1,638 @@
1
+ import { parseQueryString } from './ui_utils.js';
2
+
3
+ /* Copyright 2015 Mozilla Foundation
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ /**
18
+ * @typedef {Object} PDFLinkServiceOptions
19
+ * @property {EventBus} eventBus - The application event bus.
20
+ * @property {number} [externalLinkTarget] - Specifies the `target` attribute
21
+ * for external links. Must use one of the values from {LinkTarget}.
22
+ * Defaults to using no target.
23
+ * @property {string} [externalLinkRel] - Specifies the `rel` attribute for
24
+ * external links. Defaults to stripping the referrer.
25
+ * @property {boolean} [ignoreDestinationZoom] - Ignores the zoom argument,
26
+ * thus preserving the current zoom level in the viewer, when navigating
27
+ * to internal destinations. The default value is `false`.
28
+ */
29
+
30
+ /**
31
+ * Performs navigation functions inside PDF, such as opening specified page,
32
+ * or destination.
33
+ * @implements {IPDFLinkService}
34
+ */
35
+
36
+ class PDFLinkService {
37
+ /**
38
+ * @param {PDFLinkServiceOptions} options
39
+ */
40
+ constructor({
41
+ eventBus,
42
+ externalLinkTarget = null,
43
+ externalLinkRel = null,
44
+ ignoreDestinationZoom = false
45
+ } = {}) {
46
+ this.eventBus = eventBus;
47
+ this.externalLinkTarget = externalLinkTarget;
48
+ this.externalLinkRel = externalLinkRel;
49
+ this.externalLinkEnabled = true;
50
+ this._ignoreDestinationZoom = ignoreDestinationZoom;
51
+ this.baseUrl = null;
52
+ this.pdfDocument = null;
53
+ this.pdfViewer = null;
54
+ this.pdfHistory = null;
55
+ this._pagesRefCache = null;
56
+ }
57
+
58
+ setDocument(pdfDocument, baseUrl = null) {
59
+ this.baseUrl = baseUrl;
60
+ this.pdfDocument = pdfDocument;
61
+ this._pagesRefCache = Object.create(null);
62
+ }
63
+
64
+ setViewer(pdfViewer) {
65
+ this.pdfViewer = pdfViewer;
66
+ }
67
+
68
+ setHistory(pdfHistory) {
69
+ this.pdfHistory = pdfHistory;
70
+ }
71
+ /**
72
+ * @type {number}
73
+ */
74
+
75
+
76
+ get pagesCount() {
77
+ return this.pdfDocument ? this.pdfDocument.numPages : 0;
78
+ }
79
+ /**
80
+ * @type {number}
81
+ */
82
+
83
+
84
+ get page() {
85
+ return this.pdfViewer.currentPageNumber;
86
+ }
87
+ /**
88
+ * @param {number} value
89
+ */
90
+
91
+
92
+ set page(value) {
93
+ this.pdfViewer.currentPageNumber = value;
94
+ }
95
+ /**
96
+ * @type {number}
97
+ */
98
+
99
+
100
+ get rotation() {
101
+ return this.pdfViewer.pagesRotation;
102
+ }
103
+ /**
104
+ * @param {number} value
105
+ */
106
+
107
+
108
+ set rotation(value) {
109
+ this.pdfViewer.pagesRotation = value;
110
+ }
111
+ /**
112
+ * @private
113
+ */
114
+
115
+
116
+ _goToDestinationHelper(rawDest, namedDest = null, explicitDest) {
117
+ // Dest array looks like that: <page-ref> </XYZ|/FitXXX> <args..>
118
+ const destRef = explicitDest[0];
119
+ let pageNumber;
120
+
121
+ if (typeof destRef === "object" && destRef !== null) {
122
+ pageNumber = this._cachedPageNumber(destRef);
123
+
124
+ if (pageNumber === null) {
125
+ // Fetch the page reference if it's not yet available. This could
126
+ // only occur during loading, before all pages have been resolved.
127
+ this.pdfDocument.getPageIndex(destRef).then(pageIndex => {
128
+ this.cachePageRef(pageIndex + 1, destRef);
129
+
130
+ this._goToDestinationHelper(rawDest, namedDest, explicitDest);
131
+ }).catch(() => {
132
+ console.error(`PDFLinkService._goToDestinationHelper: "${destRef}" is not ` + `a valid page reference, for dest="${rawDest}".`);
133
+ });
134
+ return;
135
+ }
136
+ } else if (Number.isInteger(destRef)) {
137
+ pageNumber = destRef + 1;
138
+ } else {
139
+ console.error(`PDFLinkService._goToDestinationHelper: "${destRef}" is not ` + `a valid destination reference, for dest="${rawDest}".`);
140
+ return;
141
+ }
142
+
143
+ if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {
144
+ console.error(`PDFLinkService._goToDestinationHelper: "${pageNumber}" is not ` + `a valid page number, for dest="${rawDest}".`);
145
+ return;
146
+ }
147
+
148
+ if (this.pdfHistory) {
149
+ // Update the browser history before scrolling the new destination into
150
+ // view, to be able to accurately capture the current document position.
151
+ this.pdfHistory.pushCurrentPosition();
152
+ this.pdfHistory.push({
153
+ namedDest,
154
+ explicitDest,
155
+ pageNumber
156
+ });
157
+ }
158
+
159
+ this.pdfViewer.scrollPageIntoView({
160
+ pageNumber,
161
+ destArray: explicitDest,
162
+ ignoreDestinationZoom: this._ignoreDestinationZoom
163
+ });
164
+ }
165
+ /**
166
+ * This method will, when available, also update the browser history.
167
+ *
168
+ * @param {string|Array} dest - The named, or explicit, PDF destination.
169
+ */
170
+
171
+
172
+ async goToDestination(dest) {
173
+ if (!this.pdfDocument) {
174
+ return;
175
+ }
176
+
177
+ let namedDest, explicitDest;
178
+
179
+ if (typeof dest === "string") {
180
+ namedDest = dest;
181
+ explicitDest = await this.pdfDocument.getDestination(dest);
182
+ } else {
183
+ namedDest = null;
184
+ explicitDest = await dest;
185
+ }
186
+
187
+ if (!Array.isArray(explicitDest)) {
188
+ console.error(`PDFLinkService.goToDestination: "${explicitDest}" is not ` + `a valid destination array, for dest="${dest}".`);
189
+ return;
190
+ }
191
+
192
+ this._goToDestinationHelper(dest, namedDest, explicitDest);
193
+ }
194
+ /**
195
+ * This method will, when available, also update the browser history.
196
+ *
197
+ * @param {number|string} val - The page number, or page label.
198
+ */
199
+
200
+
201
+ goToPage(val) {
202
+ if (!this.pdfDocument) {
203
+ return;
204
+ }
205
+
206
+ const pageNumber = typeof val === "string" && this.pdfViewer.pageLabelToPageNumber(val) || val | 0;
207
+
208
+ if (!(Number.isInteger(pageNumber) && pageNumber > 0 && pageNumber <= this.pagesCount)) {
209
+ console.error(`PDFLinkService.goToPage: "${val}" is not a valid page.`);
210
+ return;
211
+ }
212
+
213
+ if (this.pdfHistory) {
214
+ // Update the browser history before scrolling the new page into view,
215
+ // to be able to accurately capture the current document position.
216
+ this.pdfHistory.pushCurrentPosition();
217
+ this.pdfHistory.pushPage(pageNumber);
218
+ }
219
+
220
+ this.pdfViewer.scrollPageIntoView({
221
+ pageNumber
222
+ });
223
+ }
224
+ /**
225
+ * @param {string|Array} dest - The PDF destination object.
226
+ * @returns {string} The hyperlink to the PDF object.
227
+ */
228
+
229
+
230
+ getDestinationHash(dest) {
231
+ if (typeof dest === "string") {
232
+ if (dest.length > 0) {
233
+ return this.getAnchorUrl("#" + escape(dest));
234
+ }
235
+ } else if (Array.isArray(dest)) {
236
+ const str = JSON.stringify(dest);
237
+
238
+ if (str.length > 0) {
239
+ return this.getAnchorUrl("#" + escape(str));
240
+ }
241
+ }
242
+
243
+ return this.getAnchorUrl("");
244
+ }
245
+ /**
246
+ * Prefix the full url on anchor links to make sure that links are resolved
247
+ * relative to the current URL instead of the one defined in <base href>.
248
+ * @param {string} anchor - The anchor hash, including the #.
249
+ * @returns {string} The hyperlink to the PDF object.
250
+ */
251
+
252
+
253
+ getAnchorUrl(anchor) {
254
+ return (this.baseUrl || "") + anchor;
255
+ }
256
+ /**
257
+ * @param {string} hash
258
+ */
259
+
260
+
261
+ setHash(hash) {
262
+ if (!this.pdfDocument) {
263
+ return;
264
+ }
265
+
266
+ let pageNumber, dest;
267
+
268
+ if (hash.includes("=")) {
269
+ const params = parseQueryString(hash);
270
+
271
+ if ("search" in params) {
272
+ this.eventBus.dispatch("findfromurlhash", {
273
+ source: this,
274
+ query: params.search.replace(/"/g, ""),
275
+ phraseSearch: params.phrase === "true"
276
+ });
277
+ } // borrowing syntax from "Parameters for Opening PDF Files"
278
+
279
+
280
+ if ("page" in params) {
281
+ pageNumber = params.page | 0 || 1;
282
+ }
283
+
284
+ if ("zoom" in params) {
285
+ // Build the destination array.
286
+ const zoomArgs = params.zoom.split(","); // scale,left,top
287
+
288
+ const zoomArg = zoomArgs[0];
289
+ const zoomArgNumber = parseFloat(zoomArg);
290
+
291
+ if (!zoomArg.includes("Fit")) {
292
+ // If the zoomArg is a number, it has to get divided by 100. If it's
293
+ // a string, it should stay as it is.
294
+ dest = [null, {
295
+ name: "XYZ"
296
+ }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg];
297
+ } else {
298
+ if (zoomArg === "Fit" || zoomArg === "FitB") {
299
+ dest = [null, {
300
+ name: zoomArg
301
+ }];
302
+ } else if (zoomArg === "FitH" || zoomArg === "FitBH" || zoomArg === "FitV" || zoomArg === "FitBV") {
303
+ dest = [null, {
304
+ name: zoomArg
305
+ }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null];
306
+ } else if (zoomArg === "FitR") {
307
+ if (zoomArgs.length !== 5) {
308
+ console.error('PDFLinkService.setHash: Not enough parameters for "FitR".');
309
+ } else {
310
+ dest = [null, {
311
+ name: zoomArg
312
+ }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0];
313
+ }
314
+ } else {
315
+ console.error(`PDFLinkService.setHash: "${zoomArg}" is not ` + "a valid zoom value.");
316
+ }
317
+ }
318
+ }
319
+
320
+ if (dest) {
321
+ this.pdfViewer.scrollPageIntoView({
322
+ pageNumber: pageNumber || this.page,
323
+ destArray: dest,
324
+ allowNegativeOffset: true
325
+ });
326
+ } else if (pageNumber) {
327
+ this.page = pageNumber; // simple page
328
+ }
329
+
330
+ if ("pagemode" in params) {
331
+ this.eventBus.dispatch("pagemode", {
332
+ source: this,
333
+ mode: params.pagemode
334
+ });
335
+ } // Ensure that this parameter is *always* handled last, in order to
336
+ // guarantee that it won't be overridden (e.g. by the "page" parameter).
337
+
338
+
339
+ if ("nameddest" in params) {
340
+ this.goToDestination(params.nameddest);
341
+ }
342
+ } else {
343
+ // Named (or explicit) destination.
344
+ dest = unescape(hash);
345
+
346
+ try {
347
+ dest = JSON.parse(dest);
348
+
349
+ if (!Array.isArray(dest)) {
350
+ // Avoid incorrectly rejecting a valid named destination, such as
351
+ // e.g. "4.3" or "true", because `JSON.parse` converted its type.
352
+ dest = dest.toString();
353
+ }
354
+ } catch (ex) {}
355
+
356
+ if (typeof dest === "string" || isValidExplicitDestination(dest)) {
357
+ this.goToDestination(dest);
358
+ return;
359
+ }
360
+
361
+ console.error(`PDFLinkService.setHash: "${unescape(hash)}" is not ` + "a valid destination.");
362
+ }
363
+ }
364
+ /**
365
+ * @param {string} action
366
+ */
367
+
368
+
369
+ executeNamedAction(action) {
370
+ // See PDF reference, table 8.45 - Named action
371
+ switch (action) {
372
+ case "GoBack":
373
+ if (this.pdfHistory) {
374
+ this.pdfHistory.back();
375
+ }
376
+
377
+ break;
378
+
379
+ case "GoForward":
380
+ if (this.pdfHistory) {
381
+ this.pdfHistory.forward();
382
+ }
383
+
384
+ break;
385
+
386
+ case "NextPage":
387
+ this.pdfViewer.nextPage();
388
+ break;
389
+
390
+ case "PrevPage":
391
+ this.pdfViewer.previousPage();
392
+ break;
393
+
394
+ case "LastPage":
395
+ this.page = this.pagesCount;
396
+ break;
397
+
398
+ case "FirstPage":
399
+ this.page = 1;
400
+ break;
401
+ // No action according to spec
402
+ }
403
+
404
+ this.eventBus.dispatch("namedaction", {
405
+ source: this,
406
+ action
407
+ });
408
+ }
409
+ /**
410
+ * @param {number} pageNum - page number.
411
+ * @param {Object} pageRef - reference to the page.
412
+ */
413
+
414
+
415
+ cachePageRef(pageNum, pageRef) {
416
+ if (!pageRef) {
417
+ return;
418
+ }
419
+
420
+ const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
421
+ this._pagesRefCache[refStr] = pageNum;
422
+ }
423
+ /**
424
+ * @private
425
+ */
426
+
427
+
428
+ _cachedPageNumber(pageRef) {
429
+ var _this$_pagesRefCache;
430
+
431
+ const refStr = pageRef.gen === 0 ? `${pageRef.num}R` : `${pageRef.num}R${pageRef.gen}`;
432
+ return ((_this$_pagesRefCache = this._pagesRefCache) === null || _this$_pagesRefCache === void 0 ? void 0 : _this$_pagesRefCache[refStr]) || null;
433
+ }
434
+ /**
435
+ * @param {number} pageNumber
436
+ */
437
+
438
+
439
+ isPageVisible(pageNumber) {
440
+ return this.pdfViewer.isPageVisible(pageNumber);
441
+ }
442
+ /**
443
+ * @param {number} pageNumber
444
+ */
445
+
446
+
447
+ isPageCached(pageNumber) {
448
+ return this.pdfViewer.isPageCached(pageNumber);
449
+ }
450
+
451
+ }
452
+
453
+ function isValidExplicitDestination(dest) {
454
+ if (!Array.isArray(dest)) {
455
+ return false;
456
+ }
457
+
458
+ const destLength = dest.length;
459
+
460
+ if (destLength < 2) {
461
+ return false;
462
+ }
463
+
464
+ const page = dest[0];
465
+
466
+ if (!(typeof page === "object" && Number.isInteger(page.num) && Number.isInteger(page.gen)) && !(Number.isInteger(page) && page >= 0)) {
467
+ return false;
468
+ }
469
+
470
+ const zoom = dest[1];
471
+
472
+ if (!(typeof zoom === "object" && typeof zoom.name === "string")) {
473
+ return false;
474
+ }
475
+
476
+ let allowNull = true;
477
+
478
+ switch (zoom.name) {
479
+ case "XYZ":
480
+ if (destLength !== 5) {
481
+ return false;
482
+ }
483
+
484
+ break;
485
+
486
+ case "Fit":
487
+ case "FitB":
488
+ return destLength === 2;
489
+
490
+ case "FitH":
491
+ case "FitBH":
492
+ case "FitV":
493
+ case "FitBV":
494
+ if (destLength !== 3) {
495
+ return false;
496
+ }
497
+
498
+ break;
499
+
500
+ case "FitR":
501
+ if (destLength !== 6) {
502
+ return false;
503
+ }
504
+
505
+ allowNull = false;
506
+ break;
507
+
508
+ default:
509
+ return false;
510
+ }
511
+
512
+ for (let i = 2; i < destLength; i++) {
513
+ const param = dest[i];
514
+
515
+ if (!(typeof param === "number" || allowNull && param === null)) {
516
+ return false;
517
+ }
518
+ }
519
+
520
+ return true;
521
+ }
522
+ /**
523
+ * @implements {IPDFLinkService}
524
+ */
525
+
526
+
527
+ class SimpleLinkService {
528
+ constructor() {
529
+ this.externalLinkTarget = null;
530
+ this.externalLinkRel = null;
531
+ this.externalLinkEnabled = true;
532
+ this._ignoreDestinationZoom = false;
533
+ }
534
+ /**
535
+ * @type {number}
536
+ */
537
+
538
+
539
+ get pagesCount() {
540
+ return 0;
541
+ }
542
+ /**
543
+ * @type {number}
544
+ */
545
+
546
+
547
+ get page() {
548
+ return 0;
549
+ }
550
+ /**
551
+ * @param {number} value
552
+ */
553
+
554
+
555
+ set page(value) {}
556
+ /**
557
+ * @type {number}
558
+ */
559
+
560
+
561
+ get rotation() {
562
+ return 0;
563
+ }
564
+ /**
565
+ * @param {number} value
566
+ */
567
+
568
+
569
+ set rotation(value) {}
570
+ /**
571
+ * @param {string|Array} dest - The named, or explicit, PDF destination.
572
+ */
573
+
574
+
575
+ async goToDestination(dest) {}
576
+ /**
577
+ * @param {number|string} val - The page number, or page label.
578
+ */
579
+
580
+
581
+ goToPage(val) {}
582
+ /**
583
+ * @param dest - The PDF destination object.
584
+ * @returns {string} The hyperlink to the PDF object.
585
+ */
586
+
587
+
588
+ getDestinationHash(dest) {
589
+ return "#";
590
+ }
591
+ /**
592
+ * @param hash - The PDF parameters/hash.
593
+ * @returns {string} The hyperlink to the PDF object.
594
+ */
595
+
596
+
597
+ getAnchorUrl(hash) {
598
+ return "#";
599
+ }
600
+ /**
601
+ * @param {string} hash
602
+ */
603
+
604
+
605
+ setHash(hash) {}
606
+ /**
607
+ * @param {string} action
608
+ */
609
+
610
+
611
+ executeNamedAction(action) {}
612
+ /**
613
+ * @param {number} pageNum - page number.
614
+ * @param {Object} pageRef - reference to the page.
615
+ */
616
+
617
+
618
+ cachePageRef(pageNum, pageRef) {}
619
+ /**
620
+ * @param {number} pageNumber
621
+ */
622
+
623
+
624
+ isPageVisible(pageNumber) {
625
+ return true;
626
+ }
627
+ /**
628
+ * @param {number} pageNumber
629
+ */
630
+
631
+
632
+ isPageCached(pageNumber) {
633
+ return true;
634
+ }
635
+
636
+ }
637
+
638
+ export { PDFLinkService, SimpleLinkService };