pdfjs-dist 2.3.200 → 2.4.456

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 (185) hide show
  1. package/README.md +4 -0
  2. package/bower.json +1 -1
  3. package/build/pdf.js +6499 -17971
  4. package/build/pdf.js.map +1 -1
  5. package/build/pdf.min.js +22 -1
  6. package/build/pdf.worker.entry.js +5 -3
  7. package/build/pdf.worker.js +19303 -29896
  8. package/build/pdf.worker.js.map +1 -1
  9. package/build/pdf.worker.min.js +22 -1
  10. package/es5/build/pdf.js +25473 -0
  11. package/es5/build/pdf.js.map +1 -0
  12. package/{lib/shared/global_scope.js → es5/build/pdf.worker.entry.js} +5 -10
  13. package/es5/build/pdf.worker.js +57878 -0
  14. package/es5/build/pdf.worker.js.map +1 -0
  15. package/es5/web/images/annotation-check.svg +11 -0
  16. package/es5/web/images/annotation-comment.svg +16 -0
  17. package/es5/web/images/annotation-help.svg +26 -0
  18. package/es5/web/images/annotation-insert.svg +10 -0
  19. package/es5/web/images/annotation-key.svg +11 -0
  20. package/es5/web/images/annotation-newparagraph.svg +11 -0
  21. package/es5/web/images/annotation-noicon.svg +7 -0
  22. package/es5/web/images/annotation-note.svg +42 -0
  23. package/es5/web/images/annotation-paragraph.svg +16 -0
  24. package/es5/web/images/loading-icon.gif +0 -0
  25. package/es5/web/images/shadow.png +0 -0
  26. package/es5/web/images/texture.png +0 -0
  27. package/es5/web/pdf_viewer.css +407 -0
  28. package/es5/web/pdf_viewer.js +7757 -0
  29. package/es5/web/pdf_viewer.js.map +1 -0
  30. package/image_decoders/pdf.image_decoders.js +1333 -4839
  31. package/image_decoders/pdf.image_decoders.js.map +1 -1
  32. package/image_decoders/pdf.image_decoders.min.js +22 -1
  33. package/lib/README.md +7 -0
  34. package/lib/core/annotation.js +683 -1066
  35. package/lib/core/arithmetic_decoder.js +81 -97
  36. package/lib/core/bidi.js +54 -46
  37. package/lib/core/ccitt.js +88 -81
  38. package/lib/core/ccitt_stream.js +15 -14
  39. package/lib/core/cff_parser.js +196 -193
  40. package/lib/core/charsets.js +4 -4
  41. package/lib/core/chunked_stream.js +441 -569
  42. package/lib/core/cmap.js +220 -279
  43. package/lib/core/colorspace.js +699 -863
  44. package/lib/core/core_utils.js +59 -80
  45. package/lib/core/crypto.js +379 -437
  46. package/lib/core/document.js +564 -673
  47. package/lib/core/encodings.js +15 -15
  48. package/lib/core/evaluator.js +983 -889
  49. package/lib/core/font_renderer.js +128 -171
  50. package/lib/core/fonts.js +451 -400
  51. package/lib/core/function.js +289 -285
  52. package/lib/core/glyphlist.js +4527 -4527
  53. package/lib/core/image.js +138 -117
  54. package/lib/core/image_utils.js +46 -63
  55. package/lib/core/jbig2.js +324 -332
  56. package/lib/core/jbig2_stream.js +18 -17
  57. package/lib/core/jpeg_stream.js +133 -24
  58. package/lib/core/jpg.js +238 -210
  59. package/lib/core/jpx.js +158 -157
  60. package/lib/core/jpx_stream.js +28 -28
  61. package/lib/core/metrics.js +2928 -2928
  62. package/lib/core/murmurhash3.js +87 -102
  63. package/lib/core/obj.js +1111 -1302
  64. package/lib/core/operator_list.js +55 -42
  65. package/lib/core/parser.js +956 -987
  66. package/lib/core/pattern.js +69 -69
  67. package/lib/core/pdf_manager.js +149 -316
  68. package/lib/core/primitives.js +45 -77
  69. package/lib/core/ps_parser.js +175 -214
  70. package/lib/core/standard_fonts.js +237 -236
  71. package/lib/core/stream.js +83 -77
  72. package/lib/core/type1_parser.js +78 -68
  73. package/lib/core/unicode.js +1654 -1654
  74. package/lib/core/worker.js +148 -196
  75. package/lib/core/worker_stream.js +101 -210
  76. package/lib/display/annotation_layer.js +733 -1155
  77. package/lib/display/api.js +1539 -1928
  78. package/lib/display/api_compatibility.js +10 -8
  79. package/lib/display/canvas.js +159 -158
  80. package/lib/display/content_disposition.js +36 -55
  81. package/lib/display/display_utils.js +298 -551
  82. package/lib/display/fetch_stream.js +181 -305
  83. package/lib/display/font_loader.js +273 -416
  84. package/lib/display/metadata.js +86 -98
  85. package/lib/display/network.js +376 -511
  86. package/lib/display/network_utils.js +20 -19
  87. package/lib/display/node_stream.js +276 -460
  88. package/lib/display/pattern_helper.js +76 -44
  89. package/lib/display/svg.js +1137 -1405
  90. package/lib/display/text_layer.js +75 -82
  91. package/lib/display/transport_stream.js +236 -374
  92. package/lib/display/webgl.js +70 -83
  93. package/lib/display/worker_options.js +3 -3
  94. package/lib/display/xml_parser.js +303 -392
  95. package/lib/examples/node/domstubs.js +37 -37
  96. package/lib/pdf.js +22 -21
  97. package/lib/pdf.worker.js +5 -5
  98. package/lib/shared/compatibility.js +2 -251
  99. package/lib/shared/is_node.js +7 -6
  100. package/lib/shared/message_handler.js +222 -194
  101. package/lib/shared/util.js +269 -405
  102. package/lib/test/unit/annotation_spec.js +1089 -1014
  103. package/lib/test/unit/api_spec.js +617 -544
  104. package/lib/test/unit/bidi_spec.js +7 -7
  105. package/lib/test/unit/cff_parser_spec.js +63 -62
  106. package/lib/test/unit/clitests_helper.js +7 -9
  107. package/lib/test/unit/cmap_spec.js +84 -86
  108. package/lib/test/unit/colorspace_spec.js +154 -154
  109. package/lib/test/unit/core_utils_spec.js +125 -105
  110. package/lib/test/unit/crypto_spec.js +181 -181
  111. package/lib/test/unit/custom_spec.js +22 -24
  112. package/lib/test/unit/display_svg_spec.js +35 -36
  113. package/lib/test/unit/display_utils_spec.js +139 -149
  114. package/lib/test/unit/document_spec.js +16 -16
  115. package/lib/test/unit/encodings_spec.js +12 -34
  116. package/lib/test/unit/evaluator_spec.js +81 -95
  117. package/lib/test/unit/fetch_stream_spec.js +30 -30
  118. package/lib/test/unit/function_spec.js +206 -204
  119. package/lib/test/unit/jasmine-boot.js +48 -32
  120. package/lib/test/unit/message_handler_spec.js +172 -162
  121. package/lib/test/unit/metadata_spec.js +69 -69
  122. package/lib/test/unit/murmurhash3_spec.js +12 -12
  123. package/lib/test/unit/network_spec.js +12 -12
  124. package/lib/test/unit/network_utils_spec.js +152 -152
  125. package/lib/test/unit/node_stream_spec.js +74 -90
  126. package/lib/test/unit/parser_spec.js +107 -113
  127. package/lib/test/unit/pdf_find_controller_spec.js +55 -86
  128. package/lib/test/unit/pdf_find_utils_spec.js +32 -32
  129. package/lib/test/unit/pdf_history_spec.js +32 -32
  130. package/lib/test/unit/primitives_spec.js +117 -115
  131. package/lib/test/unit/stream_spec.js +16 -14
  132. package/lib/test/unit/test_utils.js +119 -285
  133. package/lib/test/unit/testreporter.js +19 -19
  134. package/lib/test/unit/type1_parser_spec.js +41 -41
  135. package/lib/test/unit/ui_utils_spec.js +318 -426
  136. package/lib/test/unit/unicode_spec.js +42 -42
  137. package/lib/test/unit/util_spec.js +122 -143
  138. package/lib/web/annotation_layer_builder.js +66 -103
  139. package/lib/web/app.js +1166 -1196
  140. package/lib/web/app_options.js +61 -77
  141. package/lib/web/base_viewer.js +804 -850
  142. package/lib/web/chromecom.js +164 -249
  143. package/lib/web/debugger.js +149 -205
  144. package/lib/web/download_manager.js +38 -57
  145. package/lib/web/firefox_print_service.js +35 -30
  146. package/lib/web/firefoxcom.js +175 -374
  147. package/lib/web/genericcom.js +26 -108
  148. package/lib/web/genericl10n.js +24 -153
  149. package/lib/web/grab_to_pan.js +30 -30
  150. package/lib/web/interfaces.js +80 -258
  151. package/lib/web/overlay_manager.js +70 -246
  152. package/lib/web/password_prompt.js +38 -64
  153. package/lib/web/pdf_attachment_viewer.js +105 -130
  154. package/lib/web/pdf_cursor_tools.js +75 -102
  155. package/lib/web/pdf_document_properties.js +227 -376
  156. package/lib/web/pdf_find_bar.js +137 -171
  157. package/lib/web/pdf_find_controller.js +492 -549
  158. package/lib/web/pdf_find_utils.js +13 -13
  159. package/lib/web/pdf_history.js +395 -406
  160. package/lib/web/pdf_link_service.js +302 -349
  161. package/lib/web/pdf_outline_viewer.js +148 -209
  162. package/lib/web/pdf_page_view.js +449 -507
  163. package/lib/web/pdf_presentation_mode.js +304 -357
  164. package/lib/web/pdf_print_service.js +90 -104
  165. package/lib/web/pdf_rendering_queue.js +87 -108
  166. package/lib/web/pdf_sidebar.js +264 -304
  167. package/lib/web/pdf_sidebar_resizer.js +92 -119
  168. package/lib/web/pdf_single_page_viewer.js +77 -126
  169. package/lib/web/pdf_thumbnail_view.js +276 -297
  170. package/lib/web/pdf_thumbnail_viewer.js +186 -206
  171. package/lib/web/pdf_viewer.component.js +20 -21
  172. package/lib/web/pdf_viewer.js +55 -115
  173. package/lib/web/preferences.js +66 -273
  174. package/lib/web/secondary_toolbar.js +164 -196
  175. package/lib/web/text_layer_builder.js +284 -317
  176. package/lib/web/toolbar.js +216 -211
  177. package/lib/web/ui_utils.js +303 -404
  178. package/lib/web/view_history.js +49 -222
  179. package/lib/web/viewer_compatibility.js +7 -5
  180. package/package.json +2 -9
  181. package/web/pdf_viewer.css +25 -18
  182. package/web/pdf_viewer.js +3481 -4764
  183. package/web/pdf_viewer.js.map +1 -1
  184. package/webpack.js +14 -5
  185. package/lib/shared/streams_polyfill.js +0 -43
@@ -2,7 +2,7 @@
2
2
  * @licstart The following is the entire license notice for the
3
3
  * Javascript code in this page
4
4
  *
5
- * Copyright 2019 Mozilla Foundation
5
+ * Copyright 2020 Mozilla Foundation
6
6
  *
7
7
  * Licensed under the Apache License, Version 2.0 (the "License");
8
8
  * you may not use this file except in compliance with the License.
@@ -26,255 +26,260 @@ Object.defineProperty(exports, "__esModule", {
26
26
  });
27
27
  exports.Toolbar = void 0;
28
28
 
29
- var _ui_utils = require("./ui_utils");
29
+ var _ui_utils = require("./ui_utils.js");
30
30
 
31
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
32
-
33
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
34
-
35
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
36
-
37
- var PAGE_NUMBER_LOADING_INDICATOR = 'visiblePageIsLoading';
38
- var SCALE_SELECT_CONTAINER_PADDING = 8;
39
- var SCALE_SELECT_PADDING = 22;
40
-
41
- var Toolbar =
42
- /*#__PURE__*/
43
- function () {
44
- function Toolbar(options, eventBus) {
45
- var l10n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ui_utils.NullL10n;
46
-
47
- _classCallCheck(this, Toolbar);
31
+ const PAGE_NUMBER_LOADING_INDICATOR = "visiblePageIsLoading";
32
+ const SCALE_SELECT_CONTAINER_WIDTH = 140;
33
+ const SCALE_SELECT_WIDTH = 162;
48
34
 
35
+ class Toolbar {
36
+ constructor(options, eventBus, l10n = _ui_utils.NullL10n) {
49
37
  this.toolbar = options.container;
50
38
  this.eventBus = eventBus;
51
39
  this.l10n = l10n;
52
- this.items = options;
40
+ this.buttons = [{
41
+ element: options.previous,
42
+ eventName: "previouspage"
43
+ }, {
44
+ element: options.next,
45
+ eventName: "nextpage"
46
+ }, {
47
+ element: options.zoomIn,
48
+ eventName: "zoomin"
49
+ }, {
50
+ element: options.zoomOut,
51
+ eventName: "zoomout"
52
+ }, {
53
+ element: options.openFile,
54
+ eventName: "openfile"
55
+ }, {
56
+ element: options.print,
57
+ eventName: "print"
58
+ }, {
59
+ element: options.presentationModeButton,
60
+ eventName: "presentationmode"
61
+ }, {
62
+ element: options.download,
63
+ eventName: "download"
64
+ }, {
65
+ element: options.viewBookmark,
66
+ eventName: null
67
+ }];
68
+ this.items = {
69
+ numPages: options.numPages,
70
+ pageNumber: options.pageNumber,
71
+ scaleSelectContainer: options.scaleSelectContainer,
72
+ scaleSelect: options.scaleSelect,
73
+ customScaleOption: options.customScaleOption,
74
+ previous: options.previous,
75
+ next: options.next,
76
+ zoomIn: options.zoomIn,
77
+ zoomOut: options.zoomOut
78
+ };
53
79
  this._wasLocalized = false;
54
80
  this.reset();
55
81
 
56
82
  this._bindListeners();
57
83
  }
58
84
 
59
- _createClass(Toolbar, [{
60
- key: "setPageNumber",
61
- value: function setPageNumber(pageNumber, pageLabel) {
62
- this.pageNumber = pageNumber;
63
- this.pageLabel = pageLabel;
85
+ setPageNumber(pageNumber, pageLabel) {
86
+ this.pageNumber = pageNumber;
87
+ this.pageLabel = pageLabel;
64
88
 
65
- this._updateUIState(false);
66
- }
67
- }, {
68
- key: "setPagesCount",
69
- value: function setPagesCount(pagesCount, hasPageLabels) {
70
- this.pagesCount = pagesCount;
71
- this.hasPageLabels = hasPageLabels;
89
+ this._updateUIState(false);
90
+ }
72
91
 
73
- this._updateUIState(true);
74
- }
75
- }, {
76
- key: "setPageScale",
77
- value: function setPageScale(pageScaleValue, pageScale) {
78
- this.pageScaleValue = (pageScaleValue || pageScale).toString();
79
- this.pageScale = pageScale;
92
+ setPagesCount(pagesCount, hasPageLabels) {
93
+ this.pagesCount = pagesCount;
94
+ this.hasPageLabels = hasPageLabels;
80
95
 
81
- this._updateUIState(false);
82
- }
83
- }, {
84
- key: "reset",
85
- value: function reset() {
86
- this.pageNumber = 0;
87
- this.pageLabel = null;
88
- this.hasPageLabels = false;
89
- this.pagesCount = 0;
90
- this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
91
- this.pageScale = _ui_utils.DEFAULT_SCALE;
96
+ this._updateUIState(true);
97
+ }
92
98
 
93
- this._updateUIState(true);
99
+ setPageScale(pageScaleValue, pageScale) {
100
+ this.pageScaleValue = (pageScaleValue || pageScale).toString();
101
+ this.pageScale = pageScale;
94
102
 
95
- this.updateLoadingIndicatorState();
96
- }
97
- }, {
98
- key: "_bindListeners",
99
- value: function _bindListeners() {
100
- var _this = this;
101
-
102
- var eventBus = this.eventBus,
103
- items = this.items;
104
- var self = this;
105
- items.previous.addEventListener('click', function () {
106
- eventBus.dispatch('previouspage', {
107
- source: self
108
- });
109
- });
110
- items.next.addEventListener('click', function () {
111
- eventBus.dispatch('nextpage', {
112
- source: self
113
- });
114
- });
115
- items.zoomIn.addEventListener('click', function () {
116
- eventBus.dispatch('zoomin', {
117
- source: self
118
- });
119
- });
120
- items.zoomOut.addEventListener('click', function () {
121
- eventBus.dispatch('zoomout', {
122
- source: self
123
- });
124
- });
125
- items.pageNumber.addEventListener('click', function () {
126
- this.select();
127
- });
128
- items.pageNumber.addEventListener('change', function () {
129
- eventBus.dispatch('pagenumberchanged', {
130
- source: self,
131
- value: this.value
132
- });
133
- });
134
- items.scaleSelect.addEventListener('change', function () {
135
- if (this.value === 'custom') {
136
- return;
137
- }
103
+ this._updateUIState(false);
104
+ }
138
105
 
139
- eventBus.dispatch('scalechanged', {
140
- source: self,
141
- value: this.value
142
- });
143
- });
144
- items.presentationModeButton.addEventListener('click', function () {
145
- eventBus.dispatch('presentationmode', {
146
- source: self
147
- });
148
- });
149
- items.openFile.addEventListener('click', function () {
150
- eventBus.dispatch('openfile', {
151
- source: self
152
- });
153
- });
154
- items.print.addEventListener('click', function () {
155
- eventBus.dispatch('print', {
156
- source: self
157
- });
106
+ reset() {
107
+ this.pageNumber = 0;
108
+ this.pageLabel = null;
109
+ this.hasPageLabels = false;
110
+ this.pagesCount = 0;
111
+ this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE;
112
+ this.pageScale = _ui_utils.DEFAULT_SCALE;
113
+
114
+ this._updateUIState(true);
115
+
116
+ this.updateLoadingIndicatorState();
117
+ }
118
+
119
+ _bindListeners() {
120
+ const {
121
+ pageNumber,
122
+ scaleSelect
123
+ } = this.items;
124
+ const self = this;
125
+
126
+ for (const {
127
+ element,
128
+ eventName
129
+ } of this.buttons) {
130
+ element.addEventListener("click", evt => {
131
+ if (eventName !== null) {
132
+ this.eventBus.dispatch(eventName, {
133
+ source: this
134
+ });
135
+ }
158
136
  });
159
- items.download.addEventListener('click', function () {
160
- eventBus.dispatch('download', {
161
- source: self
162
- });
137
+ }
138
+
139
+ pageNumber.addEventListener("click", function () {
140
+ this.select();
141
+ });
142
+ pageNumber.addEventListener("change", function () {
143
+ self.eventBus.dispatch("pagenumberchanged", {
144
+ source: self,
145
+ value: this.value
163
146
  });
164
- items.scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler;
165
- eventBus.on('localized', function () {
166
- _this._localized();
147
+ });
148
+ scaleSelect.addEventListener("change", function () {
149
+ if (this.value === "custom") {
150
+ return;
151
+ }
152
+
153
+ self.eventBus.dispatch("scalechanged", {
154
+ source: self,
155
+ value: this.value
167
156
  });
168
- }
169
- }, {
170
- key: "_localized",
171
- value: function _localized() {
157
+ });
158
+ scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler;
159
+
160
+ this.eventBus._on("localized", () => {
172
161
  this._wasLocalized = true;
173
162
 
174
163
  this._adjustScaleWidth();
175
164
 
176
165
  this._updateUIState(true);
177
- }
178
- }, {
179
- key: "_updateUIState",
180
- value: function _updateUIState() {
181
- var resetNumPages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
182
-
183
- if (!this._wasLocalized) {
184
- return;
185
- }
166
+ });
167
+ }
186
168
 
187
- var pageNumber = this.pageNumber,
188
- pagesCount = this.pagesCount,
189
- pageScaleValue = this.pageScaleValue,
190
- pageScale = this.pageScale,
191
- items = this.items;
192
-
193
- if (resetNumPages) {
194
- if (this.hasPageLabels) {
195
- items.pageNumber.type = 'text';
196
- } else {
197
- items.pageNumber.type = 'number';
198
- this.l10n.get('of_pages', {
199
- pagesCount: pagesCount
200
- }, 'of {{pagesCount}}').then(function (msg) {
201
- items.numPages.textContent = msg;
202
- });
203
- }
169
+ _updateUIState(resetNumPages = false) {
170
+ if (!this._wasLocalized) {
171
+ return;
172
+ }
204
173
 
205
- items.pageNumber.max = pagesCount;
206
- }
174
+ const {
175
+ pageNumber,
176
+ pagesCount,
177
+ pageScaleValue,
178
+ pageScale,
179
+ items
180
+ } = this;
207
181
 
182
+ if (resetNumPages) {
208
183
  if (this.hasPageLabels) {
209
- items.pageNumber.value = this.pageLabel;
210
- this.l10n.get('page_of_pages', {
211
- pageNumber: pageNumber,
212
- pagesCount: pagesCount
213
- }, '({{pageNumber}} of {{pagesCount}})').then(function (msg) {
184
+ items.pageNumber.type = "text";
185
+ } else {
186
+ items.pageNumber.type = "number";
187
+ this.l10n.get("of_pages", {
188
+ pagesCount
189
+ }, "of {{pagesCount}}").then(msg => {
214
190
  items.numPages.textContent = msg;
215
191
  });
216
- } else {
217
- items.pageNumber.value = pageNumber;
218
192
  }
219
193
 
220
- items.previous.disabled = pageNumber <= 1;
221
- items.next.disabled = pageNumber >= pagesCount;
222
- items.zoomOut.disabled = pageScale <= _ui_utils.MIN_SCALE;
223
- items.zoomIn.disabled = pageScale >= _ui_utils.MAX_SCALE;
224
- var customScale = Math.round(pageScale * 10000) / 100;
225
- this.l10n.get('page_scale_percent', {
226
- scale: customScale
227
- }, '{{scale}}%').then(function (msg) {
228
- var options = items.scaleSelect.options;
229
- var predefinedValueFound = false;
230
-
231
- for (var i = 0, ii = options.length; i < ii; i++) {
232
- var option = options[i];
233
-
234
- if (option.value !== pageScaleValue) {
235
- option.selected = false;
236
- continue;
237
- }
238
-
239
- option.selected = true;
240
- predefinedValueFound = true;
241
- }
194
+ items.pageNumber.max = pagesCount;
195
+ }
242
196
 
243
- if (!predefinedValueFound) {
244
- items.customScaleOption.textContent = msg;
245
- items.customScaleOption.selected = true;
246
- }
197
+ if (this.hasPageLabels) {
198
+ items.pageNumber.value = this.pageLabel;
199
+ this.l10n.get("page_of_pages", {
200
+ pageNumber,
201
+ pagesCount
202
+ }, "({{pageNumber}} of {{pagesCount}})").then(msg => {
203
+ items.numPages.textContent = msg;
247
204
  });
205
+ } else {
206
+ items.pageNumber.value = pageNumber;
248
207
  }
249
- }, {
250
- key: "updateLoadingIndicatorState",
251
- value: function updateLoadingIndicatorState() {
252
- var loading = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
253
- var pageNumberInput = this.items.pageNumber;
254
- pageNumberInput.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading);
255
- }
256
- }, {
257
- key: "_adjustScaleWidth",
258
- value: function _adjustScaleWidth() {
259
- var container = this.items.scaleSelectContainer;
260
- var select = this.items.scaleSelect;
261
-
262
- _ui_utils.animationStarted.then(function () {
263
- if (container.clientWidth === 0) {
264
- container.setAttribute('style', 'display: inherit;');
265
- }
266
208
 
267
- if (container.clientWidth > 0) {
268
- select.setAttribute('style', 'min-width: inherit;');
269
- var width = select.clientWidth + SCALE_SELECT_CONTAINER_PADDING;
270
- select.setAttribute('style', 'min-width: ' + (width + SCALE_SELECT_PADDING) + 'px;');
271
- container.setAttribute('style', 'min-width: ' + width + 'px; ' + 'max-width: ' + width + 'px;');
209
+ items.previous.disabled = pageNumber <= 1;
210
+ items.next.disabled = pageNumber >= pagesCount;
211
+ items.zoomOut.disabled = pageScale <= _ui_utils.MIN_SCALE;
212
+ items.zoomIn.disabled = pageScale >= _ui_utils.MAX_SCALE;
213
+ const customScale = Math.round(pageScale * 10000) / 100;
214
+ this.l10n.get("page_scale_percent", {
215
+ scale: customScale
216
+ }, "{{scale}}%").then(msg => {
217
+ let predefinedValueFound = false;
218
+
219
+ for (const option of items.scaleSelect.options) {
220
+ if (option.value !== pageScaleValue) {
221
+ option.selected = false;
222
+ continue;
272
223
  }
273
- });
224
+
225
+ option.selected = true;
226
+ predefinedValueFound = true;
227
+ }
228
+
229
+ if (!predefinedValueFound) {
230
+ items.customScaleOption.textContent = msg;
231
+ items.customScaleOption.selected = true;
232
+ }
233
+ });
234
+ }
235
+
236
+ updateLoadingIndicatorState(loading = false) {
237
+ const pageNumberInput = this.items.pageNumber;
238
+ pageNumberInput.classList.toggle(PAGE_NUMBER_LOADING_INDICATOR, loading);
239
+ }
240
+
241
+ async _adjustScaleWidth() {
242
+ const {
243
+ items,
244
+ l10n
245
+ } = this;
246
+ const predefinedValuesPromise = Promise.all([l10n.get("page_scale_auto", null, "Automatic Zoom"), l10n.get("page_scale_actual", null, "Actual Size"), l10n.get("page_scale_fit", null, "Page Fit"), l10n.get("page_scale_width", null, "Page Width")]);
247
+ let canvas = document.createElement("canvas");
248
+ canvas.mozOpaque = true;
249
+ let ctx = canvas.getContext("2d", {
250
+ alpha: false
251
+ });
252
+ await _ui_utils.animationStarted;
253
+ const {
254
+ fontSize,
255
+ fontFamily
256
+ } = getComputedStyle(items.scaleSelect);
257
+ ctx.font = `${fontSize} ${fontFamily}`;
258
+ let maxWidth = 0;
259
+
260
+ for (const predefinedValue of await predefinedValuesPromise) {
261
+ const {
262
+ width
263
+ } = ctx.measureText(predefinedValue);
264
+
265
+ if (width > maxWidth) {
266
+ maxWidth = width;
267
+ }
274
268
  }
275
- }]);
276
269
 
277
- return Toolbar;
278
- }();
270
+ const overflow = SCALE_SELECT_WIDTH - SCALE_SELECT_CONTAINER_WIDTH;
271
+ maxWidth += 1.5 * overflow;
272
+
273
+ if (maxWidth > SCALE_SELECT_CONTAINER_WIDTH) {
274
+ items.scaleSelect.style.width = `${maxWidth + overflow}px`;
275
+ items.scaleSelectContainer.style.width = `${maxWidth}px`;
276
+ }
277
+
278
+ canvas.width = 0;
279
+ canvas.height = 0;
280
+ canvas = ctx = null;
281
+ }
282
+
283
+ }
279
284
 
280
285
  exports.Toolbar = Toolbar;