pdfjs-dist 2.5.207 → 2.6.347

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.

Potentially problematic release.


This version of pdfjs-dist might be problematic. Click here for more details.

Files changed (133) hide show
  1. package/bower.json +1 -1
  2. package/build/pdf.js +867 -216
  3. package/build/pdf.js.map +1 -1
  4. package/build/pdf.min.js +1 -1
  5. package/build/pdf.worker.js +10214 -8547
  6. package/build/pdf.worker.js.map +1 -1
  7. package/build/pdf.worker.min.js +1 -1
  8. package/es5/build/pdf.js +2023 -1046
  9. package/es5/build/pdf.js.map +1 -1
  10. package/es5/build/pdf.min.js +22 -0
  11. package/es5/build/pdf.worker.js +11136 -8144
  12. package/es5/build/pdf.worker.js.map +1 -1
  13. package/es5/build/pdf.worker.min.js +22 -0
  14. package/es5/image_decoders/pdf.image_decoders.js +12529 -0
  15. package/es5/image_decoders/pdf.image_decoders.js.map +1 -0
  16. package/es5/image_decoders/pdf.image_decoders.min.js +22 -0
  17. package/es5/web/images/shadow.png +0 -0
  18. package/es5/web/pdf_viewer.css +8 -5
  19. package/es5/web/pdf_viewer.js +195 -51
  20. package/es5/web/pdf_viewer.js.map +1 -1
  21. package/image_decoders/pdf.image_decoders.js +24 -16
  22. package/image_decoders/pdf.image_decoders.js.map +1 -1
  23. package/image_decoders/pdf.image_decoders.min.js +1 -1
  24. package/lib/core/annotation.js +479 -43
  25. package/lib/core/cff_parser.js +643 -615
  26. package/lib/core/chunked_stream.js +64 -50
  27. package/lib/core/colorspace.js +126 -104
  28. package/lib/core/crypto.js +37 -0
  29. package/lib/core/document.js +128 -75
  30. package/lib/core/evaluator.js +3015 -2754
  31. package/lib/core/fonts.js +47 -46
  32. package/lib/core/function.js +79 -6
  33. package/lib/core/image.js +364 -357
  34. package/lib/core/image_utils.js +109 -8
  35. package/lib/core/jpg.js +8 -3
  36. package/lib/core/obj.js +255 -34
  37. package/lib/core/operator_list.js +17 -15
  38. package/lib/core/parser.js +40 -3
  39. package/lib/core/pattern.js +24 -11
  40. package/lib/core/primitives.js +112 -53
  41. package/lib/core/type1_parser.js +2 -0
  42. package/lib/core/worker.js +102 -37
  43. package/lib/core/writer.js +242 -0
  44. package/lib/display/annotation_layer.js +51 -10
  45. package/lib/display/annotation_storage.js +89 -0
  46. package/lib/display/api.js +140 -54
  47. package/lib/display/canvas.js +215 -46
  48. package/lib/display/display_utils.js +55 -18
  49. package/lib/display/fetch_stream.js +6 -0
  50. package/lib/display/font_loader.js +26 -15
  51. package/lib/display/metadata.js +1 -7
  52. package/lib/display/network.js +0 -14
  53. package/lib/display/node_utils.js +87 -0
  54. package/lib/display/optional_content_config.js +184 -0
  55. package/lib/display/svg.js +1 -1
  56. package/lib/display/text_layer.js +4 -1
  57. package/lib/pdf.js +2 -2
  58. package/lib/pdf.worker.js +2 -2
  59. package/lib/shared/is_node.js +1 -1
  60. package/lib/shared/util.js +13 -10
  61. package/lib/test/unit/annotation_spec.js +520 -50
  62. package/lib/test/unit/annotation_storage_spec.js +83 -0
  63. package/lib/test/unit/api_spec.js +16 -6
  64. package/lib/test/unit/cmap_spec.js +4 -4
  65. package/lib/test/unit/colorspace_spec.js +216 -24
  66. package/lib/test/unit/crypto_spec.js +51 -4
  67. package/lib/test/unit/custom_spec.js +129 -1
  68. package/lib/test/unit/document_spec.js +112 -1
  69. package/lib/test/unit/evaluator_spec.js +29 -10
  70. package/lib/test/unit/jasmine-boot.js +1 -1
  71. package/lib/test/unit/metadata_spec.js +3 -3
  72. package/lib/test/unit/primitives_spec.js +242 -63
  73. package/lib/test/unit/test_utils.js +42 -89
  74. package/lib/test/unit/testreporter.js +17 -6
  75. package/lib/test/unit/util_spec.js +13 -12
  76. package/lib/test/unit/writer_spec.js +84 -0
  77. package/lib/web/annotation_layer_builder.js +13 -9
  78. package/lib/web/app.js +231 -26
  79. package/lib/web/app_options.js +1 -6
  80. package/lib/web/base_tree_viewer.js +100 -0
  81. package/lib/web/base_viewer.js +53 -4
  82. package/lib/web/download_manager.js +3 -10
  83. package/lib/web/firefox_print_service.js +32 -12
  84. package/lib/web/firefoxcom.js +20 -6
  85. package/lib/web/interfaces.js +1 -1
  86. package/lib/web/pdf_attachment_viewer.js +80 -38
  87. package/lib/web/pdf_find_controller.js +2 -1
  88. package/lib/web/pdf_layer_viewer.js +208 -0
  89. package/lib/web/pdf_outline_viewer.js +24 -57
  90. package/lib/web/pdf_page_view.js +29 -6
  91. package/lib/web/pdf_print_service.js +13 -11
  92. package/lib/web/pdf_sidebar.js +46 -25
  93. package/lib/web/pdf_thumbnail_view.js +16 -3
  94. package/lib/web/pdf_thumbnail_viewer.js +17 -1
  95. package/lib/web/pdf_viewer.component.js +2 -2
  96. package/lib/web/preferences.js +1 -1
  97. package/lib/web/toolbar.js +1 -1
  98. package/lib/web/ui_utils.js +7 -1
  99. package/package.json +3 -1
  100. package/types/display/annotation_layer.d.ts +61 -0
  101. package/types/display/annotation_storage.d.ts +36 -0
  102. package/types/display/api.d.ts +1107 -0
  103. package/types/display/api_compatibility.d.ts +1 -0
  104. package/types/display/canvas.d.ts +4 -0
  105. package/types/display/content_disposition.d.ts +7 -0
  106. package/types/display/display_utils.d.ts +243 -0
  107. package/types/display/fetch_stream.d.ts +67 -0
  108. package/types/display/font_loader.d.ts +19 -0
  109. package/types/display/metadata.d.ts +9 -0
  110. package/types/display/network.d.ts +80 -0
  111. package/types/display/network_utils.d.ts +14 -0
  112. package/types/display/node_stream.d.ts +72 -0
  113. package/types/display/node_utils.d.ts +6 -0
  114. package/types/display/optional_content_config.d.ts +12 -0
  115. package/types/display/pattern_helper.d.ts +5 -0
  116. package/types/display/svg.d.ts +2 -0
  117. package/types/display/text_layer.d.ts +83 -0
  118. package/types/display/transport_stream.d.ts +57 -0
  119. package/types/display/webgl.d.ts +20 -0
  120. package/types/display/worker_options.d.ts +27 -0
  121. package/types/display/xml_parser.d.ts +35 -0
  122. package/types/pdf.d.ts +33 -0
  123. package/types/shared/compatibility.d.ts +1 -0
  124. package/types/shared/is_node.d.ts +1 -0
  125. package/types/shared/message_handler.d.ts +62 -0
  126. package/types/shared/util.d.ts +421 -0
  127. package/web/images/shadow.png +0 -0
  128. package/web/pdf_viewer.css +8 -5
  129. package/web/pdf_viewer.js +109 -33
  130. package/web/pdf_viewer.js.map +1 -1
  131. package/webpack.js +1 -9
  132. package/es5/web/images/texture.png +0 -0
  133. package/web/images/texture.png +0 -0
package/lib/web/app.js CHANGED
@@ -52,6 +52,8 @@ var _pdf_find_controller = require("./pdf_find_controller.js");
52
52
 
53
53
  var _pdf_history = require("./pdf_history.js");
54
54
 
55
+ var _pdf_layer_viewer = require("./pdf_layer_viewer.js");
56
+
55
57
  var _pdf_link_service = require("./pdf_link_service.js");
56
58
 
57
59
  var _pdf_outline_viewer = require("./pdf_outline_viewer.js");
@@ -68,6 +70,8 @@ var _secondary_toolbar = require("./secondary_toolbar.js");
68
70
 
69
71
  var _toolbar = require("./toolbar.js");
70
72
 
73
+ var _viewer_compatibility = require("./viewer_compatibility.js");
74
+
71
75
  var _view_history = require("./view_history.js");
72
76
 
73
77
  const DEFAULT_SCALE_DELTA = 1.1;
@@ -80,6 +84,8 @@ const ViewOnLoad = {
80
84
  PREVIOUS: 0,
81
85
  INITIAL: 1
82
86
  };
87
+ const KNOWN_VERSIONS = ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2.0", "2.1", "2.2", "2.3"];
88
+ const KNOWN_GENERATORS = ["acrobat distiller", "acrobat pdfwriter", "adobe livecycle", "adobe pdf library", "adobe photoshop", "ghostscript", "tcpdf", "cairo", "dvipdfm", "dvips", "pdftex", "pdfkit", "itext", "prince", "quarkxpress", "mac os x", "microsoft", "openoffice", "oracle", "luradocument", "pdf-xchange", "antenna house", "aspose.cells", "fpdf"];
83
89
 
84
90
  class DefaultExternalServices {
85
91
  constructor() {
@@ -149,6 +155,7 @@ const PDFViewerApplication = {
149
155
  pdfSidebarResizer: null,
150
156
  pdfOutlineViewer: null,
151
157
  pdfAttachmentViewer: null,
158
+ pdfLayerViewer: null,
152
159
  pdfCursorTools: null,
153
160
  store: null,
154
161
  downloadManager: null,
@@ -166,6 +173,9 @@ const PDFViewerApplication = {
166
173
  externalServices: DefaultExternalServices,
167
174
  _boundEvents: {},
168
175
  contentDispositionFilename: null,
176
+ triggerDelayedFallback: null,
177
+ _saveInProgress: false,
178
+ _wheelUnusedTicks: 0,
169
179
 
170
180
  async initialize(appConfig) {
171
181
  this.preferences = this.externalServices.createPreferences();
@@ -312,9 +322,7 @@ const PDFViewerApplication = {
312
322
  ignoreDestinationZoom: _app_options.AppOptions.get("ignoreDestinationZoom")
313
323
  });
314
324
  this.pdfLinkService = pdfLinkService;
315
- const downloadManager = this.externalServices.createDownloadManager({
316
- disableCreateObjectURL: _app_options.AppOptions.get("disableCreateObjectURL")
317
- });
325
+ const downloadManager = this.externalServices.createDownloadManager();
318
326
  this.downloadManager = downloadManager;
319
327
  const findController = new _pdf_find_controller.PDFFindController({
320
328
  linkService: pdfLinkService,
@@ -345,6 +353,7 @@ const PDFViewerApplication = {
345
353
  pdfLinkService.setViewer(this.pdfViewer);
346
354
  this.pdfThumbnailViewer = new _pdf_thumbnail_viewer.PDFThumbnailViewer({
347
355
  container: appConfig.sidebar.thumbnailView,
356
+ eventBus,
348
357
  renderingQueue: pdfRenderingQueue,
349
358
  linkService: pdfLinkService,
350
359
  l10n: this.l10n
@@ -389,6 +398,11 @@ const PDFViewerApplication = {
389
398
  eventBus,
390
399
  downloadManager
391
400
  });
401
+ this.pdfLayerViewer = new _pdf_layer_viewer.PDFLayerViewer({
402
+ container: appConfig.sidebar.layersView,
403
+ eventBus,
404
+ l10n: this.l10n
405
+ });
392
406
  this.pdfSidebar = new _pdf_sidebar.PDFSidebar({
393
407
  elements: appConfig.sidebar,
394
408
  pdfViewer: this.pdfViewer,
@@ -555,9 +569,12 @@ const PDFViewerApplication = {
555
569
  this.url = "";
556
570
  this.baseUrl = "";
557
571
  this.contentDispositionFilename = null;
572
+ this.triggerDelayedFallback = null;
573
+ this._saveInProgress = false;
558
574
  this.pdfSidebar.reset();
559
575
  this.pdfOutlineViewer.reset();
560
576
  this.pdfAttachmentViewer.reset();
577
+ this.pdfLayerViewer.reset();
561
578
 
562
579
  if (this.pdfHistory) {
563
580
  this.pdfHistory.reset();
@@ -668,7 +685,9 @@ const PDFViewerApplication = {
668
685
  });
669
686
  },
670
687
 
671
- download() {
688
+ download({
689
+ sourceEventType = "download"
690
+ } = {}) {
672
691
  function downloadByUrl() {
673
692
  downloadManager.downloadUrl(url, filename);
674
693
  }
@@ -690,11 +709,67 @@ const PDFViewerApplication = {
690
709
  const blob = new Blob([data], {
691
710
  type: "application/pdf"
692
711
  });
693
- downloadManager.download(blob, url, filename);
712
+ downloadManager.download(blob, url, filename, sourceEventType);
694
713
  }).catch(downloadByUrl);
695
714
  },
696
715
 
716
+ save({
717
+ sourceEventType = "download"
718
+ } = {}) {
719
+ if (this._saveInProgress) {
720
+ return;
721
+ }
722
+
723
+ const url = this.baseUrl;
724
+ const filename = this.contentDispositionFilename || (0, _ui_utils.getPDFFileNameFromURL)(this.url);
725
+ const downloadManager = this.downloadManager;
726
+
727
+ downloadManager.onerror = err => {
728
+ this.error(`PDF failed to be saved: ${err}`);
729
+ };
730
+
731
+ if (!this.pdfDocument || !this.downloadComplete) {
732
+ this.download({
733
+ sourceEventType
734
+ });
735
+ return;
736
+ }
737
+
738
+ this._saveInProgress = true;
739
+ this.pdfDocument.saveDocument(this.pdfDocument.annotationStorage).then(data => {
740
+ const blob = new Blob([data], {
741
+ type: "application/pdf"
742
+ });
743
+ downloadManager.download(blob, url, filename, sourceEventType);
744
+ }).catch(() => {
745
+ this.download({
746
+ sourceEventType
747
+ });
748
+ }).finally(() => {
749
+ this._saveInProgress = false;
750
+ });
751
+ },
752
+
753
+ _delayedFallback(featureId) {
754
+ this.externalServices.reportTelemetry({
755
+ type: "unsupportedFeature",
756
+ featureId
757
+ });
758
+
759
+ if (!this.triggerDelayedFallback) {
760
+ this.triggerDelayedFallback = () => {
761
+ this.fallback(featureId);
762
+ this.triggerDelayedFallback = null;
763
+ };
764
+ }
765
+ },
766
+
697
767
  fallback(featureId) {
768
+ this.externalServices.reportTelemetry({
769
+ type: "unsupportedFeature",
770
+ featureId
771
+ });
772
+
698
773
  if (this.fellback) {
699
774
  return;
700
775
  }
@@ -708,7 +783,9 @@ const PDFViewerApplication = {
708
783
  return;
709
784
  }
710
785
 
711
- PDFViewerApplication.download();
786
+ PDFViewerApplication.download({
787
+ sourceEventType: "download"
788
+ });
712
789
  });
713
790
  },
714
791
 
@@ -826,6 +903,16 @@ const PDFViewerApplication = {
826
903
  baseDocumentUrl = null;
827
904
  this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);
828
905
  this.pdfDocumentProperties.setDocument(pdfDocument, this.url);
906
+ const annotationStorage = pdfDocument.annotationStorage;
907
+
908
+ annotationStorage.onSetModified = function () {
909
+ window.addEventListener("beforeunload", beforeUnload);
910
+ };
911
+
912
+ annotationStorage.onResetModified = function () {
913
+ window.removeEventListener("beforeunload", beforeUnload);
914
+ };
915
+
829
916
  const pdfViewer = this.pdfViewer;
830
917
  pdfViewer.setDocument(pdfDocument);
831
918
  const {
@@ -947,6 +1034,12 @@ const PDFViewerApplication = {
947
1034
  attachments
948
1035
  });
949
1036
  });
1037
+ pdfViewer.optionalContentConfigPromise.then(optionalContentConfig => {
1038
+ this.pdfLayerViewer.render({
1039
+ optionalContentConfig,
1040
+ pdfDocument
1041
+ });
1042
+ });
950
1043
  });
951
1044
 
952
1045
  this._initializePageLabels(pdfDocument);
@@ -974,7 +1067,9 @@ const PDFViewerApplication = {
974
1067
  }
975
1068
 
976
1069
  console.warn("Warning: JavaScript is not supported");
977
- this.fallback(_pdf.UNSUPPORTED_FEATURES.javaScript);
1070
+
1071
+ this._delayedFallback(_pdf.UNSUPPORTED_FEATURES.javaScript);
1072
+
978
1073
  return true;
979
1074
  });
980
1075
 
@@ -1035,20 +1130,23 @@ const PDFViewerApplication = {
1035
1130
  this.setTitle(contentDispositionFilename);
1036
1131
  }
1037
1132
 
1038
- if (info.IsAcroFormPresent) {
1039
- console.warn("Warning: AcroForm/XFA is not supported");
1040
- this.fallback(_pdf.UNSUPPORTED_FEATURES.forms);
1133
+ if (info.IsXFAPresent && !info.IsAcroFormPresent) {
1134
+ console.warn("Warning: XFA is not supported");
1135
+
1136
+ this._delayedFallback(_pdf.UNSUPPORTED_FEATURES.forms);
1137
+ } else if ((info.IsAcroFormPresent || info.IsXFAPresent) && !this.pdfViewer.renderInteractiveForms) {
1138
+ console.warn("Warning: Interactive form support is not enabled");
1139
+
1140
+ this._delayedFallback(_pdf.UNSUPPORTED_FEATURES.forms);
1041
1141
  }
1042
1142
 
1043
1143
  let versionId = "other";
1044
- const KNOWN_VERSIONS = ["1.0", "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "2.0", "2.1", "2.2", "2.3"];
1045
1144
 
1046
1145
  if (KNOWN_VERSIONS.includes(info.PDFFormatVersion)) {
1047
1146
  versionId = `v${info.PDFFormatVersion.replace(".", "_")}`;
1048
1147
  }
1049
1148
 
1050
1149
  let generatorId = "other";
1051
- const KNOWN_GENERATORS = ["acrobat distiller", "acrobat pdfwriter", "adobe livecycle", "adobe pdf library", "adobe photoshop", "ghostscript", "tcpdf", "cairo", "dvipdfm", "dvips", "pdftex", "pdfkit", "itext", "prince", "quarkxpress", "mac os x", "microsoft", "openoffice", "oracle", "luradocument", "pdf-xchange", "antenna house", "aspose.cells", "fpdf"];
1052
1150
 
1053
1151
  if (info.Producer) {
1054
1152
  const producer = info.Producer.toLowerCase();
@@ -1064,8 +1162,10 @@ const PDFViewerApplication = {
1064
1162
 
1065
1163
  let formType = null;
1066
1164
 
1067
- if (info.IsAcroFormPresent) {
1068
- formType = info.IsXFAPresent ? "xfa" : "acroform";
1165
+ if (info.IsXFAPresent) {
1166
+ formType = "xfa";
1167
+ } else if (info.IsAcroFormPresent) {
1168
+ formType = "acroform";
1069
1169
  }
1070
1170
 
1071
1171
  this.externalServices.reportTelemetry({
@@ -1244,7 +1344,11 @@ const PDFViewerApplication = {
1244
1344
 
1245
1345
  const pagesOverview = this.pdfViewer.getPagesOverview();
1246
1346
  const printContainer = this.appConfig.printContainer;
1247
- const printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, this.l10n);
1347
+
1348
+ const printResolution = _app_options.AppOptions.get("printResolution");
1349
+
1350
+ const optionalContentConfigPromise = this.pdfViewer.optionalContentConfigPromise;
1351
+ const printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, printResolution, optionalContentConfigPromise, this.l10n);
1248
1352
  this.printService = printService;
1249
1353
  this.forceRendering();
1250
1354
  printService.layout();
@@ -1257,6 +1361,10 @@ const PDFViewerApplication = {
1257
1361
  if (this.printService) {
1258
1362
  this.printService.destroy();
1259
1363
  this.printService = null;
1364
+
1365
+ if (this.pdfDocument) {
1366
+ this.pdfDocument.annotationStorage.resetModified();
1367
+ }
1260
1368
  }
1261
1369
 
1262
1370
  this.forceRendering();
@@ -1319,6 +1427,8 @@ const PDFViewerApplication = {
1319
1427
 
1320
1428
  eventBus._on("download", webViewerDownload);
1321
1429
 
1430
+ eventBus._on("save", webViewerSave);
1431
+
1322
1432
  eventBus._on("firstpage", webViewerFirstPage);
1323
1433
 
1324
1434
  eventBus._on("lastpage", webViewerLastPage);
@@ -1341,6 +1451,8 @@ const PDFViewerApplication = {
1341
1451
 
1342
1452
  eventBus._on("rotateccw", webViewerRotateCcw);
1343
1453
 
1454
+ eventBus._on("optionalcontentconfig", webViewerOptionalContentConfig);
1455
+
1344
1456
  eventBus._on("switchscrollmode", webViewerSwitchScrollMode);
1345
1457
 
1346
1458
  eventBus._on("scrollmodechanged", webViewerScrollModeChanged);
@@ -1399,8 +1511,12 @@ const PDFViewerApplication = {
1399
1511
  window.addEventListener("wheel", webViewerWheel, {
1400
1512
  passive: false
1401
1513
  });
1514
+ window.addEventListener("touchstart", webViewerTouchStart, {
1515
+ passive: false
1516
+ });
1402
1517
  window.addEventListener("click", webViewerClick);
1403
1518
  window.addEventListener("keydown", webViewerKeyDown);
1519
+ window.addEventListener("keyup", webViewerKeyUp);
1404
1520
  window.addEventListener("resize", _boundEvents.windowResize);
1405
1521
  window.addEventListener("hashchange", _boundEvents.windowHashChange);
1406
1522
  window.addEventListener("beforeprint", _boundEvents.windowBeforePrint);
@@ -1445,6 +1561,8 @@ const PDFViewerApplication = {
1445
1561
 
1446
1562
  eventBus._off("download", webViewerDownload);
1447
1563
 
1564
+ eventBus._off("save", webViewerSave);
1565
+
1448
1566
  eventBus._off("firstpage", webViewerFirstPage);
1449
1567
 
1450
1568
  eventBus._off("lastpage", webViewerLastPage);
@@ -1467,6 +1585,8 @@ const PDFViewerApplication = {
1467
1585
 
1468
1586
  eventBus._off("rotateccw", webViewerRotateCcw);
1469
1587
 
1588
+ eventBus._off("optionalcontentconfig", webViewerOptionalContentConfig);
1589
+
1470
1590
  eventBus._off("switchscrollmode", webViewerSwitchScrollMode);
1471
1591
 
1472
1592
  eventBus._off("scrollmodechanged", webViewerScrollModeChanged);
@@ -1501,8 +1621,12 @@ const PDFViewerApplication = {
1501
1621
  window.removeEventListener("wheel", webViewerWheel, {
1502
1622
  passive: false
1503
1623
  });
1624
+ window.removeEventListener("touchstart", webViewerTouchStart, {
1625
+ passive: false
1626
+ });
1504
1627
  window.removeEventListener("click", webViewerClick);
1505
1628
  window.removeEventListener("keydown", webViewerKeyDown);
1629
+ window.removeEventListener("keyup", webViewerKeyUp);
1506
1630
  window.removeEventListener("resize", _boundEvents.windowResize);
1507
1631
  window.removeEventListener("hashchange", _boundEvents.windowHashChange);
1508
1632
  window.removeEventListener("beforeprint", _boundEvents.windowBeforePrint);
@@ -1511,6 +1635,17 @@ const PDFViewerApplication = {
1511
1635
  _boundEvents.windowHashChange = null;
1512
1636
  _boundEvents.windowBeforePrint = null;
1513
1637
  _boundEvents.windowAfterPrint = null;
1638
+ },
1639
+
1640
+ accumulateWheelTicks(ticks) {
1641
+ if (this._wheelUnusedTicks > 0 && ticks < 0 || this._wheelUnusedTicks < 0 && ticks > 0) {
1642
+ this._wheelUnusedTicks = 0;
1643
+ }
1644
+
1645
+ this._wheelUnusedTicks += ticks;
1646
+ const wholeTicks = Math.sign(this._wheelUnusedTicks) * Math.floor(Math.abs(this._wheelUnusedTicks));
1647
+ this._wheelUnusedTicks -= wholeTicks;
1648
+ return wholeTicks;
1514
1649
  }
1515
1650
 
1516
1651
  };
@@ -1753,6 +1888,10 @@ function webViewerPageMode({
1753
1888
  view = _pdf_sidebar.SidebarView.ATTACHMENTS;
1754
1889
  break;
1755
1890
 
1891
+ case "layers":
1892
+ view = _pdf_sidebar.SidebarView.LAYERS;
1893
+ break;
1894
+
1756
1895
  case "none":
1757
1896
  view = _pdf_sidebar.SidebarView.NONE;
1758
1897
  break;
@@ -1766,9 +1905,7 @@ function webViewerPageMode({
1766
1905
  }
1767
1906
 
1768
1907
  function webViewerNamedAction(evt) {
1769
- const action = evt.action;
1770
-
1771
- switch (action) {
1908
+ switch (evt.action) {
1772
1909
  case "GoToPage":
1773
1910
  PDFViewerApplication.appConfig.toolbar.pageNumber.select();
1774
1911
  break;
@@ -1779,6 +1916,17 @@ function webViewerNamedAction(evt) {
1779
1916
  }
1780
1917
 
1781
1918
  break;
1919
+
1920
+ case "Print":
1921
+ if (PDFViewerApplication.supportsPrinting) {
1922
+ webViewerPrint();
1923
+ }
1924
+
1925
+ break;
1926
+
1927
+ case "SaveAs":
1928
+ webViewerSave();
1929
+ break;
1782
1930
  }
1783
1931
  }
1784
1932
 
@@ -1886,7 +2034,7 @@ let webViewerFileInputChange, webViewerOpenFile;
1886
2034
 
1887
2035
  const file = evt.fileInput.files[0];
1888
2036
 
1889
- if (!_app_options.AppOptions.get("disableCreateObjectURL")) {
2037
+ if (!_viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL) {
1890
2038
  let url = URL.createObjectURL(file);
1891
2039
 
1892
2040
  if (file.name) {
@@ -1930,8 +2078,24 @@ function webViewerPrint() {
1930
2078
  window.print();
1931
2079
  }
1932
2080
 
2081
+ function webViewerDownloadOrSave(sourceEventType) {
2082
+ if (PDFViewerApplication.pdfDocument && PDFViewerApplication.pdfDocument.annotationStorage.size > 0) {
2083
+ PDFViewerApplication.save({
2084
+ sourceEventType
2085
+ });
2086
+ } else {
2087
+ PDFViewerApplication.download({
2088
+ sourceEventType
2089
+ });
2090
+ }
2091
+ }
2092
+
1933
2093
  function webViewerDownload() {
1934
- PDFViewerApplication.download();
2094
+ webViewerDownloadOrSave("download");
2095
+ }
2096
+
2097
+ function webViewerSave() {
2098
+ webViewerDownloadOrSave("save");
1935
2099
  }
1936
2100
 
1937
2101
  function webViewerFirstPage() {
@@ -1990,6 +2154,10 @@ function webViewerRotateCcw() {
1990
2154
  PDFViewerApplication.rotatePages(-90);
1991
2155
  }
1992
2156
 
2157
+ function webViewerOptionalContentConfig(evt) {
2158
+ PDFViewerApplication.pdfViewer.optionalContentConfigPromise = evt.promise;
2159
+ }
2160
+
1993
2161
  function webViewerSwitchScrollMode(evt) {
1994
2162
  PDFViewerApplication.pdfViewer.scrollMode = evt.mode;
1995
2163
  }
@@ -2037,13 +2205,15 @@ function webViewerUpdateFindMatchesCount({
2037
2205
  function webViewerUpdateFindControlState({
2038
2206
  state,
2039
2207
  previous,
2040
- matchesCount
2208
+ matchesCount,
2209
+ rawQuery
2041
2210
  }) {
2042
2211
  if (PDFViewerApplication.supportsIntegratedFind) {
2043
2212
  PDFViewerApplication.externalServices.updateFindControlState({
2044
2213
  result: state,
2045
2214
  findPrevious: previous,
2046
- matchesCount
2215
+ matchesCount,
2216
+ rawQuery
2047
2217
  });
2048
2218
  } else {
2049
2219
  PDFViewerApplication.findBar.updateUIState(state, previous, matchesCount);
@@ -2115,13 +2285,23 @@ function webViewerWheel(evt) {
2115
2285
  }
2116
2286
 
2117
2287
  const previousScale = pdfViewer.currentScale;
2118
- const delta = (0, _ui_utils.normalizeWheelEventDelta)(evt);
2119
- const MOUSE_WHEEL_DELTA_PER_PAGE_SCALE = 3.0;
2120
- const ticks = delta * MOUSE_WHEEL_DELTA_PER_PAGE_SCALE;
2288
+ const delta = (0, _ui_utils.normalizeWheelEventDirection)(evt);
2289
+ let ticks = 0;
2290
+
2291
+ if (evt.deltaMode === WheelEvent.DOM_DELTA_LINE || evt.deltaMode === WheelEvent.DOM_DELTA_PAGE) {
2292
+ if (Math.abs(delta) >= 1) {
2293
+ ticks = Math.sign(delta);
2294
+ } else {
2295
+ ticks = PDFViewerApplication.accumulateWheelTicks(delta);
2296
+ }
2297
+ } else {
2298
+ const PIXELS_PER_LINE_SCALE = 30;
2299
+ ticks = PDFViewerApplication.accumulateWheelTicks(delta / PIXELS_PER_LINE_SCALE);
2300
+ }
2121
2301
 
2122
2302
  if (ticks < 0) {
2123
2303
  PDFViewerApplication.zoomOut(-ticks);
2124
- } else {
2304
+ } else if (ticks > 0) {
2125
2305
  PDFViewerApplication.zoomIn(ticks);
2126
2306
  }
2127
2307
 
@@ -2140,7 +2320,17 @@ function webViewerWheel(evt) {
2140
2320
  }
2141
2321
  }
2142
2322
 
2323
+ function webViewerTouchStart(evt) {
2324
+ if (evt.touches.length > 1) {
2325
+ evt.preventDefault();
2326
+ }
2327
+ }
2328
+
2143
2329
  function webViewerClick(evt) {
2330
+ if (PDFViewerApplication.triggerDelayedFallback && PDFViewerApplication.pdfViewer.containsElement(evt.target)) {
2331
+ PDFViewerApplication.triggerDelayedFallback();
2332
+ }
2333
+
2144
2334
  if (!PDFViewerApplication.secondaryToolbar.isOpen) {
2145
2335
  return;
2146
2336
  }
@@ -2152,6 +2342,14 @@ function webViewerClick(evt) {
2152
2342
  }
2153
2343
  }
2154
2344
 
2345
+ function webViewerKeyUp(evt) {
2346
+ if (evt.keyCode === 9) {
2347
+ if (PDFViewerApplication.triggerDelayedFallback) {
2348
+ PDFViewerApplication.triggerDelayedFallback();
2349
+ }
2350
+ }
2351
+ }
2352
+
2155
2353
  function webViewerKeyDown(evt) {
2156
2354
  if (PDFViewerApplication.overlayManager.active) {
2157
2355
  return;
@@ -2460,6 +2658,12 @@ function webViewerKeyDown(evt) {
2460
2658
  }
2461
2659
  }
2462
2660
 
2661
+ function beforeUnload(evt) {
2662
+ evt.preventDefault();
2663
+ evt.returnValue = "";
2664
+ return false;
2665
+ }
2666
+
2463
2667
  function apiPageLayoutToSpreadMode(layout) {
2464
2668
  switch (layout) {
2465
2669
  case "SinglePage":
@@ -2493,6 +2697,7 @@ function apiPageModeToSidebarView(mode) {
2493
2697
  return _pdf_sidebar.SidebarView.ATTACHMENTS;
2494
2698
 
2495
2699
  case "UseOC":
2700
+ return _pdf_sidebar.SidebarView.LAYERS;
2496
2701
  }
2497
2702
 
2498
2703
  return _pdf_sidebar.SidebarView.NONE;
@@ -48,11 +48,6 @@ const defaultOptions = {
48
48
  value: "",
49
49
  kind: OptionKind.VIEWER + OptionKind.PREFERENCE
50
50
  },
51
- disableCreateObjectURL: {
52
- value: false,
53
- compatibility: _viewer_compatibility.viewerCompatibilityParams.disableCreateObjectURL,
54
- kind: OptionKind.VIEWER
55
- },
56
51
  disableHistory: {
57
52
  value: false,
58
53
  kind: OptionKind.VIEWER
@@ -111,7 +106,7 @@ const defaultOptions = {
111
106
  kind: OptionKind.VIEWER + OptionKind.PREFERENCE
112
107
  },
113
108
  renderInteractiveForms: {
114
- value: false,
109
+ value: true,
115
110
  kind: OptionKind.VIEWER + OptionKind.PREFERENCE
116
111
  },
117
112
  sidebarViewOnLoad: {
@@ -0,0 +1,100 @@
1
+ /**
2
+ * @licstart The following is the entire license notice for the
3
+ * Javascript code in this page
4
+ *
5
+ * Copyright 2020 Mozilla Foundation
6
+ *
7
+ * Licensed under the Apache License, Version 2.0 (the "License");
8
+ * you may not use this file except in compliance with the License.
9
+ * You may obtain a copy of the License at
10
+ *
11
+ * http://www.apache.org/licenses/LICENSE-2.0
12
+ *
13
+ * Unless required by applicable law or agreed to in writing, software
14
+ * distributed under the License is distributed on an "AS IS" BASIS,
15
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ * See the License for the specific language governing permissions and
17
+ * limitations under the License.
18
+ *
19
+ * @licend The above is the entire license notice for the
20
+ * Javascript code in this page
21
+ */
22
+ "use strict";
23
+
24
+ Object.defineProperty(exports, "__esModule", {
25
+ value: true
26
+ });
27
+ exports.BaseTreeViewer = void 0;
28
+
29
+ var _pdf = require("../pdf");
30
+
31
+ class BaseTreeViewer {
32
+ constructor(options) {
33
+ if (this.constructor === BaseTreeViewer) {
34
+ throw new Error("Cannot initialize BaseTreeViewer.");
35
+ }
36
+
37
+ this.container = options.container;
38
+ this.eventBus = options.eventBus;
39
+ this.reset();
40
+ }
41
+
42
+ reset() {
43
+ this._lastToggleIsShow = true;
44
+ this.container.textContent = "";
45
+ this.container.classList.remove("treeWithDeepNesting");
46
+ }
47
+
48
+ _dispatchEvent(count) {
49
+ throw new Error("Not implemented: _dispatchEvent");
50
+ }
51
+
52
+ _bindLink(element, params) {
53
+ throw new Error("Not implemented: _bindLink");
54
+ }
55
+
56
+ _normalizeTextContent(str) {
57
+ return (0, _pdf.removeNullCharacters)(str) || "\u2013";
58
+ }
59
+
60
+ _addToggleButton(div, hidden = false) {
61
+ const toggler = document.createElement("div");
62
+ toggler.className = "treeItemToggler";
63
+
64
+ if (hidden) {
65
+ toggler.classList.add("treeItemsHidden");
66
+ }
67
+
68
+ toggler.onclick = evt => {
69
+ evt.stopPropagation();
70
+ toggler.classList.toggle("treeItemsHidden");
71
+
72
+ if (evt.shiftKey) {
73
+ const shouldShowAll = !toggler.classList.contains("treeItemsHidden");
74
+
75
+ this._toggleTreeItem(div, shouldShowAll);
76
+ }
77
+ };
78
+
79
+ div.insertBefore(toggler, div.firstChild);
80
+ }
81
+
82
+ _toggleTreeItem(root, show = false) {
83
+ this._lastToggleIsShow = show;
84
+
85
+ for (const toggler of root.querySelectorAll(".treeItemToggler")) {
86
+ toggler.classList.toggle("treeItemsHidden", !show);
87
+ }
88
+ }
89
+
90
+ _toggleAllTreeItems() {
91
+ this._toggleTreeItem(this.container, !this._lastToggleIsShow);
92
+ }
93
+
94
+ render(params) {
95
+ throw new Error("Not implemented: render");
96
+ }
97
+
98
+ }
99
+
100
+ exports.BaseTreeViewer = BaseTreeViewer;