pdfjs-dist 2.0.489 → 2.2.228
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.
- package/CODE_OF_CONDUCT.md +15 -0
- package/bower.json +1 -1
- package/build/pdf.js +18515 -11402
- package/build/pdf.js.map +1 -1
- package/build/pdf.min.js +1 -1
- package/build/pdf.worker.js +48266 -37137
- package/build/pdf.worker.js.map +1 -1
- package/build/pdf.worker.min.js +1 -1
- package/external/url/url-lib.js +627 -0
- package/image_decoders/pdf.image_decoders.js +11350 -0
- package/image_decoders/pdf.image_decoders.js.map +1 -0
- package/image_decoders/pdf.image_decoders.min.js +1 -0
- package/lib/core/annotation.js +587 -242
- package/lib/core/arithmetic_decoder.js +275 -245
- package/lib/core/bidi.js +65 -6
- package/lib/core/ccitt.js +173 -18
- package/lib/core/ccitt_stream.js +15 -6
- package/lib/core/cff_parser.js +433 -61
- package/lib/core/charsets.js +5 -4
- package/lib/core/chunked_stream.js +400 -152
- package/lib/core/cmap.js +326 -87
- package/lib/core/colorspace.js +874 -594
- package/lib/core/core_utils.js +147 -0
- package/lib/core/crypto.js +290 -45
- package/lib/core/document.js +560 -268
- package/lib/core/encodings.js +19 -10
- package/lib/core/evaluator.js +1005 -360
- package/lib/core/font_renderer.js +331 -97
- package/lib/core/fonts.js +812 -195
- package/lib/core/function.js +284 -71
- package/lib/core/glyphlist.js +4 -3
- package/lib/core/image.js +169 -62
- package/lib/core/image_utils.js +111 -0
- package/lib/core/jbig2.js +479 -66
- package/lib/core/jbig2_stream.js +19 -8
- package/lib/core/jpeg_stream.js +38 -13
- package/lib/core/jpg.js +253 -29
- package/lib/core/jpx.js +396 -6
- package/lib/core/jpx_stream.js +18 -6
- package/lib/core/metrics.js +15 -15
- package/lib/core/murmurhash3.js +56 -34
- package/lib/core/obj.js +1354 -488
- package/lib/core/operator_list.js +144 -31
- package/lib/core/parser.js +539 -191
- package/lib/core/pattern.js +148 -14
- package/lib/core/pdf_manager.js +323 -133
- package/lib/core/primitives.js +111 -24
- package/lib/core/ps_parser.js +134 -45
- package/lib/core/standard_fonts.js +17 -17
- package/lib/core/stream.js +313 -34
- package/lib/core/type1_parser.js +143 -13
- package/lib/core/unicode.js +32 -5
- package/lib/core/worker.js +217 -190
- package/lib/core/worker_stream.js +277 -0
- package/lib/display/annotation_layer.js +450 -133
- package/lib/display/api.js +1597 -784
- package/lib/display/api_compatibility.js +11 -13
- package/lib/display/canvas.js +360 -44
- package/lib/display/content_disposition.js +83 -32
- package/lib/display/display_utils.js +747 -0
- package/lib/display/fetch_stream.js +221 -90
- package/lib/display/font_loader.js +468 -236
- package/lib/display/metadata.js +38 -16
- package/lib/display/network.js +635 -428
- package/lib/display/network_utils.js +32 -19
- package/lib/display/node_stream.js +367 -175
- package/lib/display/pattern_helper.js +81 -31
- package/lib/display/svg.js +1235 -519
- package/lib/display/text_layer.js +153 -29
- package/lib/display/transport_stream.js +345 -94
- package/lib/display/webgl.js +64 -18
- package/lib/display/worker_options.js +5 -4
- package/lib/display/xml_parser.js +166 -53
- package/lib/examples/node/domstubs.js +60 -4
- package/lib/pdf.js +36 -14
- package/lib/pdf.worker.js +5 -3
- package/lib/shared/compatibility.js +158 -564
- package/lib/shared/global_scope.js +2 -2
- package/lib/shared/is_node.js +4 -4
- package/lib/shared/message_handler.js +521 -0
- package/lib/shared/streams_polyfill.js +21 -17
- package/lib/shared/url_polyfill.js +56 -0
- package/lib/shared/util.js +243 -710
- package/lib/test/unit/annotation_spec.js +870 -401
- package/lib/test/unit/api_spec.js +657 -345
- package/lib/test/unit/bidi_spec.js +7 -7
- package/lib/test/unit/cff_parser_spec.js +54 -11
- package/lib/test/unit/clitests_helper.js +10 -8
- package/lib/test/unit/cmap_spec.js +95 -41
- package/lib/test/unit/colorspace_spec.js +115 -63
- package/lib/test/unit/core_utils_spec.js +191 -0
- package/lib/test/unit/crypto_spec.js +17 -5
- package/lib/test/unit/custom_spec.js +43 -55
- package/lib/test/unit/display_svg_spec.js +34 -18
- package/lib/test/unit/display_utils_spec.js +273 -0
- package/lib/test/unit/document_spec.js +8 -13
- package/lib/test/unit/encodings_spec.js +25 -45
- package/lib/test/unit/evaluator_spec.js +38 -15
- package/lib/test/unit/fetch_stream_spec.js +109 -0
- package/lib/test/unit/function_spec.js +17 -5
- package/lib/test/unit/jasmine-boot.js +33 -20
- package/lib/test/unit/{util_stream_spec.js → message_handler_spec.js} +41 -69
- package/lib/test/unit/metadata_spec.js +71 -11
- package/lib/test/unit/murmurhash3_spec.js +3 -3
- package/lib/test/unit/network_spec.js +19 -54
- package/lib/test/unit/network_utils_spec.js +91 -14
- package/lib/test/unit/node_stream_spec.js +56 -32
- package/lib/test/unit/parser_spec.js +162 -71
- package/lib/test/unit/pdf_find_controller_spec.js +230 -0
- package/lib/test/unit/pdf_find_utils_spec.js +63 -0
- package/lib/test/unit/pdf_history_spec.js +21 -9
- package/lib/test/unit/primitives_spec.js +53 -20
- package/lib/test/unit/stream_spec.js +12 -4
- package/lib/test/unit/test_utils.js +273 -56
- package/lib/test/unit/testreporter.js +21 -3
- package/lib/test/unit/type1_parser_spec.js +8 -6
- package/lib/test/unit/ui_utils_spec.js +454 -16
- package/lib/test/unit/unicode_spec.js +18 -15
- package/lib/test/unit/util_spec.js +87 -128
- package/lib/web/annotation_layer_builder.js +39 -22
- package/lib/web/app.js +1290 -588
- package/lib/web/app_options.js +100 -62
- package/lib/web/base_viewer.js +511 -182
- package/lib/web/chromecom.js +261 -117
- package/lib/web/debugger.js +166 -22
- package/lib/web/download_manager.js +32 -13
- package/lib/web/firefox_print_service.js +20 -10
- package/lib/web/firefoxcom.js +315 -80
- package/lib/web/genericcom.js +89 -30
- package/lib/web/genericl10n.js +142 -30
- package/lib/web/grab_to_pan.js +28 -4
- package/lib/web/interfaces.js +170 -47
- package/lib/web/overlay_manager.js +235 -85
- package/lib/web/password_prompt.js +22 -14
- package/lib/web/pdf_attachment_viewer.js +38 -18
- package/lib/web/pdf_cursor_tools.js +39 -16
- package/lib/web/pdf_document_properties.js +255 -136
- package/lib/web/pdf_find_bar.js +84 -40
- package/lib/web/pdf_find_controller.js +495 -184
- package/lib/web/pdf_find_utils.js +111 -0
- package/lib/web/pdf_history.js +190 -53
- package/lib/web/pdf_link_service.js +138 -77
- package/lib/web/pdf_outline_viewer.js +122 -46
- package/lib/web/pdf_page_view.js +191 -67
- package/lib/web/pdf_presentation_mode.js +99 -34
- package/lib/web/pdf_print_service.js +61 -13
- package/lib/web/pdf_rendering_queue.js +28 -9
- package/lib/web/pdf_sidebar.js +141 -81
- package/lib/web/pdf_sidebar_resizer.js +42 -16
- package/lib/web/pdf_single_page_viewer.js +74 -66
- package/lib/web/pdf_thumbnail_view.js +104 -33
- package/lib/web/pdf_thumbnail_viewer.js +66 -26
- package/lib/web/pdf_viewer.component.js +112 -32
- package/lib/web/pdf_viewer.js +91 -52
- package/lib/web/preferences.js +284 -89
- package/lib/web/secondary_toolbar.js +165 -40
- package/lib/web/text_layer_builder.js +134 -59
- package/lib/web/toolbar.js +78 -43
- package/lib/web/ui_utils.js +462 -136
- package/lib/web/view_history.js +215 -67
- package/lib/web/viewer_compatibility.js +4 -13
- package/package.json +5 -4
- package/web/pdf_viewer.css +79 -11
- package/web/pdf_viewer.js +6107 -3748
- package/web/pdf_viewer.js.map +1 -1
- package/lib/display/dom_utils.js +0 -309
- package/lib/test/unit/dom_utils_spec.js +0 -89
- package/lib/test/unit/fonts_spec.js +0 -81
- package/lib/web/dom_events.js +0 -137
package/web/pdf_viewer.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap d808a416ea0de33d4059","webpack:///web/ui_utils.js","webpack:///web/pdfjs.js","webpack:///web/dom_events.js","webpack:///web/pdf_link_service.js","webpack:///web/annotation_layer_builder.js","webpack:///web/text_layer_builder.js","webpack:///web/pdf_page_view.js","webpack:///web/pdf_rendering_queue.js","webpack:///web/base_viewer.js","webpack:///web/pdf_viewer.component.js","webpack:///web/download_manager.js","webpack:///web/genericl10n.js","webpack:///external/webL10n/l10n.js","webpack:///web/pdf_find_controller.js","webpack:///web/pdf_history.js","webpack:///web/viewer_compatibility.js","webpack:///web/pdf_single_page_viewer.js","webpack:///web/pdf_viewer.js"],"names":[],"mappings":"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","file":"pdf_viewer.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"pdfjs-dist/web/pdf_viewer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pdfjs-dist/web/pdf_viewer\"] = factory();\n\telse\n\t\troot[\"pdfjs-dist/web/pdf_viewer\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __w_pdfjs_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__w_pdfjs_require__.m = modules;\n\n \t// expose the module cache\n \t__w_pdfjs_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__w_pdfjs_require__.d = function(exports, name, getter) {\n \t\tif(!__w_pdfjs_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__w_pdfjs_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__w_pdfjs_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__w_pdfjs_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __w_pdfjs_require__(__w_pdfjs_require__.s = 9);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap d808a416ea0de33d4059","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createPromiseCapability } from 'pdfjs-lib';\n\nconst CSS_UNITS = 96.0 / 72.0;\nconst DEFAULT_SCALE_VALUE = 'auto';\nconst DEFAULT_SCALE = 1.0;\nconst MIN_SCALE = 0.10;\nconst MAX_SCALE = 10.0;\nconst UNKNOWN_SCALE = 0;\nconst MAX_AUTO_SCALE = 1.25;\nconst SCROLLBAR_PADDING = 40;\nconst VERTICAL_PADDING = 5;\n\nconst PresentationModeState = {\n UNKNOWN: 0,\n NORMAL: 1,\n CHANGING: 2,\n FULLSCREEN: 3,\n};\n\nconst RendererType = {\n CANVAS: 'canvas',\n SVG: 'svg',\n};\n\nconst TextLayerMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_ENHANCE: 2,\n};\n\n// Replaces {{arguments}} with their values.\nfunction formatL10nValue(text, args) {\n if (!args) {\n return text;\n }\n return text.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (all, name) => {\n return (name in args ? args[name] : '{{' + name + '}}');\n });\n}\n\n/**\n * No-op implementation of the localization service.\n * @implements {IL10n}\n */\nlet NullL10n = {\n getLanguage() {\n return Promise.resolve('en-us');\n },\n\n getDirection() {\n return Promise.resolve('ltr');\n },\n\n get(property, args, fallback) {\n return Promise.resolve(formatL10nValue(fallback, args));\n },\n\n translate(element) {\n return Promise.resolve();\n },\n};\n\n/**\n * Returns scale factor for the canvas. It makes sense for the HiDPI displays.\n * @return {Object} The object with horizontal (sx) and vertical (sy)\n scales. The scaled property is set to false if scaling is\n not required, true otherwise.\n */\nfunction getOutputScale(ctx) {\n let devicePixelRatio = window.devicePixelRatio || 1;\n let backingStoreRatio = ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio || 1;\n let pixelRatio = devicePixelRatio / backingStoreRatio;\n return {\n sx: pixelRatio,\n sy: pixelRatio,\n scaled: pixelRatio !== 1,\n };\n}\n\n/**\n * Scrolls specified element into view of its parent.\n * @param {Object} element - The element to be visible.\n * @param {Object} spot - An object with optional top and left properties,\n * specifying the offset from the top left edge.\n * @param {boolean} skipOverflowHiddenElements - Ignore elements that have\n * the CSS rule `overflow: hidden;` set. The default is false.\n */\nfunction scrollIntoView(element, spot, skipOverflowHiddenElements = false) {\n // Assuming offsetParent is available (it's not available when viewer is in\n // hidden iframe or object). We have to scroll: if the offsetParent is not set\n // producing the error. See also animationStarted.\n let parent = element.offsetParent;\n if (!parent) {\n console.error('offsetParent is not set -- cannot scroll');\n return;\n }\n let offsetY = element.offsetTop + element.clientTop;\n let offsetX = element.offsetLeft + element.clientLeft;\n while (parent.clientHeight === parent.scrollHeight ||\n (skipOverflowHiddenElements &&\n getComputedStyle(parent).overflow === 'hidden')) {\n if (parent.dataset._scaleY) {\n offsetY /= parent.dataset._scaleY;\n offsetX /= parent.dataset._scaleX;\n }\n offsetY += parent.offsetTop;\n offsetX += parent.offsetLeft;\n parent = parent.offsetParent;\n if (!parent) {\n return; // no need to scroll\n }\n }\n if (spot) {\n if (spot.top !== undefined) {\n offsetY += spot.top;\n }\n if (spot.left !== undefined) {\n offsetX += spot.left;\n parent.scrollLeft = offsetX;\n }\n }\n parent.scrollTop = offsetY;\n}\n\n/**\n * Helper function to start monitoring the scroll event and converting them into\n * PDF.js friendly one: with scroll debounce and scroll direction.\n */\nfunction watchScroll(viewAreaElement, callback) {\n let debounceScroll = function(evt) {\n if (rAF) {\n return;\n }\n // schedule an invocation of scroll for next animation frame.\n rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\n rAF = null;\n\n let currentY = viewAreaElement.scrollTop;\n let lastY = state.lastY;\n if (currentY !== lastY) {\n state.down = currentY > lastY;\n }\n state.lastY = currentY;\n callback(state);\n });\n };\n\n let state = {\n down: true,\n lastY: viewAreaElement.scrollTop,\n _eventHandler: debounceScroll,\n };\n\n let rAF = null;\n viewAreaElement.addEventListener('scroll', debounceScroll, true);\n return state;\n}\n\n/**\n * Helper function to parse query string (e.g. ?param1=value&parm2=...).\n */\nfunction parseQueryString(query) {\n let parts = query.split('&');\n let params = Object.create(null);\n for (let i = 0, ii = parts.length; i < ii; ++i) {\n let param = parts[i].split('=');\n let key = param[0].toLowerCase();\n let value = param.length > 1 ? param[1] : null;\n params[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n return params;\n}\n\n/**\n * Use binary search to find the index of the first item in a given array which\n * passes a given condition. The items are expected to be sorted in the sense\n * that if the condition is true for one item in the array, then it is also true\n * for all following items.\n *\n * @returns {Number} Index of the first array element to pass the test,\n * or |items.length| if no such element exists.\n */\nfunction binarySearchFirstItem(items, condition) {\n let minIndex = 0;\n let maxIndex = items.length - 1;\n\n if (items.length === 0 || !condition(items[maxIndex])) {\n return items.length;\n }\n if (condition(items[minIndex])) {\n return minIndex;\n }\n\n while (minIndex < maxIndex) {\n let currentIndex = (minIndex + maxIndex) >> 1;\n let currentItem = items[currentIndex];\n if (condition(currentItem)) {\n maxIndex = currentIndex;\n } else {\n minIndex = currentIndex + 1;\n }\n }\n return minIndex; /* === maxIndex */\n}\n\n/**\n * Approximates float number as a fraction using Farey sequence (max order\n * of 8).\n * @param {number} x - Positive float number.\n * @returns {Array} Estimated fraction: the first array item is a numerator,\n * the second one is a denominator.\n */\nfunction approximateFraction(x) {\n // Fast paths for int numbers or their inversions.\n if (Math.floor(x) === x) {\n return [x, 1];\n }\n let xinv = 1 / x;\n let limit = 8;\n if (xinv > limit) {\n return [1, limit];\n } else if (Math.floor(xinv) === xinv) {\n return [1, xinv];\n }\n\n let x_ = x > 1 ? xinv : x;\n // a/b and c/d are neighbours in Farey sequence.\n let a = 0, b = 1, c = 1, d = 1;\n // Limiting search to order 8.\n while (true) {\n // Generating next term in sequence (order of q).\n let p = a + c, q = b + d;\n if (q > limit) {\n break;\n }\n if (x_ <= p / q) {\n c = p; d = q;\n } else {\n a = p; b = q;\n }\n }\n let result;\n // Select closest of the neighbours to x.\n if (x_ - a / b < c / d - x_) {\n result = x_ === x ? [a, b] : [b, a];\n } else {\n result = x_ === x ? [c, d] : [d, c];\n }\n return result;\n}\n\nfunction roundToDivide(x, div) {\n let r = x % div;\n return r === 0 ? x : Math.round(x - r + div);\n}\n\n/**\n * Gets the size of the specified page, converted from PDF units to inches.\n * @param {Object} An Object containing the properties: {Array} `view`,\n * {number} `userUnit`, and {number} `rotate`.\n * @return {Object} An Object containing the properties: {number} `width`\n * and {number} `height`, given in inches.\n */\nfunction getPageSizeInches({ view, userUnit, rotate, }) {\n const [x1, y1, x2, y2] = view;\n // We need to take the page rotation into account as well.\n const changeOrientation = rotate % 180 !== 0;\n\n const width = (x2 - x1) / 72 * userUnit;\n const height = (y2 - y1) / 72 * userUnit;\n\n return {\n width: (changeOrientation ? height : width),\n height: (changeOrientation ? width : height),\n };\n}\n\n/**\n * Generic helper to find out what elements are visible within a scroll pane.\n */\nfunction getVisibleElements(scrollEl, views, sortByVisibility = false) {\n let top = scrollEl.scrollTop, bottom = top + scrollEl.clientHeight;\n let left = scrollEl.scrollLeft, right = left + scrollEl.clientWidth;\n\n function isElementBottomBelowViewTop(view) {\n let element = view.div;\n let elementBottom =\n element.offsetTop + element.clientTop + element.clientHeight;\n return elementBottom > top;\n }\n\n let visible = [], view, element;\n let currentHeight, viewHeight, hiddenHeight, percentHeight;\n let currentWidth, viewWidth;\n let firstVisibleElementInd = views.length === 0 ? 0 :\n binarySearchFirstItem(views, isElementBottomBelowViewTop);\n\n for (let i = firstVisibleElementInd, ii = views.length; i < ii; i++) {\n view = views[i];\n element = view.div;\n currentHeight = element.offsetTop + element.clientTop;\n viewHeight = element.clientHeight;\n\n if (currentHeight > bottom) {\n break;\n }\n\n currentWidth = element.offsetLeft + element.clientLeft;\n viewWidth = element.clientWidth;\n if (currentWidth + viewWidth < left || currentWidth > right) {\n continue;\n }\n hiddenHeight = Math.max(0, top - currentHeight) +\n Math.max(0, currentHeight + viewHeight - bottom);\n percentHeight = ((viewHeight - hiddenHeight) * 100 / viewHeight) | 0;\n\n visible.push({\n id: view.id,\n x: currentWidth,\n y: currentHeight,\n view,\n percent: percentHeight,\n });\n }\n\n let first = visible[0];\n let last = visible[visible.length - 1];\n\n if (sortByVisibility) {\n visible.sort(function(a, b) {\n let pc = a.percent - b.percent;\n if (Math.abs(pc) > 0.001) {\n return -pc;\n }\n return a.id - b.id; // ensure stability\n });\n }\n return { first, last, views: visible, };\n}\n\n/**\n * Event handler to suppress context menu.\n */\nfunction noContextMenuHandler(evt) {\n evt.preventDefault();\n}\n\nfunction isFileSchema(url) {\n let i = 0, ii = url.length;\n while (i < ii && url[i].trim() === '') {\n i++;\n }\n return url.substr(i, 7).toLowerCase() === 'file://';\n}\n\nfunction isDataSchema(url) {\n let i = 0, ii = url.length;\n while (i < ii && url[i].trim() === '') {\n i++;\n }\n return url.substr(i, 5).toLowerCase() === 'data:';\n}\n\n/**\n * Returns the filename or guessed filename from the url (see issue 3455).\n * @param {string} url - The original PDF location.\n * @param {string} defaultFilename - The value returned if the filename is\n * unknown, or the protocol is unsupported.\n * @returns {string} Guessed PDF filename.\n */\nfunction getPDFFileNameFromURL(url, defaultFilename = 'document.pdf') {\n if (isDataSchema(url)) {\n console.warn('getPDFFileNameFromURL: ' +\n 'ignoring \"data:\" URL for performance reasons.');\n return defaultFilename;\n }\n const reURI = /^(?:(?:[^:]+:)?\\/\\/[^\\/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\n // SCHEME HOST 1.PATH 2.QUERY 3.REF\n // Pattern to get last matching NAME.pdf\n const reFilename = /[^\\/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n let splitURI = reURI.exec(url);\n let suggestedFilename = reFilename.exec(splitURI[1]) ||\n reFilename.exec(splitURI[2]) ||\n reFilename.exec(splitURI[3]);\n if (suggestedFilename) {\n suggestedFilename = suggestedFilename[0];\n if (suggestedFilename.includes('%')) {\n // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf\n try {\n suggestedFilename =\n reFilename.exec(decodeURIComponent(suggestedFilename))[0];\n } catch (ex) { // Possible (extremely rare) errors:\n // URIError \"Malformed URI\", e.g. for \"%AA.pdf\"\n // TypeError \"null has no properties\", e.g. for \"%2F.pdf\"\n }\n }\n }\n return suggestedFilename || defaultFilename;\n}\n\nfunction normalizeWheelEventDelta(evt) {\n let delta = Math.sqrt(evt.deltaX * evt.deltaX + evt.deltaY * evt.deltaY);\n let angle = Math.atan2(evt.deltaY, evt.deltaX);\n if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\n // All that is left-up oriented has to change the sign.\n delta = -delta;\n }\n\n const MOUSE_DOM_DELTA_PIXEL_MODE = 0;\n const MOUSE_DOM_DELTA_LINE_MODE = 1;\n const MOUSE_PIXELS_PER_LINE = 30;\n const MOUSE_LINES_PER_PAGE = 30;\n\n // Converts delta to per-page units\n if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) {\n delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) {\n delta /= MOUSE_LINES_PER_PAGE;\n }\n return delta;\n}\n\nfunction isValidRotation(angle) {\n return Number.isInteger(angle) && angle % 90 === 0;\n}\n\nfunction isPortraitOrientation(size) {\n return size.width <= size.height;\n}\n\nfunction cloneObj(obj) {\n let result = Object.create(null);\n for (let i in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, i)) {\n result[i] = obj[i];\n }\n }\n return result;\n}\n\nconst WaitOnType = {\n EVENT: 'event',\n TIMEOUT: 'timeout',\n};\n\n/**\n * @typedef {Object} WaitOnEventOrTimeoutParameters\n * @property {Object} target - The event target, can for example be:\n * `window`, `document`, a DOM element, or an {EventBus} instance.\n * @property {string} name - The name of the event.\n * @property {number} delay - The delay, in milliseconds, after which the\n * timeout occurs (if the event wasn't already dispatched).\n */\n\n/**\n * Allows waiting for an event or a timeout, whichever occurs first.\n * Can be used to ensure that an action always occurs, even when an event\n * arrives late or not at all.\n *\n * @param {WaitOnEventOrTimeoutParameters}\n * @returns {Promise} A promise that is resolved with a {WaitOnType} value.\n */\nfunction waitOnEventOrTimeout({ target, name, delay = 0, }) {\n if (typeof target !== 'object' || !(name && typeof name === 'string') ||\n !(Number.isInteger(delay) && delay >= 0)) {\n return Promise.reject(\n new Error('waitOnEventOrTimeout - invalid parameters.'));\n }\n let capability = createPromiseCapability();\n\n function handler(type) {\n if (target instanceof EventBus) {\n target.off(name, eventHandler);\n } else {\n target.removeEventListener(name, eventHandler);\n }\n\n if (timeout) {\n clearTimeout(timeout);\n }\n capability.resolve(type);\n }\n\n let eventHandler = handler.bind(null, WaitOnType.EVENT);\n if (target instanceof EventBus) {\n target.on(name, eventHandler);\n } else {\n target.addEventListener(name, eventHandler);\n }\n\n let timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);\n let timeout = setTimeout(timeoutHandler, delay);\n\n return capability.promise;\n}\n\n/**\n * Promise that is resolved when DOM window becomes visible.\n */\nlet animationStarted = new Promise(function (resolve) {\n window.requestAnimationFrame(resolve);\n});\n\n/**\n * Simple event bus for an application. Listeners are attached using the\n * `on` and `off` methods. To raise an event, the `dispatch` method shall be\n * used.\n */\nclass EventBus {\n constructor() {\n this._listeners = Object.create(null);\n }\n\n on(eventName, listener) {\n let eventListeners = this._listeners[eventName];\n if (!eventListeners) {\n eventListeners = [];\n this._listeners[eventName] = eventListeners;\n }\n eventListeners.push(listener);\n }\n\n off(eventName, listener) {\n let eventListeners = this._listeners[eventName];\n let i;\n if (!eventListeners || ((i = eventListeners.indexOf(listener)) < 0)) {\n return;\n }\n eventListeners.splice(i, 1);\n }\n\n dispatch(eventName) {\n let eventListeners = this._listeners[eventName];\n if (!eventListeners || eventListeners.length === 0) {\n return;\n }\n // Passing all arguments after the eventName to the listeners.\n let args = Array.prototype.slice.call(arguments, 1);\n // Making copy of the listeners array in case if it will be modified\n // during dispatch.\n eventListeners.slice(0).forEach(function (listener) {\n listener.apply(null, args);\n });\n }\n}\n\nfunction clamp(v, min, max) {\n return Math.min(Math.max(v, min), max);\n}\n\nclass ProgressBar {\n constructor(id, { height, width, units, } = {}) {\n this.visible = true;\n\n // Fetch the sub-elements for later.\n this.div = document.querySelector(id + ' .progress');\n // Get the loading bar element, so it can be resized to fit the viewer.\n this.bar = this.div.parentNode;\n\n // Get options, with sensible defaults.\n this.height = height || 100;\n this.width = width || 100;\n this.units = units || '%';\n\n // Initialize heights.\n this.div.style.height = this.height + this.units;\n this.percent = 0;\n }\n\n _updateBar() {\n if (this._indeterminate) {\n this.div.classList.add('indeterminate');\n this.div.style.width = this.width + this.units;\n return;\n }\n\n this.div.classList.remove('indeterminate');\n let progressSize = this.width * this._percent / 100;\n this.div.style.width = progressSize + this.units;\n }\n\n get percent() {\n return this._percent;\n }\n\n set percent(val) {\n this._indeterminate = isNaN(val);\n this._percent = clamp(val, 0, 100);\n this._updateBar();\n }\n\n setWidth(viewer) {\n if (!viewer) {\n return;\n }\n let container = viewer.parentNode;\n let scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n if (scrollbarWidth > 0) {\n this.bar.setAttribute('style', 'width: calc(100% - ' +\n scrollbarWidth + 'px);');\n }\n }\n\n hide() {\n if (!this.visible) {\n return;\n }\n this.visible = false;\n this.bar.classList.add('hidden');\n document.body.classList.remove('loadingInProgress');\n }\n\n show() {\n if (this.visible) {\n return;\n }\n this.visible = true;\n document.body.classList.add('loadingInProgress');\n this.bar.classList.remove('hidden');\n }\n}\n\nexport {\n CSS_UNITS,\n DEFAULT_SCALE_VALUE,\n DEFAULT_SCALE,\n MIN_SCALE,\n MAX_SCALE,\n UNKNOWN_SCALE,\n MAX_AUTO_SCALE,\n SCROLLBAR_PADDING,\n VERTICAL_PADDING,\n isValidRotation,\n isPortraitOrientation,\n isFileSchema,\n cloneObj,\n PresentationModeState,\n RendererType,\n TextLayerMode,\n NullL10n,\n EventBus,\n ProgressBar,\n getPDFFileNameFromURL,\n noContextMenuHandler,\n parseQueryString,\n getVisibleElements,\n roundToDivide,\n getPageSizeInches,\n approximateFraction,\n getOutputScale,\n scrollIntoView,\n watchScroll,\n binarySearchFirstItem,\n normalizeWheelEventDelta,\n animationStarted,\n WaitOnType,\n waitOnEventOrTimeout,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/ui_utils.js","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals module, __non_webpack_require__ */\n\n'use strict';\n\nlet pdfjsLib;\nif (typeof window !== 'undefined' && window['pdfjs-dist/build/pdf']) {\n pdfjsLib = window['pdfjs-dist/build/pdf'];\n} else {\n pdfjsLib = __non_webpack_require__('../build/pdf.js');\n}\nmodule.exports = pdfjsLib;\n\n\n\n// WEBPACK FOOTER //\n// web/pdfjs.js","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventBus } from './ui_utils';\n\n// Attaching to the application event bus to dispatch events to the DOM for\n// backwards viewer API compatibility.\nfunction attachDOMEventsToEventBus(eventBus) {\n eventBus.on('documentload', function() {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('documentload', true, true, {});\n window.dispatchEvent(event);\n });\n eventBus.on('pagerendered', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('pagerendered', true, true, {\n pageNumber: evt.pageNumber,\n cssTransform: evt.cssTransform,\n });\n evt.source.div.dispatchEvent(event);\n });\n eventBus.on('textlayerrendered', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('textlayerrendered', true, true, {\n pageNumber: evt.pageNumber,\n });\n evt.source.textLayerDiv.dispatchEvent(event);\n });\n eventBus.on('pagechange', function(evt) {\n let event = document.createEvent('UIEvents');\n event.initUIEvent('pagechange', true, true, window, 0);\n event.pageNumber = evt.pageNumber;\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('pagesinit', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('pagesinit', true, true, null);\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('pagesloaded', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('pagesloaded', true, true, {\n pagesCount: evt.pagesCount,\n });\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('scalechange', function(evt) {\n let event = document.createEvent('UIEvents');\n event.initUIEvent('scalechange', true, true, window, 0);\n event.scale = evt.scale;\n event.presetValue = evt.presetValue;\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('updateviewarea', function(evt) {\n let event = document.createEvent('UIEvents');\n event.initUIEvent('updateviewarea', true, true, window, 0);\n event.location = evt.location;\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('find', function(evt) {\n if (evt.source === window) {\n return; // event comes from FirefoxCom, no need to replicate\n }\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('find' + evt.type, true, true, {\n query: evt.query,\n phraseSearch: evt.phraseSearch,\n caseSensitive: evt.caseSensitive,\n highlightAll: evt.highlightAll,\n findPrevious: evt.findPrevious,\n });\n window.dispatchEvent(event);\n });\n eventBus.on('attachmentsloaded', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('attachmentsloaded', true, true, {\n attachmentsCount: evt.attachmentsCount,\n });\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('sidebarviewchanged', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('sidebarviewchanged', true, true, {\n view: evt.view,\n });\n evt.source.outerContainer.dispatchEvent(event);\n });\n eventBus.on('pagemode', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('pagemode', true, true, {\n mode: evt.mode,\n });\n evt.source.pdfViewer.container.dispatchEvent(event);\n });\n eventBus.on('namedaction', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('namedaction', true, true, {\n action: evt.action,\n });\n evt.source.pdfViewer.container.dispatchEvent(event);\n });\n eventBus.on('presentationmodechanged', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('presentationmodechanged', true, true, {\n active: evt.active,\n switchInProgress: evt.switchInProgress,\n });\n window.dispatchEvent(event);\n });\n eventBus.on('outlineloaded', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('outlineloaded', true, true, {\n outlineCount: evt.outlineCount,\n });\n evt.source.container.dispatchEvent(event);\n });\n}\n\nlet globalEventBus = null;\nfunction getGlobalEventBus() {\n if (globalEventBus) {\n return globalEventBus;\n }\n globalEventBus = new EventBus();\n attachDOMEventsToEventBus(globalEventBus);\n return globalEventBus;\n}\n\nexport {\n attachDOMEventsToEventBus,\n getGlobalEventBus,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/dom_events.js","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobalEventBus } from './dom_events';\nimport { parseQueryString } from './ui_utils';\n\n/**\n * @typedef {Object} PDFLinkServiceOptions\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} externalLinkTarget - (optional) Specifies the `target`\n * attribute for external links. Must use one of the values from {LinkTarget}.\n * Defaults to using no target.\n * @property {string} externalLinkRel - (optional) Specifies the `rel` attribute\n * for external links. Defaults to stripping the referrer.\n */\n\n/**\n * Performs navigation functions inside PDF, such as opening specified page,\n * or destination.\n * @implements {IPDFLinkService}\n */\nclass PDFLinkService {\n /**\n * @param {PDFLinkServiceOptions} options\n */\n constructor({ eventBus, externalLinkTarget = null,\n externalLinkRel = null, } = {}) {\n this.eventBus = eventBus || getGlobalEventBus();\n this.externalLinkTarget = externalLinkTarget;\n this.externalLinkRel = externalLinkRel;\n\n this.baseUrl = null;\n this.pdfDocument = null;\n this.pdfViewer = null;\n this.pdfHistory = null;\n\n this._pagesRefCache = null;\n }\n\n setDocument(pdfDocument, baseUrl) {\n this.baseUrl = baseUrl;\n this.pdfDocument = pdfDocument;\n this._pagesRefCache = Object.create(null);\n }\n\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n }\n\n setHistory(pdfHistory) {\n this.pdfHistory = pdfHistory;\n }\n\n /**\n * @returns {number}\n */\n get pagesCount() {\n return this.pdfDocument ? this.pdfDocument.numPages : 0;\n }\n\n /**\n * @returns {number}\n */\n get page() {\n return this.pdfViewer.currentPageNumber;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {\n this.pdfViewer.currentPageNumber = value;\n }\n\n /**\n * @returns {number}\n */\n get rotation() {\n return this.pdfViewer.pagesRotation;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {\n this.pdfViewer.pagesRotation = value;\n }\n\n /**\n * @param {string|Array} dest - The named, or explicit, PDF destination.\n */\n navigateTo(dest) {\n let goToDestination = ({ namedDest, explicitDest, }) => {\n // Dest array looks like that: <page-ref> </XYZ|/FitXXX> <args..>\n let destRef = explicitDest[0], pageNumber;\n\n if (destRef instanceof Object) {\n pageNumber = this._cachedPageNumber(destRef);\n\n if (pageNumber === null) {\n // Fetch the page reference if it's not yet available. This could\n // only occur during loading, before all pages have been resolved.\n this.pdfDocument.getPageIndex(destRef).then((pageIndex) => {\n this.cachePageRef(pageIndex + 1, destRef);\n goToDestination({ namedDest, explicitDest, });\n }).catch(() => {\n console.error(`PDFLinkService.navigateTo: \"${destRef}\" is not ` +\n `a valid page reference, for dest=\"${dest}\".`);\n });\n return;\n }\n } else if (Number.isInteger(destRef)) {\n pageNumber = destRef + 1;\n } else {\n console.error(`PDFLinkService.navigateTo: \"${destRef}\" is not ` +\n `a valid destination reference, for dest=\"${dest}\".`);\n return;\n }\n if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n console.error(`PDFLinkService.navigateTo: \"${pageNumber}\" is not ` +\n `a valid page number, for dest=\"${dest}\".`);\n return;\n }\n\n if (this.pdfHistory) {\n // Update the browser history before scrolling the new destination into\n // view, to be able to accurately capture the current document position.\n this.pdfHistory.pushCurrentPosition();\n this.pdfHistory.push({ namedDest, explicitDest, pageNumber, });\n }\n\n this.pdfViewer.scrollPageIntoView({\n pageNumber,\n destArray: explicitDest,\n });\n };\n\n new Promise((resolve, reject) => {\n if (typeof dest === 'string') {\n this.pdfDocument.getDestination(dest).then((destArray) => {\n resolve({\n namedDest: dest,\n explicitDest: destArray,\n });\n });\n return;\n }\n resolve({\n namedDest: '',\n explicitDest: dest,\n });\n }).then((data) => {\n if (!(data.explicitDest instanceof Array)) {\n console.error(`PDFLinkService.navigateTo: \"${data.explicitDest}\" is` +\n ` not a valid destination array, for dest=\"${dest}\".`);\n return;\n }\n goToDestination(data);\n });\n }\n\n /**\n * @param {string|Array} dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n if (typeof dest === 'string') {\n return this.getAnchorUrl('#' + escape(dest));\n }\n if (dest instanceof Array) {\n let str = JSON.stringify(dest);\n return this.getAnchorUrl('#' + escape(str));\n }\n return this.getAnchorUrl('');\n }\n\n /**\n * Prefix the full url on anchor links to make sure that links are resolved\n * relative to the current URL instead of the one defined in <base href>.\n * @param {String} anchor The anchor hash, including the #.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(anchor) {\n return (this.baseUrl || '') + anchor;\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {\n let pageNumber, dest;\n if (hash.includes('=')) {\n let params = parseQueryString(hash);\n if ('search' in params) {\n this.eventBus.dispatch('findfromurlhash', {\n source: this,\n query: params['search'].replace(/\"/g, ''),\n phraseSearch: (params['phrase'] === 'true'),\n });\n }\n // borrowing syntax from \"Parameters for Opening PDF Files\"\n if ('nameddest' in params) {\n this.navigateTo(params.nameddest);\n return;\n }\n if ('page' in params) {\n pageNumber = (params.page | 0) || 1;\n }\n if ('zoom' in params) {\n // Build the destination array.\n let zoomArgs = params.zoom.split(','); // scale,left,top\n let zoomArg = zoomArgs[0];\n let zoomArgNumber = parseFloat(zoomArg);\n\n if (!zoomArg.includes('Fit')) {\n // If the zoomArg is a number, it has to get divided by 100. If it's\n // a string, it should stay as it is.\n dest = [null, { name: 'XYZ', },\n zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null,\n zoomArgs.length > 2 ? (zoomArgs[2] | 0) : null,\n (zoomArgNumber ? zoomArgNumber / 100 : zoomArg)];\n } else {\n if (zoomArg === 'Fit' || zoomArg === 'FitB') {\n dest = [null, { name: zoomArg, }];\n } else if ((zoomArg === 'FitH' || zoomArg === 'FitBH') ||\n (zoomArg === 'FitV' || zoomArg === 'FitBV')) {\n dest = [null, { name: zoomArg, },\n zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null];\n } else if (zoomArg === 'FitR') {\n if (zoomArgs.length !== 5) {\n console.error(\n 'PDFLinkService.setHash: Not enough parameters for \"FitR\".');\n } else {\n dest = [null, { name: zoomArg, },\n (zoomArgs[1] | 0), (zoomArgs[2] | 0),\n (zoomArgs[3] | 0), (zoomArgs[4] | 0)];\n }\n } else {\n console.error(`PDFLinkService.setHash: \"${zoomArg}\" is not ` +\n 'a valid zoom value.');\n }\n }\n }\n if (dest) {\n this.pdfViewer.scrollPageIntoView({\n pageNumber: pageNumber || this.page,\n destArray: dest,\n allowNegativeOffset: true,\n });\n } else if (pageNumber) {\n this.page = pageNumber; // simple page\n }\n if ('pagemode' in params) {\n this.eventBus.dispatch('pagemode', {\n source: this,\n mode: params.pagemode,\n });\n }\n } else { // Named (or explicit) destination.\n dest = unescape(hash);\n try {\n dest = JSON.parse(dest);\n\n if (!(dest instanceof Array)) {\n // Avoid incorrectly rejecting a valid named destination, such as\n // e.g. \"4.3\" or \"true\", because `JSON.parse` converted its type.\n dest = dest.toString();\n }\n } catch (ex) {}\n\n if (typeof dest === 'string' || isValidExplicitDestination(dest)) {\n this.navigateTo(dest);\n return;\n }\n console.error(`PDFLinkService.setHash: \"${unescape(hash)}\" is not ` +\n 'a valid destination.');\n }\n }\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {\n // See PDF reference, table 8.45 - Named action\n switch (action) {\n case 'GoBack':\n if (this.pdfHistory) {\n this.pdfHistory.back();\n }\n break;\n\n case 'GoForward':\n if (this.pdfHistory) {\n this.pdfHistory.forward();\n }\n break;\n\n case 'NextPage':\n if (this.page < this.pagesCount) {\n this.page++;\n }\n break;\n\n case 'PrevPage':\n if (this.page > 1) {\n this.page--;\n }\n break;\n\n case 'LastPage':\n this.page = this.pagesCount;\n break;\n\n case 'FirstPage':\n this.page = 1;\n break;\n\n default:\n break; // No action according to spec\n }\n\n this.eventBus.dispatch('namedaction', {\n source: this,\n action,\n });\n }\n\n /**\n * @param {Object} params\n */\n onFileAttachmentAnnotation({ id, filename, content, }) {\n this.eventBus.dispatch('fileattachmentannotation', {\n source: this,\n id,\n filename,\n content,\n });\n }\n\n /**\n * @param {number} pageNum - page number.\n * @param {Object} pageRef - reference to the page.\n */\n cachePageRef(pageNum, pageRef) {\n if (!pageRef) {\n return;\n }\n let refStr = pageRef.num + ' ' + pageRef.gen + ' R';\n this._pagesRefCache[refStr] = pageNum;\n }\n\n _cachedPageNumber(pageRef) {\n let refStr = pageRef.num + ' ' + pageRef.gen + ' R';\n return (this._pagesRefCache && this._pagesRefCache[refStr]) || null;\n }\n}\n\nfunction isValidExplicitDestination(dest) {\n if (!(dest instanceof Array)) {\n return false;\n }\n let destLength = dest.length, allowNull = true;\n if (destLength < 2) {\n return false;\n }\n let page = dest[0];\n if (!(typeof page === 'object' &&\n Number.isInteger(page.num) && Number.isInteger(page.gen)) &&\n !(Number.isInteger(page) && page >= 0)) {\n return false;\n }\n let zoom = dest[1];\n if (!(typeof zoom === 'object' && typeof zoom.name === 'string')) {\n return false;\n }\n switch (zoom.name) {\n case 'XYZ':\n if (destLength !== 5) {\n return false;\n }\n break;\n case 'Fit':\n case 'FitB':\n return destLength === 2;\n case 'FitH':\n case 'FitBH':\n case 'FitV':\n case 'FitBV':\n if (destLength !== 3) {\n return false;\n }\n break;\n case 'FitR':\n if (destLength !== 6) {\n return false;\n }\n allowNull = false;\n break;\n default:\n return false;\n }\n for (let i = 2; i < destLength; i++) {\n let param = dest[i];\n if (!(typeof param === 'number' || (allowNull && param === null))) {\n return false;\n }\n }\n return true;\n}\n\nclass SimpleLinkService {\n constructor() {\n this.externalLinkTarget = null;\n this.externalLinkRel = null;\n }\n\n /**\n * @returns {number}\n */\n get page() {\n return 0;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {}\n\n /**\n * @returns {number}\n */\n get rotation() {\n return 0;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {}\n\n /**\n * @param dest - The PDF destination object.\n */\n navigateTo(dest) {}\n\n /**\n * @param dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n return '#';\n }\n\n /**\n * @param hash - The PDF parameters/hash.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(hash) {\n return '#';\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {}\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {}\n\n /**\n * @param {Object} params\n */\n onFileAttachmentAnnotation({ id, filename, content, }) {}\n\n /**\n * @param {number} pageNum - page number.\n * @param {Object} pageRef - reference to the page.\n */\n cachePageRef(pageNum, pageRef) {}\n}\n\nexport {\n PDFLinkService,\n SimpleLinkService,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_link_service.js","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnnotationLayer } from 'pdfjs-lib';\nimport { NullL10n } from './ui_utils';\nimport { SimpleLinkService } from './pdf_link_service';\n\n/**\n * @typedef {Object} AnnotationLayerBuilderOptions\n * @property {HTMLDivElement} pageDiv\n * @property {PDFPage} pdfPage\n * @property {string} imageResourcesPath - (optional) Path for image resources,\n * mainly for annotation icons. Include trailing slash.\n * @property {boolean} renderInteractiveForms\n * @property {IPDFLinkService} linkService\n * @property {DownloadManager} downloadManager\n * @property {IL10n} l10n - Localization service.\n */\n\nclass AnnotationLayerBuilder {\n /**\n * @param {AnnotationLayerBuilderOptions} options\n */\n constructor({ pageDiv, pdfPage, linkService, downloadManager,\n imageResourcesPath = '', renderInteractiveForms = false,\n l10n = NullL10n, }) {\n this.pageDiv = pageDiv;\n this.pdfPage = pdfPage;\n this.linkService = linkService;\n this.downloadManager = downloadManager;\n this.imageResourcesPath = imageResourcesPath;\n this.renderInteractiveForms = renderInteractiveForms;\n this.l10n = l10n;\n\n this.div = null;\n this._cancelled = false;\n }\n\n /**\n * @param {PageViewport} viewport\n * @param {string} intent (default value is 'display')\n */\n render(viewport, intent = 'display') {\n this.pdfPage.getAnnotations({ intent, }).then((annotations) => {\n if (this._cancelled) {\n return;\n }\n\n let parameters = {\n viewport: viewport.clone({ dontFlip: true, }),\n div: this.div,\n annotations,\n page: this.pdfPage,\n imageResourcesPath: this.imageResourcesPath,\n renderInteractiveForms: this.renderInteractiveForms,\n linkService: this.linkService,\n downloadManager: this.downloadManager,\n };\n\n if (this.div) {\n // If an annotationLayer already exists, refresh its children's\n // transformation matrices.\n AnnotationLayer.update(parameters);\n } else {\n // Create an annotation layer div and render the annotations\n // if there is at least one annotation.\n if (annotations.length === 0) {\n return;\n }\n this.div = document.createElement('div');\n this.div.className = 'annotationLayer';\n this.pageDiv.appendChild(this.div);\n parameters.div = this.div;\n\n AnnotationLayer.render(parameters);\n this.l10n.translate(this.div);\n }\n });\n }\n\n cancel() {\n this._cancelled = true;\n }\n\n hide() {\n if (!this.div) {\n return;\n }\n this.div.setAttribute('hidden', 'true');\n }\n}\n\n/**\n * @implements IPDFAnnotationLayerFactory\n */\nclass DefaultAnnotationLayerFactory {\n /**\n * @param {HTMLDivElement} pageDiv\n * @param {PDFPage} pdfPage\n * @param {string} imageResourcesPath - (optional) Path for image resources,\n * mainly for annotation icons. Include trailing slash.\n * @param {boolean} renderInteractiveForms\n * @param {IL10n} l10n\n * @returns {AnnotationLayerBuilder}\n */\n createAnnotationLayerBuilder(pageDiv, pdfPage, imageResourcesPath = '',\n renderInteractiveForms = false,\n l10n = NullL10n) {\n return new AnnotationLayerBuilder({\n pageDiv,\n pdfPage,\n imageResourcesPath,\n renderInteractiveForms,\n linkService: new SimpleLinkService(),\n l10n,\n });\n }\n}\n\nexport {\n AnnotationLayerBuilder,\n DefaultAnnotationLayerFactory,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/annotation_layer_builder.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobalEventBus } from './dom_events';\nimport { renderTextLayer } from 'pdfjs-lib';\n\nconst EXPAND_DIVS_TIMEOUT = 300; // ms\n\n/**\n * @typedef {Object} TextLayerBuilderOptions\n * @property {HTMLDivElement} textLayerDiv - The text layer container.\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} pageIndex - The page index.\n * @property {PageViewport} viewport - The viewport of the text layer.\n * @property {PDFFindController} findController\n * @property {boolean} enhanceTextSelection - Option to turn on improved\n * text selection.\n */\n\n/**\n * The text layer builder provides text selection functionality for the PDF.\n * It does this by creating overlay divs over the PDF's text. These divs\n * contain text that matches the PDF text they are overlaying. This object\n * also provides a way to highlight text that is being searched for.\n */\nclass TextLayerBuilder {\n constructor({ textLayerDiv, eventBus, pageIndex, viewport,\n findController = null, enhanceTextSelection = false, }) {\n this.textLayerDiv = textLayerDiv;\n this.eventBus = eventBus || getGlobalEventBus();\n this.textContent = null;\n this.textContentItemsStr = [];\n this.textContentStream = null;\n this.renderingDone = false;\n this.pageIdx = pageIndex;\n this.pageNumber = this.pageIdx + 1;\n this.matches = [];\n this.viewport = viewport;\n this.textDivs = [];\n this.findController = findController;\n this.textLayerRenderTask = null;\n this.enhanceTextSelection = enhanceTextSelection;\n\n this._bindMouse();\n }\n\n /**\n * @private\n */\n _finishRendering() {\n this.renderingDone = true;\n\n if (!this.enhanceTextSelection) {\n let endOfContent = document.createElement('div');\n endOfContent.className = 'endOfContent';\n this.textLayerDiv.appendChild(endOfContent);\n }\n\n this.eventBus.dispatch('textlayerrendered', {\n source: this,\n pageNumber: this.pageNumber,\n numTextDivs: this.textDivs.length,\n });\n }\n\n /**\n * Renders the text layer.\n *\n * @param {number} timeout - (optional) wait for a specified amount of\n * milliseconds before rendering\n */\n render(timeout = 0) {\n if (!(this.textContent || this.textContentStream) || this.renderingDone) {\n return;\n }\n this.cancel();\n\n this.textDivs = [];\n let textLayerFrag = document.createDocumentFragment();\n this.textLayerRenderTask = renderTextLayer({\n textContent: this.textContent,\n textContentStream: this.textContentStream,\n container: textLayerFrag,\n viewport: this.viewport,\n textDivs: this.textDivs,\n textContentItemsStr: this.textContentItemsStr,\n timeout,\n enhanceTextSelection: this.enhanceTextSelection,\n });\n this.textLayerRenderTask.promise.then(() => {\n this.textLayerDiv.appendChild(textLayerFrag);\n this._finishRendering();\n this.updateMatches();\n }, function (reason) {\n // Cancelled or failed to render text layer; skipping errors.\n });\n }\n\n /**\n * Cancel rendering of the text layer.\n */\n cancel() {\n if (this.textLayerRenderTask) {\n this.textLayerRenderTask.cancel();\n this.textLayerRenderTask = null;\n }\n }\n\n setTextContentStream(readableStream) {\n this.cancel();\n this.textContentStream = readableStream;\n }\n\n setTextContent(textContent) {\n this.cancel();\n this.textContent = textContent;\n }\n\n convertMatches(matches, matchesLength) {\n let i = 0;\n let iIndex = 0;\n let textContentItemsStr = this.textContentItemsStr;\n let end = textContentItemsStr.length - 1;\n let queryLen = (this.findController === null ?\n 0 : this.findController.state.query.length);\n let ret = [];\n if (!matches) {\n return ret;\n }\n for (let m = 0, len = matches.length; m < len; m++) {\n // Calculate the start position.\n let matchIdx = matches[m];\n\n // Loop over the divIdxs.\n while (i !== end && matchIdx >=\n (iIndex + textContentItemsStr[i].length)) {\n iIndex += textContentItemsStr[i].length;\n i++;\n }\n\n if (i === textContentItemsStr.length) {\n console.error('Could not find a matching mapping');\n }\n\n let match = {\n begin: {\n divIdx: i,\n offset: matchIdx - iIndex,\n },\n };\n\n // Calculate the end position.\n if (matchesLength) { // Multiterm search.\n matchIdx += matchesLength[m];\n } else { // Phrase search.\n matchIdx += queryLen;\n }\n\n // Somewhat the same array as above, but use > instead of >= to get\n // the end position right.\n while (i !== end && matchIdx >\n (iIndex + textContentItemsStr[i].length)) {\n iIndex += textContentItemsStr[i].length;\n i++;\n }\n\n match.end = {\n divIdx: i,\n offset: matchIdx - iIndex,\n };\n ret.push(match);\n }\n\n return ret;\n }\n\n renderMatches(matches) {\n // Early exit if there is nothing to render.\n if (matches.length === 0) {\n return;\n }\n\n let textContentItemsStr = this.textContentItemsStr;\n let textDivs = this.textDivs;\n let prevEnd = null;\n let pageIdx = this.pageIdx;\n let isSelectedPage = (this.findController === null ?\n false : (pageIdx === this.findController.selected.pageIdx));\n let selectedMatchIdx = (this.findController === null ?\n -1 : this.findController.selected.matchIdx);\n let highlightAll = (this.findController === null ?\n false : this.findController.state.highlightAll);\n let infinity = {\n divIdx: -1,\n offset: undefined,\n };\n\n function beginText(begin, className) {\n let divIdx = begin.divIdx;\n textDivs[divIdx].textContent = '';\n appendTextToDiv(divIdx, 0, begin.offset, className);\n }\n\n function appendTextToDiv(divIdx, fromOffset, toOffset, className) {\n let div = textDivs[divIdx];\n let content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);\n let node = document.createTextNode(content);\n if (className) {\n let span = document.createElement('span');\n span.className = className;\n span.appendChild(node);\n div.appendChild(span);\n return;\n }\n div.appendChild(node);\n }\n\n let i0 = selectedMatchIdx, i1 = i0 + 1;\n if (highlightAll) {\n i0 = 0;\n i1 = matches.length;\n } else if (!isSelectedPage) {\n // Not highlighting all and this isn't the selected page, so do nothing.\n return;\n }\n\n for (let i = i0; i < i1; i++) {\n let match = matches[i];\n let begin = match.begin;\n let end = match.end;\n let isSelected = (isSelectedPage && i === selectedMatchIdx);\n let highlightSuffix = (isSelected ? ' selected' : '');\n\n if (this.findController) {\n this.findController.updateMatchPosition(pageIdx, i, textDivs,\n begin.divIdx);\n }\n\n // Match inside new div.\n if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {\n // If there was a previous div, then add the text at the end.\n if (prevEnd !== null) {\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n }\n // Clear the divs and set the content until the starting point.\n beginText(begin);\n } else {\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);\n }\n\n if (begin.divIdx === end.divIdx) {\n appendTextToDiv(begin.divIdx, begin.offset, end.offset,\n 'highlight' + highlightSuffix);\n } else {\n appendTextToDiv(begin.divIdx, begin.offset, infinity.offset,\n 'highlight begin' + highlightSuffix);\n for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {\n textDivs[n0].className = 'highlight middle' + highlightSuffix;\n }\n beginText(end, 'highlight end' + highlightSuffix);\n }\n prevEnd = end;\n }\n\n if (prevEnd) {\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n }\n }\n\n updateMatches() {\n // Only show matches when all rendering is done.\n if (!this.renderingDone) {\n return;\n }\n\n // Clear all matches.\n let matches = this.matches;\n let textDivs = this.textDivs;\n let textContentItemsStr = this.textContentItemsStr;\n let clearedUntilDivIdx = -1;\n\n // Clear all current matches.\n for (let i = 0, len = matches.length; i < len; i++) {\n let match = matches[i];\n let begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);\n for (let n = begin, end = match.end.divIdx; n <= end; n++) {\n let div = textDivs[n];\n div.textContent = textContentItemsStr[n];\n div.className = '';\n }\n clearedUntilDivIdx = match.end.divIdx + 1;\n }\n\n if (this.findController === null || !this.findController.active) {\n return;\n }\n\n // Convert the matches on the page controller into the match format\n // used for the textLayer.\n let pageMatches, pageMatchesLength;\n if (this.findController !== null) {\n pageMatches = this.findController.pageMatches[this.pageIdx] || null;\n pageMatchesLength = (this.findController.pageMatchesLength) ?\n this.findController.pageMatchesLength[this.pageIdx] || null : null;\n }\n\n this.matches = this.convertMatches(pageMatches, pageMatchesLength);\n this.renderMatches(this.matches);\n }\n\n /**\n * Improves text selection by adding an additional div where the mouse was\n * clicked. This reduces flickering of the content if the mouse is slowly\n * dragged up or down.\n *\n * @private\n */\n _bindMouse() {\n let div = this.textLayerDiv;\n let expandDivsTimer = null;\n\n div.addEventListener('mousedown', (evt) => {\n if (this.enhanceTextSelection && this.textLayerRenderTask) {\n this.textLayerRenderTask.expandTextDivs(true);\n if ((typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) &&\n expandDivsTimer) {\n clearTimeout(expandDivsTimer);\n expandDivsTimer = null;\n }\n return;\n }\n\n let end = div.querySelector('.endOfContent');\n if (!end) {\n return;\n }\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n // On non-Firefox browsers, the selection will feel better if the height\n // of the `endOfContent` div is adjusted to start at mouse click\n // location. This avoids flickering when the selection moves up.\n // However it does not work when selection is started on empty space.\n let adjustTop = evt.target !== div;\n if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n adjustTop = adjustTop && window.getComputedStyle(end).\n getPropertyValue('-moz-user-select') !== 'none';\n }\n if (adjustTop) {\n let divBounds = div.getBoundingClientRect();\n let r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);\n end.style.top = (r * 100).toFixed(2) + '%';\n }\n }\n end.classList.add('active');\n });\n\n div.addEventListener('mouseup', () => {\n if (this.enhanceTextSelection && this.textLayerRenderTask) {\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n expandDivsTimer = setTimeout(() => {\n if (this.textLayerRenderTask) {\n this.textLayerRenderTask.expandTextDivs(false);\n }\n expandDivsTimer = null;\n }, EXPAND_DIVS_TIMEOUT);\n } else {\n this.textLayerRenderTask.expandTextDivs(false);\n }\n return;\n }\n\n let end = div.querySelector('.endOfContent');\n if (!end) {\n return;\n }\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n end.style.top = '';\n }\n end.classList.remove('active');\n });\n }\n}\n\n/**\n * @implements IPDFTextLayerFactory\n */\nclass DefaultTextLayerFactory {\n /**\n * @param {HTMLDivElement} textLayerDiv\n * @param {number} pageIndex\n * @param {PageViewport} viewport\n * @param {boolean} enhanceTextSelection\n * @returns {TextLayerBuilder}\n */\n createTextLayerBuilder(textLayerDiv, pageIndex, viewport,\n enhanceTextSelection = false) {\n return new TextLayerBuilder({\n textLayerDiv,\n pageIndex,\n viewport,\n enhanceTextSelection,\n });\n }\n}\n\nexport {\n TextLayerBuilder,\n DefaultTextLayerFactory,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/text_layer_builder.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n approximateFraction, CSS_UNITS, DEFAULT_SCALE, getOutputScale, NullL10n,\n RendererType, roundToDivide, TextLayerMode\n} from './ui_utils';\nimport {\n createPromiseCapability, RenderingCancelledException, SVGGraphics\n} from 'pdfjs-lib';\nimport { getGlobalEventBus } from './dom_events';\nimport { RenderingStates } from './pdf_rendering_queue';\nimport { viewerCompatibilityParams } from './viewer_compatibility';\n\n/**\n * @typedef {Object} PDFPageViewOptions\n * @property {HTMLDivElement} container - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} id - The page unique ID (normally its number).\n * @property {number} scale - The page scale display.\n * @property {PageViewport} defaultViewport - The page viewport.\n * @property {PDFRenderingQueue} renderingQueue - The rendering queue object.\n * @property {IPDFTextLayerFactory} textLayerFactory\n * @property {number} textLayerMode - (optional) Controls if the text layer used\n * for selection and searching is created, and if the improved text selection\n * behaviour is enabled. The constants from {TextLayerMode} should be used.\n * The default value is `TextLayerMode.ENABLE`.\n * @property {IPDFAnnotationLayerFactory} annotationLayerFactory\n * @property {string} imageResourcesPath - (optional) Path for image resources,\n * mainly for annotation icons. Include trailing slash.\n * @property {boolean} renderInteractiveForms - Turns on rendering of\n * interactive form elements. The default is `false`.\n * @property {string} renderer - 'canvas' or 'svg'. The default is 'canvas'.\n * @property {boolean} enableWebGL - (optional) Enables WebGL accelerated\n * rendering for some operations. The default value is `false`.\n * @property {boolean} useOnlyCssZoom - (optional) Enables CSS only zooming.\n * The default value is `false`.\n * @property {number} maxCanvasPixels - (optional) The maximum supported canvas\n * size in total pixels, i.e. width * height. Use -1 for no limit.\n * The default value is 4096 * 4096 (16 mega-pixels).\n * @property {IL10n} l10n - Localization service.\n */\n\nconst MAX_CANVAS_PIXELS = viewerCompatibilityParams.maxCanvasPixels || 16777216;\n\n/**\n * @implements {IRenderableView}\n */\nclass PDFPageView {\n /**\n * @param {PDFPageViewOptions} options\n */\n constructor(options) {\n let container = options.container;\n let defaultViewport = options.defaultViewport;\n\n this.id = options.id;\n this.renderingId = 'page' + this.id;\n\n this.pdfPage = null;\n this.pageLabel = null;\n this.rotation = 0;\n this.scale = options.scale || DEFAULT_SCALE;\n this.viewport = defaultViewport;\n this.pdfPageRotate = defaultViewport.rotation;\n this.hasRestrictedScaling = false;\n this.textLayerMode = Number.isInteger(options.textLayerMode) ?\n options.textLayerMode : TextLayerMode.ENABLE;\n this.imageResourcesPath = options.imageResourcesPath || '';\n this.renderInteractiveForms = options.renderInteractiveForms || false;\n this.useOnlyCssZoom = options.useOnlyCssZoom || false;\n this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;\n\n this.eventBus = options.eventBus || getGlobalEventBus();\n this.renderingQueue = options.renderingQueue;\n this.textLayerFactory = options.textLayerFactory;\n this.annotationLayerFactory = options.annotationLayerFactory;\n this.renderer = options.renderer || RendererType.CANVAS;\n this.enableWebGL = options.enableWebGL || false;\n this.l10n = options.l10n || NullL10n;\n\n this.paintTask = null;\n this.paintedViewportMap = new WeakMap();\n this.renderingState = RenderingStates.INITIAL;\n this.resume = null;\n this.error = null;\n\n this.onBeforeDraw = null;\n this.onAfterDraw = null;\n\n this.annotationLayer = null;\n this.textLayer = null;\n this.zoomLayer = null;\n\n let div = document.createElement('div');\n div.className = 'page';\n div.style.width = Math.floor(this.viewport.width) + 'px';\n div.style.height = Math.floor(this.viewport.height) + 'px';\n div.setAttribute('data-page-number', this.id);\n this.div = div;\n\n container.appendChild(div);\n }\n\n setPdfPage(pdfPage) {\n this.pdfPage = pdfPage;\n this.pdfPageRotate = pdfPage.rotate;\n\n let totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = pdfPage.getViewport(this.scale * CSS_UNITS,\n totalRotation);\n this.stats = pdfPage.stats;\n this.reset();\n }\n\n destroy() {\n this.reset();\n if (this.pdfPage) {\n this.pdfPage.cleanup();\n }\n }\n\n /**\n * @private\n */\n _resetZoomLayer(removeFromDOM = false) {\n if (!this.zoomLayer) {\n return;\n }\n let zoomLayerCanvas = this.zoomLayer.firstChild;\n this.paintedViewportMap.delete(zoomLayerCanvas);\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n zoomLayerCanvas.width = 0;\n zoomLayerCanvas.height = 0;\n\n if (removeFromDOM) {\n // Note: `ChildNode.remove` doesn't throw if the parent node is undefined.\n this.zoomLayer.remove();\n }\n this.zoomLayer = null;\n }\n\n reset(keepZoomLayer = false, keepAnnotations = false) {\n this.cancelRendering(keepAnnotations);\n\n let div = this.div;\n div.style.width = Math.floor(this.viewport.width) + 'px';\n div.style.height = Math.floor(this.viewport.height) + 'px';\n\n let childNodes = div.childNodes;\n let currentZoomLayerNode = (keepZoomLayer && this.zoomLayer) || null;\n let currentAnnotationNode = (keepAnnotations && this.annotationLayer &&\n this.annotationLayer.div) || null;\n for (let i = childNodes.length - 1; i >= 0; i--) {\n let node = childNodes[i];\n if (currentZoomLayerNode === node || currentAnnotationNode === node) {\n continue;\n }\n div.removeChild(node);\n }\n div.removeAttribute('data-loaded');\n\n if (currentAnnotationNode) {\n // Hide the annotation layer until all elements are resized\n // so they are not displayed on the already resized page.\n this.annotationLayer.hide();\n } else if (this.annotationLayer) {\n this.annotationLayer.cancel();\n this.annotationLayer = null;\n }\n\n if (!currentZoomLayerNode) {\n if (this.canvas) {\n this.paintedViewportMap.delete(this.canvas);\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n this.canvas.width = 0;\n this.canvas.height = 0;\n delete this.canvas;\n }\n this._resetZoomLayer();\n }\n if (this.svg) {\n this.paintedViewportMap.delete(this.svg);\n delete this.svg;\n }\n\n this.loadingIconDiv = document.createElement('div');\n this.loadingIconDiv.className = 'loadingIcon';\n div.appendChild(this.loadingIconDiv);\n }\n\n update(scale, rotation) {\n this.scale = scale || this.scale;\n if (typeof rotation !== 'undefined') { // The rotation may be zero.\n this.rotation = rotation;\n }\n\n let totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = this.viewport.clone({\n scale: this.scale * CSS_UNITS,\n rotation: totalRotation,\n });\n\n if (this.svg) {\n this.cssTransform(this.svg, true);\n\n this.eventBus.dispatch('pagerendered', {\n source: this,\n pageNumber: this.id,\n cssTransform: true,\n });\n return;\n }\n\n let isScalingRestricted = false;\n if (this.canvas && this.maxCanvasPixels > 0) {\n let outputScale = this.outputScale;\n if (((Math.floor(this.viewport.width) * outputScale.sx) | 0) *\n ((Math.floor(this.viewport.height) * outputScale.sy) | 0) >\n this.maxCanvasPixels) {\n isScalingRestricted = true;\n }\n }\n\n if (this.canvas) {\n if (this.useOnlyCssZoom ||\n (this.hasRestrictedScaling && isScalingRestricted)) {\n this.cssTransform(this.canvas, true);\n\n this.eventBus.dispatch('pagerendered', {\n source: this,\n pageNumber: this.id,\n cssTransform: true,\n });\n return;\n }\n if (!this.zoomLayer && !this.canvas.hasAttribute('hidden')) {\n this.zoomLayer = this.canvas.parentNode;\n this.zoomLayer.style.position = 'absolute';\n }\n }\n if (this.zoomLayer) {\n this.cssTransform(this.zoomLayer.firstChild);\n }\n this.reset(/* keepZoomLayer = */ true, /* keepAnnotations = */ true);\n }\n\n cancelRendering(keepAnnotations = false) {\n if (this.paintTask) {\n this.paintTask.cancel();\n this.paintTask = null;\n }\n this.renderingState = RenderingStates.INITIAL;\n this.resume = null;\n\n if (this.textLayer) {\n this.textLayer.cancel();\n this.textLayer = null;\n }\n if (!keepAnnotations && this.annotationLayer) {\n this.annotationLayer.cancel();\n this.annotationLayer = null;\n }\n }\n\n cssTransform(target, redrawAnnotations = false) {\n // Scale target (canvas or svg), its wrapper and page container.\n let width = this.viewport.width;\n let height = this.viewport.height;\n let div = this.div;\n target.style.width = target.parentNode.style.width = div.style.width =\n Math.floor(width) + 'px';\n target.style.height = target.parentNode.style.height = div.style.height =\n Math.floor(height) + 'px';\n // The canvas may have been originally rotated; rotate relative to that.\n let relativeRotation = this.viewport.rotation -\n this.paintedViewportMap.get(target).rotation;\n let absRotation = Math.abs(relativeRotation);\n let scaleX = 1, scaleY = 1;\n if (absRotation === 90 || absRotation === 270) {\n // Scale x and y because of the rotation.\n scaleX = height / width;\n scaleY = width / height;\n }\n let cssTransform = 'rotate(' + relativeRotation + 'deg) ' +\n 'scale(' + scaleX + ',' + scaleY + ')';\n target.style.transform = cssTransform;\n\n if (this.textLayer) {\n // Rotating the text layer is more complicated since the divs inside the\n // the text layer are rotated.\n // TODO: This could probably be simplified by drawing the text layer in\n // one orientation and then rotating overall.\n let textLayerViewport = this.textLayer.viewport;\n let textRelativeRotation = this.viewport.rotation -\n textLayerViewport.rotation;\n let textAbsRotation = Math.abs(textRelativeRotation);\n let scale = width / textLayerViewport.width;\n if (textAbsRotation === 90 || textAbsRotation === 270) {\n scale = width / textLayerViewport.height;\n }\n let textLayerDiv = this.textLayer.textLayerDiv;\n let transX, transY;\n switch (textAbsRotation) {\n case 0:\n transX = transY = 0;\n break;\n case 90:\n transX = 0;\n transY = '-' + textLayerDiv.style.height;\n break;\n case 180:\n transX = '-' + textLayerDiv.style.width;\n transY = '-' + textLayerDiv.style.height;\n break;\n case 270:\n transX = '-' + textLayerDiv.style.width;\n transY = 0;\n break;\n default:\n console.error('Bad rotation value.');\n break;\n }\n\n textLayerDiv.style.transform =\n 'rotate(' + textAbsRotation + 'deg) ' +\n 'scale(' + scale + ', ' + scale + ') ' +\n 'translate(' + transX + ', ' + transY + ')';\n textLayerDiv.style.transformOrigin = '0% 0%';\n }\n\n if (redrawAnnotations && this.annotationLayer) {\n this.annotationLayer.render(this.viewport, 'display');\n }\n }\n\n get width() {\n return this.viewport.width;\n }\n\n get height() {\n return this.viewport.height;\n }\n\n getPagePoint(x, y) {\n return this.viewport.convertToPdfPoint(x, y);\n }\n\n draw() {\n if (this.renderingState !== RenderingStates.INITIAL) {\n console.error('Must be in new state before drawing');\n this.reset(); // Ensure that we reset all state to prevent issues.\n }\n\n if (!this.pdfPage) {\n this.renderingState = RenderingStates.FINISHED;\n return Promise.reject(new Error('Page is not loaded'));\n }\n\n this.renderingState = RenderingStates.RUNNING;\n\n let pdfPage = this.pdfPage;\n let div = this.div;\n // Wrap the canvas so that if it has a CSS transform for high DPI the\n // overflow will be hidden in Firefox.\n let canvasWrapper = document.createElement('div');\n canvasWrapper.style.width = div.style.width;\n canvasWrapper.style.height = div.style.height;\n canvasWrapper.classList.add('canvasWrapper');\n\n if (this.annotationLayer && this.annotationLayer.div) {\n // The annotation layer needs to stay on top.\n div.insertBefore(canvasWrapper, this.annotationLayer.div);\n } else {\n div.appendChild(canvasWrapper);\n }\n\n let textLayer = null;\n if (this.textLayerMode !== TextLayerMode.DISABLE && this.textLayerFactory) {\n let textLayerDiv = document.createElement('div');\n textLayerDiv.className = 'textLayer';\n textLayerDiv.style.width = canvasWrapper.style.width;\n textLayerDiv.style.height = canvasWrapper.style.height;\n if (this.annotationLayer && this.annotationLayer.div) {\n // The annotation layer needs to stay on top.\n div.insertBefore(textLayerDiv, this.annotationLayer.div);\n } else {\n div.appendChild(textLayerDiv);\n }\n\n textLayer = this.textLayerFactory.\n createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport,\n this.textLayerMode === TextLayerMode.ENABLE_ENHANCE);\n }\n this.textLayer = textLayer;\n\n let renderContinueCallback = null;\n if (this.renderingQueue) {\n renderContinueCallback = (cont) => {\n if (!this.renderingQueue.isHighestPriority(this)) {\n this.renderingState = RenderingStates.PAUSED;\n this.resume = () => {\n this.renderingState = RenderingStates.RUNNING;\n cont();\n };\n return;\n }\n cont();\n };\n }\n\n let finishPaintTask = (error) => {\n // The paintTask may have been replaced by a new one, so only remove\n // the reference to the paintTask if it matches the one that is\n // triggering this callback.\n if (paintTask === this.paintTask) {\n this.paintTask = null;\n }\n\n if (error instanceof RenderingCancelledException) {\n this.error = null;\n return Promise.resolve(undefined);\n }\n\n this.renderingState = RenderingStates.FINISHED;\n\n if (this.loadingIconDiv) {\n div.removeChild(this.loadingIconDiv);\n delete this.loadingIconDiv;\n }\n this._resetZoomLayer(/* removeFromDOM = */ true);\n\n this.error = error;\n this.stats = pdfPage.stats;\n if (this.onAfterDraw) {\n this.onAfterDraw();\n }\n this.eventBus.dispatch('pagerendered', {\n source: this,\n pageNumber: this.id,\n cssTransform: false,\n });\n\n if (error) {\n return Promise.reject(error);\n }\n return Promise.resolve(undefined);\n };\n\n let paintTask = this.renderer === RendererType.SVG ?\n this.paintOnSvg(canvasWrapper) :\n this.paintOnCanvas(canvasWrapper);\n paintTask.onRenderContinue = renderContinueCallback;\n this.paintTask = paintTask;\n\n let resultPromise = paintTask.promise.then(function() {\n return finishPaintTask(null).then(function () {\n if (textLayer) {\n let readableStream = pdfPage.streamTextContent({\n normalizeWhitespace: true,\n });\n textLayer.setTextContentStream(readableStream);\n textLayer.render();\n }\n });\n }, function(reason) {\n return finishPaintTask(reason);\n });\n\n if (this.annotationLayerFactory) {\n if (!this.annotationLayer) {\n this.annotationLayer = this.annotationLayerFactory.\n createAnnotationLayerBuilder(div, pdfPage, this.imageResourcesPath,\n this.renderInteractiveForms, this.l10n);\n }\n this.annotationLayer.render(this.viewport, 'display');\n }\n div.setAttribute('data-loaded', true);\n\n if (this.onBeforeDraw) {\n this.onBeforeDraw();\n }\n return resultPromise;\n }\n\n paintOnCanvas(canvasWrapper) {\n let renderCapability = createPromiseCapability();\n let result = {\n promise: renderCapability.promise,\n onRenderContinue(cont) {\n cont();\n },\n cancel() {\n renderTask.cancel();\n },\n };\n\n let viewport = this.viewport;\n let canvas = document.createElement('canvas');\n canvas.id = this.renderingId;\n\n // Keep the canvas hidden until the first draw callback, or until drawing\n // is complete when `!this.renderingQueue`, to prevent black flickering.\n canvas.setAttribute('hidden', 'hidden');\n let isCanvasHidden = true;\n let showCanvas = function () {\n if (isCanvasHidden) {\n canvas.removeAttribute('hidden');\n isCanvasHidden = false;\n }\n };\n\n canvasWrapper.appendChild(canvas);\n this.canvas = canvas;\n\n if (typeof PDFJSDev === 'undefined' ||\n PDFJSDev.test('MOZCENTRAL || FIREFOX || GENERIC')) {\n canvas.mozOpaque = true;\n }\n\n let ctx = canvas.getContext('2d', { alpha: false, });\n let outputScale = getOutputScale(ctx);\n this.outputScale = outputScale;\n\n if (this.useOnlyCssZoom) {\n let actualSizeViewport = viewport.clone({ scale: CSS_UNITS, });\n // Use a scale that makes the canvas have the originally intended size\n // of the page.\n outputScale.sx *= actualSizeViewport.width / viewport.width;\n outputScale.sy *= actualSizeViewport.height / viewport.height;\n outputScale.scaled = true;\n }\n\n if (this.maxCanvasPixels > 0) {\n let pixelsInViewport = viewport.width * viewport.height;\n let maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport);\n if (outputScale.sx > maxScale || outputScale.sy > maxScale) {\n outputScale.sx = maxScale;\n outputScale.sy = maxScale;\n outputScale.scaled = true;\n this.hasRestrictedScaling = true;\n } else {\n this.hasRestrictedScaling = false;\n }\n }\n\n let sfx = approximateFraction(outputScale.sx);\n let sfy = approximateFraction(outputScale.sy);\n canvas.width = roundToDivide(viewport.width * outputScale.sx, sfx[0]);\n canvas.height = roundToDivide(viewport.height * outputScale.sy, sfy[0]);\n canvas.style.width = roundToDivide(viewport.width, sfx[1]) + 'px';\n canvas.style.height = roundToDivide(viewport.height, sfy[1]) + 'px';\n // Add the viewport so it's known what it was originally drawn with.\n this.paintedViewportMap.set(canvas, viewport);\n\n // Rendering area\n let transform = !outputScale.scaled ? null :\n [outputScale.sx, 0, 0, outputScale.sy, 0, 0];\n let renderContext = {\n canvasContext: ctx,\n transform,\n viewport: this.viewport,\n enableWebGL: this.enableWebGL,\n renderInteractiveForms: this.renderInteractiveForms,\n };\n let renderTask = this.pdfPage.render(renderContext);\n renderTask.onContinue = function (cont) {\n showCanvas();\n if (result.onRenderContinue) {\n result.onRenderContinue(cont);\n } else {\n cont();\n }\n };\n\n renderTask.promise.then(function() {\n showCanvas();\n renderCapability.resolve(undefined);\n }, function(error) {\n showCanvas();\n renderCapability.reject(error);\n });\n return result;\n }\n\n paintOnSvg(wrapper) {\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL || CHROME')) {\n // Return a mock object, to prevent errors such as e.g.\n // \"TypeError: paintTask.promise is undefined\".\n return {\n promise: Promise.reject(new Error('SVG rendering is not supported.')),\n onRenderContinue(cont) { },\n cancel() { },\n };\n }\n\n let cancelled = false;\n let ensureNotCancelled = () => {\n if (cancelled) {\n throw new RenderingCancelledException(\n 'Rendering cancelled, page ' + this.id, 'svg');\n }\n };\n\n let pdfPage = this.pdfPage;\n let actualSizeViewport = this.viewport.clone({ scale: CSS_UNITS, });\n let promise = pdfPage.getOperatorList().then((opList) => {\n ensureNotCancelled();\n let svgGfx = new SVGGraphics(pdfPage.commonObjs, pdfPage.objs);\n return svgGfx.getSVG(opList, actualSizeViewport).then((svg) => {\n ensureNotCancelled();\n this.svg = svg;\n this.paintedViewportMap.set(svg, actualSizeViewport);\n\n svg.style.width = wrapper.style.width;\n svg.style.height = wrapper.style.height;\n this.renderingState = RenderingStates.FINISHED;\n wrapper.appendChild(svg);\n });\n });\n\n return {\n promise,\n onRenderContinue(cont) {\n cont();\n },\n cancel() {\n cancelled = true;\n },\n };\n }\n\n /**\n * @param {string|null} label\n */\n setPageLabel(label) {\n this.pageLabel = (typeof label === 'string' ? label : null);\n\n if (this.pageLabel !== null) {\n this.div.setAttribute('data-page-label', this.pageLabel);\n } else {\n this.div.removeAttribute('data-page-label');\n }\n }\n}\n\nexport {\n PDFPageView,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_page_view.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CLEANUP_TIMEOUT = 30000;\n\nconst RenderingStates = {\n INITIAL: 0,\n RUNNING: 1,\n PAUSED: 2,\n FINISHED: 3,\n};\n\n/**\n * Controls rendering of the views for pages and thumbnails.\n */\nclass PDFRenderingQueue {\n constructor() {\n this.pdfViewer = null;\n this.pdfThumbnailViewer = null;\n this.onIdle = null;\n this.highestPriorityPage = null;\n this.idleTimeout = null;\n this.printing = false;\n this.isThumbnailViewEnabled = false;\n }\n\n /**\n * @param {PDFViewer} pdfViewer\n */\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n }\n\n /**\n * @param {PDFThumbnailViewer} pdfThumbnailViewer\n */\n setThumbnailViewer(pdfThumbnailViewer) {\n this.pdfThumbnailViewer = pdfThumbnailViewer;\n }\n\n /**\n * @param {IRenderableView} view\n * @returns {boolean}\n */\n isHighestPriority(view) {\n return this.highestPriorityPage === view.renderingId;\n }\n\n /**\n * @param {Object} currentlyVisiblePages\n */\n renderHighestPriority(currentlyVisiblePages) {\n if (this.idleTimeout) {\n clearTimeout(this.idleTimeout);\n this.idleTimeout = null;\n }\n\n // Pages have a higher priority than thumbnails, so check them first.\n if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {\n return;\n }\n // No pages needed rendering, so check thumbnails.\n if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) {\n if (this.pdfThumbnailViewer.forceRendering()) {\n return;\n }\n }\n\n if (this.printing) {\n // If printing is currently ongoing do not reschedule cleanup.\n return;\n }\n\n if (this.onIdle) {\n this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);\n }\n }\n\n /**\n * @param {Object} visible\n * @param {Array} views\n * @param {boolean} scrolledDown\n */\n getHighestPriority(visible, views, scrolledDown) {\n /**\n * The state has changed. Figure out which page has the highest priority to\n * render next (if any).\n *\n * Priority:\n * 1. visible pages\n * 2. if last scrolled down, the page after the visible pages, or\n * if last scrolled up, the page before the visible pages\n */\n let visibleViews = visible.views;\n\n let numVisible = visibleViews.length;\n if (numVisible === 0) {\n return false;\n }\n for (let i = 0; i < numVisible; ++i) {\n let view = visibleViews[i].view;\n if (!this.isViewFinished(view)) {\n return view;\n }\n }\n\n // All the visible views have rendered; try to render next/previous pages.\n if (scrolledDown) {\n let nextPageIndex = visible.last.id;\n // IDs start at 1, so no need to add 1.\n if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) {\n return views[nextPageIndex];\n }\n } else {\n let previousPageIndex = visible.first.id - 2;\n if (views[previousPageIndex] &&\n !this.isViewFinished(views[previousPageIndex])) {\n return views[previousPageIndex];\n }\n }\n // Everything that needs to be rendered has been.\n return null;\n }\n\n /**\n * @param {IRenderableView} view\n * @returns {boolean}\n */\n isViewFinished(view) {\n return view.renderingState === RenderingStates.FINISHED;\n }\n\n /**\n * Render a page or thumbnail view. This calls the appropriate function\n * based on the views state. If the view is already rendered it will return\n * `false`.\n *\n * @param {IRenderableView} view\n */\n renderView(view) {\n switch (view.renderingState) {\n case RenderingStates.FINISHED:\n return false;\n case RenderingStates.PAUSED:\n this.highestPriorityPage = view.renderingId;\n view.resume();\n break;\n case RenderingStates.RUNNING:\n this.highestPriorityPage = view.renderingId;\n break;\n case RenderingStates.INITIAL:\n this.highestPriorityPage = view.renderingId;\n let continueRendering = () => {\n this.renderHighestPriority();\n };\n view.draw().then(continueRendering, continueRendering);\n break;\n }\n return true;\n }\n}\n\nexport {\n RenderingStates,\n PDFRenderingQueue,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_rendering_queue.js","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n CSS_UNITS, DEFAULT_SCALE, DEFAULT_SCALE_VALUE, isPortraitOrientation,\n isValidRotation, MAX_AUTO_SCALE, NullL10n, PresentationModeState,\n RendererType, SCROLLBAR_PADDING, TextLayerMode, UNKNOWN_SCALE,\n VERTICAL_PADDING, watchScroll\n} from './ui_utils';\nimport { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue';\nimport { AnnotationLayerBuilder } from './annotation_layer_builder';\nimport { createPromiseCapability } from 'pdfjs-lib';\nimport { getGlobalEventBus } from './dom_events';\nimport { PDFPageView } from './pdf_page_view';\nimport { SimpleLinkService } from './pdf_link_service';\nimport { TextLayerBuilder } from './text_layer_builder';\n\nconst DEFAULT_CACHE_SIZE = 10;\n\n/**\n * @typedef {Object} PDFViewerOptions\n * @property {HTMLDivElement} container - The container for the viewer element.\n * @property {HTMLDivElement} viewer - (optional) The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {DownloadManager} downloadManager - (optional) The download\n * manager component.\n * @property {PDFRenderingQueue} renderingQueue - (optional) The rendering\n * queue object.\n * @property {boolean} removePageBorders - (optional) Removes the border shadow\n * around the pages. The default value is `false`.\n * @property {number} textLayerMode - (optional) Controls if the text layer used\n * for selection and searching is created, and if the improved text selection\n * behaviour is enabled. The constants from {TextLayerMode} should be used.\n * The default value is `TextLayerMode.ENABLE`.\n * @property {string} imageResourcesPath - (optional) Path for image resources,\n * mainly for annotation icons. Include trailing slash.\n * @property {boolean} renderInteractiveForms - (optional) Enables rendering of\n * interactive form elements. The default is `false`.\n * @property {boolean} enablePrintAutoRotate - (optional) Enables automatic\n * rotation of pages whose orientation differ from the first page upon\n * printing. The default is `false`.\n * @property {string} renderer - 'canvas' or 'svg'. The default is 'canvas'.\n * @property {boolean} enableWebGL - (optional) Enables WebGL accelerated\n * rendering for some operations. The default value is `false`.\n * @property {boolean} useOnlyCssZoom - (optional) Enables CSS only zooming.\n * The default value is `false`.\n * @property {number} maxCanvasPixels - (optional) The maximum supported canvas\n * size in total pixels, i.e. width * height. Use -1 for no limit.\n * The default value is 4096 * 4096 (16 mega-pixels).\n * @property {IL10n} l10n - Localization service.\n */\n\nfunction PDFPageViewBuffer(size) {\n let data = [];\n this.push = function(view) {\n let i = data.indexOf(view);\n if (i >= 0) {\n data.splice(i, 1);\n }\n data.push(view);\n if (data.length > size) {\n data.shift().destroy();\n }\n };\n this.resize = function(newSize) {\n size = newSize;\n while (data.length > size) {\n data.shift().destroy();\n }\n };\n}\n\nfunction isSameScale(oldScale, newScale) {\n if (newScale === oldScale) {\n return true;\n }\n if (Math.abs(newScale - oldScale) < 1e-15) {\n // Prevent unnecessary re-rendering of all pages when the scale\n // changes only because of limited numerical precision.\n return true;\n }\n return false;\n}\n\n/**\n * Simple viewer control to display PDF content/pages.\n * @implements {IRenderableView}\n */\nclass BaseViewer {\n /**\n * @param {PDFViewerOptions} options\n */\n constructor(options) {\n if (this.constructor === BaseViewer) {\n throw new Error('Cannot initialize BaseViewer.');\n }\n this._name = this.constructor.name;\n\n this.container = options.container;\n this.viewer = options.viewer || options.container.firstElementChild;\n this.eventBus = options.eventBus || getGlobalEventBus();\n this.linkService = options.linkService || new SimpleLinkService();\n this.downloadManager = options.downloadManager || null;\n this.removePageBorders = options.removePageBorders || false;\n this.textLayerMode = Number.isInteger(options.textLayerMode) ?\n options.textLayerMode : TextLayerMode.ENABLE;\n this.enhanceTextSelection = options.enhanceTextSelection || false;\n this.imageResourcesPath = options.imageResourcesPath || '';\n this.renderInteractiveForms = options.renderInteractiveForms || false;\n this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;\n this.renderer = options.renderer || RendererType.CANVAS;\n this.enableWebGL = options.enableWebGL || false;\n this.useOnlyCssZoom = options.useOnlyCssZoom || false;\n this.maxCanvasPixels = options.maxCanvasPixels;\n this.l10n = options.l10n || NullL10n;\n\n this.defaultRenderingQueue = !options.renderingQueue;\n if (this.defaultRenderingQueue) {\n // Custom rendering queue is not specified, using default one\n this.renderingQueue = new PDFRenderingQueue();\n this.renderingQueue.setViewer(this);\n } else {\n this.renderingQueue = options.renderingQueue;\n }\n\n this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this));\n this.presentationModeState = PresentationModeState.UNKNOWN;\n this._resetView();\n\n if (this.removePageBorders) {\n this.viewer.classList.add('removePageBorders');\n }\n }\n\n get pagesCount() {\n return this._pages.length;\n }\n\n getPageView(index) {\n return this._pages[index];\n }\n\n /**\n * @returns {boolean} true if all {PDFPageView} objects are initialized.\n */\n get pageViewsReady() {\n return this._pageViewsReady;\n }\n\n /**\n * @returns {number}\n */\n get currentPageNumber() {\n return this._currentPageNumber;\n }\n\n /**\n * @param {number} val - The page number.\n */\n set currentPageNumber(val) {\n if (!Number.isInteger(val)) {\n throw new Error('Invalid page number.');\n }\n if (!this.pdfDocument) {\n return;\n }\n // The intent can be to just reset a scroll position and/or scale.\n this._setCurrentPageNumber(val, /* resetCurrentPageView = */ true);\n }\n\n /**\n * @private\n */\n _setCurrentPageNumber(val, resetCurrentPageView = false) {\n if (this._currentPageNumber === val) {\n if (resetCurrentPageView) {\n this._resetCurrentPageView();\n }\n return;\n }\n\n if (!(0 < val && val <= this.pagesCount)) {\n console.error(\n `${this._name}._setCurrentPageNumber: \"${val}\" is out of bounds.`);\n return;\n }\n\n let arg = {\n source: this,\n pageNumber: val,\n pageLabel: this._pageLabels && this._pageLabels[val - 1],\n };\n this._currentPageNumber = val;\n this.eventBus.dispatch('pagechanging', arg);\n this.eventBus.dispatch('pagechange', arg);\n\n if (resetCurrentPageView) {\n this._resetCurrentPageView();\n }\n }\n\n /**\n * @returns {string|null} Returns the current page label,\n * or `null` if no page labels exist.\n */\n get currentPageLabel() {\n return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];\n }\n\n /**\n * @param {string} val - The page label.\n */\n set currentPageLabel(val) {\n let pageNumber = val | 0; // Fallback page number.\n if (this._pageLabels) {\n let i = this._pageLabels.indexOf(val);\n if (i >= 0) {\n pageNumber = i + 1;\n }\n }\n this.currentPageNumber = pageNumber;\n }\n\n /**\n * @returns {number}\n */\n get currentScale() {\n return this._currentScale !== UNKNOWN_SCALE ? this._currentScale :\n DEFAULT_SCALE;\n }\n\n /**\n * @param {number} val - Scale of the pages in percents.\n */\n set currentScale(val) {\n if (isNaN(val)) {\n throw new Error('Invalid numeric scale');\n }\n if (!this.pdfDocument) {\n return;\n }\n this._setScale(val, false);\n }\n\n /**\n * @returns {string}\n */\n get currentScaleValue() {\n return this._currentScaleValue;\n }\n\n /**\n * @param val - The scale of the pages (in percent or predefined value).\n */\n set currentScaleValue(val) {\n if (!this.pdfDocument) {\n return;\n }\n this._setScale(val, false);\n }\n\n /**\n * @returns {number}\n */\n get pagesRotation() {\n return this._pagesRotation;\n }\n\n /**\n * @param {number} rotation - The rotation of the pages (0, 90, 180, 270).\n */\n set pagesRotation(rotation) {\n if (!isValidRotation(rotation)) {\n throw new Error('Invalid pages rotation angle.');\n }\n if (!this.pdfDocument) {\n return;\n }\n if (this._pagesRotation === rotation) {\n return; // The rotation didn't change.\n }\n this._pagesRotation = rotation;\n\n let pageNumber = this._currentPageNumber;\n\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n let pageView = this._pages[i];\n pageView.update(pageView.scale, rotation);\n }\n // Prevent errors in case the rotation changes *before* the scale has been\n // set to a non-default value.\n if (this._currentScaleValue) {\n this._setScale(this._currentScaleValue, true);\n }\n\n this.eventBus.dispatch('rotationchanging', {\n source: this,\n pagesRotation: rotation,\n pageNumber,\n });\n\n if (this.defaultRenderingQueue) {\n this.update();\n }\n }\n\n get _setDocumentViewerElement() {\n throw new Error('Not implemented: _setDocumentViewerElement');\n }\n\n /**\n * @param pdfDocument {PDFDocument}\n */\n setDocument(pdfDocument) {\n if (this.pdfDocument) {\n this._cancelRendering();\n this._resetView();\n }\n\n this.pdfDocument = pdfDocument;\n if (!pdfDocument) {\n return;\n }\n let pagesCount = pdfDocument.numPages;\n\n let pagesCapability = createPromiseCapability();\n this.pagesPromise = pagesCapability.promise;\n\n pagesCapability.promise.then(() => {\n this._pageViewsReady = true;\n this.eventBus.dispatch('pagesloaded', {\n source: this,\n pagesCount,\n });\n });\n\n let isOnePageRenderedResolved = false;\n let onePageRenderedCapability = createPromiseCapability();\n this.onePageRendered = onePageRenderedCapability.promise;\n\n let bindOnAfterAndBeforeDraw = (pageView) => {\n pageView.onBeforeDraw = () => {\n // Add the page to the buffer at the start of drawing. That way it can\n // be evicted from the buffer and destroyed even if we pause its\n // rendering.\n this._buffer.push(pageView);\n };\n pageView.onAfterDraw = () => {\n if (!isOnePageRenderedResolved) {\n isOnePageRenderedResolved = true;\n onePageRenderedCapability.resolve();\n }\n };\n };\n\n let firstPagePromise = pdfDocument.getPage(1);\n this.firstPagePromise = firstPagePromise;\n\n // Fetch a single page so we can get a viewport that will be the default\n // viewport for all pages\n firstPagePromise.then((pdfPage) => {\n let scale = this.currentScale;\n let viewport = pdfPage.getViewport(scale * CSS_UNITS);\n for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n let textLayerFactory = null;\n if (this.textLayerMode !== TextLayerMode.DISABLE) {\n textLayerFactory = this;\n }\n let pageView = new PDFPageView({\n container: this._setDocumentViewerElement,\n eventBus: this.eventBus,\n id: pageNum,\n scale,\n defaultViewport: viewport.clone(),\n renderingQueue: this.renderingQueue,\n textLayerFactory,\n textLayerMode: this.textLayerMode,\n annotationLayerFactory: this,\n imageResourcesPath: this.imageResourcesPath,\n renderInteractiveForms: this.renderInteractiveForms,\n renderer: this.renderer,\n enableWebGL: this.enableWebGL,\n useOnlyCssZoom: this.useOnlyCssZoom,\n maxCanvasPixels: this.maxCanvasPixels,\n l10n: this.l10n,\n });\n bindOnAfterAndBeforeDraw(pageView);\n this._pages.push(pageView);\n }\n\n // Fetch all the pages since the viewport is needed before printing\n // starts to create the correct size canvas. Wait until one page is\n // rendered so we don't tie up too many resources early on.\n onePageRenderedCapability.promise.then(() => {\n if (pdfDocument.loadingParams['disableAutoFetch']) {\n // XXX: Printing is semi-broken with auto fetch disabled.\n pagesCapability.resolve();\n return;\n }\n let getPagesLeft = pagesCount;\n for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n pdfDocument.getPage(pageNum).then((pdfPage) => {\n let pageView = this._pages[pageNum - 1];\n if (!pageView.pdfPage) {\n pageView.setPdfPage(pdfPage);\n }\n this.linkService.cachePageRef(pageNum, pdfPage.ref);\n if (--getPagesLeft === 0) {\n pagesCapability.resolve();\n }\n }, (reason) => {\n console.error(`Unable to get page ${pageNum} to initialize viewer`,\n reason);\n if (--getPagesLeft === 0) {\n pagesCapability.resolve();\n }\n });\n }\n });\n\n this.eventBus.dispatch('pagesinit', { source: this, });\n\n if (this.defaultRenderingQueue) {\n this.update();\n }\n\n if (this.findController) {\n this.findController.resolveFirstPage();\n }\n }).catch((reason) => {\n console.error('Unable to initialize viewer', reason);\n });\n }\n\n /**\n * @param {Array|null} labels\n */\n setPageLabels(labels) {\n if (!this.pdfDocument) {\n return;\n }\n if (!labels) {\n this._pageLabels = null;\n } else if (!(labels instanceof Array &&\n this.pdfDocument.numPages === labels.length)) {\n this._pageLabels = null;\n console.error(`${this._name}.setPageLabels: Invalid page labels.`);\n } else {\n this._pageLabels = labels;\n }\n // Update all the `PDFPageView` instances.\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n let pageView = this._pages[i];\n let label = this._pageLabels && this._pageLabels[i];\n pageView.setPageLabel(label);\n }\n }\n\n _resetView() {\n this._pages = [];\n this._currentPageNumber = 1;\n this._currentScale = UNKNOWN_SCALE;\n this._currentScaleValue = null;\n this._pageLabels = null;\n this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);\n this._location = null;\n this._pagesRotation = 0;\n this._pagesRequests = [];\n this._pageViewsReady = false;\n\n // Remove the pages from the DOM.\n this.viewer.textContent = '';\n }\n\n _scrollUpdate() {\n if (this.pagesCount === 0) {\n return;\n }\n this.update();\n }\n\n _scrollIntoView({ pageDiv, pageSpot = null, pageNumber = null, }) {\n throw new Error('Not implemented: _scrollIntoView');\n }\n\n _setScaleDispatchEvent(newScale, newValue, preset = false) {\n let arg = {\n source: this,\n scale: newScale,\n presetValue: preset ? newValue : undefined,\n };\n this.eventBus.dispatch('scalechanging', arg);\n this.eventBus.dispatch('scalechange', arg);\n }\n\n _setScaleUpdatePages(newScale, newValue, noScroll = false, preset = false) {\n this._currentScaleValue = newValue.toString();\n\n if (isSameScale(this._currentScale, newScale)) {\n if (preset) {\n this._setScaleDispatchEvent(newScale, newValue, true);\n }\n return;\n }\n\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n this._pages[i].update(newScale);\n }\n this._currentScale = newScale;\n\n if (!noScroll) {\n let page = this._currentPageNumber, dest;\n if (this._location &&\n !(this.isInPresentationMode || this.isChangingPresentationMode)) {\n page = this._location.pageNumber;\n dest = [null, { name: 'XYZ', }, this._location.left,\n this._location.top, null];\n }\n this.scrollPageIntoView({\n pageNumber: page,\n destArray: dest,\n allowNegativeOffset: true,\n });\n }\n\n this._setScaleDispatchEvent(newScale, newValue, preset);\n\n if (this.defaultRenderingQueue) {\n this.update();\n }\n }\n\n _setScale(value, noScroll = false) {\n let scale = parseFloat(value);\n\n if (scale > 0) {\n this._setScaleUpdatePages(scale, value, noScroll, /* preset = */ false);\n } else {\n let currentPage = this._pages[this._currentPageNumber - 1];\n if (!currentPage) {\n return;\n }\n let hPadding = (this.isInPresentationMode || this.removePageBorders) ?\n 0 : SCROLLBAR_PADDING;\n let vPadding = (this.isInPresentationMode || this.removePageBorders) ?\n 0 : VERTICAL_PADDING;\n let pageWidthScale = (this.container.clientWidth - hPadding) /\n currentPage.width * currentPage.scale;\n let pageHeightScale = (this.container.clientHeight - vPadding) /\n currentPage.height * currentPage.scale;\n switch (value) {\n case 'page-actual':\n scale = 1;\n break;\n case 'page-width':\n scale = pageWidthScale;\n break;\n case 'page-height':\n scale = pageHeightScale;\n break;\n case 'page-fit':\n scale = Math.min(pageWidthScale, pageHeightScale);\n break;\n case 'auto':\n // For pages in landscape mode, fit the page height to the viewer\n // *unless* the page would thus become too wide to fit horizontally.\n let horizontalScale = isPortraitOrientation(currentPage) ?\n pageWidthScale : Math.min(pageHeightScale, pageWidthScale);\n scale = Math.min(MAX_AUTO_SCALE, horizontalScale);\n break;\n default:\n console.error(\n `${this._name}._setScale: \"${value}\" is an unknown zoom value.`);\n return;\n }\n this._setScaleUpdatePages(scale, value, noScroll, /* preset = */ true);\n }\n }\n\n /**\n * Refreshes page view: scrolls to the current page and updates the scale.\n * @private\n */\n _resetCurrentPageView() {\n if (this.isInPresentationMode) {\n // Fixes the case when PDF has different page sizes.\n this._setScale(this._currentScaleValue, true);\n }\n\n let pageView = this._pages[this._currentPageNumber - 1];\n this._scrollIntoView({ pageDiv: pageView.div, });\n }\n\n /**\n * @typedef ScrollPageIntoViewParameters\n * @property {number} pageNumber - The page number.\n * @property {Array} destArray - (optional) The original PDF destination\n * array, in the format: <page-ref> </XYZ|/FitXXX> <args..>\n * @property {boolean} allowNegativeOffset - (optional) Allow negative page\n * offsets. The default value is `false`.\n */\n\n /**\n * Scrolls page into view.\n * @param {ScrollPageIntoViewParameters} params\n */\n scrollPageIntoView(params) {\n if (!this.pdfDocument) {\n return;\n }\n let pageNumber = params.pageNumber || 0;\n let dest = params.destArray || null;\n let allowNegativeOffset = params.allowNegativeOffset || false;\n\n if (this.isInPresentationMode || !dest) {\n this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n return;\n }\n\n let pageView = this._pages[pageNumber - 1];\n if (!pageView) {\n console.error(\n `${this._name}.scrollPageIntoView: Invalid \"pageNumber\" parameter.`);\n return;\n }\n let x = 0, y = 0;\n let width = 0, height = 0, widthScale, heightScale;\n let changeOrientation = (pageView.rotation % 180 === 0 ? false : true);\n let pageWidth = (changeOrientation ? pageView.height : pageView.width) /\n pageView.scale / CSS_UNITS;\n let pageHeight = (changeOrientation ? pageView.width : pageView.height) /\n pageView.scale / CSS_UNITS;\n let scale = 0;\n switch (dest[1].name) {\n case 'XYZ':\n x = dest[2];\n y = dest[3];\n scale = dest[4];\n // If x and/or y coordinates are not supplied, default to\n // _top_ left of the page (not the obvious bottom left,\n // since aligning the bottom of the intended page with the\n // top of the window is rarely helpful).\n x = x !== null ? x : 0;\n y = y !== null ? y : pageHeight;\n break;\n case 'Fit':\n case 'FitB':\n scale = 'page-fit';\n break;\n case 'FitH':\n case 'FitBH':\n y = dest[2];\n scale = 'page-width';\n // According to the PDF spec, section 12.3.2.2, a `null` value in the\n // parameter should maintain the position relative to the new page.\n if (y === null && this._location) {\n x = this._location.left;\n y = this._location.top;\n }\n break;\n case 'FitV':\n case 'FitBV':\n x = dest[2];\n width = pageWidth;\n height = pageHeight;\n scale = 'page-height';\n break;\n case 'FitR':\n x = dest[2];\n y = dest[3];\n width = dest[4] - x;\n height = dest[5] - y;\n let hPadding = this.removePageBorders ? 0 : SCROLLBAR_PADDING;\n let vPadding = this.removePageBorders ? 0 : VERTICAL_PADDING;\n\n widthScale = (this.container.clientWidth - hPadding) /\n width / CSS_UNITS;\n heightScale = (this.container.clientHeight - vPadding) /\n height / CSS_UNITS;\n scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));\n break;\n default:\n console.error(`${this._name}.scrollPageIntoView: \"${dest[1].name}\" ` +\n 'is not a valid destination type.');\n return;\n }\n\n if (scale && scale !== this._currentScale) {\n this.currentScaleValue = scale;\n } else if (this._currentScale === UNKNOWN_SCALE) {\n this.currentScaleValue = DEFAULT_SCALE_VALUE;\n }\n\n if (scale === 'page-fit' && !dest[4]) {\n this._scrollIntoView({\n pageDiv: pageView.div,\n pageNumber,\n });\n return;\n }\n\n let boundingRect = [\n pageView.viewport.convertToViewportPoint(x, y),\n pageView.viewport.convertToViewportPoint(x + width, y + height)\n ];\n let left = Math.min(boundingRect[0][0], boundingRect[1][0]);\n let top = Math.min(boundingRect[0][1], boundingRect[1][1]);\n\n if (!allowNegativeOffset) {\n // Some bad PDF generators will create destinations with e.g. top values\n // that exceeds the page height. Ensure that offsets are not negative,\n // to prevent a previous page from becoming visible (fixes bug 874482).\n left = Math.max(left, 0);\n top = Math.max(top, 0);\n }\n this._scrollIntoView({\n pageDiv: pageView.div,\n pageSpot: { left, top, },\n pageNumber,\n });\n }\n\n _resizeBuffer(numVisiblePages) {\n let suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE,\n 2 * numVisiblePages + 1);\n this._buffer.resize(suggestedCacheSize);\n }\n\n _updateLocation(firstPage) {\n let currentScale = this._currentScale;\n let currentScaleValue = this._currentScaleValue;\n let normalizedScaleValue =\n parseFloat(currentScaleValue) === currentScale ?\n Math.round(currentScale * 10000) / 100 : currentScaleValue;\n\n let pageNumber = firstPage.id;\n let pdfOpenParams = '#page=' + pageNumber;\n pdfOpenParams += '&zoom=' + normalizedScaleValue;\n let currentPageView = this._pages[pageNumber - 1];\n let container = this.container;\n let topLeft = currentPageView.getPagePoint(\n (container.scrollLeft - firstPage.x),\n (container.scrollTop - firstPage.y));\n let intLeft = Math.round(topLeft[0]);\n let intTop = Math.round(topLeft[1]);\n pdfOpenParams += ',' + intLeft + ',' + intTop;\n\n this._location = {\n pageNumber,\n scale: normalizedScaleValue,\n top: intTop,\n left: intLeft,\n rotation: this._pagesRotation,\n pdfOpenParams,\n };\n }\n\n update() {\n throw new Error('Not implemented: update');\n }\n\n containsElement(element) {\n return this.container.contains(element);\n }\n\n focus() {\n this.container.focus();\n }\n\n get isInPresentationMode() {\n return this.presentationModeState === PresentationModeState.FULLSCREEN;\n }\n\n get isChangingPresentationMode() {\n return this.presentationModeState === PresentationModeState.CHANGING;\n }\n\n get isHorizontalScrollbarEnabled() {\n return (this.isInPresentationMode ?\n false : (this.container.scrollWidth > this.container.clientWidth));\n }\n\n _getVisiblePages() {\n throw new Error('Not implemented: _getVisiblePages');\n }\n\n cleanup() {\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n if (this._pages[i] &&\n this._pages[i].renderingState !== RenderingStates.FINISHED) {\n this._pages[i].reset();\n }\n }\n }\n\n /**\n * @private\n */\n _cancelRendering() {\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n if (this._pages[i]) {\n this._pages[i].cancelRendering();\n }\n }\n }\n\n /**\n * @param {PDFPageView} pageView\n * @returns {Promise} Returns a promise containing a {PDFPageProxy} object.\n * @private\n */\n _ensurePdfPageLoaded(pageView) {\n if (pageView.pdfPage) {\n return Promise.resolve(pageView.pdfPage);\n }\n let pageNumber = pageView.id;\n if (this._pagesRequests[pageNumber]) {\n return this._pagesRequests[pageNumber];\n }\n let promise = this.pdfDocument.getPage(pageNumber).then((pdfPage) => {\n if (!pageView.pdfPage) {\n pageView.setPdfPage(pdfPage);\n }\n this._pagesRequests[pageNumber] = null;\n return pdfPage;\n }).catch((reason) => {\n console.error('Unable to get page for page view', reason);\n // Page error -- there is nothing can be done.\n this._pagesRequests[pageNumber] = null;\n });\n this._pagesRequests[pageNumber] = promise;\n return promise;\n }\n\n forceRendering(currentlyVisiblePages) {\n let visiblePages = currentlyVisiblePages || this._getVisiblePages();\n let pageView = this.renderingQueue.getHighestPriority(visiblePages,\n this._pages,\n this.scroll.down);\n if (pageView) {\n this._ensurePdfPageLoaded(pageView).then(() => {\n this.renderingQueue.renderView(pageView);\n });\n return true;\n }\n return false;\n }\n\n getPageTextContent(pageIndex) {\n return this.pdfDocument.getPage(pageIndex + 1).then(function(page) {\n return page.getTextContent({\n normalizeWhitespace: true,\n });\n });\n }\n\n /**\n * @param {HTMLDivElement} textLayerDiv\n * @param {number} pageIndex\n * @param {PageViewport} viewport\n * @returns {TextLayerBuilder}\n */\n createTextLayerBuilder(textLayerDiv, pageIndex, viewport,\n enhanceTextSelection = false) {\n return new TextLayerBuilder({\n textLayerDiv,\n eventBus: this.eventBus,\n pageIndex,\n viewport,\n findController: this.isInPresentationMode ? null : this.findController,\n enhanceTextSelection: this.isInPresentationMode ? false :\n enhanceTextSelection,\n });\n }\n\n /**\n * @param {HTMLDivElement} pageDiv\n * @param {PDFPage} pdfPage\n * @param {string} imageResourcesPath - (optional) Path for image resources,\n * mainly for annotation icons. Include trailing slash.\n * @param {boolean} renderInteractiveForms\n * @param {IL10n} l10n\n * @returns {AnnotationLayerBuilder}\n */\n createAnnotationLayerBuilder(pageDiv, pdfPage, imageResourcesPath = '',\n renderInteractiveForms = false,\n l10n = NullL10n) {\n return new AnnotationLayerBuilder({\n pageDiv,\n pdfPage,\n imageResourcesPath,\n renderInteractiveForms,\n linkService: this.linkService,\n downloadManager: this.downloadManager,\n l10n,\n });\n }\n\n setFindController(findController) {\n this.findController = findController;\n }\n\n /**\n * @returns {boolean} Whether all pages of the PDF document have identical\n * widths and heights.\n */\n get hasEqualPageSizes() {\n let firstPageView = this._pages[0];\n for (let i = 1, ii = this._pages.length; i < ii; ++i) {\n let pageView = this._pages[i];\n if (pageView.width !== firstPageView.width ||\n pageView.height !== firstPageView.height) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Returns sizes of the pages.\n * @returns {Array} Array of objects with width/height/rotation fields.\n */\n getPagesOverview() {\n let pagesOverview = this._pages.map(function(pageView) {\n let viewport = pageView.pdfPage.getViewport(1);\n return {\n width: viewport.width,\n height: viewport.height,\n rotation: viewport.rotation,\n };\n });\n if (!this.enablePrintAutoRotate) {\n return pagesOverview;\n }\n let isFirstPagePortrait = isPortraitOrientation(pagesOverview[0]);\n return pagesOverview.map(function (size) {\n if (isFirstPagePortrait === isPortraitOrientation(size)) {\n return size;\n }\n return {\n width: size.height,\n height: size.width,\n rotation: (size.rotation + 90) % 360,\n };\n });\n }\n}\n\nexport {\n BaseViewer,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/base_viewer.js","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint-disable no-unused-vars */\n\nimport {\n AnnotationLayerBuilder, DefaultAnnotationLayerFactory\n} from './annotation_layer_builder.js';\nimport {\n DefaultTextLayerFactory, TextLayerBuilder\n} from './text_layer_builder.js';\nimport { EventBus, NullL10n, ProgressBar } from './ui_utils.js';\nimport { PDFLinkService, SimpleLinkService } from './pdf_link_service.js';\nimport { DownloadManager } from './download_manager.js';\nimport { GenericL10n } from './genericl10n.js';\nimport { PDFFindController } from './pdf_find_controller.js';\nimport { PDFHistory } from './pdf_history.js';\nimport { PDFPageView } from './pdf_page_view.js';\nimport { PDFSinglePageViewer } from './pdf_single_page_viewer';\nimport { PDFViewer } from './pdf_viewer.js';\n\nconst pdfjsVersion = PDFJSDev.eval('BUNDLE_VERSION');\nconst pdfjsBuild = PDFJSDev.eval('BUNDLE_BUILD');\n\nexport {\n PDFViewer,\n PDFSinglePageViewer,\n PDFPageView,\n PDFLinkService,\n SimpleLinkService,\n TextLayerBuilder,\n DefaultTextLayerFactory,\n AnnotationLayerBuilder,\n DefaultAnnotationLayerFactory,\n PDFHistory,\n PDFFindController,\n EventBus,\n DownloadManager,\n ProgressBar,\n GenericL10n,\n NullL10n,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_viewer.component.js","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n apiCompatibilityParams, createObjectURL, createValidAbsoluteUrl\n} from 'pdfjs-lib';\n\nif (typeof PDFJSDev !== 'undefined' && !PDFJSDev.test('CHROME || GENERIC')) {\n throw new Error('Module \"pdfjs-web/download_manager\" shall not be used ' +\n 'outside CHROME and GENERIC builds.');\n}\n\nconst DISABLE_CREATE_OBJECT_URL =\n apiCompatibilityParams.disableCreateObjectURL || false;\n\nfunction download(blobUrl, filename) {\n let a = document.createElement('a');\n if (!a.click) {\n throw new Error('DownloadManager: \"a.click()\" is not supported.');\n }\n a.href = blobUrl;\n a.target = '_parent';\n // Use a.download if available. This increases the likelihood that\n // the file is downloaded instead of opened by another PDF plugin.\n if ('download' in a) {\n a.download = filename;\n }\n // <a> must be in the document for IE and recent Firefox versions,\n // otherwise .click() is ignored.\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.remove();\n}\n\nclass DownloadManager {\n constructor({ disableCreateObjectURL = DISABLE_CREATE_OBJECT_URL, }) {\n this.disableCreateObjectURL = disableCreateObjectURL;\n }\n\n downloadUrl(url, filename) {\n if (!createValidAbsoluteUrl(url, 'http://example.com')) {\n return; // restricted/invalid URL\n }\n download(url + '#pdfjs.action=download', filename);\n }\n\n downloadData(data, filename, contentType) {\n if (navigator.msSaveBlob) { // IE10 and above\n return navigator.msSaveBlob(new Blob([data], { type: contentType, }),\n filename);\n }\n let blobUrl = createObjectURL(data, contentType,\n this.disableCreateObjectURL);\n download(blobUrl, filename);\n }\n\n download(blob, url, filename) {\n if (navigator.msSaveBlob) {\n // IE10 / IE11\n if (!navigator.msSaveBlob(blob, filename)) {\n this.downloadUrl(url, filename);\n }\n return;\n }\n\n if (this.disableCreateObjectURL) {\n // URL.createObjectURL is not supported\n this.downloadUrl(url, filename);\n return;\n }\n\n let blobUrl = URL.createObjectURL(blob);\n download(blobUrl, filename);\n }\n}\n\nexport {\n DownloadManager,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/download_manager.js","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport '../external/webL10n/l10n';\n\nlet webL10n = document.webL10n;\n\nclass GenericL10n {\n constructor(lang) {\n this._lang = lang;\n this._ready = new Promise((resolve, reject) => {\n webL10n.setLanguage(lang, () => {\n resolve(webL10n);\n });\n });\n }\n\n getLanguage() {\n return this._ready.then((l10n) => {\n return l10n.getLanguage();\n });\n }\n\n getDirection() {\n return this._ready.then((l10n) => {\n return l10n.getDirection();\n });\n }\n\n get(property, args, fallback) {\n return this._ready.then((l10n) => {\n return l10n.get(property, args, fallback);\n });\n }\n\n translate(element) {\n return this._ready.then((l10n) => {\n return l10n.translate(element);\n });\n }\n}\n\nexport {\n GenericL10n,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/genericl10n.js","/**\n * Copyright (c) 2011-2013 Fabien Cazenave, Mozilla.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n/*\n Additional modifications for PDF.js project:\n - Disables language initialization on page loading.\n - Disables document translation on page loading.\n - Removes consoleWarn and consoleLog and use console.log/warn directly.\n - Removes window._ assignment.\n - Remove compatibility code for OldIE.\n*/\n\n/*jshint browser: true, devel: true, es5: true, globalstrict: true */\n'use strict';\n\ndocument.webL10n = (function(window, document, undefined) {\n var gL10nData = {};\n var gTextData = '';\n var gTextProp = 'textContent';\n var gLanguage = '';\n var gMacros = {};\n var gReadyState = 'loading';\n\n\n /**\n * Synchronously loading l10n resources significantly minimizes flickering\n * from displaying the app with non-localized strings and then updating the\n * strings. Although this will block all script execution on this page, we\n * expect that the l10n resources are available locally on flash-storage.\n *\n * As synchronous XHR is generally considered as a bad idea, we're still\n * loading l10n resources asynchronously -- but we keep this in a setting,\n * just in case... and applications using this library should hide their\n * content until the `localized' event happens.\n */\n\n var gAsyncResourceLoading = true; // read-only\n\n\n /**\n * DOM helpers for the so-called \"HTML API\".\n *\n * These functions are written for modern browsers. For old versions of IE,\n * they're overridden in the 'startup' section at the end of this file.\n */\n\n function getL10nResourceLinks() {\n return document.querySelectorAll('link[type=\"application/l10n\"]');\n }\n\n function getL10nDictionary() {\n var script = document.querySelector('script[type=\"application/l10n\"]');\n // TODO: support multiple and external JSON dictionaries\n return script ? JSON.parse(script.innerHTML) : null;\n }\n\n function getTranslatableChildren(element) {\n return element ? element.querySelectorAll('*[data-l10n-id]') : [];\n }\n\n function getL10nAttributes(element) {\n if (!element)\n return {};\n\n var l10nId = element.getAttribute('data-l10n-id');\n var l10nArgs = element.getAttribute('data-l10n-args');\n var args = {};\n if (l10nArgs) {\n try {\n args = JSON.parse(l10nArgs);\n } catch (e) {\n console.warn('could not parse arguments for #' + l10nId);\n }\n }\n return { id: l10nId, args: args };\n }\n\n function fireL10nReadyEvent(lang) {\n var evtObject = document.createEvent('Event');\n evtObject.initEvent('localized', true, false);\n evtObject.language = lang;\n document.dispatchEvent(evtObject);\n }\n\n function xhrLoadText(url, onSuccess, onFailure) {\n onSuccess = onSuccess || function _onSuccess(data) {};\n onFailure = onFailure || function _onFailure() {};\n\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, gAsyncResourceLoading);\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType('text/plain; charset=utf-8');\n }\n xhr.onreadystatechange = function() {\n if (xhr.readyState == 4) {\n if (xhr.status == 200 || xhr.status === 0) {\n onSuccess(xhr.responseText);\n } else {\n onFailure();\n }\n }\n };\n xhr.onerror = onFailure;\n xhr.ontimeout = onFailure;\n\n // in Firefox OS with the app:// protocol, trying to XHR a non-existing\n // URL will raise an exception here -- hence this ugly try...catch.\n try {\n xhr.send(null);\n } catch (e) {\n onFailure();\n }\n }\n\n\n /**\n * l10n resource parser:\n * - reads (async XHR) the l10n resource matching `lang';\n * - imports linked resources (synchronously) when specified;\n * - parses the text data (fills `gL10nData' and `gTextData');\n * - triggers success/failure callbacks when done.\n *\n * @param {string} href\n * URL of the l10n resource to parse.\n *\n * @param {string} lang\n * locale (language) to parse. Must be a lowercase string.\n *\n * @param {Function} successCallback\n * triggered when the l10n resource has been successfully parsed.\n *\n * @param {Function} failureCallback\n * triggered when the an error has occurred.\n *\n * @return {void}\n * uses the following global variables: gL10nData, gTextData, gTextProp.\n */\n\n function parseResource(href, lang, successCallback, failureCallback) {\n var baseURL = href.replace(/[^\\/]*$/, '') || './';\n\n // handle escaped characters (backslashes) in a string\n function evalString(text) {\n if (text.lastIndexOf('\\\\') < 0)\n return text;\n return text.replace(/\\\\\\\\/g, '\\\\')\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\b/g, '\\b')\n .replace(/\\\\f/g, '\\f')\n .replace(/\\\\{/g, '{')\n .replace(/\\\\}/g, '}')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\'/g, \"'\");\n }\n\n // parse *.properties text data into an l10n dictionary\n // If gAsyncResourceLoading is false, then the callback will be called\n // synchronously. Otherwise it is called asynchronously.\n function parseProperties(text, parsedPropertiesCallback) {\n var dictionary = {};\n\n // token expressions\n var reBlank = /^\\s*|\\s*$/;\n var reComment = /^\\s*#|^\\s*$/;\n var reSection = /^\\s*\\[(.*)\\]\\s*$/;\n var reImport = /^\\s*@import\\s+url\\((.*)\\)\\s*$/i;\n var reSplit = /^([^=\\s]*)\\s*=\\s*(.+)$/; // TODO: escape EOLs with '\\'\n\n // parse the *.properties file into an associative array\n function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) {\n var entries = rawText.replace(reBlank, '').split(/[\\r\\n]+/);\n var currentLang = '*';\n var genericLang = lang.split('-', 1)[0];\n var skipLang = false;\n var match = '';\n\n function nextEntry() {\n // Use infinite loop instead of recursion to avoid reaching the\n // maximum recursion limit for content with many lines.\n while (true) {\n if (!entries.length) {\n parsedRawLinesCallback();\n return;\n }\n var line = entries.shift();\n\n // comment or blank line?\n if (reComment.test(line))\n continue;\n\n // the extended syntax supports [lang] sections and @import rules\n if (extendedSyntax) {\n match = reSection.exec(line);\n if (match) { // section start?\n // RFC 4646, section 4.4, \"All comparisons MUST be performed\n // in a case-insensitive manner.\"\n\n currentLang = match[1].toLowerCase();\n skipLang = (currentLang !== '*') &&\n (currentLang !== lang) && (currentLang !== genericLang);\n continue;\n } else if (skipLang) {\n continue;\n }\n match = reImport.exec(line);\n if (match) { // @import rule?\n loadImport(baseURL + match[1], nextEntry);\n return;\n }\n }\n\n // key-value pair\n var tmp = line.match(reSplit);\n if (tmp && tmp.length == 3) {\n dictionary[tmp[1]] = evalString(tmp[2]);\n }\n }\n }\n nextEntry();\n }\n\n // import another *.properties file\n function loadImport(url, callback) {\n xhrLoadText(url, function(content) {\n parseRawLines(content, false, callback); // don't allow recursive imports\n }, function () {\n console.warn(url + ' not found.');\n callback();\n });\n }\n\n // fill the dictionary\n parseRawLines(text, true, function() {\n parsedPropertiesCallback(dictionary);\n });\n }\n\n // load and parse l10n data (warning: global variables are used here)\n xhrLoadText(href, function(response) {\n gTextData += response; // mostly for debug\n\n // parse *.properties text data into an l10n dictionary\n parseProperties(response, function(data) {\n\n // find attribute descriptions, if any\n for (var key in data) {\n var id, prop, index = key.lastIndexOf('.');\n if (index > 0) { // an attribute has been specified\n id = key.substring(0, index);\n prop = key.substr(index + 1);\n } else { // no attribute: assuming text content by default\n id = key;\n prop = gTextProp;\n }\n if (!gL10nData[id]) {\n gL10nData[id] = {};\n }\n gL10nData[id][prop] = data[key];\n }\n\n // trigger callback\n if (successCallback) {\n successCallback();\n }\n });\n }, failureCallback);\n }\n\n // load and parse all resources for the specified locale\n function loadLocale(lang, callback) {\n // RFC 4646, section 2.1 states that language tags have to be treated as\n // case-insensitive. Convert to lowercase for case-insensitive comparisons.\n if (lang) {\n lang = lang.toLowerCase();\n }\n\n callback = callback || function _callback() {};\n\n clear();\n gLanguage = lang;\n\n // check all <link type=\"application/l10n\" href=\"...\" /> nodes\n // and load the resource files\n var langLinks = getL10nResourceLinks();\n var langCount = langLinks.length;\n if (langCount === 0) {\n // we might have a pre-compiled dictionary instead\n var dict = getL10nDictionary();\n if (dict && dict.locales && dict.default_locale) {\n console.log('using the embedded JSON directory, early way out');\n gL10nData = dict.locales[lang];\n if (!gL10nData) {\n var defaultLocale = dict.default_locale.toLowerCase();\n for (var anyCaseLang in dict.locales) {\n anyCaseLang = anyCaseLang.toLowerCase();\n if (anyCaseLang === lang) {\n gL10nData = dict.locales[lang];\n break;\n } else if (anyCaseLang === defaultLocale) {\n gL10nData = dict.locales[defaultLocale];\n }\n }\n }\n callback();\n } else {\n console.log('no resource to load, early way out');\n }\n // early way out\n fireL10nReadyEvent(lang);\n gReadyState = 'complete';\n return;\n }\n\n // start the callback when all resources are loaded\n var onResourceLoaded = null;\n var gResourceCount = 0;\n onResourceLoaded = function() {\n gResourceCount++;\n if (gResourceCount >= langCount) {\n callback();\n fireL10nReadyEvent(lang);\n gReadyState = 'complete';\n }\n };\n\n // load all resource files\n function L10nResourceLink(link) {\n var href = link.href;\n // Note: If |gAsyncResourceLoading| is false, then the following callbacks\n // are synchronously called.\n this.load = function(lang, callback) {\n parseResource(href, lang, callback, function() {\n console.warn(href + ' not found.');\n // lang not found, used default resource instead\n console.warn('\"' + lang + '\" resource not found');\n gLanguage = '';\n // Resource not loaded, but we still need to call the callback.\n callback();\n });\n };\n }\n\n for (var i = 0; i < langCount; i++) {\n var resource = new L10nResourceLink(langLinks[i]);\n resource.load(lang, onResourceLoaded);\n }\n }\n\n // clear all l10n data\n function clear() {\n gL10nData = {};\n gTextData = '';\n gLanguage = '';\n // TODO: clear all non predefined macros.\n // There's no such macro /yet/ but we're planning to have some...\n }\n\n\n /**\n * Get rules for plural forms (shared with JetPack), see:\n * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html\n * https://github.com/mozilla/addon-sdk/blob/master/python-lib/plural-rules-generator.p\n *\n * @param {string} lang\n * locale (language) used.\n *\n * @return {Function}\n * returns a function that gives the plural form name for a given integer:\n * var fun = getPluralRules('en');\n * fun(1) -> 'one'\n * fun(0) -> 'other'\n * fun(1000) -> 'other'.\n */\n\n function getPluralRules(lang) {\n var locales2rules = {\n 'af': 3,\n 'ak': 4,\n 'am': 4,\n 'ar': 1,\n 'asa': 3,\n 'az': 0,\n 'be': 11,\n 'bem': 3,\n 'bez': 3,\n 'bg': 3,\n 'bh': 4,\n 'bm': 0,\n 'bn': 3,\n 'bo': 0,\n 'br': 20,\n 'brx': 3,\n 'bs': 11,\n 'ca': 3,\n 'cgg': 3,\n 'chr': 3,\n 'cs': 12,\n 'cy': 17,\n 'da': 3,\n 'de': 3,\n 'dv': 3,\n 'dz': 0,\n 'ee': 3,\n 'el': 3,\n 'en': 3,\n 'eo': 3,\n 'es': 3,\n 'et': 3,\n 'eu': 3,\n 'fa': 0,\n 'ff': 5,\n 'fi': 3,\n 'fil': 4,\n 'fo': 3,\n 'fr': 5,\n 'fur': 3,\n 'fy': 3,\n 'ga': 8,\n 'gd': 24,\n 'gl': 3,\n 'gsw': 3,\n 'gu': 3,\n 'guw': 4,\n 'gv': 23,\n 'ha': 3,\n 'haw': 3,\n 'he': 2,\n 'hi': 4,\n 'hr': 11,\n 'hu': 0,\n 'id': 0,\n 'ig': 0,\n 'ii': 0,\n 'is': 3,\n 'it': 3,\n 'iu': 7,\n 'ja': 0,\n 'jmc': 3,\n 'jv': 0,\n 'ka': 0,\n 'kab': 5,\n 'kaj': 3,\n 'kcg': 3,\n 'kde': 0,\n 'kea': 0,\n 'kk': 3,\n 'kl': 3,\n 'km': 0,\n 'kn': 0,\n 'ko': 0,\n 'ksb': 3,\n 'ksh': 21,\n 'ku': 3,\n 'kw': 7,\n 'lag': 18,\n 'lb': 3,\n 'lg': 3,\n 'ln': 4,\n 'lo': 0,\n 'lt': 10,\n 'lv': 6,\n 'mas': 3,\n 'mg': 4,\n 'mk': 16,\n 'ml': 3,\n 'mn': 3,\n 'mo': 9,\n 'mr': 3,\n 'ms': 0,\n 'mt': 15,\n 'my': 0,\n 'nah': 3,\n 'naq': 7,\n 'nb': 3,\n 'nd': 3,\n 'ne': 3,\n 'nl': 3,\n 'nn': 3,\n 'no': 3,\n 'nr': 3,\n 'nso': 4,\n 'ny': 3,\n 'nyn': 3,\n 'om': 3,\n 'or': 3,\n 'pa': 3,\n 'pap': 3,\n 'pl': 13,\n 'ps': 3,\n 'pt': 3,\n 'rm': 3,\n 'ro': 9,\n 'rof': 3,\n 'ru': 11,\n 'rwk': 3,\n 'sah': 0,\n 'saq': 3,\n 'se': 7,\n 'seh': 3,\n 'ses': 0,\n 'sg': 0,\n 'sh': 11,\n 'shi': 19,\n 'sk': 12,\n 'sl': 14,\n 'sma': 7,\n 'smi': 7,\n 'smj': 7,\n 'smn': 7,\n 'sms': 7,\n 'sn': 3,\n 'so': 3,\n 'sq': 3,\n 'sr': 11,\n 'ss': 3,\n 'ssy': 3,\n 'st': 3,\n 'sv': 3,\n 'sw': 3,\n 'syr': 3,\n 'ta': 3,\n 'te': 3,\n 'teo': 3,\n 'th': 0,\n 'ti': 4,\n 'tig': 3,\n 'tk': 3,\n 'tl': 4,\n 'tn': 3,\n 'to': 0,\n 'tr': 0,\n 'ts': 3,\n 'tzm': 22,\n 'uk': 11,\n 'ur': 3,\n 've': 3,\n 'vi': 0,\n 'vun': 3,\n 'wa': 4,\n 'wae': 3,\n 'wo': 0,\n 'xh': 3,\n 'xog': 3,\n 'yo': 0,\n 'zh': 0,\n 'zu': 3\n };\n\n // utility functions for plural rules methods\n function isIn(n, list) {\n return list.indexOf(n) !== -1;\n }\n function isBetween(n, start, end) {\n return start <= n && n <= end;\n }\n\n // list of all plural rules methods:\n // map an integer to the plural form name to use\n var pluralRules = {\n '0': function(n) {\n return 'other';\n },\n '1': function(n) {\n if ((isBetween((n % 100), 3, 10)))\n return 'few';\n if (n === 0)\n return 'zero';\n if ((isBetween((n % 100), 11, 99)))\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '2': function(n) {\n if (n !== 0 && (n % 10) === 0)\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '3': function(n) {\n if (n == 1)\n return 'one';\n return 'other';\n },\n '4': function(n) {\n if ((isBetween(n, 0, 1)))\n return 'one';\n return 'other';\n },\n '5': function(n) {\n if ((isBetween(n, 0, 2)) && n != 2)\n return 'one';\n return 'other';\n },\n '6': function(n) {\n if (n === 0)\n return 'zero';\n if ((n % 10) == 1 && (n % 100) != 11)\n return 'one';\n return 'other';\n },\n '7': function(n) {\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '8': function(n) {\n if ((isBetween(n, 3, 6)))\n return 'few';\n if ((isBetween(n, 7, 10)))\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '9': function(n) {\n if (n === 0 || n != 1 && (isBetween((n % 100), 1, 19)))\n return 'few';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '10': function(n) {\n if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19)))\n return 'few';\n if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19)))\n return 'one';\n return 'other';\n },\n '11': function(n) {\n if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))\n return 'few';\n if ((n % 10) === 0 ||\n (isBetween((n % 10), 5, 9)) ||\n (isBetween((n % 100), 11, 14)))\n return 'many';\n if ((n % 10) == 1 && (n % 100) != 11)\n return 'one';\n return 'other';\n },\n '12': function(n) {\n if ((isBetween(n, 2, 4)))\n return 'few';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '13': function(n) {\n if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))\n return 'few';\n if (n != 1 && (isBetween((n % 10), 0, 1)) ||\n (isBetween((n % 10), 5, 9)) ||\n (isBetween((n % 100), 12, 14)))\n return 'many';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '14': function(n) {\n if ((isBetween((n % 100), 3, 4)))\n return 'few';\n if ((n % 100) == 2)\n return 'two';\n if ((n % 100) == 1)\n return 'one';\n return 'other';\n },\n '15': function(n) {\n if (n === 0 || (isBetween((n % 100), 2, 10)))\n return 'few';\n if ((isBetween((n % 100), 11, 19)))\n return 'many';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '16': function(n) {\n if ((n % 10) == 1 && n != 11)\n return 'one';\n return 'other';\n },\n '17': function(n) {\n if (n == 3)\n return 'few';\n if (n === 0)\n return 'zero';\n if (n == 6)\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '18': function(n) {\n if (n === 0)\n return 'zero';\n if ((isBetween(n, 0, 2)) && n !== 0 && n != 2)\n return 'one';\n return 'other';\n },\n '19': function(n) {\n if ((isBetween(n, 2, 10)))\n return 'few';\n if ((isBetween(n, 0, 1)))\n return 'one';\n return 'other';\n },\n '20': function(n) {\n if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !(\n isBetween((n % 100), 10, 19) ||\n isBetween((n % 100), 70, 79) ||\n isBetween((n % 100), 90, 99)\n ))\n return 'few';\n if ((n % 1000000) === 0 && n !== 0)\n return 'many';\n if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92]))\n return 'two';\n if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91]))\n return 'one';\n return 'other';\n },\n '21': function(n) {\n if (n === 0)\n return 'zero';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '22': function(n) {\n if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99)))\n return 'one';\n return 'other';\n },\n '23': function(n) {\n if ((isBetween((n % 10), 1, 2)) || (n % 20) === 0)\n return 'one';\n return 'other';\n },\n '24': function(n) {\n if ((isBetween(n, 3, 10) || isBetween(n, 13, 19)))\n return 'few';\n if (isIn(n, [2, 12]))\n return 'two';\n if (isIn(n, [1, 11]))\n return 'one';\n return 'other';\n }\n };\n\n // return a function that gives the plural form name for a given integer\n var index = locales2rules[lang.replace(/-.*$/, '')];\n if (!(index in pluralRules)) {\n console.warn('plural form unknown for [' + lang + ']');\n return function() { return 'other'; };\n }\n return pluralRules[index];\n }\n\n // pre-defined 'plural' macro\n gMacros.plural = function(str, param, key, prop) {\n var n = parseFloat(param);\n if (isNaN(n))\n return str;\n\n // TODO: support other properties (l20n still doesn't...)\n if (prop != gTextProp)\n return str;\n\n // initialize _pluralRules\n if (!gMacros._pluralRules) {\n gMacros._pluralRules = getPluralRules(gLanguage);\n }\n var index = '[' + gMacros._pluralRules(n) + ']';\n\n // try to find a [zero|one|two] key if it's defined\n if (n === 0 && (key + '[zero]') in gL10nData) {\n str = gL10nData[key + '[zero]'][prop];\n } else if (n == 1 && (key + '[one]') in gL10nData) {\n str = gL10nData[key + '[one]'][prop];\n } else if (n == 2 && (key + '[two]') in gL10nData) {\n str = gL10nData[key + '[two]'][prop];\n } else if ((key + index) in gL10nData) {\n str = gL10nData[key + index][prop];\n } else if ((key + '[other]') in gL10nData) {\n str = gL10nData[key + '[other]'][prop];\n }\n\n return str;\n };\n\n\n /**\n * l10n dictionary functions\n */\n\n // fetch an l10n object, warn if not found, apply `args' if possible\n function getL10nData(key, args, fallback) {\n var data = gL10nData[key];\n if (!data) {\n console.warn('#' + key + ' is undefined.');\n if (!fallback) {\n return null;\n }\n data = fallback;\n }\n\n /** This is where l10n expressions should be processed.\n * The plan is to support C-style expressions from the l20n project;\n * until then, only two kinds of simple expressions are supported:\n * {[ index ]} and {{ arguments }}.\n */\n var rv = {};\n for (var prop in data) {\n var str = data[prop];\n str = substIndexes(str, args, key, prop);\n str = substArguments(str, args, key);\n rv[prop] = str;\n }\n return rv;\n }\n\n // replace {[macros]} with their values\n function substIndexes(str, args, key, prop) {\n var reIndex = /\\{\\[\\s*([a-zA-Z]+)\\(([a-zA-Z]+)\\)\\s*\\]\\}/;\n var reMatch = reIndex.exec(str);\n if (!reMatch || !reMatch.length)\n return str;\n\n // an index/macro has been found\n // Note: at the moment, only one parameter is supported\n var macroName = reMatch[1];\n var paramName = reMatch[2];\n var param;\n if (args && paramName in args) {\n param = args[paramName];\n } else if (paramName in gL10nData) {\n param = gL10nData[paramName];\n }\n\n // there's no macro parser yet: it has to be defined in gMacros\n if (macroName in gMacros) {\n var macro = gMacros[macroName];\n str = macro(str, param, key, prop);\n }\n return str;\n }\n\n // replace {{arguments}} with their values\n function substArguments(str, args, key) {\n var reArgs = /\\{\\{\\s*(.+?)\\s*\\}\\}/g;\n return str.replace(reArgs, function(matched_text, arg) {\n if (args && arg in args) {\n return args[arg];\n }\n if (arg in gL10nData) {\n return gL10nData[arg];\n }\n console.log('argument {{' + arg + '}} for #' + key + ' is undefined.');\n return matched_text;\n });\n }\n\n // translate an HTML element\n function translateElement(element) {\n var l10n = getL10nAttributes(element);\n if (!l10n.id)\n return;\n\n // get the related l10n object\n var data = getL10nData(l10n.id, l10n.args);\n if (!data) {\n console.warn('#' + l10n.id + ' is undefined.');\n return;\n }\n\n // translate element (TODO: security checks?)\n if (data[gTextProp]) { // XXX\n if (getChildElementCount(element) === 0) {\n element[gTextProp] = data[gTextProp];\n } else {\n // this element has element children: replace the content of the first\n // (non-empty) child textNode and clear other child textNodes\n var children = element.childNodes;\n var found = false;\n for (var i = 0, l = children.length; i < l; i++) {\n if (children[i].nodeType === 3 && /\\S/.test(children[i].nodeValue)) {\n if (found) {\n children[i].nodeValue = '';\n } else {\n children[i].nodeValue = data[gTextProp];\n found = true;\n }\n }\n }\n // if no (non-empty) textNode is found, insert a textNode before the\n // first element child.\n if (!found) {\n var textNode = document.createTextNode(data[gTextProp]);\n element.insertBefore(textNode, element.firstChild);\n }\n }\n delete data[gTextProp];\n }\n\n for (var k in data) {\n element[k] = data[k];\n }\n }\n\n // webkit browsers don't currently support 'children' on SVG elements...\n function getChildElementCount(element) {\n if (element.children) {\n return element.children.length;\n }\n if (typeof element.childElementCount !== 'undefined') {\n return element.childElementCount;\n }\n var count = 0;\n for (var i = 0; i < element.childNodes.length; i++) {\n count += element.nodeType === 1 ? 1 : 0;\n }\n return count;\n }\n\n // translate an HTML subtree\n function translateFragment(element) {\n element = element || document.documentElement;\n\n // check all translatable children (= w/ a `data-l10n-id' attribute)\n var children = getTranslatableChildren(element);\n var elementCount = children.length;\n for (var i = 0; i < elementCount; i++) {\n translateElement(children[i]);\n }\n\n // translate element itself if necessary\n translateElement(element);\n }\n\n return {\n // get a localized string\n get: function(key, args, fallbackString) {\n var index = key.lastIndexOf('.');\n var prop = gTextProp;\n if (index > 0) { // An attribute has been specified\n prop = key.substr(index + 1);\n key = key.substring(0, index);\n }\n var fallback;\n if (fallbackString) {\n fallback = {};\n fallback[prop] = fallbackString;\n }\n var data = getL10nData(key, args, fallback);\n if (data && prop in data) {\n return data[prop];\n }\n return '{{' + key + '}}';\n },\n\n // debug\n getData: function() { return gL10nData; },\n getText: function() { return gTextData; },\n\n // get|set the document language\n getLanguage: function() { return gLanguage; },\n setLanguage: function(lang, callback) {\n loadLocale(lang, function() {\n if (callback)\n callback();\n });\n },\n\n // get the direction (ltr|rtl) of the current language\n getDirection: function() {\n // http://www.w3.org/International/questions/qa-scripts\n // Arabic, Hebrew, Farsi, Pashto, Urdu\n var rtlList = ['ar', 'he', 'fa', 'ps', 'ur'];\n var shortCode = gLanguage.split('-', 1)[0];\n return (rtlList.indexOf(shortCode) >= 0) ? 'rtl' : 'ltr';\n },\n\n // translate an element or document fragment\n translate: translateFragment,\n\n // this can be used to prevent race conditions\n getReadyState: function() { return gReadyState; },\n ready: function(callback) {\n if (!callback) {\n return;\n } else if (gReadyState == 'complete' || gReadyState == 'interactive') {\n window.setTimeout(function() {\n callback();\n });\n } else if (document.addEventListener) {\n document.addEventListener('localized', function once() {\n document.removeEventListener('localized', once);\n callback();\n });\n }\n }\n };\n}) (window, document);\n\n\n\n// WEBPACK FOOTER //\n// external/webL10n/l10n.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createPromiseCapability } from 'pdfjs-lib';\nimport { scrollIntoView } from './ui_utils';\n\nconst FindState = {\n FOUND: 0,\n NOT_FOUND: 1,\n WRAPPED: 2,\n PENDING: 3,\n};\n\nconst FIND_SCROLL_OFFSET_TOP = -50;\nconst FIND_SCROLL_OFFSET_LEFT = -400;\nconst FIND_TIMEOUT = 250; // ms\n\nconst CHARACTERS_TO_NORMALIZE = {\n '\\u2018': '\\'', // Left single quotation mark\n '\\u2019': '\\'', // Right single quotation mark\n '\\u201A': '\\'', // Single low-9 quotation mark\n '\\u201B': '\\'', // Single high-reversed-9 quotation mark\n '\\u201C': '\"', // Left double quotation mark\n '\\u201D': '\"', // Right double quotation mark\n '\\u201E': '\"', // Double low-9 quotation mark\n '\\u201F': '\"', // Double high-reversed-9 quotation mark\n '\\u00BC': '1/4', // Vulgar fraction one quarter\n '\\u00BD': '1/2', // Vulgar fraction one half\n '\\u00BE': '3/4', // Vulgar fraction three quarters\n};\n\n/**\n * Provides search functionality to find a given string in a PDF document.\n */\nclass PDFFindController {\n constructor({ pdfViewer, }) {\n this.pdfViewer = pdfViewer;\n\n this.onUpdateResultsCount = null;\n this.onUpdateState = null;\n\n this.reset();\n\n // Compile the regular expression for text normalization once.\n let replace = Object.keys(CHARACTERS_TO_NORMALIZE).join('');\n this.normalizationRegex = new RegExp('[' + replace + ']', 'g');\n }\n\n reset() {\n this.startedTextExtraction = false;\n this.extractTextPromises = [];\n this.pendingFindMatches = Object.create(null);\n this.active = false; // If active, find results will be highlighted.\n this.pageContents = []; // Stores the text for each page.\n this.pageMatches = [];\n this.pageMatchesLength = null;\n this.matchCount = 0;\n this.selected = { // Currently selected match.\n pageIdx: -1,\n matchIdx: -1,\n };\n this.offset = { // Where the find algorithm currently is in the document.\n pageIdx: null,\n matchIdx: null,\n };\n this.pagesToSearch = null;\n this.resumePageIdx = null;\n this.state = null;\n this.dirtyMatch = false;\n this.findTimeout = null;\n\n this._firstPagePromise = new Promise((resolve) => {\n this.resolveFirstPage = resolve;\n });\n }\n\n executeCommand(cmd, state) {\n if (this.state === null || cmd !== 'findagain') {\n this.dirtyMatch = true;\n }\n this.state = state;\n this._updateUIState(FindState.PENDING);\n\n this._firstPagePromise.then(() => {\n this._extractText();\n\n clearTimeout(this.findTimeout);\n if (cmd === 'find') {\n // Trigger the find action with a small delay to avoid starting the\n // search when the user is still typing (saving resources).\n this.findTimeout = setTimeout(this._nextMatch.bind(this), FIND_TIMEOUT);\n } else {\n this._nextMatch();\n }\n });\n }\n\n /**\n * Called from the text layer when match presentation is updated.\n *\n * @param {number} pageIndex - The index of the page.\n * @param {number} matchIndex - The index of the match.\n * @param {Array} elements - Text layer `div` elements.\n * @param {number} beginIdx - Start index of the `div` array for the match.\n */\n updateMatchPosition(pageIndex, matchIndex, elements, beginIdx) {\n if (this.selected.matchIdx === matchIndex &&\n this.selected.pageIdx === pageIndex) {\n let spot = {\n top: FIND_SCROLL_OFFSET_TOP,\n left: FIND_SCROLL_OFFSET_LEFT,\n };\n scrollIntoView(elements[beginIdx], spot,\n /* skipOverflowHiddenElements = */ true);\n }\n }\n\n _normalize(text) {\n return text.replace(this.normalizationRegex, function (ch) {\n return CHARACTERS_TO_NORMALIZE[ch];\n });\n }\n\n /**\n * Helper for multi-term search that fills the `matchesWithLength` array\n * and handles cases where one search term includes another search term (for\n * example, \"tamed tame\" or \"this is\"). It looks for intersecting terms in\n * the `matches` and keeps elements with a longer match length.\n */\n _prepareMatches(matchesWithLength, matches, matchesLength) {\n function isSubTerm(matchesWithLength, currentIndex) {\n let currentElem = matchesWithLength[currentIndex];\n let nextElem = matchesWithLength[currentIndex + 1];\n\n // Check for cases like \"TAMEd TAME\".\n if (currentIndex < matchesWithLength.length - 1 &&\n currentElem.match === nextElem.match) {\n currentElem.skipped = true;\n return true;\n }\n\n // Check for cases like \"thIS IS\".\n for (let i = currentIndex - 1; i >= 0; i--) {\n let prevElem = matchesWithLength[i];\n if (prevElem.skipped) {\n continue;\n }\n if (prevElem.match + prevElem.matchLength < currentElem.match) {\n break;\n }\n if (prevElem.match + prevElem.matchLength >=\n currentElem.match + currentElem.matchLength) {\n currentElem.skipped = true;\n return true;\n }\n }\n return false;\n }\n\n // Sort the array of `{ match: <match>, matchLength: <matchLength> }`\n // objects on increasing index first and on the length otherwise.\n matchesWithLength.sort(function(a, b) {\n return a.match === b.match ? a.matchLength - b.matchLength :\n a.match - b.match;\n });\n for (let i = 0, len = matchesWithLength.length; i < len; i++) {\n if (isSubTerm(matchesWithLength, i)) {\n continue;\n }\n matches.push(matchesWithLength[i].match);\n matchesLength.push(matchesWithLength[i].matchLength);\n }\n }\n\n _calculatePhraseMatch(query, pageIndex, pageContent) {\n let matches = [];\n let queryLen = query.length;\n let matchIdx = -queryLen;\n while (true) {\n matchIdx = pageContent.indexOf(query, matchIdx + queryLen);\n if (matchIdx === -1) {\n break;\n }\n matches.push(matchIdx);\n }\n this.pageMatches[pageIndex] = matches;\n }\n\n _calculateWordMatch(query, pageIndex, pageContent) {\n let matchesWithLength = [];\n // Divide the query into pieces and search for text in each piece.\n let queryArray = query.match(/\\S+/g);\n for (let i = 0, len = queryArray.length; i < len; i++) {\n let subquery = queryArray[i];\n let subqueryLen = subquery.length;\n let matchIdx = -subqueryLen;\n while (true) {\n matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen);\n if (matchIdx === -1) {\n break;\n }\n // Other searches do not, so we store the length.\n matchesWithLength.push({\n match: matchIdx,\n matchLength: subqueryLen,\n skipped: false,\n });\n }\n }\n\n // Prepare arrays for storing the matches.\n if (!this.pageMatchesLength) {\n this.pageMatchesLength = [];\n }\n this.pageMatchesLength[pageIndex] = [];\n this.pageMatches[pageIndex] = [];\n\n // Sort `matchesWithLength`, remove intersecting terms and put the result\n // into the two arrays.\n this._prepareMatches(matchesWithLength, this.pageMatches[pageIndex],\n this.pageMatchesLength[pageIndex]);\n }\n\n _calculateMatch(pageIndex) {\n let pageContent = this._normalize(this.pageContents[pageIndex]);\n let query = this._normalize(this.state.query);\n let caseSensitive = this.state.caseSensitive;\n let phraseSearch = this.state.phraseSearch;\n let queryLen = query.length;\n\n if (queryLen === 0) {\n // Do nothing: the matches should be wiped out already.\n return;\n }\n\n if (!caseSensitive) {\n pageContent = pageContent.toLowerCase();\n query = query.toLowerCase();\n }\n\n if (phraseSearch) {\n this._calculatePhraseMatch(query, pageIndex, pageContent);\n } else {\n this._calculateWordMatch(query, pageIndex, pageContent);\n }\n\n this._updatePage(pageIndex);\n if (this.resumePageIdx === pageIndex) {\n this.resumePageIdx = null;\n this._nextPageMatch();\n }\n\n // Update the match count.\n if (this.pageMatches[pageIndex].length > 0) {\n this.matchCount += this.pageMatches[pageIndex].length;\n this._updateUIResultsCount();\n }\n }\n\n _extractText() {\n if (this.startedTextExtraction) {\n return;\n }\n this.startedTextExtraction = true;\n this.pageContents.length = 0;\n\n let promise = Promise.resolve();\n for (let i = 0, ii = this.pdfViewer.pagesCount; i < ii; i++) {\n let extractTextCapability = createPromiseCapability();\n this.extractTextPromises[i] = extractTextCapability.promise;\n\n promise = promise.then(() => {\n return this.pdfViewer.getPageTextContent(i).then((textContent) => {\n let textItems = textContent.items;\n let strBuf = [];\n\n for (let j = 0, jj = textItems.length; j < jj; j++) {\n strBuf.push(textItems[j].str);\n }\n // Store the pageContent as a string.\n this.pageContents[i] = strBuf.join('');\n extractTextCapability.resolve(i);\n }, (reason) => {\n console.error(`Unable to get page ${i + 1} text content`, reason);\n // Page error -- assuming no text content.\n this.pageContents[i] = '';\n extractTextCapability.resolve(i);\n });\n });\n }\n }\n\n _updatePage(index) {\n if (this.selected.pageIdx === index) {\n // If the page is selected, scroll the page into view, which triggers\n // rendering the page, which adds the textLayer. Once the textLayer is\n // build, it will scroll onto the selected match.\n this.pdfViewer.currentPageNumber = index + 1;\n }\n\n let page = this.pdfViewer.getPageView(index);\n if (page.textLayer) {\n page.textLayer.updateMatches();\n }\n }\n\n _nextMatch() {\n let previous = this.state.findPrevious;\n let currentPageIndex = this.pdfViewer.currentPageNumber - 1;\n let numPages = this.pdfViewer.pagesCount;\n\n this.active = true;\n\n if (this.dirtyMatch) {\n // Need to recalculate the matches, reset everything.\n this.dirtyMatch = false;\n this.selected.pageIdx = this.selected.matchIdx = -1;\n this.offset.pageIdx = currentPageIndex;\n this.offset.matchIdx = null;\n this.hadMatch = false;\n this.resumePageIdx = null;\n this.pageMatches = [];\n this.matchCount = 0;\n this.pageMatchesLength = null;\n\n for (let i = 0; i < numPages; i++) {\n // Wipe out any previously highlighted matches.\n this._updatePage(i);\n\n // Start finding the matches as soon as the text is extracted.\n if (!(i in this.pendingFindMatches)) {\n this.pendingFindMatches[i] = true;\n this.extractTextPromises[i].then((pageIdx) => {\n delete this.pendingFindMatches[pageIdx];\n this._calculateMatch(pageIdx);\n });\n }\n }\n }\n\n // If there's no query there's no point in searching.\n if (this.state.query === '') {\n this._updateUIState(FindState.FOUND);\n return;\n }\n\n // If we're waiting on a page, we return since we can't do anything else.\n if (this.resumePageIdx) {\n return;\n }\n\n let offset = this.offset;\n // Keep track of how many pages we should maximally iterate through.\n this.pagesToSearch = numPages;\n // If there's already a `matchIdx` that means we are iterating through a\n // page's matches.\n if (offset.matchIdx !== null) {\n let numPageMatches = this.pageMatches[offset.pageIdx].length;\n if ((!previous && offset.matchIdx + 1 < numPageMatches) ||\n (previous && offset.matchIdx > 0)) {\n // The simple case; we just have advance the matchIdx to select\n // the next match on the page.\n this.hadMatch = true;\n offset.matchIdx = (previous ? offset.matchIdx - 1 :\n offset.matchIdx + 1);\n this._updateMatch(/* found = */ true);\n return;\n }\n // We went beyond the current page's matches, so we advance to\n // the next page.\n this._advanceOffsetPage(previous);\n }\n // Start searching through the page.\n this._nextPageMatch();\n }\n\n _matchesReady(matches) {\n let offset = this.offset;\n let numMatches = matches.length;\n let previous = this.state.findPrevious;\n\n if (numMatches) {\n // There were matches for the page, so initialize `matchIdx`.\n this.hadMatch = true;\n offset.matchIdx = (previous ? numMatches - 1 : 0);\n this._updateMatch(/* found = */ true);\n return true;\n }\n // No matches, so attempt to search the next page.\n this._advanceOffsetPage(previous);\n if (offset.wrapped) {\n offset.matchIdx = null;\n if (this.pagesToSearch < 0) {\n // No point in wrapping again, there were no matches.\n this._updateMatch(/* found = */ false);\n // While matches were not found, searching for a page\n // with matches should nevertheless halt.\n return true;\n }\n }\n // Matches were not found (and searching is not done).\n return false;\n }\n\n _nextPageMatch() {\n if (this.resumePageIdx !== null) {\n console.error('There can only be one pending page.');\n }\n\n let matches = null;\n do {\n let pageIdx = this.offset.pageIdx;\n matches = this.pageMatches[pageIdx];\n if (!matches) {\n // The matches don't exist yet for processing by `_matchesReady`,\n // so set a resume point for when they do exist.\n this.resumePageIdx = pageIdx;\n break;\n }\n } while (!this._matchesReady(matches));\n }\n\n _advanceOffsetPage(previous) {\n let offset = this.offset;\n let numPages = this.extractTextPromises.length;\n offset.pageIdx = (previous ? offset.pageIdx - 1 : offset.pageIdx + 1);\n offset.matchIdx = null;\n\n this.pagesToSearch--;\n\n if (offset.pageIdx >= numPages || offset.pageIdx < 0) {\n offset.pageIdx = (previous ? numPages - 1 : 0);\n offset.wrapped = true;\n }\n }\n\n _updateMatch(found = false) {\n let state = FindState.NOT_FOUND;\n let wrapped = this.offset.wrapped;\n this.offset.wrapped = false;\n\n if (found) {\n let previousPage = this.selected.pageIdx;\n this.selected.pageIdx = this.offset.pageIdx;\n this.selected.matchIdx = this.offset.matchIdx;\n state = (wrapped ? FindState.WRAPPED : FindState.FOUND);\n\n // Update the currently selected page to wipe out any selected matches.\n if (previousPage !== -1 && previousPage !== this.selected.pageIdx) {\n this._updatePage(previousPage);\n }\n }\n\n this._updateUIState(state, this.state.findPrevious);\n if (this.selected.pageIdx !== -1) {\n this._updatePage(this.selected.pageIdx);\n }\n }\n\n _updateUIResultsCount() {\n if (this.onUpdateResultsCount) {\n this.onUpdateResultsCount(this.matchCount);\n }\n }\n\n _updateUIState(state, previous) {\n if (this.onUpdateState) {\n this.onUpdateState(state, previous, this.matchCount);\n }\n }\n}\n\nexport {\n FindState,\n PDFFindController,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_find_controller.js","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n cloneObj, isValidRotation, parseQueryString, waitOnEventOrTimeout\n} from './ui_utils';\nimport { getGlobalEventBus } from './dom_events';\n\n// Heuristic value used when force-resetting `this._blockHashChange`.\nconst HASH_CHANGE_TIMEOUT = 1000; // milliseconds\n// Heuristic value used when adding the current position to the browser history.\nconst POSITION_UPDATED_THRESHOLD = 50;\n// Heuristic value used when adding a temporary position to the browser history.\nconst UPDATE_VIEWAREA_TIMEOUT = 1000; // milliseconds\n\n/**\n * @typedef {Object} PDFHistoryOptions\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {EventBus} eventBus - The application event bus.\n */\n\n/**\n * @typedef {Object} PushParameters\n * @property {string} namedDest - (optional) The named destination. If absent,\n * a stringified version of `explicitDest` is used.\n * @property {Array} explicitDest - The explicit destination array.\n * @property {number} pageNumber - The page to which the destination points.\n */\n\nfunction getCurrentHash() {\n return document.location.hash;\n}\n\nfunction parseCurrentHash(linkService) {\n let hash = unescape(getCurrentHash()).substring(1);\n let params = parseQueryString(hash);\n\n let page = params.page | 0;\n if (!(Number.isInteger(page) && page > 0 && page <= linkService.pagesCount)) {\n page = null;\n }\n return { hash, page, rotation: linkService.rotation, };\n}\n\nclass PDFHistory {\n /**\n * @param {PDFHistoryOptions} options\n */\n constructor({ linkService, eventBus, }) {\n this.linkService = linkService;\n this.eventBus = eventBus || getGlobalEventBus();\n\n this.initialized = false;\n this.initialBookmark = null;\n this.initialRotation = null;\n\n this._boundEvents = Object.create(null);\n this._isViewerInPresentationMode = false;\n this._isPagesLoaded = false;\n\n // Ensure that we don't miss either a 'presentationmodechanged' or a\n // 'pagesloaded' event, by registering the listeners immediately.\n this.eventBus.on('presentationmodechanged', (evt) => {\n this._isViewerInPresentationMode = evt.active || evt.switchInProgress;\n });\n this.eventBus.on('pagesloaded', (evt) => {\n this._isPagesLoaded = !!evt.pagesCount;\n });\n }\n\n /**\n * Initialize the history for the PDF document, using either the current\n * browser history entry or the document hash, whichever is present.\n * @param {string} fingerprint - The PDF document's unique fingerprint.\n * @param {boolean} resetHistory - (optional) Reset the browsing history.\n */\n initialize(fingerprint, resetHistory = false) {\n if (!fingerprint || typeof fingerprint !== 'string') {\n console.error(\n 'PDFHistory.initialize: The \"fingerprint\" must be a non-empty string.');\n return;\n }\n let reInitialized = this.initialized && this.fingerprint !== fingerprint;\n this.fingerprint = fingerprint;\n\n if (!this.initialized) {\n this._bindEvents();\n }\n let state = window.history.state;\n\n this.initialized = true;\n this.initialBookmark = null;\n this.initialRotation = null;\n\n this._popStateInProgress = false;\n this._blockHashChange = 0;\n this._currentHash = getCurrentHash();\n this._numPositionUpdates = 0;\n\n this._uid = this._maxUid = 0;\n this._destination = null;\n this._position = null;\n\n if (!this._isValidState(state) || resetHistory) {\n let { hash, page, rotation, } = parseCurrentHash(this.linkService);\n\n if (!hash || reInitialized || resetHistory) {\n // Ensure that the browser history is reset on PDF document load.\n this._pushOrReplaceState(null, /* forceReplace = */ true);\n return;\n }\n // Ensure that the browser history is initialized correctly when\n // the document hash is present on PDF document load.\n this._pushOrReplaceState({ hash, page, rotation, },\n /* forceReplace = */ true);\n return;\n }\n\n // The browser history contains a valid entry, ensure that the history is\n // initialized correctly on PDF document load.\n let destination = state.destination;\n this._updateInternalState(destination, state.uid,\n /* removeTemporary = */ true);\n if (this._uid > this._maxUid) {\n this._maxUid = this._uid;\n }\n\n if (destination.rotation !== undefined) {\n this.initialRotation = destination.rotation;\n }\n if (destination.dest) {\n this.initialBookmark = JSON.stringify(destination.dest);\n\n // If the history is updated, e.g. through the user changing the hash,\n // before the initial destination has become visible, then we do *not*\n // want to potentially add `this._position` to the browser history.\n this._destination.page = null;\n } else if (destination.hash) {\n this.initialBookmark = destination.hash;\n } else if (destination.page) {\n // Fallback case; shouldn't be necessary, but better safe than sorry.\n this.initialBookmark = `page=${destination.page}`;\n }\n }\n\n /**\n * Push an internal destination to the browser history.\n * @param {PushParameters}\n */\n push({ namedDest, explicitDest, pageNumber, }) {\n if (!this.initialized) {\n return;\n }\n if ((namedDest && typeof namedDest !== 'string') ||\n !(explicitDest instanceof Array) ||\n !(Number.isInteger(pageNumber) &&\n pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {\n console.error('PDFHistory.push: Invalid parameters.');\n return;\n }\n\n let hash = namedDest || JSON.stringify(explicitDest);\n if (!hash) {\n // The hash *should* never be undefined, but if that were to occur,\n // avoid any possible issues by not updating the browser history.\n return;\n }\n\n let forceReplace = false;\n if (this._destination &&\n (isDestHashesEqual(this._destination.hash, hash) ||\n isDestArraysEqual(this._destination.dest, explicitDest))) {\n // When the new destination is identical to `this._destination`, and\n // its `page` is undefined, replace the current browser history entry.\n // NOTE: This can only occur if `this._destination` was set either:\n // - through the document hash being specified on load.\n // - through the user changing the hash of the document.\n if (this._destination.page) {\n return;\n }\n forceReplace = true;\n }\n if (this._popStateInProgress && !forceReplace) {\n return;\n }\n\n this._pushOrReplaceState({\n dest: explicitDest,\n hash,\n page: pageNumber,\n rotation: this.linkService.rotation,\n }, forceReplace);\n\n if (!this._popStateInProgress) {\n // Prevent the browser history from updating while the new destination is\n // being scrolled into view, to avoid potentially inconsistent state.\n this._popStateInProgress = true;\n // We defer the resetting of `this._popStateInProgress`, to account for\n // e.g. zooming occuring when the new destination is being navigated to.\n Promise.resolve().then(() => {\n this._popStateInProgress = false;\n });\n }\n }\n\n /**\n * Push the current position to the browser history.\n */\n pushCurrentPosition() {\n if (!this.initialized || this._popStateInProgress) {\n return;\n }\n this._tryPushCurrentPosition();\n }\n\n /**\n * Go back one step in the browser history.\n * NOTE: Avoids navigating away from the document, useful for \"named actions\".\n */\n back() {\n if (!this.initialized || this._popStateInProgress) {\n return;\n }\n let state = window.history.state;\n if (this._isValidState(state) && state.uid > 0) {\n window.history.back();\n }\n }\n\n /**\n * Go forward one step in the browser history.\n * NOTE: Avoids navigating away from the document, useful for \"named actions\".\n */\n forward() {\n if (!this.initialized || this._popStateInProgress) {\n return;\n }\n let state = window.history.state;\n if (this._isValidState(state) && state.uid < this._maxUid) {\n window.history.forward();\n }\n }\n\n /**\n * @returns {boolean} Indicating if the user is currently moving through the\n * browser history, useful e.g. for skipping the next 'hashchange' event.\n */\n get popStateInProgress() {\n return this.initialized &&\n (this._popStateInProgress || this._blockHashChange > 0);\n }\n\n /**\n * @private\n */\n _pushOrReplaceState(destination, forceReplace = false) {\n let shouldReplace = forceReplace || !this._destination;\n let newState = {\n fingerprint: this.fingerprint,\n uid: shouldReplace ? this._uid : (this._uid + 1),\n destination,\n };\n\n if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME') &&\n window.history.state && window.history.state.chromecomState) {\n // history.state.chromecomState is managed by chromecom.js.\n newState.chromecomState = window.history.state.chromecomState;\n }\n this._updateInternalState(destination, newState.uid);\n\n if (shouldReplace) {\n window.history.replaceState(newState, '');\n } else {\n this._maxUid = this._uid;\n window.history.pushState(newState, '');\n }\n\n if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME') &&\n top === window) {\n // eslint-disable-next-line no-undef\n chrome.runtime.sendMessage('showPageAction');\n }\n }\n\n /**\n * @private\n */\n _tryPushCurrentPosition(temporary = false) {\n if (!this._position) {\n return;\n }\n let position = this._position;\n if (temporary) {\n position = cloneObj(this._position);\n position.temporary = true;\n }\n\n if (!this._destination) {\n this._pushOrReplaceState(position);\n return;\n }\n if (this._destination.temporary) {\n // Always replace a previous *temporary* position.\n this._pushOrReplaceState(position, /* forceReplace = */ true);\n return;\n }\n if (this._destination.hash === position.hash) {\n return; // The current document position has not changed.\n }\n if (!this._destination.page &&\n (POSITION_UPDATED_THRESHOLD <= 0 ||\n this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {\n // `this._destination` was set through the user changing the hash of\n // the document. Do not add `this._position` to the browser history,\n // to avoid \"flooding\" it with lots of (nearly) identical entries,\n // since we cannot ensure that the document position has changed.\n return;\n }\n\n let forceReplace = false;\n if (this._destination.page === position.first ||\n this._destination.page === position.page) {\n // When the `page` of `this._destination` is still visible, do not\n // update the browsing history when `this._destination` either:\n // - contains an internal destination, since in this case we\n // cannot ensure that the document position has actually changed.\n // - was set through the user changing the hash of the document.\n if (this._destination.dest || !this._destination.first) {\n return;\n }\n // To avoid \"flooding\" the browser history, replace the current entry.\n forceReplace = true;\n }\n this._pushOrReplaceState(position, forceReplace);\n }\n\n /**\n * @private\n */\n _isValidState(state) {\n if (!state) {\n return false;\n }\n if (state.fingerprint !== this.fingerprint) {\n // This should only occur in viewers with support for opening more than\n // one PDF document, e.g. the GENERIC viewer.\n return false;\n }\n if (!Number.isInteger(state.uid) || state.uid < 0) {\n return false;\n }\n if (state.destination === null || typeof state.destination !== 'object') {\n return false;\n }\n return true;\n }\n\n /**\n * @private\n */\n _updateInternalState(destination, uid, removeTemporary = false) {\n if (this._updateViewareaTimeout) {\n // When updating `this._destination`, make sure that we always wait for\n // the next 'updateviewarea' event before (potentially) attempting to\n // push the current position to the browser history.\n clearTimeout(this._updateViewareaTimeout);\n this._updateViewareaTimeout = null;\n }\n if (removeTemporary && destination && destination.temporary) {\n // When the `destination` comes from the browser history,\n // we no longer treat it as a *temporary* position.\n delete destination.temporary;\n }\n this._destination = destination;\n this._uid = uid;\n // This should always be reset when `this._destination` is updated.\n this._numPositionUpdates = 0;\n }\n\n /**\n * @private\n */\n _updateViewarea({ location, }) {\n if (this._updateViewareaTimeout) {\n clearTimeout(this._updateViewareaTimeout);\n this._updateViewareaTimeout = null;\n }\n\n this._position = {\n hash: this._isViewerInPresentationMode ?\n `page=${location.pageNumber}` : location.pdfOpenParams.substring(1),\n page: this.linkService.page,\n first: location.pageNumber,\n rotation: location.rotation,\n };\n\n if (this._popStateInProgress) {\n return;\n }\n\n if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded &&\n this._destination && !this._destination.page) {\n // If the current destination was set through the user changing the hash\n // of the document, we will usually not try to push the current position\n // to the browser history; see `this._tryPushCurrentPosition()`.\n //\n // To prevent `this._tryPushCurrentPosition()` from effectively being\n // reduced to a no-op in this case, we will assume that the position\n // *did* in fact change if the 'updateviewarea' event was dispatched\n // more than `POSITION_UPDATED_THRESHOLD` times.\n this._numPositionUpdates++;\n }\n\n if (UPDATE_VIEWAREA_TIMEOUT > 0) {\n // When closing the browser, a 'pagehide' event will be dispatched which\n // *should* allow us to push the current position to the browser history.\n // In practice, it seems that the event is arriving too late in order for\n // the session history to be successfully updated.\n // (For additional details, please refer to the discussion in\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1153393.)\n //\n // To workaround this we attempt to *temporarily* add the current position\n // to the browser history only when the viewer is *idle*,\n // i.e. when scrolling and/or zooming does not occur.\n //\n // PLEASE NOTE: It's absolutely imperative that the browser history is\n // *not* updated too often, since that would render the viewer more or\n // less unusable. Hence the use of a timeout to delay the update until\n // the viewer has been idle for `UPDATE_VIEWAREA_TIMEOUT` milliseconds.\n this._updateViewareaTimeout = setTimeout(() => {\n if (!this._popStateInProgress) {\n this._tryPushCurrentPosition(/* temporary = */ true);\n }\n this._updateViewareaTimeout = null;\n }, UPDATE_VIEWAREA_TIMEOUT);\n }\n }\n\n /**\n * @private\n */\n _popState({ state, }) {\n let newHash = getCurrentHash(), hashChanged = this._currentHash !== newHash;\n this._currentHash = newHash;\n\n if (!state ||\n (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME') &&\n state.chromecomState && !this._isValidState(state))) {\n // This case corresponds to the user changing the hash of the document.\n this._uid++;\n\n let { hash, page, rotation, } = parseCurrentHash(this.linkService);\n this._pushOrReplaceState({ hash, page, rotation, },\n /* forceReplace = */ true);\n return;\n }\n if (!this._isValidState(state)) {\n // This should only occur in viewers with support for opening more than\n // one PDF document, e.g. the GENERIC viewer.\n return;\n }\n\n // Prevent the browser history from updating until the new destination,\n // as stored in the browser history, has been scrolled into view.\n this._popStateInProgress = true;\n\n if (hashChanged) {\n // When the hash changed, implying that the 'popstate' event will be\n // followed by a 'hashchange' event, then we do *not* want to update the\n // browser history when handling the 'hashchange' event (in web/app.js)\n // since that would *overwrite* the new destination navigated to below.\n //\n // To avoid accidentally disabling all future user-initiated hash changes,\n // if there's e.g. another 'hashchange' listener that stops the event\n // propagation, we make sure to always force-reset `this._blockHashChange`\n // after `HASH_CHANGE_TIMEOUT` milliseconds have passed.\n this._blockHashChange++;\n waitOnEventOrTimeout({\n target: window,\n name: 'hashchange',\n delay: HASH_CHANGE_TIMEOUT,\n }).then(() => {\n this._blockHashChange--;\n });\n }\n\n // Navigate to the new destination.\n let destination = state.destination;\n this._updateInternalState(destination, state.uid,\n /* removeTemporary = */ true);\n if (this._uid > this._maxUid) {\n this._maxUid = this._uid;\n }\n\n if (isValidRotation(destination.rotation)) {\n this.linkService.rotation = destination.rotation;\n }\n if (destination.dest) {\n this.linkService.navigateTo(destination.dest);\n } else if (destination.hash) {\n this.linkService.setHash(destination.hash);\n } else if (destination.page) {\n // Fallback case; shouldn't be necessary, but better safe than sorry.\n this.linkService.page = destination.page;\n }\n\n // Since `PDFLinkService.navigateTo` is asynchronous, we thus defer the\n // resetting of `this._popStateInProgress` slightly.\n Promise.resolve().then(() => {\n this._popStateInProgress = false;\n });\n }\n\n /**\n * @private\n */\n _bindEvents() {\n let { _boundEvents, eventBus, } = this;\n\n _boundEvents.updateViewarea = this._updateViewarea.bind(this);\n _boundEvents.popState = this._popState.bind(this);\n _boundEvents.pageHide = (evt) => {\n // Attempt to push the `this._position` into the browser history when\n // navigating away from the document. This is *only* done if the history\n // is empty/temporary, since otherwise an existing browser history entry\n // will end up being overwritten (given that new entries cannot be pushed\n // into the browser history when the 'unload' event has already fired).\n if (!this._destination || this._destination.temporary) {\n this._tryPushCurrentPosition();\n }\n };\n\n eventBus.on('updateviewarea', _boundEvents.updateViewarea);\n window.addEventListener('popstate', _boundEvents.popState);\n window.addEventListener('pagehide', _boundEvents.pageHide);\n }\n}\n\nfunction isDestHashesEqual(destHash, pushHash) {\n if (typeof destHash !== 'string' || typeof pushHash !== 'string') {\n return false;\n }\n if (destHash === pushHash) {\n return true;\n }\n let { nameddest, } = parseQueryString(destHash);\n if (nameddest === pushHash) {\n return true;\n }\n return false;\n}\n\nfunction isDestArraysEqual(firstDest, secondDest) {\n function isEntryEqual(first, second) {\n if (typeof first !== typeof second) {\n return false;\n }\n if (first instanceof Array || second instanceof Array) {\n return false;\n }\n if (first !== null && typeof first === 'object' && second !== null) {\n if (Object.keys(first).length !== Object.keys(second).length) {\n return false;\n }\n for (let key in first) {\n if (!isEntryEqual(first[key], second[key])) {\n return false;\n }\n }\n return true;\n }\n return first === second || (Number.isNaN(first) && Number.isNaN(second));\n }\n\n if (!(firstDest instanceof Array && secondDest instanceof Array)) {\n return false;\n }\n if (firstDest.length !== secondDest.length) {\n return false;\n }\n for (let i = 0, ii = firstDest.length; i < ii; i++) {\n if (!isEntryEqual(firstDest[i], secondDest[i])) {\n return false;\n }\n }\n return true;\n}\n\nexport {\n PDFHistory,\n isDestHashesEqual,\n isDestArraysEqual,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_history.js","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlet compatibilityParams = Object.create(null);\nif (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n const userAgent =\n (typeof navigator !== 'undefined' && navigator.userAgent) || '';\n const isAndroid = /Android/.test(userAgent);\n const isIE = /Trident/.test(userAgent);\n const isIOS = /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent);\n\n // Disable fullscreen support for certain problematic configurations.\n // Support: IE11+ (when embedded).\n (function checkFullscreenSupport() {\n if (isIE && window.parent !== window) {\n compatibilityParams.disableFullscreen = true;\n }\n })();\n\n // Limit canvas size to 5 mega-pixels on mobile.\n // Support: Android, iOS\n (function checkCanvasSizeLimitation() {\n if (isIOS || isAndroid) {\n compatibilityParams.maxCanvasPixels = 5242880;\n }\n })();\n}\nconst viewerCompatibilityParams = Object.freeze(compatibilityParams);\n\nexport {\n viewerCompatibilityParams,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/viewer_compatibility.js","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseViewer } from './base_viewer';\nimport { scrollIntoView } from './ui_utils';\nimport { shadow } from 'pdfjs-lib';\n\nclass PDFSinglePageViewer extends BaseViewer {\n constructor(options) {\n super(options);\n\n this.eventBus.on('pagesinit', (evt) => {\n // Since the pages are placed in a `DocumentFragment`, make sure that\n // the current page becomes visible upon loading of the document.\n this._ensurePageViewVisible();\n });\n }\n\n get _setDocumentViewerElement() {\n // Since we only want to display *one* page at a time when using the\n // `PDFSinglePageViewer`, we cannot append them to the `viewer` DOM element.\n // Instead, they are placed in a `DocumentFragment`, and only the current\n // page is displayed in the viewer (refer to `this._ensurePageViewVisible`).\n return shadow(this, '_setDocumentViewerElement', this._shadowViewer);\n }\n\n _resetView() {\n super._resetView();\n this._previousPageNumber = 1;\n this._shadowViewer = document.createDocumentFragment();\n }\n\n _ensurePageViewVisible() {\n let pageView = this._pages[this._currentPageNumber - 1];\n let previousPageView = this._pages[this._previousPageNumber - 1];\n\n let viewerNodes = this.viewer.childNodes;\n switch (viewerNodes.length) {\n case 0: // Should *only* occur on initial loading.\n this.viewer.appendChild(pageView.div);\n break;\n case 1: // The normal page-switching case.\n if (viewerNodes[0] !== previousPageView.div) {\n throw new Error(\n '_ensurePageViewVisible: Unexpected previously visible page.');\n }\n if (pageView === previousPageView) {\n break; // The correct page is already visible.\n }\n // Switch visible pages, and reset the viewerContainer scroll position.\n this._shadowViewer.appendChild(previousPageView.div);\n this.viewer.appendChild(pageView.div);\n\n this.container.scrollTop = 0;\n break;\n default:\n throw new Error(\n '_ensurePageViewVisible: Only one page should be visible at a time.');\n }\n this._previousPageNumber = this._currentPageNumber;\n }\n\n _scrollUpdate() {\n if (this._updateScrollDown) {\n this._updateScrollDown();\n }\n super._scrollUpdate();\n }\n\n _scrollIntoView({ pageDiv, pageSpot = null, pageNumber = null, }) {\n if (pageNumber) { // Ensure that `this._currentPageNumber` is correct.\n this._setCurrentPageNumber(pageNumber);\n }\n let scrolledDown = this._currentPageNumber >= this._previousPageNumber;\n let previousLocation = this._location;\n this._ensurePageViewVisible();\n\n scrollIntoView(pageDiv, pageSpot);\n\n // Since scrolling is tracked using `requestAnimationFrame`, update the\n // scroll direction during the next `this._scrollUpdate` invocation.\n this._updateScrollDown = () => {\n this.scroll.down = scrolledDown;\n delete this._updateScrollDown;\n };\n // If the scroll position doesn't change as a result of the `scrollIntoView`\n // call, ensure that rendering always occurs to avoid showing a blank page.\n setTimeout(() => {\n if (this._location === previousLocation) {\n if (this._updateScrollDown) {\n this._updateScrollDown();\n }\n this.update();\n }\n }, 0);\n }\n\n _getVisiblePages() {\n if (!this.pagesCount) {\n return { views: [], };\n }\n let pageView = this._pages[this._currentPageNumber - 1];\n // NOTE: Compute the `x` and `y` properties of the current view,\n // since `this._updateLocation` depends of them being available.\n let element = pageView.div;\n\n let view = {\n id: pageView.id,\n x: element.offsetLeft + element.clientLeft,\n y: element.offsetTop + element.clientTop,\n view: pageView,\n };\n return { first: view, last: view, views: [view], };\n }\n\n update() {\n let visible = this._getVisiblePages();\n let visiblePages = visible.views, numVisiblePages = visiblePages.length;\n\n if (numVisiblePages === 0) {\n return;\n }\n this._resizeBuffer(numVisiblePages);\n\n this.renderingQueue.renderHighestPriority(visible);\n\n this._updateLocation(visible.first);\n this.eventBus.dispatch('updateviewarea', {\n source: this,\n location: this._location,\n });\n }\n}\n\nexport {\n PDFSinglePageViewer,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_single_page_viewer.js","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getVisibleElements, scrollIntoView } from './ui_utils';\nimport { BaseViewer } from './base_viewer';\nimport { shadow } from 'pdfjs-lib';\n\nclass PDFViewer extends BaseViewer {\n get _setDocumentViewerElement() {\n return shadow(this, '_setDocumentViewerElement', this.viewer);\n }\n\n _scrollIntoView({ pageDiv, pageSpot = null, }) {\n scrollIntoView(pageDiv, pageSpot);\n }\n\n _getVisiblePages() {\n if (!this.isInPresentationMode) {\n return getVisibleElements(this.container, this._pages, true);\n }\n // The algorithm in getVisibleElements doesn't work in all browsers and\n // configurations when presentation mode is active.\n let currentPage = this._pages[this._currentPageNumber - 1];\n let visible = [{ id: currentPage.id, view: currentPage, }];\n return { first: currentPage, last: currentPage, views: visible, };\n }\n\n update() {\n let visible = this._getVisiblePages();\n let visiblePages = visible.views, numVisiblePages = visiblePages.length;\n\n if (numVisiblePages === 0) {\n return;\n }\n this._resizeBuffer(numVisiblePages);\n\n this.renderingQueue.renderHighestPriority(visible);\n\n let currentId = this._currentPageNumber;\n let stillFullyVisible = false;\n\n for (let i = 0; i < numVisiblePages; ++i) {\n let page = visiblePages[i];\n\n if (page.percent < 100) {\n break;\n }\n if (page.id === currentId) {\n stillFullyVisible = true;\n break;\n }\n }\n\n if (!stillFullyVisible) {\n currentId = visiblePages[0].id;\n }\n if (!this.isInPresentationMode) {\n this._setCurrentPageNumber(currentId);\n }\n\n this._updateLocation(visible.first);\n this.eventBus.dispatch('updateviewarea', {\n source: this,\n location: this._location,\n });\n }\n}\n\nexport {\n PDFViewer,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_viewer.js"],"sourceRoot":""}
|
1
|
+
{"version":3,"sources":["webpack://pdfjs-dist/web/pdf_viewer/webpack/universalModuleDefinition","webpack://pdfjs-dist/web/pdf_viewer/webpack/bootstrap","webpack://pdfjs-dist/web/pdf_viewer/web/pdf_viewer.component.js","webpack://pdfjs-dist/web/pdf_viewer/web/annotation_layer_builder.js","webpack://pdfjs-dist/web/pdf_viewer/web/pdfjs.js","webpack://pdfjs-dist/web/pdf_viewer/web/ui_utils.js","webpack://pdfjs-dist/web/pdf_viewer/node_modules/@babel/runtime/regenerator/index.js","webpack://pdfjs-dist/web/pdf_viewer/node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js","webpack://pdfjs-dist/web/pdf_viewer/node_modules/webpack/buildin/module.js","webpack://pdfjs-dist/web/pdf_viewer/web/pdf_link_service.js","webpack://pdfjs-dist/web/pdf_viewer/web/text_layer_builder.js","webpack://pdfjs-dist/web/pdf_viewer/web/download_manager.js","webpack://pdfjs-dist/web/pdf_viewer/web/genericl10n.js","webpack://pdfjs-dist/web/pdf_viewer/external/webL10n/l10n.js","webpack://pdfjs-dist/web/pdf_viewer/web/pdf_find_controller.js","webpack://pdfjs-dist/web/pdf_viewer/web/pdf_find_utils.js","webpack://pdfjs-dist/web/pdf_viewer/web/pdf_history.js","webpack://pdfjs-dist/web/pdf_viewer/web/pdf_page_view.js","webpack://pdfjs-dist/web/pdf_viewer/web/pdf_rendering_queue.js","webpack://pdfjs-dist/web/pdf_viewer/web/viewer_compatibility.js","webpack://pdfjs-dist/web/pdf_viewer/web/pdf_single_page_viewer.js","webpack://pdfjs-dist/web/pdf_viewer/web/base_viewer.js","webpack://pdfjs-dist/web/pdf_viewer/web/pdf_viewer.js"],"names":["pdfjsVersion","pdfjsBuild","getGlobalEventBus","constructor","imageResourcesPath","renderInteractiveForms","l10n","render","intent","annotations","parameters","viewport","dontFlip","div","page","linkService","downloadManager","AnnotationLayer","document","createAnnotationLayerBuilder","pageDiv","pdfPage","window","pdfjsLib","__non_webpack_require__","module","CSS_UNITS","DEFAULT_SCALE_VALUE","DEFAULT_SCALE","MIN_SCALE","MAX_SCALE","UNKNOWN_SCALE","MAX_AUTO_SCALE","SCROLLBAR_PADDING","VERTICAL_PADDING","PresentationModeState","UNKNOWN","NORMAL","CHANGING","FULLSCREEN","RendererType","CANVAS","SVG","TextLayerMode","DISABLE","ENABLE","ENABLE_ENHANCE","ScrollMode","VERTICAL","HORIZONTAL","WRAPPED","SpreadMode","NONE","ODD","EVEN","name","args","NullL10n","formatL10nValue","devicePixelRatio","backingStoreRatio","ctx","pixelRatio","sx","sy","scaled","skipOverflowHiddenElements","parent","element","console","offsetY","offsetX","getComputedStyle","spot","debounceScroll","rAF","currentX","viewAreaElement","lastX","state","currentY","lastY","callback","right","down","_eventHandler","parts","query","params","Object","i","ii","param","key","value","decodeURIComponent","minIndex","maxIndex","items","condition","currentIndex","currentItem","Math","xinv","limit","x_","x","a","b","c","d","p","q","result","r","changeOrientation","rotate","width","height","index","elt","views","pageTop","sortByVisibility","horizontal","top","scrollEl","bottom","left","view","elementBottom","elementRight","visible","numViews","firstVisibleElementInd","binarySearchFirstItem","backtrackBeforeAllVisibleElements","lastEdge","currentWidth","currentHeight","viewWidth","viewHeight","viewRight","viewBottom","hiddenHeight","hiddenWidth","percent","id","y","first","last","pc","evt","url","defaultFilename","isDataSchema","reURI","reFilename","splitURI","suggestedFilename","delta","angle","MOUSE_DOM_DELTA_PIXEL_MODE","MOUSE_DOM_DELTA_LINE_MODE","MOUSE_PIXELS_PER_LINE","MOUSE_LINES_PER_PAGE","Number","mode","size","WaitOnType","EVENT","TIMEOUT","delay","target","clearTimeout","resolve","eventHandler","handler","timeoutHandler","timeout","setTimeout","animationStarted","dispatchToDOM","on","eventListeners","off","dispatch","Array","listener","_dispatchDOMEvent","details","obj","event","globalEventBus","units","progressSize","setWidth","container","viewer","scrollbarWidth","isNaN","clamp","moved","len","arr","write","read","require","runtime","Op","hasOwn","$Symbol","iteratorSymbol","asyncIteratorSymbol","toStringTagSymbol","protoGenerator","outerFn","generator","context","tryLocsList","makeInvokeMethod","exports","type","arg","fn","GenStateSuspendedStart","GenStateSuspendedYield","GenStateExecuting","GenStateCompleted","ContinueSentinel","IteratorPrototype","getProto","NativeIteratorPrototype","values","Gp","GeneratorFunctionPrototype","Generator","GeneratorFunction","prototype","ctor","genFun","__await","record","tryCatch","reject","invoke","previousPromise","callInvokeWithMethodAndArg","defineIteratorMethods","AsyncIterator","iter","wrap","method","doneResult","delegate","delegateResult","maybeInvokeDelegate","done","info","entry","tryLoc","locs","keys","next","iteratorMethod","iterable","Context","reset","stop","rootEntry","rootRecord","dispatchException","handle","hasCatch","hasFinally","abrupt","finallyEntry","complete","finish","resetTryEntry","thrown","delegateYield","iterator","resultName","nextLoc","regeneratorRuntime","Function","enumerable","get","externalLinkTarget","externalLinkRel","eventBus","setDocument","baseUrl","setViewer","setHistory","navigateTo","goToDestination","destRef","explicitDest","pageNumber","pageIndex","namedDest","destArray","data","getDestinationHash","escape","str","JSON","getAnchorUrl","setHash","hash","parseQueryString","source","phraseSearch","zoomArgs","zoomArg","zoomArgNumber","parseFloat","dest","allowNegativeOffset","unescape","isValidExplicitDestination","executeNamedAction","action","cachePageRef","refStr","pageRef","_cachedPageNumber","isPageVisible","destLength","allowNull","zoom","EXPAND_DIVS_TIMEOUT","findController","enhanceTextSelection","endOfContent","numTextDivs","textLayerFrag","textContent","textContentStream","textDivs","textContentItemsStr","setTextContentStream","setTextContent","_convertMatches","iIndex","end","queryLen","m","mm","matches","matchIdx","match","begin","divIdx","offset","matchesLength","_renderMatches","isSelectedPage","pageIdx","selectedMatchIdx","highlightAll","prevEnd","infinity","appendTextToDiv","content","node","span","i0","i1","isSelected","highlightSuffix","matchIndex","beginText","n0","n1","clearedUntilDivIdx","n","pageMatches","pageMatchesLength","expandDivsTimer","adjustTop","divBounds","createTextLayerBuilder","textLayerDiv","DISABLE_CREATE_OBJECT_URL","apiCompatibilityParams","disableCreateObjectURL","downloadUrl","createValidAbsoluteUrl","download","downloadData","navigator","blobUrl","createObjectURL","URL","webL10n","gL10nData","gTextData","gTextProp","gLanguage","gMacros","gReadyState","gAsyncResourceLoading","script","l10nId","l10nArgs","evtObject","onSuccess","onFailure","xhr","baseURL","href","text","dictionary","reBlank","reComment","reSection","reImport","reSplit","entries","rawText","currentLang","genericLang","lang","skipLang","parsedRawLinesCallback","line","loadImport","tmp","evalString","nextEntry","xhrLoadText","parseRawLines","parsedPropertiesCallback","parseProperties","prop","successCallback","clear","langLinks","getL10nResourceLinks","langCount","dict","getL10nDictionary","defaultLocale","anyCaseLang","fireL10nReadyEvent","onResourceLoaded","gResourceCount","link","parseResource","resource","locales2rules","list","start","pluralRules","isBetween","getPluralRules","rv","substIndexes","substArguments","reIndex","reMatch","macroName","paramName","macro","reArgs","getL10nAttributes","getL10nData","getChildElementCount","children","found","l","textNode","count","getTranslatableChildren","elementCount","translateElement","fallback","getData","getText","getLanguage","setLanguage","loadLocale","getDirection","rtlList","shortCode","translate","getReadyState","ready","FindState","FOUND","NOT_FOUND","PENDING","FIND_TIMEOUT","MATCH_SCROLL_OFFSET_TOP","MATCH_SCROLL_OFFSET_LEFT","CHARACTERS_TO_NORMALIZE","normalizationRegex","replace","executeCommand","pdfDocument","cmd","findbarClosed","pendingTimeout","scrollMatchIntoView","scrollIntoView","wrapped","_shouldDirtyMatch","_prepareMatches","currentElem","matchesWithLength","nextElem","prevElem","isSubTerm","_isEntireWord","startIdx","getCharacterType","endIdx","_calculatePhraseMatch","pageContent","entireWord","_calculateWordMatch","queryArray","subquery","subqueryLen","matchLength","skipped","_calculateMatch","pageMatchesCount","promise","Promise","extractTextCapability","normalizeWhitespace","textItems","strBuf","j","jj","normalize","reason","_updatePage","previous","currentPageIndex","numPages","numPageMatches","_matchesReady","numMatches","_advanceOffsetPage","_updateMatch","previousPage","_onFindBarClose","current","total","matchesCount","_updateUIState","CharacterType","SPACE","ALPHA_LETTER","PUNCT","HAN_LETTER","KATAKANA_LETTER","HIRAGANA_LETTER","HALFWIDTH_KATAKANA_LETTER","THAI_LETTER","charCode","isAlphabeticalScript","isAscii","isAsciiSpace","isAsciiAlpha","isAsciiDigit","isThai","isHan","isKatakana","isHiragana","isHalfwidthKatakana","HASH_CHANGE_TIMEOUT","POSITION_UPDATED_THRESHOLD","UPDATE_VIEWAREA_TIMEOUT","getCurrentHash","rotation","resetHistory","updateUrl","initialize","reInitialized","parseCurrentHash","destination","push","forceReplace","isDestArraysEqual","_pushOrReplaceState","shouldReplace","newState","fingerprint","uid","newUrl","temporary","_tryPushCurrentPosition","position","_isValidState","checkReload","performance","perfEntry","_updateInternalState","removeTemporary","_updateViewarea","location","_popState","newHash","hashChanged","waitOnEventOrTimeout","isValidRotation","_boundEvents","destHash","nameddest","second","isEntryEqual","firstDest","secondDest","MAX_CANVAS_PIXELS","viewerCompatibilityParams","options","defaultViewport","RenderingStates","setPdfPage","totalRotation","scale","removeFromDOM","_resetZoomLayer","zoomLayerCanvas","keepZoomLayer","keepAnnotations","childNodes","currentZoomLayerNode","currentAnnotationNode","update","cssTransform","isScalingRestricted","outputScale","cancelRendering","redrawAnnotations","relativeRotation","absRotation","scaleX","scaleY","textLayerViewport","textRelativeRotation","textAbsRotation","transX","transY","getPagePoint","canvasWrapper","textLayer","renderContinueCallback","cont","finishPaintTask","paintTask","error","resultPromise","readableStream","paintOnCanvas","renderCapability","onRenderContinue","cancel","renderTask","canvas","isCanvasHidden","showCanvas","alpha","getOutputScale","actualSizeViewport","pixelsInViewport","maxScale","sfx","approximateFraction","sfy","roundToDivide","transform","renderContext","canvasContext","enableWebGL","paintOnSvg","cancelled","ensureNotCancelled","opList","svgGfx","svg","wrapper","setPageLabel","CLEANUP_TIMEOUT","INITIAL","RUNNING","PAUSED","FINISHED","setThumbnailViewer","isHighestPriority","renderHighestPriority","getHighestPriority","visibleViews","numVisible","nextPageIndex","previousPageIndex","isViewFinished","renderView","compatibilityParams","userAgent","isAndroid","isIOS","pageView","previousPageView","viewerNodes","pageSpot","_scrollIntoView","scrolledDown","_updateHelper","shadow","DEFAULT_CACHE_SIZE","pageIdsToKeep","iMax","pagesToKeep","moveToEndOfArray","newScale","watchScroll","getPageView","_setCurrentPageNumber","resetCurrentPageView","val","pageLabel","pagesCount","pagesCapability","onePageRenderedCapability","bindOnAfterAndBeforeDraw","firstPagePromise","pageNum","textLayerFactory","renderingQueue","textLayerMode","annotationLayerFactory","renderer","useOnlyCssZoom","maxCanvasPixels","getPagesLeft","setPageLabels","labels","label","_setScaleUpdatePages","noScroll","preset","newValue","isSameScale","presetValue","_setScale","currentPage","noPadding","hPadding","vPadding","pageWidthScale","pageHeightScale","horizontalScale","isPortraitOrientation","scrollPageIntoView","pageWidth","pageHeight","widthScale","heightScale","boundingRect","_updateLocation","currentScale","currentScaleValue","normalizedScaleValue","firstPage","pdfOpenParams","currentPageView","topLeft","intLeft","intTop","visiblePages","numVisiblePages","newCacheSize","containsElement","getVisibleElements","_ensurePdfPageLoaded","forceRendering","currentlyVisiblePages","scrollAhead","pagesOverview","isFirstPagePortrait","_updateScrollMode","scrollMode","_updateSpreadMode","pages","parity","spread","pagesRotation","firstPageView","isValidScrollMode","isValidSpreadMode","scrollLeft","currentId","stillFullyVisible"],"mappings":"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","file":"pdf_viewer.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"pdfjs-dist/web/pdf_viewer\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"pdfjs-dist/web/pdf_viewer\"] = factory();\n\telse\n\t\troot[\"pdfjs-dist/web/pdf_viewer\"] = factory();\n})(this, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __w_pdfjs_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __w_pdfjs_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__w_pdfjs_require__.m = modules;\n\n \t// expose the module cache\n \t__w_pdfjs_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__w_pdfjs_require__.d = function(exports, name, getter) {\n \t\tif(!__w_pdfjs_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__w_pdfjs_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__w_pdfjs_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __w_pdfjs_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__w_pdfjs_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __w_pdfjs_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__w_pdfjs_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__w_pdfjs_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__w_pdfjs_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__w_pdfjs_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __w_pdfjs_require__(__w_pdfjs_require__.s = 0);\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* eslint-disable no-unused-vars */\n\nimport {\n AnnotationLayerBuilder, DefaultAnnotationLayerFactory\n} from './annotation_layer_builder.js';\nimport {\n DefaultTextLayerFactory, TextLayerBuilder\n} from './text_layer_builder.js';\nimport {\n EventBus, getGlobalEventBus, NullL10n, ProgressBar\n} from './ui_utils.js';\nimport { PDFLinkService, SimpleLinkService } from './pdf_link_service.js';\nimport { DownloadManager } from './download_manager.js';\nimport { GenericL10n } from './genericl10n.js';\nimport { PDFFindController } from './pdf_find_controller.js';\nimport { PDFHistory } from './pdf_history.js';\nimport { PDFPageView } from './pdf_page_view.js';\nimport { PDFSinglePageViewer } from './pdf_single_page_viewer';\nimport { PDFViewer } from './pdf_viewer.js';\n\nconst pdfjsVersion = PDFJSDev.eval('BUNDLE_VERSION');\nconst pdfjsBuild = PDFJSDev.eval('BUNDLE_BUILD');\n\n// For backwards compatibility, ensure that events are re-dispatched to the DOM.\ngetGlobalEventBus(/* dispatchToDOM = */ true);\n\nexport {\n PDFViewer,\n PDFSinglePageViewer,\n PDFPageView,\n PDFLinkService,\n SimpleLinkService,\n TextLayerBuilder,\n DefaultTextLayerFactory,\n AnnotationLayerBuilder,\n DefaultAnnotationLayerFactory,\n PDFHistory,\n PDFFindController,\n EventBus,\n DownloadManager,\n ProgressBar,\n GenericL10n,\n NullL10n,\n};\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnnotationLayer } from 'pdfjs-lib';\nimport { NullL10n } from './ui_utils';\nimport { SimpleLinkService } from './pdf_link_service';\n\n/**\n * @typedef {Object} AnnotationLayerBuilderOptions\n * @property {HTMLDivElement} pageDiv\n * @property {PDFPage} pdfPage\n * @property {string} imageResourcesPath - (optional) Path for image resources,\n * mainly for annotation icons. Include trailing slash.\n * @property {boolean} renderInteractiveForms\n * @property {IPDFLinkService} linkService\n * @property {DownloadManager} downloadManager\n * @property {IL10n} l10n - Localization service.\n */\n\nclass AnnotationLayerBuilder {\n /**\n * @param {AnnotationLayerBuilderOptions} options\n */\n constructor({ pageDiv, pdfPage, linkService, downloadManager,\n imageResourcesPath = '', renderInteractiveForms = false,\n l10n = NullL10n, }) {\n this.pageDiv = pageDiv;\n this.pdfPage = pdfPage;\n this.linkService = linkService;\n this.downloadManager = downloadManager;\n this.imageResourcesPath = imageResourcesPath;\n this.renderInteractiveForms = renderInteractiveForms;\n this.l10n = l10n;\n\n this.div = null;\n this._cancelled = false;\n }\n\n /**\n * @param {PageViewport} viewport\n * @param {string} intent (default value is 'display')\n */\n render(viewport, intent = 'display') {\n this.pdfPage.getAnnotations({ intent, }).then((annotations) => {\n if (this._cancelled) {\n return;\n }\n\n let parameters = {\n viewport: viewport.clone({ dontFlip: true, }),\n div: this.div,\n annotations,\n page: this.pdfPage,\n imageResourcesPath: this.imageResourcesPath,\n renderInteractiveForms: this.renderInteractiveForms,\n linkService: this.linkService,\n downloadManager: this.downloadManager,\n };\n\n if (this.div) {\n // If an annotationLayer already exists, refresh its children's\n // transformation matrices.\n AnnotationLayer.update(parameters);\n } else {\n // Create an annotation layer div and render the annotations\n // if there is at least one annotation.\n if (annotations.length === 0) {\n return;\n }\n this.div = document.createElement('div');\n this.div.className = 'annotationLayer';\n this.pageDiv.appendChild(this.div);\n parameters.div = this.div;\n\n AnnotationLayer.render(parameters);\n this.l10n.translate(this.div);\n }\n });\n }\n\n cancel() {\n this._cancelled = true;\n }\n\n hide() {\n if (!this.div) {\n return;\n }\n this.div.setAttribute('hidden', 'true');\n }\n}\n\n/**\n * @implements IPDFAnnotationLayerFactory\n */\nclass DefaultAnnotationLayerFactory {\n /**\n * @param {HTMLDivElement} pageDiv\n * @param {PDFPage} pdfPage\n * @param {string} imageResourcesPath - (optional) Path for image resources,\n * mainly for annotation icons. Include trailing slash.\n * @param {boolean} renderInteractiveForms\n * @param {IL10n} l10n\n * @returns {AnnotationLayerBuilder}\n */\n createAnnotationLayerBuilder(pageDiv, pdfPage, imageResourcesPath = '',\n renderInteractiveForms = false,\n l10n = NullL10n) {\n return new AnnotationLayerBuilder({\n pageDiv,\n pdfPage,\n imageResourcesPath,\n renderInteractiveForms,\n linkService: new SimpleLinkService(),\n l10n,\n });\n }\n}\n\nexport {\n AnnotationLayerBuilder,\n DefaultAnnotationLayerFactory,\n};\n","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals module, __non_webpack_require__ */\n\n'use strict';\n\nlet pdfjsLib;\nif (typeof window !== 'undefined' && window['pdfjs-dist/build/pdf']) {\n pdfjsLib = window['pdfjs-dist/build/pdf'];\n} else {\n pdfjsLib = __non_webpack_require__('../build/pdf.js');\n}\nmodule.exports = pdfjsLib;\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CSS_UNITS = 96.0 / 72.0;\nconst DEFAULT_SCALE_VALUE = 'auto';\nconst DEFAULT_SCALE = 1.0;\nconst MIN_SCALE = 0.10;\nconst MAX_SCALE = 10.0;\nconst UNKNOWN_SCALE = 0;\nconst MAX_AUTO_SCALE = 1.25;\nconst SCROLLBAR_PADDING = 40;\nconst VERTICAL_PADDING = 5;\n\nconst PresentationModeState = {\n UNKNOWN: 0,\n NORMAL: 1,\n CHANGING: 2,\n FULLSCREEN: 3,\n};\n\nconst RendererType = {\n CANVAS: 'canvas',\n SVG: 'svg',\n};\n\nconst TextLayerMode = {\n DISABLE: 0,\n ENABLE: 1,\n ENABLE_ENHANCE: 2,\n};\n\nconst ScrollMode = {\n UNKNOWN: -1,\n VERTICAL: 0, // Default value.\n HORIZONTAL: 1,\n WRAPPED: 2,\n};\n\nconst SpreadMode = {\n UNKNOWN: -1,\n NONE: 0, // Default value.\n ODD: 1,\n EVEN: 2,\n};\n\n// Replaces {{arguments}} with their values.\nfunction formatL10nValue(text, args) {\n if (!args) {\n return text;\n }\n return text.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (all, name) => {\n return (name in args ? args[name] : '{{' + name + '}}');\n });\n}\n\n/**\n * No-op implementation of the localization service.\n * @implements {IL10n}\n */\nlet NullL10n = {\n async getLanguage() {\n return 'en-us';\n },\n\n async getDirection() {\n return 'ltr';\n },\n\n async get(property, args, fallback) {\n return formatL10nValue(fallback, args);\n },\n\n async translate(element) { },\n};\n\n/**\n * Returns scale factor for the canvas. It makes sense for the HiDPI displays.\n * @return {Object} The object with horizontal (sx) and vertical (sy)\n scales. The scaled property is set to false if scaling is\n not required, true otherwise.\n */\nfunction getOutputScale(ctx) {\n let devicePixelRatio = window.devicePixelRatio || 1;\n let backingStoreRatio = ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio || 1;\n let pixelRatio = devicePixelRatio / backingStoreRatio;\n return {\n sx: pixelRatio,\n sy: pixelRatio,\n scaled: pixelRatio !== 1,\n };\n}\n\n/**\n * Scrolls specified element into view of its parent.\n * @param {Object} element - The element to be visible.\n * @param {Object} spot - An object with optional top and left properties,\n * specifying the offset from the top left edge.\n * @param {boolean} skipOverflowHiddenElements - Ignore elements that have\n * the CSS rule `overflow: hidden;` set. The default is false.\n */\nfunction scrollIntoView(element, spot, skipOverflowHiddenElements = false) {\n // Assuming offsetParent is available (it's not available when viewer is in\n // hidden iframe or object). We have to scroll: if the offsetParent is not set\n // producing the error. See also animationStarted.\n let parent = element.offsetParent;\n if (!parent) {\n console.error('offsetParent is not set -- cannot scroll');\n return;\n }\n let offsetY = element.offsetTop + element.clientTop;\n let offsetX = element.offsetLeft + element.clientLeft;\n while ((parent.clientHeight === parent.scrollHeight &&\n parent.clientWidth === parent.scrollWidth) ||\n (skipOverflowHiddenElements &&\n getComputedStyle(parent).overflow === 'hidden')) {\n if (parent.dataset._scaleY) {\n offsetY /= parent.dataset._scaleY;\n offsetX /= parent.dataset._scaleX;\n }\n offsetY += parent.offsetTop;\n offsetX += parent.offsetLeft;\n parent = parent.offsetParent;\n if (!parent) {\n return; // no need to scroll\n }\n }\n if (spot) {\n if (spot.top !== undefined) {\n offsetY += spot.top;\n }\n if (spot.left !== undefined) {\n offsetX += spot.left;\n parent.scrollLeft = offsetX;\n }\n }\n parent.scrollTop = offsetY;\n}\n\n/**\n * Helper function to start monitoring the scroll event and converting them into\n * PDF.js friendly one: with scroll debounce and scroll direction.\n */\nfunction watchScroll(viewAreaElement, callback) {\n let debounceScroll = function(evt) {\n if (rAF) {\n return;\n }\n // schedule an invocation of scroll for next animation frame.\n rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\n rAF = null;\n\n let currentX = viewAreaElement.scrollLeft;\n let lastX = state.lastX;\n if (currentX !== lastX) {\n state.right = currentX > lastX;\n }\n state.lastX = currentX;\n let currentY = viewAreaElement.scrollTop;\n let lastY = state.lastY;\n if (currentY !== lastY) {\n state.down = currentY > lastY;\n }\n state.lastY = currentY;\n callback(state);\n });\n };\n\n let state = {\n right: true,\n down: true,\n lastX: viewAreaElement.scrollLeft,\n lastY: viewAreaElement.scrollTop,\n _eventHandler: debounceScroll,\n };\n\n let rAF = null;\n viewAreaElement.addEventListener('scroll', debounceScroll, true);\n return state;\n}\n\n/**\n * Helper function to parse query string (e.g. ?param1=value&parm2=...).\n */\nfunction parseQueryString(query) {\n let parts = query.split('&');\n let params = Object.create(null);\n for (let i = 0, ii = parts.length; i < ii; ++i) {\n let param = parts[i].split('=');\n let key = param[0].toLowerCase();\n let value = param.length > 1 ? param[1] : null;\n params[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n return params;\n}\n\n/**\n * Use binary search to find the index of the first item in a given array which\n * passes a given condition. The items are expected to be sorted in the sense\n * that if the condition is true for one item in the array, then it is also true\n * for all following items.\n *\n * @returns {Number} Index of the first array element to pass the test,\n * or |items.length| if no such element exists.\n */\nfunction binarySearchFirstItem(items, condition) {\n let minIndex = 0;\n let maxIndex = items.length - 1;\n\n if (items.length === 0 || !condition(items[maxIndex])) {\n return items.length;\n }\n if (condition(items[minIndex])) {\n return minIndex;\n }\n\n while (minIndex < maxIndex) {\n let currentIndex = (minIndex + maxIndex) >> 1;\n let currentItem = items[currentIndex];\n if (condition(currentItem)) {\n maxIndex = currentIndex;\n } else {\n minIndex = currentIndex + 1;\n }\n }\n return minIndex; /* === maxIndex */\n}\n\n/**\n * Approximates float number as a fraction using Farey sequence (max order\n * of 8).\n * @param {number} x - Positive float number.\n * @returns {Array} Estimated fraction: the first array item is a numerator,\n * the second one is a denominator.\n */\nfunction approximateFraction(x) {\n // Fast paths for int numbers or their inversions.\n if (Math.floor(x) === x) {\n return [x, 1];\n }\n let xinv = 1 / x;\n let limit = 8;\n if (xinv > limit) {\n return [1, limit];\n } else if (Math.floor(xinv) === xinv) {\n return [1, xinv];\n }\n\n let x_ = x > 1 ? xinv : x;\n // a/b and c/d are neighbours in Farey sequence.\n let a = 0, b = 1, c = 1, d = 1;\n // Limiting search to order 8.\n while (true) {\n // Generating next term in sequence (order of q).\n let p = a + c, q = b + d;\n if (q > limit) {\n break;\n }\n if (x_ <= p / q) {\n c = p; d = q;\n } else {\n a = p; b = q;\n }\n }\n let result;\n // Select closest of the neighbours to x.\n if (x_ - a / b < c / d - x_) {\n result = x_ === x ? [a, b] : [b, a];\n } else {\n result = x_ === x ? [c, d] : [d, c];\n }\n return result;\n}\n\nfunction roundToDivide(x, div) {\n let r = x % div;\n return r === 0 ? x : Math.round(x - r + div);\n}\n\n/**\n * Gets the size of the specified page, converted from PDF units to inches.\n * @param {Object} An Object containing the properties: {Array} `view`,\n * {number} `userUnit`, and {number} `rotate`.\n * @return {Object} An Object containing the properties: {number} `width`\n * and {number} `height`, given in inches.\n */\nfunction getPageSizeInches({ view, userUnit, rotate, }) {\n const [x1, y1, x2, y2] = view;\n // We need to take the page rotation into account as well.\n const changeOrientation = rotate % 180 !== 0;\n\n const width = (x2 - x1) / 72 * userUnit;\n const height = (y2 - y1) / 72 * userUnit;\n\n return {\n width: (changeOrientation ? height : width),\n height: (changeOrientation ? width : height),\n };\n}\n\n/**\n * Helper function for getVisibleElements.\n *\n * @param {number} index - initial guess at the first visible element\n * @param {Array} views - array of pages, into which `index` is an index\n * @param {number} top - the top of the scroll pane\n * @returns {number} less than or equal to `index` that is definitely at or\n * before the first visible element in `views`, but not by too much. (Usually,\n * this will be the first element in the first partially visible row in\n * `views`, although sometimes it goes back one row further.)\n */\nfunction backtrackBeforeAllVisibleElements(index, views, top) {\n // binarySearchFirstItem's assumption is that the input is ordered, with only\n // one index where the conditions flips from false to true: [false ...,\n // true...]. With vertical scrolling and spreads, it is possible to have\n // [false ..., true, false, true ...]. With wrapped scrolling we can have a\n // similar sequence, with many more mixed true and false in the middle.\n //\n // So there is no guarantee that the binary search yields the index of the\n // first visible element. It could have been any of the other visible elements\n // that were preceded by a hidden element.\n\n // Of course, if either this element or the previous (hidden) element is also\n // the first element, there's nothing to worry about.\n if (index < 2) {\n return index;\n }\n\n // That aside, the possible cases are represented below.\n //\n // **** = fully hidden\n // A*B* = mix of partially visible and/or hidden pages\n // CDEF = fully visible\n //\n // (1) Binary search could have returned A, in which case we can stop.\n // (2) Binary search could also have returned B, in which case we need to\n // check the whole row.\n // (3) Binary search could also have returned C, in which case we need to\n // check the whole previous row.\n //\n // There's one other possibility:\n //\n // **** = fully hidden\n // ABCD = mix of fully and/or partially visible pages\n //\n // (4) Binary search could only have returned A.\n\n // Initially assume that we need to find the beginning of the current row\n // (case 1, 2, or 4), which means finding a page that is above the current\n // page's top. If the found page is partially visible, we're definitely not in\n // case 3, and this assumption is correct.\n let elt = views[index].div;\n let pageTop = elt.offsetTop + elt.clientTop;\n\n if (pageTop >= top) {\n // The found page is fully visible, so we're actually either in case 3 or 4,\n // and unfortunately we can't tell the difference between them without\n // scanning the entire previous row, so we just conservatively assume that\n // we do need to backtrack to that row. In both cases, the previous page is\n // in the previous row, so use its top instead.\n elt = views[index - 1].div;\n pageTop = elt.offsetTop + elt.clientTop;\n }\n\n // Now we backtrack to the first page that still has its bottom below\n // `pageTop`, which is the top of a page in the first visible row (unless\n // we're in case 4, in which case it's the row before that).\n // `index` is found by binary search, so the page at `index - 1` is\n // invisible and we can start looking for potentially visible pages from\n // `index - 2`. (However, if this loop terminates on its first iteration,\n // which is the case when pages are stacked vertically, `index` should remain\n // unchanged, so we use a distinct loop variable.)\n for (let i = index - 2; i >= 0; --i) {\n elt = views[i].div;\n if (elt.offsetTop + elt.clientTop + elt.clientHeight <= pageTop) {\n // We have reached the previous row, so stop now.\n // This loop is expected to terminate relatively quickly because the\n // number of pages per row is expected to be small.\n break;\n }\n index = i;\n }\n return index;\n}\n\n/**\n * Generic helper to find out what elements are visible within a scroll pane.\n *\n * Well, pretty generic. There are some assumptions placed on the elements\n * referenced by `views`:\n * - If `horizontal`, no left of any earlier element is to the right of the\n * left of any later element.\n * - Otherwise, `views` can be split into contiguous rows where, within a row,\n * no top of any element is below the bottom of any other element, and\n * between rows, no bottom of any element in an earlier row is below the\n * top of any element in a later row.\n *\n * (Here, top, left, etc. all refer to the padding edge of the element in\n * question. For pages, that ends up being equivalent to the bounding box of the\n * rendering canvas. Earlier and later refer to index in `views`, not page\n * layout.)\n *\n * @param scrollEl {HTMLElement} - a container that can possibly scroll\n * @param views {Array} - objects with a `div` property that contains an\n * HTMLElement, which should all be descendents of `scrollEl` satisfying the\n * above layout assumptions\n * @param sortByVisibility {boolean} - if true, the returned elements are sorted\n * in descending order of the percent of their padding box that is visible\n * @param horizontal {boolean} - if true, the elements are assumed to be laid\n * out horizontally instead of vertically\n * @returns {Object} `{ first, last, views: [{ id, x, y, view, percent }] }`\n */\nfunction getVisibleElements(scrollEl, views, sortByVisibility = false,\n horizontal = false) {\n const top = scrollEl.scrollTop, bottom = top + scrollEl.clientHeight;\n const left = scrollEl.scrollLeft, right = left + scrollEl.clientWidth;\n\n // Throughout this \"generic\" function, comments will assume we're working with\n // PDF document pages, which is the most important and complex case. In this\n // case, the visible elements we're actually interested is the page canvas,\n // which is contained in a wrapper which adds no padding/border/margin, which\n // is itself contained in `view.div` which adds no padding (but does add a\n // border). So, as specified in this function's doc comment, this function\n // does all of its work on the padding edge of the provided views, starting at\n // offsetLeft/Top (which includes margin) and adding clientLeft/Top (which is\n // the border). Adding clientWidth/Height gets us the bottom-right corner of\n // the padding edge.\n function isElementBottomAfterViewTop(view) {\n const element = view.div;\n const elementBottom =\n element.offsetTop + element.clientTop + element.clientHeight;\n return elementBottom > top;\n }\n function isElementRightAfterViewLeft(view) {\n const element = view.div;\n const elementRight =\n element.offsetLeft + element.clientLeft + element.clientWidth;\n return elementRight > left;\n }\n\n const visible = [], numViews = views.length;\n let firstVisibleElementInd = numViews === 0 ? 0 :\n binarySearchFirstItem(views, horizontal ? isElementRightAfterViewLeft :\n isElementBottomAfterViewTop);\n\n // Please note the return value of the `binarySearchFirstItem` function when\n // no valid element is found (hence the `firstVisibleElementInd` check below).\n if (firstVisibleElementInd > 0 && firstVisibleElementInd < numViews &&\n !horizontal) {\n // In wrapped scrolling (or vertical scrolling with spreads), with some page\n // sizes, isElementBottomAfterViewTop doesn't satisfy the binary search\n // condition: there can be pages with bottoms above the view top between\n // pages with bottoms below. This function detects and corrects that error;\n // see it for more comments.\n firstVisibleElementInd =\n backtrackBeforeAllVisibleElements(firstVisibleElementInd, views, top);\n }\n\n // lastEdge acts as a cutoff for us to stop looping, because we know all\n // subsequent pages will be hidden.\n //\n // When using wrapped scrolling or vertical scrolling with spreads, we can't\n // simply stop the first time we reach a page below the bottom of the view;\n // the tops of subsequent pages on the same row could still be visible. In\n // horizontal scrolling, we don't have that issue, so we can stop as soon as\n // we pass `right`, without needing the code below that handles the -1 case.\n let lastEdge = horizontal ? right : -1;\n\n for (let i = firstVisibleElementInd; i < numViews; i++) {\n const view = views[i], element = view.div;\n const currentWidth = element.offsetLeft + element.clientLeft;\n const currentHeight = element.offsetTop + element.clientTop;\n const viewWidth = element.clientWidth, viewHeight = element.clientHeight;\n const viewRight = currentWidth + viewWidth;\n const viewBottom = currentHeight + viewHeight;\n\n if (lastEdge === -1) {\n // As commented above, this is only needed in non-horizontal cases.\n // Setting lastEdge to the bottom of the first page that is partially\n // visible ensures that the next page fully below lastEdge is on the\n // next row, which has to be fully hidden along with all subsequent rows.\n if (viewBottom >= bottom) {\n lastEdge = viewBottom;\n }\n } else if ((horizontal ? currentWidth : currentHeight) > lastEdge) {\n break;\n }\n\n if (viewBottom <= top || currentHeight >= bottom ||\n viewRight <= left || currentWidth >= right) {\n continue;\n }\n\n const hiddenHeight = Math.max(0, top - currentHeight) +\n Math.max(0, viewBottom - bottom);\n const hiddenWidth = Math.max(0, left - currentWidth) +\n Math.max(0, viewRight - right);\n const percent = ((viewHeight - hiddenHeight) * (viewWidth - hiddenWidth) *\n 100 / viewHeight / viewWidth) | 0;\n visible.push({\n id: view.id,\n x: currentWidth,\n y: currentHeight,\n view,\n percent,\n });\n }\n\n const first = visible[0], last = visible[visible.length - 1];\n\n if (sortByVisibility) {\n visible.sort(function(a, b) {\n let pc = a.percent - b.percent;\n if (Math.abs(pc) > 0.001) {\n return -pc;\n }\n return a.id - b.id; // ensure stability\n });\n }\n return { first, last, views: visible, };\n}\n\n/**\n * Event handler to suppress context menu.\n */\nfunction noContextMenuHandler(evt) {\n evt.preventDefault();\n}\n\nfunction isDataSchema(url) {\n let i = 0, ii = url.length;\n while (i < ii && url[i].trim() === '') {\n i++;\n }\n return url.substring(i, i + 5).toLowerCase() === 'data:';\n}\n\n/**\n * Returns the filename or guessed filename from the url (see issue 3455).\n * @param {string} url - The original PDF location.\n * @param {string} defaultFilename - The value returned if the filename is\n * unknown, or the protocol is unsupported.\n * @returns {string} Guessed PDF filename.\n */\nfunction getPDFFileNameFromURL(url, defaultFilename = 'document.pdf') {\n if (typeof url !== 'string') {\n return defaultFilename;\n }\n if (isDataSchema(url)) {\n console.warn('getPDFFileNameFromURL: ' +\n 'ignoring \"data:\" URL for performance reasons.');\n return defaultFilename;\n }\n const reURI = /^(?:(?:[^:]+:)?\\/\\/[^\\/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\n // SCHEME HOST 1.PATH 2.QUERY 3.REF\n // Pattern to get last matching NAME.pdf\n const reFilename = /[^\\/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n let splitURI = reURI.exec(url);\n let suggestedFilename = reFilename.exec(splitURI[1]) ||\n reFilename.exec(splitURI[2]) ||\n reFilename.exec(splitURI[3]);\n if (suggestedFilename) {\n suggestedFilename = suggestedFilename[0];\n if (suggestedFilename.includes('%')) {\n // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf\n try {\n suggestedFilename =\n reFilename.exec(decodeURIComponent(suggestedFilename))[0];\n } catch (ex) { // Possible (extremely rare) errors:\n // URIError \"Malformed URI\", e.g. for \"%AA.pdf\"\n // TypeError \"null has no properties\", e.g. for \"%2F.pdf\"\n }\n }\n }\n return suggestedFilename || defaultFilename;\n}\n\nfunction normalizeWheelEventDelta(evt) {\n let delta = Math.sqrt(evt.deltaX * evt.deltaX + evt.deltaY * evt.deltaY);\n let angle = Math.atan2(evt.deltaY, evt.deltaX);\n if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\n // All that is left-up oriented has to change the sign.\n delta = -delta;\n }\n\n const MOUSE_DOM_DELTA_PIXEL_MODE = 0;\n const MOUSE_DOM_DELTA_LINE_MODE = 1;\n const MOUSE_PIXELS_PER_LINE = 30;\n const MOUSE_LINES_PER_PAGE = 30;\n\n // Converts delta to per-page units\n if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) {\n delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) {\n delta /= MOUSE_LINES_PER_PAGE;\n }\n return delta;\n}\n\nfunction isValidRotation(angle) {\n return Number.isInteger(angle) && angle % 90 === 0;\n}\n\nfunction isValidScrollMode(mode) {\n return (Number.isInteger(mode) && Object.values(ScrollMode).includes(mode) &&\n mode !== ScrollMode.UNKNOWN);\n}\n\nfunction isValidSpreadMode(mode) {\n return (Number.isInteger(mode) && Object.values(SpreadMode).includes(mode) &&\n mode !== SpreadMode.UNKNOWN);\n}\n\nfunction isPortraitOrientation(size) {\n return size.width <= size.height;\n}\n\nconst WaitOnType = {\n EVENT: 'event',\n TIMEOUT: 'timeout',\n};\n\n/**\n * @typedef {Object} WaitOnEventOrTimeoutParameters\n * @property {Object} target - The event target, can for example be:\n * `window`, `document`, a DOM element, or an {EventBus} instance.\n * @property {string} name - The name of the event.\n * @property {number} delay - The delay, in milliseconds, after which the\n * timeout occurs (if the event wasn't already dispatched).\n */\n\n/**\n * Allows waiting for an event or a timeout, whichever occurs first.\n * Can be used to ensure that an action always occurs, even when an event\n * arrives late or not at all.\n *\n * @param {WaitOnEventOrTimeoutParameters}\n * @returns {Promise} A promise that is resolved with a {WaitOnType} value.\n */\nfunction waitOnEventOrTimeout({ target, name, delay = 0, }) {\n return new Promise(function(resolve, reject) {\n if (typeof target !== 'object' || !(name && typeof name === 'string') ||\n !(Number.isInteger(delay) && delay >= 0)) {\n throw new Error('waitOnEventOrTimeout - invalid parameters.');\n }\n\n function handler(type) {\n if (target instanceof EventBus) {\n target.off(name, eventHandler);\n } else {\n target.removeEventListener(name, eventHandler);\n }\n\n if (timeout) {\n clearTimeout(timeout);\n }\n resolve(type);\n }\n\n const eventHandler = handler.bind(null, WaitOnType.EVENT);\n if (target instanceof EventBus) {\n target.on(name, eventHandler);\n } else {\n target.addEventListener(name, eventHandler);\n }\n\n const timeoutHandler = handler.bind(null, WaitOnType.TIMEOUT);\n let timeout = setTimeout(timeoutHandler, delay);\n });\n}\n\n/**\n * Promise that is resolved when DOM window becomes visible.\n */\nlet animationStarted = new Promise(function (resolve) {\n if ((typeof PDFJSDev !== 'undefined' && PDFJSDev.test('LIB')) &&\n typeof window === 'undefined') {\n // Prevent \"ReferenceError: window is not defined\" errors when running the\n // unit-tests in Node.js/Travis.\n setTimeout(resolve, 20);\n return;\n }\n window.requestAnimationFrame(resolve);\n});\n\n/**\n * Simple event bus for an application. Listeners are attached using the\n * `on` and `off` methods. To raise an event, the `dispatch` method shall be\n * used.\n */\nclass EventBus {\n constructor({ dispatchToDOM = false, } = {}) {\n this._listeners = Object.create(null);\n this._dispatchToDOM = dispatchToDOM === true;\n }\n\n on(eventName, listener) {\n let eventListeners = this._listeners[eventName];\n if (!eventListeners) {\n eventListeners = [];\n this._listeners[eventName] = eventListeners;\n }\n eventListeners.push(listener);\n }\n\n off(eventName, listener) {\n let eventListeners = this._listeners[eventName];\n let i;\n if (!eventListeners || ((i = eventListeners.indexOf(listener)) < 0)) {\n return;\n }\n eventListeners.splice(i, 1);\n }\n\n dispatch(eventName) {\n let eventListeners = this._listeners[eventName];\n if (!eventListeners || eventListeners.length === 0) {\n if (this._dispatchToDOM) {\n const args = Array.prototype.slice.call(arguments, 1);\n this._dispatchDOMEvent(eventName, args);\n }\n return;\n }\n // Passing all arguments after the eventName to the listeners.\n const args = Array.prototype.slice.call(arguments, 1);\n // Making copy of the listeners array in case if it will be modified\n // during dispatch.\n eventListeners.slice(0).forEach(function (listener) {\n listener.apply(null, args);\n });\n if (this._dispatchToDOM) {\n this._dispatchDOMEvent(eventName, args);\n }\n }\n\n /**\n * @private\n */\n _dispatchDOMEvent(eventName, args = null) {\n const details = Object.create(null);\n if (args && args.length > 0) {\n const obj = args[0];\n for (let key in obj) {\n const value = obj[key];\n if (key === 'source') {\n if (value === window || value === document) {\n return; // No need to re-dispatch (already) global events.\n }\n continue; // Ignore the `source` property.\n }\n details[key] = value;\n }\n }\n const event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventName, true, true, details);\n document.dispatchEvent(event);\n }\n}\n\nlet globalEventBus = null;\nfunction getGlobalEventBus(dispatchToDOM = false) {\n if (!globalEventBus) {\n globalEventBus = new EventBus({ dispatchToDOM, });\n }\n return globalEventBus;\n}\n\nfunction clamp(v, min, max) {\n return Math.min(Math.max(v, min), max);\n}\n\nclass ProgressBar {\n constructor(id, { height, width, units, } = {}) {\n this.visible = true;\n\n // Fetch the sub-elements for later.\n this.div = document.querySelector(id + ' .progress');\n // Get the loading bar element, so it can be resized to fit the viewer.\n this.bar = this.div.parentNode;\n\n // Get options, with sensible defaults.\n this.height = height || 100;\n this.width = width || 100;\n this.units = units || '%';\n\n // Initialize heights.\n this.div.style.height = this.height + this.units;\n this.percent = 0;\n }\n\n _updateBar() {\n if (this._indeterminate) {\n this.div.classList.add('indeterminate');\n this.div.style.width = this.width + this.units;\n return;\n }\n\n this.div.classList.remove('indeterminate');\n let progressSize = this.width * this._percent / 100;\n this.div.style.width = progressSize + this.units;\n }\n\n get percent() {\n return this._percent;\n }\n\n set percent(val) {\n this._indeterminate = isNaN(val);\n this._percent = clamp(val, 0, 100);\n this._updateBar();\n }\n\n setWidth(viewer) {\n if (!viewer) {\n return;\n }\n let container = viewer.parentNode;\n let scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n if (scrollbarWidth > 0) {\n this.bar.setAttribute('style', 'width: calc(100% - ' +\n scrollbarWidth + 'px);');\n }\n }\n\n hide() {\n if (!this.visible) {\n return;\n }\n this.visible = false;\n this.bar.classList.add('hidden');\n document.body.classList.remove('loadingInProgress');\n }\n\n show() {\n if (this.visible) {\n return;\n }\n this.visible = true;\n document.body.classList.add('loadingInProgress');\n this.bar.classList.remove('hidden');\n }\n}\n\n/**\n * Moves all elements of an array that satisfy condition to the end of the\n * array, preserving the order of the rest.\n */\nfunction moveToEndOfArray(arr, condition) {\n const moved = [], len = arr.length;\n let write = 0;\n for (let read = 0; read < len; ++read) {\n if (condition(arr[read])) {\n moved.push(arr[read]);\n } else {\n arr[write] = arr[read];\n ++write;\n }\n }\n for (let read = 0; write < len; ++read, ++write) {\n arr[write] = moved[read];\n }\n}\n\nexport {\n CSS_UNITS,\n DEFAULT_SCALE_VALUE,\n DEFAULT_SCALE,\n MIN_SCALE,\n MAX_SCALE,\n UNKNOWN_SCALE,\n MAX_AUTO_SCALE,\n SCROLLBAR_PADDING,\n VERTICAL_PADDING,\n isValidRotation,\n isValidScrollMode,\n isValidSpreadMode,\n isPortraitOrientation,\n PresentationModeState,\n RendererType,\n TextLayerMode,\n ScrollMode,\n SpreadMode,\n NullL10n,\n EventBus,\n getGlobalEventBus,\n ProgressBar,\n getPDFFileNameFromURL,\n noContextMenuHandler,\n parseQueryString,\n backtrackBeforeAllVisibleElements, // only exported for testing\n getVisibleElements,\n roundToDivide,\n getPageSizeInches,\n approximateFraction,\n getOutputScale,\n scrollIntoView,\n watchScroll,\n binarySearchFirstItem,\n normalizeWheelEventDelta,\n animationStarted,\n WaitOnType,\n waitOnEventOrTimeout,\n moveToEndOfArray,\n};\n","module.exports = require(\"regenerator-runtime\");\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobalEventBus, parseQueryString } from './ui_utils';\n\n/**\n * @typedef {Object} PDFLinkServiceOptions\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} externalLinkTarget - (optional) Specifies the `target`\n * attribute for external links. Must use one of the values from {LinkTarget}.\n * Defaults to using no target.\n * @property {string} externalLinkRel - (optional) Specifies the `rel` attribute\n * for external links. Defaults to stripping the referrer.\n */\n\n/**\n * Performs navigation functions inside PDF, such as opening specified page,\n * or destination.\n * @implements {IPDFLinkService}\n */\nclass PDFLinkService {\n /**\n * @param {PDFLinkServiceOptions} options\n */\n constructor({ eventBus, externalLinkTarget = null,\n externalLinkRel = null, } = {}) {\n this.eventBus = eventBus || getGlobalEventBus();\n this.externalLinkTarget = externalLinkTarget;\n this.externalLinkRel = externalLinkRel;\n\n this.baseUrl = null;\n this.pdfDocument = null;\n this.pdfViewer = null;\n this.pdfHistory = null;\n\n this._pagesRefCache = null;\n }\n\n setDocument(pdfDocument, baseUrl = null) {\n this.baseUrl = baseUrl;\n this.pdfDocument = pdfDocument;\n this._pagesRefCache = Object.create(null);\n }\n\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n }\n\n setHistory(pdfHistory) {\n this.pdfHistory = pdfHistory;\n }\n\n /**\n * @returns {number}\n */\n get pagesCount() {\n return this.pdfDocument ? this.pdfDocument.numPages : 0;\n }\n\n /**\n * @returns {number}\n */\n get page() {\n return this.pdfViewer.currentPageNumber;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {\n this.pdfViewer.currentPageNumber = value;\n }\n\n /**\n * @returns {number}\n */\n get rotation() {\n return this.pdfViewer.pagesRotation;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {\n this.pdfViewer.pagesRotation = value;\n }\n\n /**\n * @param {string|Array} dest - The named, or explicit, PDF destination.\n */\n navigateTo(dest) {\n let goToDestination = ({ namedDest, explicitDest, }) => {\n // Dest array looks like that: <page-ref> </XYZ|/FitXXX> <args..>\n let destRef = explicitDest[0], pageNumber;\n\n if (destRef instanceof Object) {\n pageNumber = this._cachedPageNumber(destRef);\n\n if (pageNumber === null) {\n // Fetch the page reference if it's not yet available. This could\n // only occur during loading, before all pages have been resolved.\n this.pdfDocument.getPageIndex(destRef).then((pageIndex) => {\n this.cachePageRef(pageIndex + 1, destRef);\n goToDestination({ namedDest, explicitDest, });\n }).catch(() => {\n console.error(`PDFLinkService.navigateTo: \"${destRef}\" is not ` +\n `a valid page reference, for dest=\"${dest}\".`);\n });\n return;\n }\n } else if (Number.isInteger(destRef)) {\n pageNumber = destRef + 1;\n } else {\n console.error(`PDFLinkService.navigateTo: \"${destRef}\" is not ` +\n `a valid destination reference, for dest=\"${dest}\".`);\n return;\n }\n if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n console.error(`PDFLinkService.navigateTo: \"${pageNumber}\" is not ` +\n `a valid page number, for dest=\"${dest}\".`);\n return;\n }\n\n if (this.pdfHistory) {\n // Update the browser history before scrolling the new destination into\n // view, to be able to accurately capture the current document position.\n this.pdfHistory.pushCurrentPosition();\n this.pdfHistory.push({ namedDest, explicitDest, pageNumber, });\n }\n\n this.pdfViewer.scrollPageIntoView({\n pageNumber,\n destArray: explicitDest,\n });\n };\n\n new Promise((resolve, reject) => {\n if (typeof dest === 'string') {\n this.pdfDocument.getDestination(dest).then((destArray) => {\n resolve({\n namedDest: dest,\n explicitDest: destArray,\n });\n });\n return;\n }\n resolve({\n namedDest: '',\n explicitDest: dest,\n });\n }).then((data) => {\n if (!Array.isArray(data.explicitDest)) {\n console.error(`PDFLinkService.navigateTo: \"${data.explicitDest}\" is` +\n ` not a valid destination array, for dest=\"${dest}\".`);\n return;\n }\n goToDestination(data);\n });\n }\n\n /**\n * @param {string|Array} dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n if (typeof dest === 'string') {\n return this.getAnchorUrl('#' + escape(dest));\n }\n if (Array.isArray(dest)) {\n let str = JSON.stringify(dest);\n return this.getAnchorUrl('#' + escape(str));\n }\n return this.getAnchorUrl('');\n }\n\n /**\n * Prefix the full url on anchor links to make sure that links are resolved\n * relative to the current URL instead of the one defined in <base href>.\n * @param {String} anchor The anchor hash, including the #.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(anchor) {\n return (this.baseUrl || '') + anchor;\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {\n let pageNumber, dest;\n if (hash.includes('=')) {\n let params = parseQueryString(hash);\n if ('search' in params) {\n this.eventBus.dispatch('findfromurlhash', {\n source: this,\n query: params['search'].replace(/\"/g, ''),\n phraseSearch: (params['phrase'] === 'true'),\n });\n }\n // borrowing syntax from \"Parameters for Opening PDF Files\"\n if ('nameddest' in params) {\n this.navigateTo(params.nameddest);\n return;\n }\n if ('page' in params) {\n pageNumber = (params.page | 0) || 1;\n }\n if ('zoom' in params) {\n // Build the destination array.\n let zoomArgs = params.zoom.split(','); // scale,left,top\n let zoomArg = zoomArgs[0];\n let zoomArgNumber = parseFloat(zoomArg);\n\n if (!zoomArg.includes('Fit')) {\n // If the zoomArg is a number, it has to get divided by 100. If it's\n // a string, it should stay as it is.\n dest = [null, { name: 'XYZ', },\n zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null,\n zoomArgs.length > 2 ? (zoomArgs[2] | 0) : null,\n (zoomArgNumber ? zoomArgNumber / 100 : zoomArg)];\n } else {\n if (zoomArg === 'Fit' || zoomArg === 'FitB') {\n dest = [null, { name: zoomArg, }];\n } else if ((zoomArg === 'FitH' || zoomArg === 'FitBH') ||\n (zoomArg === 'FitV' || zoomArg === 'FitBV')) {\n dest = [null, { name: zoomArg, },\n zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null];\n } else if (zoomArg === 'FitR') {\n if (zoomArgs.length !== 5) {\n console.error(\n 'PDFLinkService.setHash: Not enough parameters for \"FitR\".');\n } else {\n dest = [null, { name: zoomArg, },\n (zoomArgs[1] | 0), (zoomArgs[2] | 0),\n (zoomArgs[3] | 0), (zoomArgs[4] | 0)];\n }\n } else {\n console.error(`PDFLinkService.setHash: \"${zoomArg}\" is not ` +\n 'a valid zoom value.');\n }\n }\n }\n if (dest) {\n this.pdfViewer.scrollPageIntoView({\n pageNumber: pageNumber || this.page,\n destArray: dest,\n allowNegativeOffset: true,\n });\n } else if (pageNumber) {\n this.page = pageNumber; // simple page\n }\n if ('pagemode' in params) {\n this.eventBus.dispatch('pagemode', {\n source: this,\n mode: params.pagemode,\n });\n }\n } else { // Named (or explicit) destination.\n dest = unescape(hash);\n try {\n dest = JSON.parse(dest);\n\n if (!Array.isArray(dest)) {\n // Avoid incorrectly rejecting a valid named destination, such as\n // e.g. \"4.3\" or \"true\", because `JSON.parse` converted its type.\n dest = dest.toString();\n }\n } catch (ex) {}\n\n if (typeof dest === 'string' || isValidExplicitDestination(dest)) {\n this.navigateTo(dest);\n return;\n }\n console.error(`PDFLinkService.setHash: \"${unescape(hash)}\" is not ` +\n 'a valid destination.');\n }\n }\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {\n // See PDF reference, table 8.45 - Named action\n switch (action) {\n case 'GoBack':\n if (this.pdfHistory) {\n this.pdfHistory.back();\n }\n break;\n\n case 'GoForward':\n if (this.pdfHistory) {\n this.pdfHistory.forward();\n }\n break;\n\n case 'NextPage':\n if (this.page < this.pagesCount) {\n this.page++;\n }\n break;\n\n case 'PrevPage':\n if (this.page > 1) {\n this.page--;\n }\n break;\n\n case 'LastPage':\n this.page = this.pagesCount;\n break;\n\n case 'FirstPage':\n this.page = 1;\n break;\n\n default:\n break; // No action according to spec\n }\n\n this.eventBus.dispatch('namedaction', {\n source: this,\n action,\n });\n }\n\n /**\n * @param {number} pageNum - page number.\n * @param {Object} pageRef - reference to the page.\n */\n cachePageRef(pageNum, pageRef) {\n if (!pageRef) {\n return;\n }\n let refStr = pageRef.num + ' ' + pageRef.gen + ' R';\n this._pagesRefCache[refStr] = pageNum;\n }\n\n _cachedPageNumber(pageRef) {\n let refStr = pageRef.num + ' ' + pageRef.gen + ' R';\n return (this._pagesRefCache && this._pagesRefCache[refStr]) || null;\n }\n\n /**\n * @param {number} pageNumber\n */\n isPageVisible(pageNumber) {\n return this.pdfViewer.isPageVisible(pageNumber);\n }\n}\n\nfunction isValidExplicitDestination(dest) {\n if (!Array.isArray(dest)) {\n return false;\n }\n let destLength = dest.length, allowNull = true;\n if (destLength < 2) {\n return false;\n }\n let page = dest[0];\n if (!(typeof page === 'object' &&\n Number.isInteger(page.num) && Number.isInteger(page.gen)) &&\n !(Number.isInteger(page) && page >= 0)) {\n return false;\n }\n let zoom = dest[1];\n if (!(typeof zoom === 'object' && typeof zoom.name === 'string')) {\n return false;\n }\n switch (zoom.name) {\n case 'XYZ':\n if (destLength !== 5) {\n return false;\n }\n break;\n case 'Fit':\n case 'FitB':\n return destLength === 2;\n case 'FitH':\n case 'FitBH':\n case 'FitV':\n case 'FitBV':\n if (destLength !== 3) {\n return false;\n }\n break;\n case 'FitR':\n if (destLength !== 6) {\n return false;\n }\n allowNull = false;\n break;\n default:\n return false;\n }\n for (let i = 2; i < destLength; i++) {\n let param = dest[i];\n if (!(typeof param === 'number' || (allowNull && param === null))) {\n return false;\n }\n }\n return true;\n}\n\n/**\n * @implements {IPDFLinkService}\n */\nclass SimpleLinkService {\n constructor() {\n this.externalLinkTarget = null;\n this.externalLinkRel = null;\n }\n\n /**\n * @returns {number}\n */\n get pagesCount() {\n return 0;\n }\n\n /**\n * @returns {number}\n */\n get page() {\n return 0;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {}\n\n /**\n * @returns {number}\n */\n get rotation() {\n return 0;\n }\n\n /**\n * @param {number} value\n */\n set rotation(value) {}\n\n /**\n * @param dest - The PDF destination object.\n */\n navigateTo(dest) {}\n\n /**\n * @param dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n return '#';\n }\n\n /**\n * @param hash - The PDF parameters/hash.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(hash) {\n return '#';\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {}\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {}\n\n /**\n * @param {number} pageNum - page number.\n * @param {Object} pageRef - reference to the page.\n */\n cachePageRef(pageNum, pageRef) {}\n\n /**\n * @param {number} pageNumber\n */\n isPageVisible(pageNumber) {\n return true;\n }\n}\n\nexport {\n PDFLinkService,\n SimpleLinkService,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobalEventBus } from './ui_utils';\nimport { renderTextLayer } from 'pdfjs-lib';\n\nconst EXPAND_DIVS_TIMEOUT = 300; // ms\n\n/**\n * @typedef {Object} TextLayerBuilderOptions\n * @property {HTMLDivElement} textLayerDiv - The text layer container.\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} pageIndex - The page index.\n * @property {PageViewport} viewport - The viewport of the text layer.\n * @property {PDFFindController} findController\n * @property {boolean} enhanceTextSelection - Option to turn on improved\n * text selection.\n */\n\n/**\n * The text layer builder provides text selection functionality for the PDF.\n * It does this by creating overlay divs over the PDF's text. These divs\n * contain text that matches the PDF text they are overlaying. This object\n * also provides a way to highlight text that is being searched for.\n */\nclass TextLayerBuilder {\n constructor({ textLayerDiv, eventBus, pageIndex, viewport,\n findController = null, enhanceTextSelection = false, }) {\n this.textLayerDiv = textLayerDiv;\n this.eventBus = eventBus || getGlobalEventBus();\n this.textContent = null;\n this.textContentItemsStr = [];\n this.textContentStream = null;\n this.renderingDone = false;\n this.pageIdx = pageIndex;\n this.pageNumber = this.pageIdx + 1;\n this.matches = [];\n this.viewport = viewport;\n this.textDivs = [];\n this.findController = findController;\n this.textLayerRenderTask = null;\n this.enhanceTextSelection = enhanceTextSelection;\n\n this._onUpdateTextLayerMatches = null;\n this._bindMouse();\n }\n\n /**\n * @private\n */\n _finishRendering() {\n this.renderingDone = true;\n\n if (!this.enhanceTextSelection) {\n let endOfContent = document.createElement('div');\n endOfContent.className = 'endOfContent';\n this.textLayerDiv.appendChild(endOfContent);\n }\n\n this.eventBus.dispatch('textlayerrendered', {\n source: this,\n pageNumber: this.pageNumber,\n numTextDivs: this.textDivs.length,\n });\n }\n\n /**\n * Renders the text layer.\n *\n * @param {number} timeout - (optional) wait for a specified amount of\n * milliseconds before rendering\n */\n render(timeout = 0) {\n if (!(this.textContent || this.textContentStream) || this.renderingDone) {\n return;\n }\n this.cancel();\n\n this.textDivs = [];\n let textLayerFrag = document.createDocumentFragment();\n this.textLayerRenderTask = renderTextLayer({\n textContent: this.textContent,\n textContentStream: this.textContentStream,\n container: textLayerFrag,\n viewport: this.viewport,\n textDivs: this.textDivs,\n textContentItemsStr: this.textContentItemsStr,\n timeout,\n enhanceTextSelection: this.enhanceTextSelection,\n });\n this.textLayerRenderTask.promise.then(() => {\n this.textLayerDiv.appendChild(textLayerFrag);\n this._finishRendering();\n this._updateMatches();\n }, function (reason) {\n // Cancelled or failed to render text layer; skipping errors.\n });\n\n if (!this._onUpdateTextLayerMatches) {\n this._onUpdateTextLayerMatches = (evt) => {\n if (evt.pageIndex === this.pageIdx || evt.pageIndex === -1) {\n this._updateMatches();\n }\n };\n this.eventBus.on('updatetextlayermatches',\n this._onUpdateTextLayerMatches);\n }\n }\n\n /**\n * Cancel rendering of the text layer.\n */\n cancel() {\n if (this.textLayerRenderTask) {\n this.textLayerRenderTask.cancel();\n this.textLayerRenderTask = null;\n }\n if (this._onUpdateTextLayerMatches) {\n this.eventBus.off('updatetextlayermatches',\n this._onUpdateTextLayerMatches);\n this._onUpdateTextLayerMatches = null;\n }\n }\n\n setTextContentStream(readableStream) {\n this.cancel();\n this.textContentStream = readableStream;\n }\n\n setTextContent(textContent) {\n this.cancel();\n this.textContent = textContent;\n }\n\n _convertMatches(matches, matchesLength) {\n // Early exit if there is nothing to convert.\n if (!matches) {\n return [];\n }\n const { findController, textContentItemsStr, } = this;\n\n let i = 0, iIndex = 0;\n const end = textContentItemsStr.length - 1;\n const queryLen = findController.state.query.length;\n const result = [];\n\n for (let m = 0, mm = matches.length; m < mm; m++) {\n // Calculate the start position.\n let matchIdx = matches[m];\n\n // Loop over the divIdxs.\n while (i !== end &&\n matchIdx >= (iIndex + textContentItemsStr[i].length)) {\n iIndex += textContentItemsStr[i].length;\n i++;\n }\n\n if (i === textContentItemsStr.length) {\n console.error('Could not find a matching mapping');\n }\n\n let match = {\n begin: {\n divIdx: i,\n offset: matchIdx - iIndex,\n },\n };\n\n // Calculate the end position.\n if (matchesLength) { // Multiterm search.\n matchIdx += matchesLength[m];\n } else { // Phrase search.\n matchIdx += queryLen;\n }\n\n // Somewhat the same array as above, but use > instead of >= to get\n // the end position right.\n while (i !== end &&\n matchIdx > (iIndex + textContentItemsStr[i].length)) {\n iIndex += textContentItemsStr[i].length;\n i++;\n }\n\n match.end = {\n divIdx: i,\n offset: matchIdx - iIndex,\n };\n result.push(match);\n }\n return result;\n }\n\n _renderMatches(matches) {\n // Early exit if there is nothing to render.\n if (matches.length === 0) {\n return;\n }\n const { findController, pageIdx, textContentItemsStr, textDivs, } = this;\n\n const isSelectedPage = (pageIdx === findController.selected.pageIdx);\n const selectedMatchIdx = findController.selected.matchIdx;\n const highlightAll = findController.state.highlightAll;\n let prevEnd = null;\n let infinity = {\n divIdx: -1,\n offset: undefined,\n };\n\n function beginText(begin, className) {\n let divIdx = begin.divIdx;\n textDivs[divIdx].textContent = '';\n appendTextToDiv(divIdx, 0, begin.offset, className);\n }\n\n function appendTextToDiv(divIdx, fromOffset, toOffset, className) {\n let div = textDivs[divIdx];\n let content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);\n let node = document.createTextNode(content);\n if (className) {\n let span = document.createElement('span');\n span.className = className;\n span.appendChild(node);\n div.appendChild(span);\n return;\n }\n div.appendChild(node);\n }\n\n let i0 = selectedMatchIdx, i1 = i0 + 1;\n if (highlightAll) {\n i0 = 0;\n i1 = matches.length;\n } else if (!isSelectedPage) {\n // Not highlighting all and this isn't the selected page, so do nothing.\n return;\n }\n\n for (let i = i0; i < i1; i++) {\n let match = matches[i];\n let begin = match.begin;\n let end = match.end;\n const isSelected = (isSelectedPage && i === selectedMatchIdx);\n const highlightSuffix = (isSelected ? ' selected' : '');\n\n if (isSelected) { // Attempt to scroll the selected match into view.\n findController.scrollMatchIntoView({\n element: textDivs[begin.divIdx],\n pageIndex: pageIdx,\n matchIndex: selectedMatchIdx,\n });\n }\n\n // Match inside new div.\n if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {\n // If there was a previous div, then add the text at the end.\n if (prevEnd !== null) {\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n }\n // Clear the divs and set the content until the starting point.\n beginText(begin);\n } else {\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);\n }\n\n if (begin.divIdx === end.divIdx) {\n appendTextToDiv(begin.divIdx, begin.offset, end.offset,\n 'highlight' + highlightSuffix);\n } else {\n appendTextToDiv(begin.divIdx, begin.offset, infinity.offset,\n 'highlight begin' + highlightSuffix);\n for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {\n textDivs[n0].className = 'highlight middle' + highlightSuffix;\n }\n beginText(end, 'highlight end' + highlightSuffix);\n }\n prevEnd = end;\n }\n\n if (prevEnd) {\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n }\n }\n\n _updateMatches() {\n // Only show matches when all rendering is done.\n if (!this.renderingDone) {\n return;\n }\n const {\n findController, matches, pageIdx, textContentItemsStr, textDivs,\n } = this;\n let clearedUntilDivIdx = -1;\n\n // Clear all current matches.\n for (let i = 0, ii = matches.length; i < ii; i++) {\n let match = matches[i];\n let begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);\n for (let n = begin, end = match.end.divIdx; n <= end; n++) {\n let div = textDivs[n];\n div.textContent = textContentItemsStr[n];\n div.className = '';\n }\n clearedUntilDivIdx = match.end.divIdx + 1;\n }\n\n if (!findController || !findController.highlightMatches) {\n return;\n }\n // Convert the matches on the `findController` into the match format\n // used for the textLayer.\n const pageMatches = findController.pageMatches[pageIdx] || null;\n const pageMatchesLength = findController.pageMatchesLength[pageIdx] || null;\n\n this.matches = this._convertMatches(pageMatches, pageMatchesLength);\n this._renderMatches(this.matches);\n }\n\n /**\n * Improves text selection by adding an additional div where the mouse was\n * clicked. This reduces flickering of the content if the mouse is slowly\n * dragged up or down.\n *\n * @private\n */\n _bindMouse() {\n let div = this.textLayerDiv;\n let expandDivsTimer = null;\n\n div.addEventListener('mousedown', (evt) => {\n if (this.enhanceTextSelection && this.textLayerRenderTask) {\n this.textLayerRenderTask.expandTextDivs(true);\n if ((typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) &&\n expandDivsTimer) {\n clearTimeout(expandDivsTimer);\n expandDivsTimer = null;\n }\n return;\n }\n\n let end = div.querySelector('.endOfContent');\n if (!end) {\n return;\n }\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n // On non-Firefox browsers, the selection will feel better if the height\n // of the `endOfContent` div is adjusted to start at mouse click\n // location. This avoids flickering when the selection moves up.\n // However it does not work when selection is started on empty space.\n let adjustTop = evt.target !== div;\n if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n adjustTop = adjustTop && window.getComputedStyle(end).\n getPropertyValue('-moz-user-select') !== 'none';\n }\n if (adjustTop) {\n let divBounds = div.getBoundingClientRect();\n let r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);\n end.style.top = (r * 100).toFixed(2) + '%';\n }\n }\n end.classList.add('active');\n });\n\n div.addEventListener('mouseup', () => {\n if (this.enhanceTextSelection && this.textLayerRenderTask) {\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n expandDivsTimer = setTimeout(() => {\n if (this.textLayerRenderTask) {\n this.textLayerRenderTask.expandTextDivs(false);\n }\n expandDivsTimer = null;\n }, EXPAND_DIVS_TIMEOUT);\n } else {\n this.textLayerRenderTask.expandTextDivs(false);\n }\n return;\n }\n\n let end = div.querySelector('.endOfContent');\n if (!end) {\n return;\n }\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n end.style.top = '';\n }\n end.classList.remove('active');\n });\n }\n}\n\n/**\n * @implements IPDFTextLayerFactory\n */\nclass DefaultTextLayerFactory {\n /**\n * @param {HTMLDivElement} textLayerDiv\n * @param {number} pageIndex\n * @param {PageViewport} viewport\n * @param {boolean} enhanceTextSelection\n * @returns {TextLayerBuilder}\n */\n createTextLayerBuilder(textLayerDiv, pageIndex, viewport,\n enhanceTextSelection = false) {\n return new TextLayerBuilder({\n textLayerDiv,\n pageIndex,\n viewport,\n enhanceTextSelection,\n });\n }\n}\n\nexport {\n TextLayerBuilder,\n DefaultTextLayerFactory,\n};\n","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n apiCompatibilityParams, createObjectURL, createValidAbsoluteUrl, URL\n} from 'pdfjs-lib';\n\nif (typeof PDFJSDev !== 'undefined' && !PDFJSDev.test('CHROME || GENERIC')) {\n throw new Error('Module \"pdfjs-web/download_manager\" shall not be used ' +\n 'outside CHROME and GENERIC builds.');\n}\n\nconst DISABLE_CREATE_OBJECT_URL =\n apiCompatibilityParams.disableCreateObjectURL || false;\n\nfunction download(blobUrl, filename) {\n let a = document.createElement('a');\n if (!a.click) {\n throw new Error('DownloadManager: \"a.click()\" is not supported.');\n }\n a.href = blobUrl;\n a.target = '_parent';\n // Use a.download if available. This increases the likelihood that\n // the file is downloaded instead of opened by another PDF plugin.\n if ('download' in a) {\n a.download = filename;\n }\n // <a> must be in the document for IE and recent Firefox versions,\n // otherwise .click() is ignored.\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.remove();\n}\n\nclass DownloadManager {\n constructor({ disableCreateObjectURL = DISABLE_CREATE_OBJECT_URL, }) {\n this.disableCreateObjectURL = disableCreateObjectURL;\n }\n\n downloadUrl(url, filename) {\n if (!createValidAbsoluteUrl(url, 'http://example.com')) {\n return; // restricted/invalid URL\n }\n download(url + '#pdfjs.action=download', filename);\n }\n\n downloadData(data, filename, contentType) {\n if (navigator.msSaveBlob) { // IE10 and above\n navigator.msSaveBlob(new Blob([data], { type: contentType, }), filename);\n return;\n }\n let blobUrl = createObjectURL(data, contentType,\n this.disableCreateObjectURL);\n download(blobUrl, filename);\n }\n\n download(blob, url, filename) {\n if (navigator.msSaveBlob) {\n // IE10 / IE11\n if (!navigator.msSaveBlob(blob, filename)) {\n this.downloadUrl(url, filename);\n }\n return;\n }\n\n if (this.disableCreateObjectURL) {\n // URL.createObjectURL is not supported\n this.downloadUrl(url, filename);\n return;\n }\n\n let blobUrl = URL.createObjectURL(blob);\n download(blobUrl, filename);\n }\n}\n\nexport {\n DownloadManager,\n};\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport '../external/webL10n/l10n';\n\nlet webL10n = document.webL10n;\n\nclass GenericL10n {\n constructor(lang) {\n this._lang = lang;\n this._ready = new Promise((resolve, reject) => {\n webL10n.setLanguage(lang, () => {\n resolve(webL10n);\n });\n });\n }\n\n async getLanguage() {\n const l10n = await this._ready;\n return l10n.getLanguage();\n }\n\n async getDirection() {\n const l10n = await this._ready;\n return l10n.getDirection();\n }\n\n async get(property, args, fallback) {\n const l10n = await this._ready;\n return l10n.get(property, args, fallback);\n }\n\n async translate(element) {\n const l10n = await this._ready;\n return l10n.translate(element);\n }\n}\n\nexport {\n GenericL10n,\n};\n","/**\n * Copyright (c) 2011-2013 Fabien Cazenave, Mozilla.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n/*\n Additional modifications for PDF.js project:\n - Disables language initialization on page loading.\n - Disables document translation on page loading.\n - Removes consoleWarn and consoleLog and use console.log/warn directly.\n - Removes window._ assignment.\n - Remove compatibility code for OldIE.\n*/\n\n/*jshint browser: true, devel: true, es5: true, globalstrict: true */\n'use strict';\n\ndocument.webL10n = (function(window, document, undefined) {\n var gL10nData = {};\n var gTextData = '';\n var gTextProp = 'textContent';\n var gLanguage = '';\n var gMacros = {};\n var gReadyState = 'loading';\n\n\n /**\n * Synchronously loading l10n resources significantly minimizes flickering\n * from displaying the app with non-localized strings and then updating the\n * strings. Although this will block all script execution on this page, we\n * expect that the l10n resources are available locally on flash-storage.\n *\n * As synchronous XHR is generally considered as a bad idea, we're still\n * loading l10n resources asynchronously -- but we keep this in a setting,\n * just in case... and applications using this library should hide their\n * content until the `localized' event happens.\n */\n\n var gAsyncResourceLoading = true; // read-only\n\n\n /**\n * DOM helpers for the so-called \"HTML API\".\n *\n * These functions are written for modern browsers. For old versions of IE,\n * they're overridden in the 'startup' section at the end of this file.\n */\n\n function getL10nResourceLinks() {\n return document.querySelectorAll('link[type=\"application/l10n\"]');\n }\n\n function getL10nDictionary() {\n var script = document.querySelector('script[type=\"application/l10n\"]');\n // TODO: support multiple and external JSON dictionaries\n return script ? JSON.parse(script.innerHTML) : null;\n }\n\n function getTranslatableChildren(element) {\n return element ? element.querySelectorAll('*[data-l10n-id]') : [];\n }\n\n function getL10nAttributes(element) {\n if (!element)\n return {};\n\n var l10nId = element.getAttribute('data-l10n-id');\n var l10nArgs = element.getAttribute('data-l10n-args');\n var args = {};\n if (l10nArgs) {\n try {\n args = JSON.parse(l10nArgs);\n } catch (e) {\n console.warn('could not parse arguments for #' + l10nId);\n }\n }\n return { id: l10nId, args: args };\n }\n\n function fireL10nReadyEvent(lang) {\n var evtObject = document.createEvent('Event');\n evtObject.initEvent('localized', true, false);\n evtObject.language = lang;\n document.dispatchEvent(evtObject);\n }\n\n function xhrLoadText(url, onSuccess, onFailure) {\n onSuccess = onSuccess || function _onSuccess(data) {};\n onFailure = onFailure || function _onFailure() {};\n\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, gAsyncResourceLoading);\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType('text/plain; charset=utf-8');\n }\n xhr.onreadystatechange = function() {\n if (xhr.readyState == 4) {\n if (xhr.status == 200 || xhr.status === 0) {\n onSuccess(xhr.responseText);\n } else {\n onFailure();\n }\n }\n };\n xhr.onerror = onFailure;\n xhr.ontimeout = onFailure;\n\n // in Firefox OS with the app:// protocol, trying to XHR a non-existing\n // URL will raise an exception here -- hence this ugly try...catch.\n try {\n xhr.send(null);\n } catch (e) {\n onFailure();\n }\n }\n\n\n /**\n * l10n resource parser:\n * - reads (async XHR) the l10n resource matching `lang';\n * - imports linked resources (synchronously) when specified;\n * - parses the text data (fills `gL10nData' and `gTextData');\n * - triggers success/failure callbacks when done.\n *\n * @param {string} href\n * URL of the l10n resource to parse.\n *\n * @param {string} lang\n * locale (language) to parse. Must be a lowercase string.\n *\n * @param {Function} successCallback\n * triggered when the l10n resource has been successfully parsed.\n *\n * @param {Function} failureCallback\n * triggered when the an error has occurred.\n *\n * @return {void}\n * uses the following global variables: gL10nData, gTextData, gTextProp.\n */\n\n function parseResource(href, lang, successCallback, failureCallback) {\n var baseURL = href.replace(/[^\\/]*$/, '') || './';\n\n // handle escaped characters (backslashes) in a string\n function evalString(text) {\n if (text.lastIndexOf('\\\\') < 0)\n return text;\n return text.replace(/\\\\\\\\/g, '\\\\')\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\b/g, '\\b')\n .replace(/\\\\f/g, '\\f')\n .replace(/\\\\{/g, '{')\n .replace(/\\\\}/g, '}')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\'/g, \"'\");\n }\n\n // parse *.properties text data into an l10n dictionary\n // If gAsyncResourceLoading is false, then the callback will be called\n // synchronously. Otherwise it is called asynchronously.\n function parseProperties(text, parsedPropertiesCallback) {\n var dictionary = {};\n\n // token expressions\n var reBlank = /^\\s*|\\s*$/;\n var reComment = /^\\s*#|^\\s*$/;\n var reSection = /^\\s*\\[(.*)\\]\\s*$/;\n var reImport = /^\\s*@import\\s+url\\((.*)\\)\\s*$/i;\n var reSplit = /^([^=\\s]*)\\s*=\\s*(.+)$/; // TODO: escape EOLs with '\\'\n\n // parse the *.properties file into an associative array\n function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) {\n var entries = rawText.replace(reBlank, '').split(/[\\r\\n]+/);\n var currentLang = '*';\n var genericLang = lang.split('-', 1)[0];\n var skipLang = false;\n var match = '';\n\n function nextEntry() {\n // Use infinite loop instead of recursion to avoid reaching the\n // maximum recursion limit for content with many lines.\n while (true) {\n if (!entries.length) {\n parsedRawLinesCallback();\n return;\n }\n var line = entries.shift();\n\n // comment or blank line?\n if (reComment.test(line))\n continue;\n\n // the extended syntax supports [lang] sections and @import rules\n if (extendedSyntax) {\n match = reSection.exec(line);\n if (match) { // section start?\n // RFC 4646, section 4.4, \"All comparisons MUST be performed\n // in a case-insensitive manner.\"\n\n currentLang = match[1].toLowerCase();\n skipLang = (currentLang !== '*') &&\n (currentLang !== lang) && (currentLang !== genericLang);\n continue;\n } else if (skipLang) {\n continue;\n }\n match = reImport.exec(line);\n if (match) { // @import rule?\n loadImport(baseURL + match[1], nextEntry);\n return;\n }\n }\n\n // key-value pair\n var tmp = line.match(reSplit);\n if (tmp && tmp.length == 3) {\n dictionary[tmp[1]] = evalString(tmp[2]);\n }\n }\n }\n nextEntry();\n }\n\n // import another *.properties file\n function loadImport(url, callback) {\n xhrLoadText(url, function(content) {\n parseRawLines(content, false, callback); // don't allow recursive imports\n }, function () {\n console.warn(url + ' not found.');\n callback();\n });\n }\n\n // fill the dictionary\n parseRawLines(text, true, function() {\n parsedPropertiesCallback(dictionary);\n });\n }\n\n // load and parse l10n data (warning: global variables are used here)\n xhrLoadText(href, function(response) {\n gTextData += response; // mostly for debug\n\n // parse *.properties text data into an l10n dictionary\n parseProperties(response, function(data) {\n\n // find attribute descriptions, if any\n for (var key in data) {\n var id, prop, index = key.lastIndexOf('.');\n if (index > 0) { // an attribute has been specified\n id = key.substring(0, index);\n prop = key.substring(index + 1);\n } else { // no attribute: assuming text content by default\n id = key;\n prop = gTextProp;\n }\n if (!gL10nData[id]) {\n gL10nData[id] = {};\n }\n gL10nData[id][prop] = data[key];\n }\n\n // trigger callback\n if (successCallback) {\n successCallback();\n }\n });\n }, failureCallback);\n }\n\n // load and parse all resources for the specified locale\n function loadLocale(lang, callback) {\n // RFC 4646, section 2.1 states that language tags have to be treated as\n // case-insensitive. Convert to lowercase for case-insensitive comparisons.\n if (lang) {\n lang = lang.toLowerCase();\n }\n\n callback = callback || function _callback() {};\n\n clear();\n gLanguage = lang;\n\n // check all <link type=\"application/l10n\" href=\"...\" /> nodes\n // and load the resource files\n var langLinks = getL10nResourceLinks();\n var langCount = langLinks.length;\n if (langCount === 0) {\n // we might have a pre-compiled dictionary instead\n var dict = getL10nDictionary();\n if (dict && dict.locales && dict.default_locale) {\n console.log('using the embedded JSON directory, early way out');\n gL10nData = dict.locales[lang];\n if (!gL10nData) {\n var defaultLocale = dict.default_locale.toLowerCase();\n for (var anyCaseLang in dict.locales) {\n anyCaseLang = anyCaseLang.toLowerCase();\n if (anyCaseLang === lang) {\n gL10nData = dict.locales[lang];\n break;\n } else if (anyCaseLang === defaultLocale) {\n gL10nData = dict.locales[defaultLocale];\n }\n }\n }\n callback();\n } else {\n console.log('no resource to load, early way out');\n }\n // early way out\n fireL10nReadyEvent(lang);\n gReadyState = 'complete';\n return;\n }\n\n // start the callback when all resources are loaded\n var onResourceLoaded = null;\n var gResourceCount = 0;\n onResourceLoaded = function() {\n gResourceCount++;\n if (gResourceCount >= langCount) {\n callback();\n fireL10nReadyEvent(lang);\n gReadyState = 'complete';\n }\n };\n\n // load all resource files\n function L10nResourceLink(link) {\n var href = link.href;\n // Note: If |gAsyncResourceLoading| is false, then the following callbacks\n // are synchronously called.\n this.load = function(lang, callback) {\n parseResource(href, lang, callback, function() {\n console.warn(href + ' not found.');\n // lang not found, used default resource instead\n console.warn('\"' + lang + '\" resource not found');\n gLanguage = '';\n // Resource not loaded, but we still need to call the callback.\n callback();\n });\n };\n }\n\n for (var i = 0; i < langCount; i++) {\n var resource = new L10nResourceLink(langLinks[i]);\n resource.load(lang, onResourceLoaded);\n }\n }\n\n // clear all l10n data\n function clear() {\n gL10nData = {};\n gTextData = '';\n gLanguage = '';\n // TODO: clear all non predefined macros.\n // There's no such macro /yet/ but we're planning to have some...\n }\n\n\n /**\n * Get rules for plural forms (shared with JetPack), see:\n * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html\n * https://github.com/mozilla/addon-sdk/blob/master/python-lib/plural-rules-generator.p\n *\n * @param {string} lang\n * locale (language) used.\n *\n * @return {Function}\n * returns a function that gives the plural form name for a given integer:\n * var fun = getPluralRules('en');\n * fun(1) -> 'one'\n * fun(0) -> 'other'\n * fun(1000) -> 'other'.\n */\n\n function getPluralRules(lang) {\n var locales2rules = {\n 'af': 3,\n 'ak': 4,\n 'am': 4,\n 'ar': 1,\n 'asa': 3,\n 'az': 0,\n 'be': 11,\n 'bem': 3,\n 'bez': 3,\n 'bg': 3,\n 'bh': 4,\n 'bm': 0,\n 'bn': 3,\n 'bo': 0,\n 'br': 20,\n 'brx': 3,\n 'bs': 11,\n 'ca': 3,\n 'cgg': 3,\n 'chr': 3,\n 'cs': 12,\n 'cy': 17,\n 'da': 3,\n 'de': 3,\n 'dv': 3,\n 'dz': 0,\n 'ee': 3,\n 'el': 3,\n 'en': 3,\n 'eo': 3,\n 'es': 3,\n 'et': 3,\n 'eu': 3,\n 'fa': 0,\n 'ff': 5,\n 'fi': 3,\n 'fil': 4,\n 'fo': 3,\n 'fr': 5,\n 'fur': 3,\n 'fy': 3,\n 'ga': 8,\n 'gd': 24,\n 'gl': 3,\n 'gsw': 3,\n 'gu': 3,\n 'guw': 4,\n 'gv': 23,\n 'ha': 3,\n 'haw': 3,\n 'he': 2,\n 'hi': 4,\n 'hr': 11,\n 'hu': 0,\n 'id': 0,\n 'ig': 0,\n 'ii': 0,\n 'is': 3,\n 'it': 3,\n 'iu': 7,\n 'ja': 0,\n 'jmc': 3,\n 'jv': 0,\n 'ka': 0,\n 'kab': 5,\n 'kaj': 3,\n 'kcg': 3,\n 'kde': 0,\n 'kea': 0,\n 'kk': 3,\n 'kl': 3,\n 'km': 0,\n 'kn': 0,\n 'ko': 0,\n 'ksb': 3,\n 'ksh': 21,\n 'ku': 3,\n 'kw': 7,\n 'lag': 18,\n 'lb': 3,\n 'lg': 3,\n 'ln': 4,\n 'lo': 0,\n 'lt': 10,\n 'lv': 6,\n 'mas': 3,\n 'mg': 4,\n 'mk': 16,\n 'ml': 3,\n 'mn': 3,\n 'mo': 9,\n 'mr': 3,\n 'ms': 0,\n 'mt': 15,\n 'my': 0,\n 'nah': 3,\n 'naq': 7,\n 'nb': 3,\n 'nd': 3,\n 'ne': 3,\n 'nl': 3,\n 'nn': 3,\n 'no': 3,\n 'nr': 3,\n 'nso': 4,\n 'ny': 3,\n 'nyn': 3,\n 'om': 3,\n 'or': 3,\n 'pa': 3,\n 'pap': 3,\n 'pl': 13,\n 'ps': 3,\n 'pt': 3,\n 'rm': 3,\n 'ro': 9,\n 'rof': 3,\n 'ru': 11,\n 'rwk': 3,\n 'sah': 0,\n 'saq': 3,\n 'se': 7,\n 'seh': 3,\n 'ses': 0,\n 'sg': 0,\n 'sh': 11,\n 'shi': 19,\n 'sk': 12,\n 'sl': 14,\n 'sma': 7,\n 'smi': 7,\n 'smj': 7,\n 'smn': 7,\n 'sms': 7,\n 'sn': 3,\n 'so': 3,\n 'sq': 3,\n 'sr': 11,\n 'ss': 3,\n 'ssy': 3,\n 'st': 3,\n 'sv': 3,\n 'sw': 3,\n 'syr': 3,\n 'ta': 3,\n 'te': 3,\n 'teo': 3,\n 'th': 0,\n 'ti': 4,\n 'tig': 3,\n 'tk': 3,\n 'tl': 4,\n 'tn': 3,\n 'to': 0,\n 'tr': 0,\n 'ts': 3,\n 'tzm': 22,\n 'uk': 11,\n 'ur': 3,\n 've': 3,\n 'vi': 0,\n 'vun': 3,\n 'wa': 4,\n 'wae': 3,\n 'wo': 0,\n 'xh': 3,\n 'xog': 3,\n 'yo': 0,\n 'zh': 0,\n 'zu': 3\n };\n\n // utility functions for plural rules methods\n function isIn(n, list) {\n return list.indexOf(n) !== -1;\n }\n function isBetween(n, start, end) {\n return start <= n && n <= end;\n }\n\n // list of all plural rules methods:\n // map an integer to the plural form name to use\n var pluralRules = {\n '0': function(n) {\n return 'other';\n },\n '1': function(n) {\n if ((isBetween((n % 100), 3, 10)))\n return 'few';\n if (n === 0)\n return 'zero';\n if ((isBetween((n % 100), 11, 99)))\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '2': function(n) {\n if (n !== 0 && (n % 10) === 0)\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '3': function(n) {\n if (n == 1)\n return 'one';\n return 'other';\n },\n '4': function(n) {\n if ((isBetween(n, 0, 1)))\n return 'one';\n return 'other';\n },\n '5': function(n) {\n if ((isBetween(n, 0, 2)) && n != 2)\n return 'one';\n return 'other';\n },\n '6': function(n) {\n if (n === 0)\n return 'zero';\n if ((n % 10) == 1 && (n % 100) != 11)\n return 'one';\n return 'other';\n },\n '7': function(n) {\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '8': function(n) {\n if ((isBetween(n, 3, 6)))\n return 'few';\n if ((isBetween(n, 7, 10)))\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '9': function(n) {\n if (n === 0 || n != 1 && (isBetween((n % 100), 1, 19)))\n return 'few';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '10': function(n) {\n if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19)))\n return 'few';\n if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19)))\n return 'one';\n return 'other';\n },\n '11': function(n) {\n if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))\n return 'few';\n if ((n % 10) === 0 ||\n (isBetween((n % 10), 5, 9)) ||\n (isBetween((n % 100), 11, 14)))\n return 'many';\n if ((n % 10) == 1 && (n % 100) != 11)\n return 'one';\n return 'other';\n },\n '12': function(n) {\n if ((isBetween(n, 2, 4)))\n return 'few';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '13': function(n) {\n if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))\n return 'few';\n if (n != 1 && (isBetween((n % 10), 0, 1)) ||\n (isBetween((n % 10), 5, 9)) ||\n (isBetween((n % 100), 12, 14)))\n return 'many';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '14': function(n) {\n if ((isBetween((n % 100), 3, 4)))\n return 'few';\n if ((n % 100) == 2)\n return 'two';\n if ((n % 100) == 1)\n return 'one';\n return 'other';\n },\n '15': function(n) {\n if (n === 0 || (isBetween((n % 100), 2, 10)))\n return 'few';\n if ((isBetween((n % 100), 11, 19)))\n return 'many';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '16': function(n) {\n if ((n % 10) == 1 && n != 11)\n return 'one';\n return 'other';\n },\n '17': function(n) {\n if (n == 3)\n return 'few';\n if (n === 0)\n return 'zero';\n if (n == 6)\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '18': function(n) {\n if (n === 0)\n return 'zero';\n if ((isBetween(n, 0, 2)) && n !== 0 && n != 2)\n return 'one';\n return 'other';\n },\n '19': function(n) {\n if ((isBetween(n, 2, 10)))\n return 'few';\n if ((isBetween(n, 0, 1)))\n return 'one';\n return 'other';\n },\n '20': function(n) {\n if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !(\n isBetween((n % 100), 10, 19) ||\n isBetween((n % 100), 70, 79) ||\n isBetween((n % 100), 90, 99)\n ))\n return 'few';\n if ((n % 1000000) === 0 && n !== 0)\n return 'many';\n if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92]))\n return 'two';\n if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91]))\n return 'one';\n return 'other';\n },\n '21': function(n) {\n if (n === 0)\n return 'zero';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '22': function(n) {\n if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99)))\n return 'one';\n return 'other';\n },\n '23': function(n) {\n if ((isBetween((n % 10), 1, 2)) || (n % 20) === 0)\n return 'one';\n return 'other';\n },\n '24': function(n) {\n if ((isBetween(n, 3, 10) || isBetween(n, 13, 19)))\n return 'few';\n if (isIn(n, [2, 12]))\n return 'two';\n if (isIn(n, [1, 11]))\n return 'one';\n return 'other';\n }\n };\n\n // return a function that gives the plural form name for a given integer\n var index = locales2rules[lang.replace(/-.*$/, '')];\n if (!(index in pluralRules)) {\n console.warn('plural form unknown for [' + lang + ']');\n return function() { return 'other'; };\n }\n return pluralRules[index];\n }\n\n // pre-defined 'plural' macro\n gMacros.plural = function(str, param, key, prop) {\n var n = parseFloat(param);\n if (isNaN(n))\n return str;\n\n // TODO: support other properties (l20n still doesn't...)\n if (prop != gTextProp)\n return str;\n\n // initialize _pluralRules\n if (!gMacros._pluralRules) {\n gMacros._pluralRules = getPluralRules(gLanguage);\n }\n var index = '[' + gMacros._pluralRules(n) + ']';\n\n // try to find a [zero|one|two] key if it's defined\n if (n === 0 && (key + '[zero]') in gL10nData) {\n str = gL10nData[key + '[zero]'][prop];\n } else if (n == 1 && (key + '[one]') in gL10nData) {\n str = gL10nData[key + '[one]'][prop];\n } else if (n == 2 && (key + '[two]') in gL10nData) {\n str = gL10nData[key + '[two]'][prop];\n } else if ((key + index) in gL10nData) {\n str = gL10nData[key + index][prop];\n } else if ((key + '[other]') in gL10nData) {\n str = gL10nData[key + '[other]'][prop];\n }\n\n return str;\n };\n\n\n /**\n * l10n dictionary functions\n */\n\n // fetch an l10n object, warn if not found, apply `args' if possible\n function getL10nData(key, args, fallback) {\n var data = gL10nData[key];\n if (!data) {\n console.warn('#' + key + ' is undefined.');\n if (!fallback) {\n return null;\n }\n data = fallback;\n }\n\n /** This is where l10n expressions should be processed.\n * The plan is to support C-style expressions from the l20n project;\n * until then, only two kinds of simple expressions are supported:\n * {[ index ]} and {{ arguments }}.\n */\n var rv = {};\n for (var prop in data) {\n var str = data[prop];\n str = substIndexes(str, args, key, prop);\n str = substArguments(str, args, key);\n rv[prop] = str;\n }\n return rv;\n }\n\n // replace {[macros]} with their values\n function substIndexes(str, args, key, prop) {\n var reIndex = /\\{\\[\\s*([a-zA-Z]+)\\(([a-zA-Z]+)\\)\\s*\\]\\}/;\n var reMatch = reIndex.exec(str);\n if (!reMatch || !reMatch.length)\n return str;\n\n // an index/macro has been found\n // Note: at the moment, only one parameter is supported\n var macroName = reMatch[1];\n var paramName = reMatch[2];\n var param;\n if (args && paramName in args) {\n param = args[paramName];\n } else if (paramName in gL10nData) {\n param = gL10nData[paramName];\n }\n\n // there's no macro parser yet: it has to be defined in gMacros\n if (macroName in gMacros) {\n var macro = gMacros[macroName];\n str = macro(str, param, key, prop);\n }\n return str;\n }\n\n // replace {{arguments}} with their values\n function substArguments(str, args, key) {\n var reArgs = /\\{\\{\\s*(.+?)\\s*\\}\\}/g;\n return str.replace(reArgs, function(matched_text, arg) {\n if (args && arg in args) {\n return args[arg];\n }\n if (arg in gL10nData) {\n return gL10nData[arg];\n }\n console.log('argument {{' + arg + '}} for #' + key + ' is undefined.');\n return matched_text;\n });\n }\n\n // translate an HTML element\n function translateElement(element) {\n var l10n = getL10nAttributes(element);\n if (!l10n.id)\n return;\n\n // get the related l10n object\n var data = getL10nData(l10n.id, l10n.args);\n if (!data) {\n console.warn('#' + l10n.id + ' is undefined.');\n return;\n }\n\n // translate element (TODO: security checks?)\n if (data[gTextProp]) { // XXX\n if (getChildElementCount(element) === 0) {\n element[gTextProp] = data[gTextProp];\n } else {\n // this element has element children: replace the content of the first\n // (non-empty) child textNode and clear other child textNodes\n var children = element.childNodes;\n var found = false;\n for (var i = 0, l = children.length; i < l; i++) {\n if (children[i].nodeType === 3 && /\\S/.test(children[i].nodeValue)) {\n if (found) {\n children[i].nodeValue = '';\n } else {\n children[i].nodeValue = data[gTextProp];\n found = true;\n }\n }\n }\n // if no (non-empty) textNode is found, insert a textNode before the\n // first element child.\n if (!found) {\n var textNode = document.createTextNode(data[gTextProp]);\n element.insertBefore(textNode, element.firstChild);\n }\n }\n delete data[gTextProp];\n }\n\n for (var k in data) {\n element[k] = data[k];\n }\n }\n\n // webkit browsers don't currently support 'children' on SVG elements...\n function getChildElementCount(element) {\n if (element.children) {\n return element.children.length;\n }\n if (typeof element.childElementCount !== 'undefined') {\n return element.childElementCount;\n }\n var count = 0;\n for (var i = 0; i < element.childNodes.length; i++) {\n count += element.nodeType === 1 ? 1 : 0;\n }\n return count;\n }\n\n // translate an HTML subtree\n function translateFragment(element) {\n element = element || document.documentElement;\n\n // check all translatable children (= w/ a `data-l10n-id' attribute)\n var children = getTranslatableChildren(element);\n var elementCount = children.length;\n for (var i = 0; i < elementCount; i++) {\n translateElement(children[i]);\n }\n\n // translate element itself if necessary\n translateElement(element);\n }\n\n return {\n // get a localized string\n get: function(key, args, fallbackString) {\n var index = key.lastIndexOf('.');\n var prop = gTextProp;\n if (index > 0) { // An attribute has been specified\n prop = key.substring(index + 1);\n key = key.substring(0, index);\n }\n var fallback;\n if (fallbackString) {\n fallback = {};\n fallback[prop] = fallbackString;\n }\n var data = getL10nData(key, args, fallback);\n if (data && prop in data) {\n return data[prop];\n }\n return '{{' + key + '}}';\n },\n\n // debug\n getData: function() { return gL10nData; },\n getText: function() { return gTextData; },\n\n // get|set the document language\n getLanguage: function() { return gLanguage; },\n setLanguage: function(lang, callback) {\n loadLocale(lang, function() {\n if (callback)\n callback();\n });\n },\n\n // get the direction (ltr|rtl) of the current language\n getDirection: function() {\n // http://www.w3.org/International/questions/qa-scripts\n // Arabic, Hebrew, Farsi, Pashto, Urdu\n var rtlList = ['ar', 'he', 'fa', 'ps', 'ur'];\n var shortCode = gLanguage.split('-', 1)[0];\n return (rtlList.indexOf(shortCode) >= 0) ? 'rtl' : 'ltr';\n },\n\n // translate an element or document fragment\n translate: translateFragment,\n\n // this can be used to prevent race conditions\n getReadyState: function() { return gReadyState; },\n ready: function(callback) {\n if (!callback) {\n return;\n } else if (gReadyState == 'complete' || gReadyState == 'interactive') {\n window.setTimeout(function() {\n callback();\n });\n } else if (document.addEventListener) {\n document.addEventListener('localized', function once() {\n document.removeEventListener('localized', once);\n callback();\n });\n }\n }\n };\n}) (window, document);\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobalEventBus, scrollIntoView } from './ui_utils';\nimport { createPromiseCapability } from 'pdfjs-lib';\nimport { getCharacterType } from './pdf_find_utils';\n\nconst FindState = {\n FOUND: 0,\n NOT_FOUND: 1,\n WRAPPED: 2,\n PENDING: 3,\n};\n\nconst FIND_TIMEOUT = 250; // ms\nconst MATCH_SCROLL_OFFSET_TOP = -50; // px\nconst MATCH_SCROLL_OFFSET_LEFT = -400; // px\n\nconst CHARACTERS_TO_NORMALIZE = {\n '\\u2018': '\\'', // Left single quotation mark\n '\\u2019': '\\'', // Right single quotation mark\n '\\u201A': '\\'', // Single low-9 quotation mark\n '\\u201B': '\\'', // Single high-reversed-9 quotation mark\n '\\u201C': '\"', // Left double quotation mark\n '\\u201D': '\"', // Right double quotation mark\n '\\u201E': '\"', // Double low-9 quotation mark\n '\\u201F': '\"', // Double high-reversed-9 quotation mark\n '\\u00BC': '1/4', // Vulgar fraction one quarter\n '\\u00BD': '1/2', // Vulgar fraction one half\n '\\u00BE': '3/4', // Vulgar fraction three quarters\n};\n\nlet normalizationRegex = null;\nfunction normalize(text) {\n if (!normalizationRegex) {\n // Compile the regular expression for text normalization once.\n const replace = Object.keys(CHARACTERS_TO_NORMALIZE).join('');\n normalizationRegex = new RegExp(`[${replace}]`, 'g');\n }\n return text.replace(normalizationRegex, function(ch) {\n return CHARACTERS_TO_NORMALIZE[ch];\n });\n}\n\n/**\n * @typedef {Object} PDFFindControllerOptions\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {EventBus} eventBus - The application event bus.\n */\n\n/**\n * Provides search functionality to find a given string in a PDF document.\n */\nclass PDFFindController {\n /**\n * @param {PDFFindControllerOptions} options\n */\n constructor({ linkService, eventBus = getGlobalEventBus(), }) {\n this._linkService = linkService;\n this._eventBus = eventBus;\n\n this._reset();\n eventBus.on('findbarclose', this._onFindBarClose.bind(this));\n }\n\n get highlightMatches() {\n return this._highlightMatches;\n }\n\n get pageMatches() {\n return this._pageMatches;\n }\n\n get pageMatchesLength() {\n return this._pageMatchesLength;\n }\n\n get selected() {\n return this._selected;\n }\n\n get state() {\n return this._state;\n }\n\n /**\n * Set a reference to the PDF document in order to search it.\n * Note that searching is not possible if this method is not called.\n *\n * @param {PDFDocumentProxy} pdfDocument - The PDF document to search.\n */\n setDocument(pdfDocument) {\n if (this._pdfDocument) {\n this._reset();\n }\n if (!pdfDocument) {\n return;\n }\n this._pdfDocument = pdfDocument;\n this._firstPageCapability.resolve();\n }\n\n executeCommand(cmd, state) {\n if (!state) {\n return;\n }\n const pdfDocument = this._pdfDocument;\n\n if (this._state === null || this._shouldDirtyMatch(cmd, state)) {\n this._dirtyMatch = true;\n }\n this._state = state;\n if (cmd !== 'findhighlightallchange') {\n this._updateUIState(FindState.PENDING);\n }\n\n this._firstPageCapability.promise.then(() => {\n // If the document was closed before searching began, or if the search\n // operation was relevant for a previously opened document, do nothing.\n if (!this._pdfDocument ||\n (pdfDocument && this._pdfDocument !== pdfDocument)) {\n return;\n }\n this._extractText();\n\n const findbarClosed = !this._highlightMatches;\n const pendingTimeout = !!this._findTimeout;\n\n if (this._findTimeout) {\n clearTimeout(this._findTimeout);\n this._findTimeout = null;\n }\n if (cmd === 'find') {\n // Trigger the find action with a small delay to avoid starting the\n // search when the user is still typing (saving resources).\n this._findTimeout = setTimeout(() => {\n this._nextMatch();\n this._findTimeout = null;\n }, FIND_TIMEOUT);\n } else if (this._dirtyMatch) {\n // Immediately trigger searching for non-'find' operations, when the\n // current state needs to be reset and matches re-calculated.\n this._nextMatch();\n } else if (cmd === 'findagain') {\n this._nextMatch();\n\n // When the findbar was previously closed, and `highlightAll` is set,\n // ensure that the matches on all active pages are highlighted again.\n if (findbarClosed && this._state.highlightAll) {\n this._updateAllPages();\n }\n } else if (cmd === 'findhighlightallchange') {\n // If there was a pending search operation, synchronously trigger a new\n // search *first* to ensure that the correct matches are highlighted.\n if (pendingTimeout) {\n this._nextMatch();\n } else {\n this._highlightMatches = true;\n }\n this._updateAllPages(); // Update the highlighting on all active pages.\n } else {\n this._nextMatch();\n }\n });\n }\n\n scrollMatchIntoView({ element = null, pageIndex = -1, matchIndex = -1, }) {\n if (!this._scrollMatches || !element) {\n return;\n } else if (matchIndex === -1 || matchIndex !== this._selected.matchIdx) {\n return;\n } else if (pageIndex === -1 || pageIndex !== this._selected.pageIdx) {\n return;\n }\n this._scrollMatches = false; // Ensure that scrolling only happens once.\n\n const spot = {\n top: MATCH_SCROLL_OFFSET_TOP,\n left: MATCH_SCROLL_OFFSET_LEFT,\n };\n scrollIntoView(element, spot, /* skipOverflowHiddenElements = */ true);\n }\n\n _reset() {\n this._highlightMatches = false;\n this._scrollMatches = false;\n this._pdfDocument = null;\n this._pageMatches = [];\n this._pageMatchesLength = [];\n this._state = null;\n this._selected = { // Currently selected match.\n pageIdx: -1,\n matchIdx: -1,\n };\n this._offset = { // Where the find algorithm currently is in the document.\n pageIdx: null,\n matchIdx: null,\n wrapped: false,\n };\n this._extractTextPromises = [];\n this._pageContents = []; // Stores the normalized text for each page.\n this._matchesCountTotal = 0;\n this._pagesToSearch = null;\n this._pendingFindMatches = Object.create(null);\n this._resumePageIdx = null;\n this._dirtyMatch = false;\n clearTimeout(this._findTimeout);\n this._findTimeout = null;\n\n this._firstPageCapability = createPromiseCapability();\n }\n\n /**\n * @return {string} The (current) normalized search query.\n */\n get _query() {\n if (this._state.query !== this._rawQuery) {\n this._rawQuery = this._state.query;\n this._normalizedQuery = normalize(this._state.query);\n }\n return this._normalizedQuery;\n }\n\n _shouldDirtyMatch(cmd, state) {\n // When the search query changes, regardless of the actual search command\n // used, always re-calculate matches to avoid errors (fixes bug 1030622).\n if (state.query !== this._state.query) {\n return true;\n }\n switch (cmd) {\n case 'findagain':\n const pageNumber = this._selected.pageIdx + 1;\n const linkService = this._linkService;\n // Only treat a 'findagain' event as a new search operation when it's\n // *absolutely* certain that the currently selected match is no longer\n // visible, e.g. as a result of the user scrolling in the document.\n //\n // NOTE: If only a simple `this._linkService.page` check was used here,\n // there's a risk that consecutive 'findagain' operations could \"skip\"\n // over matches at the top/bottom of pages thus making them completely\n // inaccessible when there's multiple pages visible in the viewer.\n if (pageNumber >= 1 && pageNumber <= linkService.pagesCount &&\n pageNumber !== linkService.page &&\n !linkService.isPageVisible(pageNumber)) {\n return true;\n }\n return false;\n case 'findhighlightallchange':\n return false;\n }\n return true;\n }\n\n /**\n * Helper for multi-term search that fills the `matchesWithLength` array\n * and handles cases where one search term includes another search term (for\n * example, \"tamed tame\" or \"this is\"). It looks for intersecting terms in\n * the `matches` and keeps elements with a longer match length.\n */\n _prepareMatches(matchesWithLength, matches, matchesLength) {\n function isSubTerm(matchesWithLength, currentIndex) {\n const currentElem = matchesWithLength[currentIndex];\n const nextElem = matchesWithLength[currentIndex + 1];\n\n // Check for cases like \"TAMEd TAME\".\n if (currentIndex < matchesWithLength.length - 1 &&\n currentElem.match === nextElem.match) {\n currentElem.skipped = true;\n return true;\n }\n\n // Check for cases like \"thIS IS\".\n for (let i = currentIndex - 1; i >= 0; i--) {\n const prevElem = matchesWithLength[i];\n if (prevElem.skipped) {\n continue;\n }\n if (prevElem.match + prevElem.matchLength < currentElem.match) {\n break;\n }\n if (prevElem.match + prevElem.matchLength >=\n currentElem.match + currentElem.matchLength) {\n currentElem.skipped = true;\n return true;\n }\n }\n return false;\n }\n\n // Sort the array of `{ match: <match>, matchLength: <matchLength> }`\n // objects on increasing index first and on the length otherwise.\n matchesWithLength.sort(function(a, b) {\n return a.match === b.match ? a.matchLength - b.matchLength :\n a.match - b.match;\n });\n for (let i = 0, len = matchesWithLength.length; i < len; i++) {\n if (isSubTerm(matchesWithLength, i)) {\n continue;\n }\n matches.push(matchesWithLength[i].match);\n matchesLength.push(matchesWithLength[i].matchLength);\n }\n }\n\n /**\n * Determine if the search query constitutes a \"whole word\", by comparing the\n * first/last character type with the preceding/following character type.\n */\n _isEntireWord(content, startIdx, length) {\n if (startIdx > 0) {\n const first = content.charCodeAt(startIdx);\n const limit = content.charCodeAt(startIdx - 1);\n if (getCharacterType(first) === getCharacterType(limit)) {\n return false;\n }\n }\n const endIdx = (startIdx + length - 1);\n if (endIdx < (content.length - 1)) {\n const last = content.charCodeAt(endIdx);\n const limit = content.charCodeAt(endIdx + 1);\n if (getCharacterType(last) === getCharacterType(limit)) {\n return false;\n }\n }\n return true;\n }\n\n _calculatePhraseMatch(query, pageIndex, pageContent, entireWord) {\n const matches = [];\n const queryLen = query.length;\n\n let matchIdx = -queryLen;\n while (true) {\n matchIdx = pageContent.indexOf(query, matchIdx + queryLen);\n if (matchIdx === -1) {\n break;\n }\n if (entireWord && !this._isEntireWord(pageContent, matchIdx, queryLen)) {\n continue;\n }\n matches.push(matchIdx);\n }\n this._pageMatches[pageIndex] = matches;\n }\n\n _calculateWordMatch(query, pageIndex, pageContent, entireWord) {\n const matchesWithLength = [];\n\n // Divide the query into pieces and search for text in each piece.\n const queryArray = query.match(/\\S+/g);\n for (let i = 0, len = queryArray.length; i < len; i++) {\n const subquery = queryArray[i];\n const subqueryLen = subquery.length;\n\n let matchIdx = -subqueryLen;\n while (true) {\n matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen);\n if (matchIdx === -1) {\n break;\n }\n if (entireWord &&\n !this._isEntireWord(pageContent, matchIdx, subqueryLen)) {\n continue;\n }\n // Other searches do not, so we store the length.\n matchesWithLength.push({\n match: matchIdx,\n matchLength: subqueryLen,\n skipped: false,\n });\n }\n }\n\n // Prepare arrays for storing the matches.\n this._pageMatchesLength[pageIndex] = [];\n this._pageMatches[pageIndex] = [];\n\n // Sort `matchesWithLength`, remove intersecting terms and put the result\n // into the two arrays.\n this._prepareMatches(matchesWithLength, this._pageMatches[pageIndex],\n this._pageMatchesLength[pageIndex]);\n }\n\n _calculateMatch(pageIndex) {\n let pageContent = this._pageContents[pageIndex];\n let query = this._query;\n const { caseSensitive, entireWord, phraseSearch, } = this._state;\n\n if (query.length === 0) {\n // Do nothing: the matches should be wiped out already.\n return;\n }\n\n if (!caseSensitive) {\n pageContent = pageContent.toLowerCase();\n query = query.toLowerCase();\n }\n\n if (phraseSearch) {\n this._calculatePhraseMatch(query, pageIndex, pageContent, entireWord);\n } else {\n this._calculateWordMatch(query, pageIndex, pageContent, entireWord);\n }\n\n // When `highlightAll` is set, ensure that the matches on previously\n // rendered (and still active) pages are correctly highlighted.\n if (this._state.highlightAll) {\n this._updatePage(pageIndex);\n }\n if (this._resumePageIdx === pageIndex) {\n this._resumePageIdx = null;\n this._nextPageMatch();\n }\n\n // Update the match count.\n const pageMatchesCount = this._pageMatches[pageIndex].length;\n if (pageMatchesCount > 0) {\n this._matchesCountTotal += pageMatchesCount;\n this._updateUIResultsCount();\n }\n }\n\n _extractText() {\n // Perform text extraction once if this method is called multiple times.\n if (this._extractTextPromises.length > 0) {\n return;\n }\n\n let promise = Promise.resolve();\n for (let i = 0, ii = this._linkService.pagesCount; i < ii; i++) {\n const extractTextCapability = createPromiseCapability();\n this._extractTextPromises[i] = extractTextCapability.promise;\n\n promise = promise.then(() => {\n return this._pdfDocument.getPage(i + 1).then((pdfPage) => {\n return pdfPage.getTextContent({\n normalizeWhitespace: true,\n });\n }).then((textContent) => {\n const textItems = textContent.items;\n const strBuf = [];\n\n for (let j = 0, jj = textItems.length; j < jj; j++) {\n strBuf.push(textItems[j].str);\n }\n\n // Store the normalized page content (text items) as one string.\n this._pageContents[i] = normalize(strBuf.join(''));\n extractTextCapability.resolve(i);\n }, (reason) => {\n console.error(`Unable to get text content for page ${i + 1}`, reason);\n // Page error -- assuming no text content.\n this._pageContents[i] = '';\n extractTextCapability.resolve(i);\n });\n });\n }\n }\n\n _updatePage(index) {\n if (this._scrollMatches && this._selected.pageIdx === index) {\n // If the page is selected, scroll the page into view, which triggers\n // rendering the page, which adds the text layer. Once the text layer\n // is built, it will attempt to scroll the selected match into view.\n this._linkService.page = index + 1;\n }\n\n this._eventBus.dispatch('updatetextlayermatches', {\n source: this,\n pageIndex: index,\n });\n }\n\n _updateAllPages() {\n this._eventBus.dispatch('updatetextlayermatches', {\n source: this,\n pageIndex: -1,\n });\n }\n\n _nextMatch() {\n const previous = this._state.findPrevious;\n const currentPageIndex = this._linkService.page - 1;\n const numPages = this._linkService.pagesCount;\n\n this._highlightMatches = true;\n\n if (this._dirtyMatch) {\n // Need to recalculate the matches, reset everything.\n this._dirtyMatch = false;\n this._selected.pageIdx = this._selected.matchIdx = -1;\n this._offset.pageIdx = currentPageIndex;\n this._offset.matchIdx = null;\n this._offset.wrapped = false;\n this._resumePageIdx = null;\n this._pageMatches.length = 0;\n this._pageMatchesLength.length = 0;\n this._matchesCountTotal = 0;\n\n this._updateAllPages(); // Wipe out any previously highlighted matches.\n\n for (let i = 0; i < numPages; i++) {\n // Start finding the matches as soon as the text is extracted.\n if (this._pendingFindMatches[i] === true) {\n continue;\n }\n this._pendingFindMatches[i] = true;\n this._extractTextPromises[i].then((pageIdx) => {\n delete this._pendingFindMatches[pageIdx];\n this._calculateMatch(pageIdx);\n });\n }\n }\n\n // If there's no query there's no point in searching.\n if (this._query === '') {\n this._updateUIState(FindState.FOUND);\n return;\n }\n // If we're waiting on a page, we return since we can't do anything else.\n if (this._resumePageIdx) {\n return;\n }\n\n const offset = this._offset;\n // Keep track of how many pages we should maximally iterate through.\n this._pagesToSearch = numPages;\n // If there's already a `matchIdx` that means we are iterating through a\n // page's matches.\n if (offset.matchIdx !== null) {\n const numPageMatches = this._pageMatches[offset.pageIdx].length;\n if ((!previous && offset.matchIdx + 1 < numPageMatches) ||\n (previous && offset.matchIdx > 0)) {\n // The simple case; we just have advance the matchIdx to select\n // the next match on the page.\n offset.matchIdx = (previous ? offset.matchIdx - 1 :\n offset.matchIdx + 1);\n this._updateMatch(/* found = */ true);\n return;\n }\n // We went beyond the current page's matches, so we advance to\n // the next page.\n this._advanceOffsetPage(previous);\n }\n // Start searching through the page.\n this._nextPageMatch();\n }\n\n _matchesReady(matches) {\n const offset = this._offset;\n const numMatches = matches.length;\n const previous = this._state.findPrevious;\n\n if (numMatches) {\n // There were matches for the page, so initialize `matchIdx`.\n offset.matchIdx = (previous ? numMatches - 1 : 0);\n this._updateMatch(/* found = */ true);\n return true;\n }\n // No matches, so attempt to search the next page.\n this._advanceOffsetPage(previous);\n if (offset.wrapped) {\n offset.matchIdx = null;\n if (this._pagesToSearch < 0) {\n // No point in wrapping again, there were no matches.\n this._updateMatch(/* found = */ false);\n // While matches were not found, searching for a page\n // with matches should nevertheless halt.\n return true;\n }\n }\n // Matches were not found (and searching is not done).\n return false;\n }\n\n _nextPageMatch() {\n if (this._resumePageIdx !== null) {\n console.error('There can only be one pending page.');\n }\n\n let matches = null;\n do {\n const pageIdx = this._offset.pageIdx;\n matches = this._pageMatches[pageIdx];\n if (!matches) {\n // The matches don't exist yet for processing by `_matchesReady`,\n // so set a resume point for when they do exist.\n this._resumePageIdx = pageIdx;\n break;\n }\n } while (!this._matchesReady(matches));\n }\n\n _advanceOffsetPage(previous) {\n const offset = this._offset;\n const numPages = this._linkService.pagesCount;\n offset.pageIdx = (previous ? offset.pageIdx - 1 : offset.pageIdx + 1);\n offset.matchIdx = null;\n\n this._pagesToSearch--;\n\n if (offset.pageIdx >= numPages || offset.pageIdx < 0) {\n offset.pageIdx = (previous ? numPages - 1 : 0);\n offset.wrapped = true;\n }\n }\n\n _updateMatch(found = false) {\n let state = FindState.NOT_FOUND;\n const wrapped = this._offset.wrapped;\n this._offset.wrapped = false;\n\n if (found) {\n const previousPage = this._selected.pageIdx;\n this._selected.pageIdx = this._offset.pageIdx;\n this._selected.matchIdx = this._offset.matchIdx;\n state = (wrapped ? FindState.WRAPPED : FindState.FOUND);\n\n // Update the currently selected page to wipe out any selected matches.\n if (previousPage !== -1 && previousPage !== this._selected.pageIdx) {\n this._updatePage(previousPage);\n }\n }\n\n this._updateUIState(state, this._state.findPrevious);\n if (this._selected.pageIdx !== -1) {\n // Ensure that the match will be scrolled into view.\n this._scrollMatches = true;\n\n this._updatePage(this._selected.pageIdx);\n }\n }\n\n _onFindBarClose(evt) {\n const pdfDocument = this._pdfDocument;\n // Since searching is asynchronous, ensure that the removal of highlighted\n // matches (from the UI) is async too such that the 'updatetextlayermatches'\n // events will always be dispatched in the expected order.\n this._firstPageCapability.promise.then(() => {\n // Only update the UI if the document is open, and is the current one.\n if (!this._pdfDocument ||\n (pdfDocument && this._pdfDocument !== pdfDocument)) {\n return;\n }\n // Ensure that a pending, not yet started, search operation is aborted.\n if (this._findTimeout) {\n clearTimeout(this._findTimeout);\n this._findTimeout = null;\n }\n // Abort any long running searches, to avoid a match being scrolled into\n // view *after* the findbar has been closed. In this case `this._offset`\n // will most likely differ from `this._selected`, hence we also ensure\n // that any new search operation will always start with a clean slate.\n if (this._resumePageIdx) {\n this._resumePageIdx = null;\n this._dirtyMatch = true;\n }\n // Avoid the UI being in a pending state when the findbar is re-opened.\n this._updateUIState(FindState.FOUND);\n\n this._highlightMatches = false;\n this._updateAllPages(); // Wipe out any previously highlighted matches.\n });\n }\n\n _requestMatchesCount() {\n const { pageIdx, matchIdx, } = this._selected;\n let current = 0, total = this._matchesCountTotal;\n if (matchIdx !== -1) {\n for (let i = 0; i < pageIdx; i++) {\n current += (this._pageMatches[i] && this._pageMatches[i].length) || 0;\n }\n current += matchIdx + 1;\n }\n // When searching starts, this method may be called before the `pageMatches`\n // have been counted (in `_calculateMatch`). Ensure that the UI won't show\n // temporarily broken state when the active find result doesn't make sense.\n if (current < 1 || current > total) {\n current = total = 0;\n }\n return { current, total, };\n }\n\n _updateUIResultsCount() {\n this._eventBus.dispatch('updatefindmatchescount', {\n source: this,\n matchesCount: this._requestMatchesCount(),\n });\n }\n\n _updateUIState(state, previous) {\n this._eventBus.dispatch('updatefindcontrolstate', {\n source: this,\n state,\n previous,\n matchesCount: this._requestMatchesCount(),\n });\n }\n}\n\nexport {\n FindState,\n PDFFindController,\n};\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CharacterType = {\n SPACE: 0,\n ALPHA_LETTER: 1,\n PUNCT: 2,\n HAN_LETTER: 3,\n KATAKANA_LETTER: 4,\n HIRAGANA_LETTER: 5,\n HALFWIDTH_KATAKANA_LETTER: 6,\n THAI_LETTER: 7,\n};\n\nfunction isAlphabeticalScript(charCode) {\n return charCode < 0x2E80;\n}\n\nfunction isAscii(charCode) {\n return (charCode & 0xFF80) === 0;\n}\n\nfunction isAsciiAlpha(charCode) {\n return (charCode >= /* a = */ 0x61 && charCode <= /* z = */ 0x7A) ||\n (charCode >= /* A = */ 0x41 && charCode <= /* Z = */ 0x5A);\n}\n\nfunction isAsciiDigit(charCode) {\n return (charCode >= /* 0 = */ 0x30 && charCode <= /* 9 = */ 0x39);\n}\n\nfunction isAsciiSpace(charCode) {\n return (charCode === /* SPACE = */ 0x20 || charCode === /* TAB = */ 0x09 ||\n charCode === /* CR = */ 0x0D || charCode === /* LF = */ 0x0A);\n}\n\nfunction isHan(charCode) {\n return (charCode >= 0x3400 && charCode <= 0x9FFF) ||\n (charCode >= 0xF900 && charCode <= 0xFAFF);\n}\n\nfunction isKatakana(charCode) {\n return (charCode >= 0x30A0 && charCode <= 0x30FF);\n}\n\nfunction isHiragana(charCode) {\n return (charCode >= 0x3040 && charCode <= 0x309F);\n}\n\nfunction isHalfwidthKatakana(charCode) {\n return (charCode >= 0xFF60 && charCode <= 0xFF9F);\n}\n\nfunction isThai(charCode) {\n return (charCode & 0xFF80) === 0x0E00;\n}\n\n/**\n * This function is based on the word-break detection implemented in:\n * https://hg.mozilla.org/mozilla-central/file/tip/intl/lwbrk/WordBreaker.cpp\n */\nfunction getCharacterType(charCode) {\n if (isAlphabeticalScript(charCode)) {\n if (isAscii(charCode)) {\n if (isAsciiSpace(charCode)) {\n return CharacterType.SPACE;\n } else if (isAsciiAlpha(charCode) || isAsciiDigit(charCode) ||\n charCode === /* UNDERSCORE = */ 0x5F) {\n return CharacterType.ALPHA_LETTER;\n }\n return CharacterType.PUNCT;\n } else if (isThai(charCode)) {\n return CharacterType.THAI_LETTER;\n } else if (charCode === /* NBSP = */ 0xA0) {\n return CharacterType.SPACE;\n }\n return CharacterType.ALPHA_LETTER;\n }\n\n if (isHan(charCode)) {\n return CharacterType.HAN_LETTER;\n } else if (isKatakana(charCode)) {\n return CharacterType.KATAKANA_LETTER;\n } else if (isHiragana(charCode)) {\n return CharacterType.HIRAGANA_LETTER;\n } else if (isHalfwidthKatakana(charCode)) {\n return CharacterType.HALFWIDTH_KATAKANA_LETTER;\n }\n return CharacterType.ALPHA_LETTER;\n}\n\nexport {\n CharacterType,\n getCharacterType,\n};\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n getGlobalEventBus, isValidRotation, parseQueryString, waitOnEventOrTimeout\n} from './ui_utils';\n\n// Heuristic value used when force-resetting `this._blockHashChange`.\nconst HASH_CHANGE_TIMEOUT = 1000; // milliseconds\n// Heuristic value used when adding the current position to the browser history.\nconst POSITION_UPDATED_THRESHOLD = 50;\n// Heuristic value used when adding a temporary position to the browser history.\nconst UPDATE_VIEWAREA_TIMEOUT = 1000; // milliseconds\n\n/**\n * @typedef {Object} PDFHistoryOptions\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {EventBus} eventBus - The application event bus.\n */\n\n/**\n * @typedef {Object} InitializeParameters\n * @property {string} fingerprint - The PDF document's unique fingerprint.\n * @property {boolean} resetHistory - (optional) Reset the browsing history.\n * @property {boolean} updateUrl - (optional) Attempt to update the document\n * URL, with the current hash, when pushing/replacing browser history entries.\n */\n\n/**\n * @typedef {Object} PushParameters\n * @property {string} namedDest - (optional) The named destination. If absent,\n * a stringified version of `explicitDest` is used.\n * @property {Array} explicitDest - The explicit destination array.\n * @property {number} pageNumber - The page to which the destination points.\n */\n\nfunction getCurrentHash() {\n return document.location.hash;\n}\n\nfunction parseCurrentHash(linkService) {\n let hash = unescape(getCurrentHash()).substring(1);\n let params = parseQueryString(hash);\n\n let page = params.page | 0;\n if (!(Number.isInteger(page) && page > 0 && page <= linkService.pagesCount)) {\n page = null;\n }\n return { hash, page, rotation: linkService.rotation, };\n}\n\nclass PDFHistory {\n /**\n * @param {PDFHistoryOptions} options\n */\n constructor({ linkService, eventBus, }) {\n this.linkService = linkService;\n this.eventBus = eventBus || getGlobalEventBus();\n\n this.initialized = false;\n this.initialBookmark = null;\n this.initialRotation = null;\n\n this._boundEvents = Object.create(null);\n this._isViewerInPresentationMode = false;\n this._isPagesLoaded = false;\n\n // Ensure that we don't miss either a 'presentationmodechanged' or a\n // 'pagesloaded' event, by registering the listeners immediately.\n this.eventBus.on('presentationmodechanged', (evt) => {\n this._isViewerInPresentationMode = evt.active || evt.switchInProgress;\n });\n this.eventBus.on('pagesloaded', (evt) => {\n this._isPagesLoaded = !!evt.pagesCount;\n });\n }\n\n /**\n * Initialize the history for the PDF document, using either the current\n * browser history entry or the document hash, whichever is present.\n * @param {InitializeParameters} params\n */\n initialize({ fingerprint, resetHistory = false, updateUrl = false, }) {\n if (!fingerprint || typeof fingerprint !== 'string') {\n console.error(\n 'PDFHistory.initialize: The \"fingerprint\" must be a non-empty string.');\n return;\n }\n let reInitialized = this.initialized && this.fingerprint !== fingerprint;\n this.fingerprint = fingerprint;\n this._updateUrl = (updateUrl === true);\n\n if (!this.initialized) {\n this._bindEvents();\n }\n let state = window.history.state;\n\n this.initialized = true;\n this.initialBookmark = null;\n this.initialRotation = null;\n\n this._popStateInProgress = false;\n this._blockHashChange = 0;\n this._currentHash = getCurrentHash();\n this._numPositionUpdates = 0;\n\n this._uid = this._maxUid = 0;\n this._destination = null;\n this._position = null;\n\n if (!this._isValidState(state, /* checkReload = */ true) || resetHistory) {\n let { hash, page, rotation, } = parseCurrentHash(this.linkService);\n\n if (!hash || reInitialized || resetHistory) {\n // Ensure that the browser history is reset on PDF document load.\n this._pushOrReplaceState(null, /* forceReplace = */ true);\n return;\n }\n // Ensure that the browser history is initialized correctly when\n // the document hash is present on PDF document load.\n this._pushOrReplaceState({ hash, page, rotation, },\n /* forceReplace = */ true);\n return;\n }\n\n // The browser history contains a valid entry, ensure that the history is\n // initialized correctly on PDF document load.\n let destination = state.destination;\n this._updateInternalState(destination, state.uid,\n /* removeTemporary = */ true);\n if (this._uid > this._maxUid) {\n this._maxUid = this._uid;\n }\n\n if (destination.rotation !== undefined) {\n this.initialRotation = destination.rotation;\n }\n if (destination.dest) {\n this.initialBookmark = JSON.stringify(destination.dest);\n\n // If the history is updated, e.g. through the user changing the hash,\n // before the initial destination has become visible, then we do *not*\n // want to potentially add `this._position` to the browser history.\n this._destination.page = null;\n } else if (destination.hash) {\n this.initialBookmark = destination.hash;\n } else if (destination.page) {\n // Fallback case; shouldn't be necessary, but better safe than sorry.\n this.initialBookmark = `page=${destination.page}`;\n }\n }\n\n /**\n * Push an internal destination to the browser history.\n * @param {PushParameters}\n */\n push({ namedDest = null, explicitDest, pageNumber, }) {\n if (!this.initialized) {\n return;\n }\n if (namedDest && typeof namedDest !== 'string') {\n console.error('PDFHistory.push: ' +\n `\"${namedDest}\" is not a valid namedDest parameter.`);\n return;\n } else if (!Array.isArray(explicitDest)) {\n console.error('PDFHistory.push: ' +\n `\"${explicitDest}\" is not a valid explicitDest parameter.`);\n return;\n } else if (!(Number.isInteger(pageNumber) &&\n pageNumber > 0 && pageNumber <= this.linkService.pagesCount)) {\n // Allow an unset `pageNumber` if and only if the history is still empty;\n // please refer to the `this._destination.page = null;` comment above.\n if (pageNumber !== null || this._destination) {\n console.error('PDFHistory.push: ' +\n `\"${pageNumber}\" is not a valid pageNumber parameter.`);\n return;\n }\n }\n\n let hash = namedDest || JSON.stringify(explicitDest);\n if (!hash) {\n // The hash *should* never be undefined, but if that were to occur,\n // avoid any possible issues by not updating the browser history.\n return;\n }\n\n let forceReplace = false;\n if (this._destination &&\n (isDestHashesEqual(this._destination.hash, hash) ||\n isDestArraysEqual(this._destination.dest, explicitDest))) {\n // When the new destination is identical to `this._destination`, and\n // its `page` is undefined, replace the current browser history entry.\n // NOTE: This can only occur if `this._destination` was set either:\n // - through the document hash being specified on load.\n // - through the user changing the hash of the document.\n if (this._destination.page) {\n return;\n }\n forceReplace = true;\n }\n if (this._popStateInProgress && !forceReplace) {\n return;\n }\n\n this._pushOrReplaceState({\n dest: explicitDest,\n hash,\n page: pageNumber,\n rotation: this.linkService.rotation,\n }, forceReplace);\n\n if (!this._popStateInProgress) {\n // Prevent the browser history from updating while the new destination is\n // being scrolled into view, to avoid potentially inconsistent state.\n this._popStateInProgress = true;\n // We defer the resetting of `this._popStateInProgress`, to account for\n // e.g. zooming occuring when the new destination is being navigated to.\n Promise.resolve().then(() => {\n this._popStateInProgress = false;\n });\n }\n }\n\n /**\n * Push the current position to the browser history.\n */\n pushCurrentPosition() {\n if (!this.initialized || this._popStateInProgress) {\n return;\n }\n this._tryPushCurrentPosition();\n }\n\n /**\n * Go back one step in the browser history.\n * NOTE: Avoids navigating away from the document, useful for \"named actions\".\n */\n back() {\n if (!this.initialized || this._popStateInProgress) {\n return;\n }\n let state = window.history.state;\n if (this._isValidState(state) && state.uid > 0) {\n window.history.back();\n }\n }\n\n /**\n * Go forward one step in the browser history.\n * NOTE: Avoids navigating away from the document, useful for \"named actions\".\n */\n forward() {\n if (!this.initialized || this._popStateInProgress) {\n return;\n }\n let state = window.history.state;\n if (this._isValidState(state) && state.uid < this._maxUid) {\n window.history.forward();\n }\n }\n\n /**\n * @returns {boolean} Indicating if the user is currently moving through the\n * browser history, useful e.g. for skipping the next 'hashchange' event.\n */\n get popStateInProgress() {\n return this.initialized &&\n (this._popStateInProgress || this._blockHashChange > 0);\n }\n\n /**\n * @private\n */\n _pushOrReplaceState(destination, forceReplace = false) {\n let shouldReplace = forceReplace || !this._destination;\n let newState = {\n fingerprint: this.fingerprint,\n uid: shouldReplace ? this._uid : (this._uid + 1),\n destination,\n };\n\n if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME') &&\n window.history.state && window.history.state.chromecomState) {\n // history.state.chromecomState is managed by chromecom.js.\n newState.chromecomState = window.history.state.chromecomState;\n }\n this._updateInternalState(destination, newState.uid);\n\n let newUrl;\n if (this._updateUrl && destination && destination.hash) {\n const baseUrl = document.location.href.split('#')[0];\n if (!baseUrl.startsWith('file://')) { // Prevent errors in Firefox.\n newUrl = `${baseUrl}#${destination.hash}`;\n }\n }\n if (shouldReplace) {\n if (newUrl) {\n window.history.replaceState(newState, '', newUrl);\n } else {\n window.history.replaceState(newState, '');\n }\n } else {\n this._maxUid = this._uid;\n if (newUrl) {\n window.history.pushState(newState, '', newUrl);\n } else {\n window.history.pushState(newState, '');\n }\n }\n\n if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME') &&\n top === window) {\n // eslint-disable-next-line no-undef\n chrome.runtime.sendMessage('showPageAction');\n }\n }\n\n /**\n * @private\n */\n _tryPushCurrentPosition(temporary = false) {\n if (!this._position) {\n return;\n }\n let position = this._position;\n if (temporary) {\n position = Object.assign(Object.create(null), this._position);\n position.temporary = true;\n }\n\n if (!this._destination) {\n this._pushOrReplaceState(position);\n return;\n }\n if (this._destination.temporary) {\n // Always replace a previous *temporary* position.\n this._pushOrReplaceState(position, /* forceReplace = */ true);\n return;\n }\n if (this._destination.hash === position.hash) {\n return; // The current document position has not changed.\n }\n if (!this._destination.page &&\n (POSITION_UPDATED_THRESHOLD <= 0 ||\n this._numPositionUpdates <= POSITION_UPDATED_THRESHOLD)) {\n // `this._destination` was set through the user changing the hash of\n // the document. Do not add `this._position` to the browser history,\n // to avoid \"flooding\" it with lots of (nearly) identical entries,\n // since we cannot ensure that the document position has changed.\n return;\n }\n\n let forceReplace = false;\n if (this._destination.page >= position.first &&\n this._destination.page <= position.page) {\n // When the `page` of `this._destination` is still visible, do not\n // update the browsing history when `this._destination` either:\n // - contains an internal destination, since in this case we\n // cannot ensure that the document position has actually changed.\n // - was set through the user changing the hash of the document.\n if (this._destination.dest || !this._destination.first) {\n return;\n }\n // To avoid \"flooding\" the browser history, replace the current entry.\n forceReplace = true;\n }\n this._pushOrReplaceState(position, forceReplace);\n }\n\n /**\n * @private\n */\n _isValidState(state, checkReload = false) {\n if (!state) {\n return false;\n }\n if (state.fingerprint !== this.fingerprint) {\n if (checkReload) {\n // Potentially accept the history entry, even if the fingerprints don't\n // match, when the viewer was reloaded (see issue 6847).\n if (typeof state.fingerprint !== 'string' ||\n state.fingerprint.length !== this.fingerprint.length) {\n return false;\n }\n const [perfEntry] = performance.getEntriesByType('navigation');\n if (!perfEntry || perfEntry.type !== 'reload') {\n return false;\n }\n } else {\n // This should only occur in viewers with support for opening more than\n // one PDF document, e.g. the GENERIC viewer.\n return false;\n }\n }\n if (!Number.isInteger(state.uid) || state.uid < 0) {\n return false;\n }\n if (state.destination === null || typeof state.destination !== 'object') {\n return false;\n }\n return true;\n }\n\n /**\n * @private\n */\n _updateInternalState(destination, uid, removeTemporary = false) {\n if (this._updateViewareaTimeout) {\n // When updating `this._destination`, make sure that we always wait for\n // the next 'updateviewarea' event before (potentially) attempting to\n // push the current position to the browser history.\n clearTimeout(this._updateViewareaTimeout);\n this._updateViewareaTimeout = null;\n }\n if (removeTemporary && destination && destination.temporary) {\n // When the `destination` comes from the browser history,\n // we no longer treat it as a *temporary* position.\n delete destination.temporary;\n }\n this._destination = destination;\n this._uid = uid;\n // This should always be reset when `this._destination` is updated.\n this._numPositionUpdates = 0;\n }\n\n /**\n * @private\n */\n _updateViewarea({ location, }) {\n if (this._updateViewareaTimeout) {\n clearTimeout(this._updateViewareaTimeout);\n this._updateViewareaTimeout = null;\n }\n\n this._position = {\n hash: this._isViewerInPresentationMode ?\n `page=${location.pageNumber}` : location.pdfOpenParams.substring(1),\n page: this.linkService.page,\n first: location.pageNumber,\n rotation: location.rotation,\n };\n\n if (this._popStateInProgress) {\n return;\n }\n\n if (POSITION_UPDATED_THRESHOLD > 0 && this._isPagesLoaded &&\n this._destination && !this._destination.page) {\n // If the current destination was set through the user changing the hash\n // of the document, we will usually not try to push the current position\n // to the browser history; see `this._tryPushCurrentPosition()`.\n //\n // To prevent `this._tryPushCurrentPosition()` from effectively being\n // reduced to a no-op in this case, we will assume that the position\n // *did* in fact change if the 'updateviewarea' event was dispatched\n // more than `POSITION_UPDATED_THRESHOLD` times.\n this._numPositionUpdates++;\n }\n\n if (UPDATE_VIEWAREA_TIMEOUT > 0) {\n // When closing the browser, a 'pagehide' event will be dispatched which\n // *should* allow us to push the current position to the browser history.\n // In practice, it seems that the event is arriving too late in order for\n // the session history to be successfully updated.\n // (For additional details, please refer to the discussion in\n // https://bugzilla.mozilla.org/show_bug.cgi?id=1153393.)\n //\n // To workaround this we attempt to *temporarily* add the current position\n // to the browser history only when the viewer is *idle*,\n // i.e. when scrolling and/or zooming does not occur.\n //\n // PLEASE NOTE: It's absolutely imperative that the browser history is\n // *not* updated too often, since that would render the viewer more or\n // less unusable. Hence the use of a timeout to delay the update until\n // the viewer has been idle for `UPDATE_VIEWAREA_TIMEOUT` milliseconds.\n this._updateViewareaTimeout = setTimeout(() => {\n if (!this._popStateInProgress) {\n this._tryPushCurrentPosition(/* temporary = */ true);\n }\n this._updateViewareaTimeout = null;\n }, UPDATE_VIEWAREA_TIMEOUT);\n }\n }\n\n /**\n * @private\n */\n _popState({ state, }) {\n let newHash = getCurrentHash(), hashChanged = this._currentHash !== newHash;\n this._currentHash = newHash;\n\n if (!state ||\n (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME') &&\n state.chromecomState && !this._isValidState(state))) {\n // This case corresponds to the user changing the hash of the document.\n this._uid++;\n\n let { hash, page, rotation, } = parseCurrentHash(this.linkService);\n this._pushOrReplaceState({ hash, page, rotation, },\n /* forceReplace = */ true);\n return;\n }\n if (!this._isValidState(state)) {\n // This should only occur in viewers with support for opening more than\n // one PDF document, e.g. the GENERIC viewer.\n return;\n }\n\n // Prevent the browser history from updating until the new destination,\n // as stored in the browser history, has been scrolled into view.\n this._popStateInProgress = true;\n\n if (hashChanged) {\n // When the hash changed, implying that the 'popstate' event will be\n // followed by a 'hashchange' event, then we do *not* want to update the\n // browser history when handling the 'hashchange' event (in web/app.js)\n // since that would *overwrite* the new destination navigated to below.\n //\n // To avoid accidentally disabling all future user-initiated hash changes,\n // if there's e.g. another 'hashchange' listener that stops the event\n // propagation, we make sure to always force-reset `this._blockHashChange`\n // after `HASH_CHANGE_TIMEOUT` milliseconds have passed.\n this._blockHashChange++;\n waitOnEventOrTimeout({\n target: window,\n name: 'hashchange',\n delay: HASH_CHANGE_TIMEOUT,\n }).then(() => {\n this._blockHashChange--;\n });\n }\n\n // Navigate to the new destination.\n let destination = state.destination;\n this._updateInternalState(destination, state.uid,\n /* removeTemporary = */ true);\n if (this._uid > this._maxUid) {\n this._maxUid = this._uid;\n }\n\n if (isValidRotation(destination.rotation)) {\n this.linkService.rotation = destination.rotation;\n }\n if (destination.dest) {\n this.linkService.navigateTo(destination.dest);\n } else if (destination.hash) {\n this.linkService.setHash(destination.hash);\n } else if (destination.page) {\n // Fallback case; shouldn't be necessary, but better safe than sorry.\n this.linkService.page = destination.page;\n }\n\n // Since `PDFLinkService.navigateTo` is asynchronous, we thus defer the\n // resetting of `this._popStateInProgress` slightly.\n Promise.resolve().then(() => {\n this._popStateInProgress = false;\n });\n }\n\n /**\n * @private\n */\n _bindEvents() {\n let { _boundEvents, eventBus, } = this;\n\n _boundEvents.updateViewarea = this._updateViewarea.bind(this);\n _boundEvents.popState = this._popState.bind(this);\n _boundEvents.pageHide = (evt) => {\n // Attempt to push the `this._position` into the browser history when\n // navigating away from the document. This is *only* done if the history\n // is empty/temporary, since otherwise an existing browser history entry\n // will end up being overwritten (given that new entries cannot be pushed\n // into the browser history when the 'unload' event has already fired).\n if (!this._destination || this._destination.temporary) {\n this._tryPushCurrentPosition();\n }\n };\n\n eventBus.on('updateviewarea', _boundEvents.updateViewarea);\n window.addEventListener('popstate', _boundEvents.popState);\n window.addEventListener('pagehide', _boundEvents.pageHide);\n }\n}\n\nfunction isDestHashesEqual(destHash, pushHash) {\n if (typeof destHash !== 'string' || typeof pushHash !== 'string') {\n return false;\n }\n if (destHash === pushHash) {\n return true;\n }\n let { nameddest, } = parseQueryString(destHash);\n if (nameddest === pushHash) {\n return true;\n }\n return false;\n}\n\nfunction isDestArraysEqual(firstDest, secondDest) {\n function isEntryEqual(first, second) {\n if (typeof first !== typeof second) {\n return false;\n }\n if (Array.isArray(first) || Array.isArray(second)) {\n return false;\n }\n if (first !== null && typeof first === 'object' && second !== null) {\n if (Object.keys(first).length !== Object.keys(second).length) {\n return false;\n }\n for (let key in first) {\n if (!isEntryEqual(first[key], second[key])) {\n return false;\n }\n }\n return true;\n }\n return first === second || (Number.isNaN(first) && Number.isNaN(second));\n }\n\n if (!(Array.isArray(firstDest) && Array.isArray(secondDest))) {\n return false;\n }\n if (firstDest.length !== secondDest.length) {\n return false;\n }\n for (let i = 0, ii = firstDest.length; i < ii; i++) {\n if (!isEntryEqual(firstDest[i], secondDest[i])) {\n return false;\n }\n }\n return true;\n}\n\nexport {\n PDFHistory,\n isDestHashesEqual,\n isDestArraysEqual,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n approximateFraction, CSS_UNITS, DEFAULT_SCALE, getGlobalEventBus,\n getOutputScale, NullL10n, RendererType, roundToDivide, TextLayerMode\n} from './ui_utils';\nimport {\n createPromiseCapability, RenderingCancelledException, SVGGraphics\n} from 'pdfjs-lib';\nimport { RenderingStates } from './pdf_rendering_queue';\nimport { viewerCompatibilityParams } from './viewer_compatibility';\n\n/**\n * @typedef {Object} PDFPageViewOptions\n * @property {HTMLDivElement} container - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} id - The page unique ID (normally its number).\n * @property {number} scale - The page scale display.\n * @property {PageViewport} defaultViewport - The page viewport.\n * @property {PDFRenderingQueue} renderingQueue - The rendering queue object.\n * @property {IPDFTextLayerFactory} textLayerFactory\n * @property {number} textLayerMode - (optional) Controls if the text layer used\n * for selection and searching is created, and if the improved text selection\n * behaviour is enabled. The constants from {TextLayerMode} should be used.\n * The default value is `TextLayerMode.ENABLE`.\n * @property {IPDFAnnotationLayerFactory} annotationLayerFactory\n * @property {string} imageResourcesPath - (optional) Path for image resources,\n * mainly for annotation icons. Include trailing slash.\n * @property {boolean} renderInteractiveForms - Turns on rendering of\n * interactive form elements. The default is `false`.\n * @property {string} renderer - 'canvas' or 'svg'. The default is 'canvas'.\n * @property {boolean} enableWebGL - (optional) Enables WebGL accelerated\n * rendering for some operations. The default value is `false`.\n * @property {boolean} useOnlyCssZoom - (optional) Enables CSS only zooming.\n * The default value is `false`.\n * @property {number} maxCanvasPixels - (optional) The maximum supported canvas\n * size in total pixels, i.e. width * height. Use -1 for no limit.\n * The default value is 4096 * 4096 (16 mega-pixels).\n * @property {IL10n} l10n - Localization service.\n */\n\nconst MAX_CANVAS_PIXELS = viewerCompatibilityParams.maxCanvasPixels || 16777216;\n\n/**\n * @implements {IRenderableView}\n */\nclass PDFPageView {\n /**\n * @param {PDFPageViewOptions} options\n */\n constructor(options) {\n let container = options.container;\n let defaultViewport = options.defaultViewport;\n\n this.id = options.id;\n this.renderingId = 'page' + this.id;\n\n this.pdfPage = null;\n this.pageLabel = null;\n this.rotation = 0;\n this.scale = options.scale || DEFAULT_SCALE;\n this.viewport = defaultViewport;\n this.pdfPageRotate = defaultViewport.rotation;\n this.hasRestrictedScaling = false;\n this.textLayerMode = Number.isInteger(options.textLayerMode) ?\n options.textLayerMode : TextLayerMode.ENABLE;\n this.imageResourcesPath = options.imageResourcesPath || '';\n this.renderInteractiveForms = options.renderInteractiveForms || false;\n this.useOnlyCssZoom = options.useOnlyCssZoom || false;\n this.maxCanvasPixels = options.maxCanvasPixels || MAX_CANVAS_PIXELS;\n\n this.eventBus = options.eventBus || getGlobalEventBus();\n this.renderingQueue = options.renderingQueue;\n this.textLayerFactory = options.textLayerFactory;\n this.annotationLayerFactory = options.annotationLayerFactory;\n this.renderer = options.renderer || RendererType.CANVAS;\n this.enableWebGL = options.enableWebGL || false;\n this.l10n = options.l10n || NullL10n;\n\n this.paintTask = null;\n this.paintedViewportMap = new WeakMap();\n this.renderingState = RenderingStates.INITIAL;\n this.resume = null;\n this.error = null;\n\n this.onBeforeDraw = null;\n this.onAfterDraw = null;\n\n this.annotationLayer = null;\n this.textLayer = null;\n this.zoomLayer = null;\n\n let div = document.createElement('div');\n div.className = 'page';\n div.style.width = Math.floor(this.viewport.width) + 'px';\n div.style.height = Math.floor(this.viewport.height) + 'px';\n div.setAttribute('data-page-number', this.id);\n this.div = div;\n\n container.appendChild(div);\n }\n\n setPdfPage(pdfPage) {\n this.pdfPage = pdfPage;\n this.pdfPageRotate = pdfPage.rotate;\n\n let totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = pdfPage.getViewport({ scale: this.scale * CSS_UNITS,\n rotation: totalRotation, });\n this.stats = pdfPage.stats;\n this.reset();\n }\n\n destroy() {\n this.reset();\n if (this.pdfPage) {\n this.pdfPage.cleanup();\n }\n }\n\n /**\n * @private\n */\n _resetZoomLayer(removeFromDOM = false) {\n if (!this.zoomLayer) {\n return;\n }\n let zoomLayerCanvas = this.zoomLayer.firstChild;\n this.paintedViewportMap.delete(zoomLayerCanvas);\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n zoomLayerCanvas.width = 0;\n zoomLayerCanvas.height = 0;\n\n if (removeFromDOM) {\n // Note: `ChildNode.remove` doesn't throw if the parent node is undefined.\n this.zoomLayer.remove();\n }\n this.zoomLayer = null;\n }\n\n reset(keepZoomLayer = false, keepAnnotations = false) {\n this.cancelRendering(keepAnnotations);\n this.renderingState = RenderingStates.INITIAL;\n\n let div = this.div;\n div.style.width = Math.floor(this.viewport.width) + 'px';\n div.style.height = Math.floor(this.viewport.height) + 'px';\n\n let childNodes = div.childNodes;\n let currentZoomLayerNode = (keepZoomLayer && this.zoomLayer) || null;\n let currentAnnotationNode = (keepAnnotations && this.annotationLayer &&\n this.annotationLayer.div) || null;\n for (let i = childNodes.length - 1; i >= 0; i--) {\n let node = childNodes[i];\n if (currentZoomLayerNode === node || currentAnnotationNode === node) {\n continue;\n }\n div.removeChild(node);\n }\n div.removeAttribute('data-loaded');\n\n if (currentAnnotationNode) {\n // Hide the annotation layer until all elements are resized\n // so they are not displayed on the already resized page.\n this.annotationLayer.hide();\n } else if (this.annotationLayer) {\n this.annotationLayer.cancel();\n this.annotationLayer = null;\n }\n\n if (!currentZoomLayerNode) {\n if (this.canvas) {\n this.paintedViewportMap.delete(this.canvas);\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n this.canvas.width = 0;\n this.canvas.height = 0;\n delete this.canvas;\n }\n this._resetZoomLayer();\n }\n if (this.svg) {\n this.paintedViewportMap.delete(this.svg);\n delete this.svg;\n }\n\n this.loadingIconDiv = document.createElement('div');\n this.loadingIconDiv.className = 'loadingIcon';\n div.appendChild(this.loadingIconDiv);\n }\n\n update(scale, rotation) {\n this.scale = scale || this.scale;\n if (typeof rotation !== 'undefined') { // The rotation may be zero.\n this.rotation = rotation;\n }\n\n let totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = this.viewport.clone({\n scale: this.scale * CSS_UNITS,\n rotation: totalRotation,\n });\n\n if (this.svg) {\n this.cssTransform(this.svg, true);\n\n this.eventBus.dispatch('pagerendered', {\n source: this,\n pageNumber: this.id,\n cssTransform: true,\n });\n return;\n }\n\n let isScalingRestricted = false;\n if (this.canvas && this.maxCanvasPixels > 0) {\n let outputScale = this.outputScale;\n if (((Math.floor(this.viewport.width) * outputScale.sx) | 0) *\n ((Math.floor(this.viewport.height) * outputScale.sy) | 0) >\n this.maxCanvasPixels) {\n isScalingRestricted = true;\n }\n }\n\n if (this.canvas) {\n if (this.useOnlyCssZoom ||\n (this.hasRestrictedScaling && isScalingRestricted)) {\n this.cssTransform(this.canvas, true);\n\n this.eventBus.dispatch('pagerendered', {\n source: this,\n pageNumber: this.id,\n cssTransform: true,\n });\n return;\n }\n if (!this.zoomLayer && !this.canvas.hasAttribute('hidden')) {\n this.zoomLayer = this.canvas.parentNode;\n this.zoomLayer.style.position = 'absolute';\n }\n }\n if (this.zoomLayer) {\n this.cssTransform(this.zoomLayer.firstChild);\n }\n this.reset(/* keepZoomLayer = */ true, /* keepAnnotations = */ true);\n }\n\n /**\n * PLEASE NOTE: Most likely you want to use the `this.reset()` method,\n * rather than calling this one directly.\n */\n cancelRendering(keepAnnotations = false) {\n if (this.paintTask) {\n this.paintTask.cancel();\n this.paintTask = null;\n }\n this.resume = null;\n\n if (this.textLayer) {\n this.textLayer.cancel();\n this.textLayer = null;\n }\n if (!keepAnnotations && this.annotationLayer) {\n this.annotationLayer.cancel();\n this.annotationLayer = null;\n }\n }\n\n cssTransform(target, redrawAnnotations = false) {\n // Scale target (canvas or svg), its wrapper and page container.\n let width = this.viewport.width;\n let height = this.viewport.height;\n let div = this.div;\n target.style.width = target.parentNode.style.width = div.style.width =\n Math.floor(width) + 'px';\n target.style.height = target.parentNode.style.height = div.style.height =\n Math.floor(height) + 'px';\n // The canvas may have been originally rotated; rotate relative to that.\n let relativeRotation = this.viewport.rotation -\n this.paintedViewportMap.get(target).rotation;\n let absRotation = Math.abs(relativeRotation);\n let scaleX = 1, scaleY = 1;\n if (absRotation === 90 || absRotation === 270) {\n // Scale x and y because of the rotation.\n scaleX = height / width;\n scaleY = width / height;\n }\n let cssTransform = 'rotate(' + relativeRotation + 'deg) ' +\n 'scale(' + scaleX + ',' + scaleY + ')';\n target.style.transform = cssTransform;\n\n if (this.textLayer) {\n // Rotating the text layer is more complicated since the divs inside the\n // the text layer are rotated.\n // TODO: This could probably be simplified by drawing the text layer in\n // one orientation and then rotating overall.\n let textLayerViewport = this.textLayer.viewport;\n let textRelativeRotation = this.viewport.rotation -\n textLayerViewport.rotation;\n let textAbsRotation = Math.abs(textRelativeRotation);\n let scale = width / textLayerViewport.width;\n if (textAbsRotation === 90 || textAbsRotation === 270) {\n scale = width / textLayerViewport.height;\n }\n let textLayerDiv = this.textLayer.textLayerDiv;\n let transX, transY;\n switch (textAbsRotation) {\n case 0:\n transX = transY = 0;\n break;\n case 90:\n transX = 0;\n transY = '-' + textLayerDiv.style.height;\n break;\n case 180:\n transX = '-' + textLayerDiv.style.width;\n transY = '-' + textLayerDiv.style.height;\n break;\n case 270:\n transX = '-' + textLayerDiv.style.width;\n transY = 0;\n break;\n default:\n console.error('Bad rotation value.');\n break;\n }\n\n textLayerDiv.style.transform =\n 'rotate(' + textAbsRotation + 'deg) ' +\n 'scale(' + scale + ', ' + scale + ') ' +\n 'translate(' + transX + ', ' + transY + ')';\n textLayerDiv.style.transformOrigin = '0% 0%';\n }\n\n if (redrawAnnotations && this.annotationLayer) {\n this.annotationLayer.render(this.viewport, 'display');\n }\n }\n\n get width() {\n return this.viewport.width;\n }\n\n get height() {\n return this.viewport.height;\n }\n\n getPagePoint(x, y) {\n return this.viewport.convertToPdfPoint(x, y);\n }\n\n draw() {\n if (this.renderingState !== RenderingStates.INITIAL) {\n console.error('Must be in new state before drawing');\n this.reset(); // Ensure that we reset all state to prevent issues.\n }\n\n if (!this.pdfPage) {\n this.renderingState = RenderingStates.FINISHED;\n return Promise.reject(new Error('Page is not loaded'));\n }\n\n this.renderingState = RenderingStates.RUNNING;\n\n let pdfPage = this.pdfPage;\n let div = this.div;\n // Wrap the canvas so that if it has a CSS transform for high DPI the\n // overflow will be hidden in Firefox.\n let canvasWrapper = document.createElement('div');\n canvasWrapper.style.width = div.style.width;\n canvasWrapper.style.height = div.style.height;\n canvasWrapper.classList.add('canvasWrapper');\n\n if (this.annotationLayer && this.annotationLayer.div) {\n // The annotation layer needs to stay on top.\n div.insertBefore(canvasWrapper, this.annotationLayer.div);\n } else {\n div.appendChild(canvasWrapper);\n }\n\n let textLayer = null;\n if (this.textLayerMode !== TextLayerMode.DISABLE && this.textLayerFactory) {\n let textLayerDiv = document.createElement('div');\n textLayerDiv.className = 'textLayer';\n textLayerDiv.style.width = canvasWrapper.style.width;\n textLayerDiv.style.height = canvasWrapper.style.height;\n if (this.annotationLayer && this.annotationLayer.div) {\n // The annotation layer needs to stay on top.\n div.insertBefore(textLayerDiv, this.annotationLayer.div);\n } else {\n div.appendChild(textLayerDiv);\n }\n\n textLayer = this.textLayerFactory.\n createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport,\n this.textLayerMode === TextLayerMode.ENABLE_ENHANCE);\n }\n this.textLayer = textLayer;\n\n let renderContinueCallback = null;\n if (this.renderingQueue) {\n renderContinueCallback = (cont) => {\n if (!this.renderingQueue.isHighestPriority(this)) {\n this.renderingState = RenderingStates.PAUSED;\n this.resume = () => {\n this.renderingState = RenderingStates.RUNNING;\n cont();\n };\n return;\n }\n cont();\n };\n }\n\n const finishPaintTask = async (error) => {\n // The paintTask may have been replaced by a new one, so only remove\n // the reference to the paintTask if it matches the one that is\n // triggering this callback.\n if (paintTask === this.paintTask) {\n this.paintTask = null;\n }\n\n if (error instanceof RenderingCancelledException) {\n this.error = null;\n return;\n }\n\n this.renderingState = RenderingStates.FINISHED;\n\n if (this.loadingIconDiv) {\n div.removeChild(this.loadingIconDiv);\n delete this.loadingIconDiv;\n }\n this._resetZoomLayer(/* removeFromDOM = */ true);\n\n this.error = error;\n this.stats = pdfPage.stats;\n if (this.onAfterDraw) {\n this.onAfterDraw();\n }\n this.eventBus.dispatch('pagerendered', {\n source: this,\n pageNumber: this.id,\n cssTransform: false,\n });\n\n if (error) {\n throw error;\n }\n };\n\n let paintTask = this.renderer === RendererType.SVG ?\n this.paintOnSvg(canvasWrapper) :\n this.paintOnCanvas(canvasWrapper);\n paintTask.onRenderContinue = renderContinueCallback;\n this.paintTask = paintTask;\n\n let resultPromise = paintTask.promise.then(function() {\n return finishPaintTask(null).then(function () {\n if (textLayer) {\n let readableStream = pdfPage.streamTextContent({\n normalizeWhitespace: true,\n });\n textLayer.setTextContentStream(readableStream);\n textLayer.render();\n }\n });\n }, function(reason) {\n return finishPaintTask(reason);\n });\n\n if (this.annotationLayerFactory) {\n if (!this.annotationLayer) {\n this.annotationLayer = this.annotationLayerFactory.\n createAnnotationLayerBuilder(div, pdfPage, this.imageResourcesPath,\n this.renderInteractiveForms, this.l10n);\n }\n this.annotationLayer.render(this.viewport, 'display');\n }\n div.setAttribute('data-loaded', true);\n\n if (this.onBeforeDraw) {\n this.onBeforeDraw();\n }\n return resultPromise;\n }\n\n paintOnCanvas(canvasWrapper) {\n let renderCapability = createPromiseCapability();\n let result = {\n promise: renderCapability.promise,\n onRenderContinue(cont) {\n cont();\n },\n cancel() {\n renderTask.cancel();\n },\n };\n\n let viewport = this.viewport;\n let canvas = document.createElement('canvas');\n canvas.id = this.renderingId;\n\n // Keep the canvas hidden until the first draw callback, or until drawing\n // is complete when `!this.renderingQueue`, to prevent black flickering.\n canvas.setAttribute('hidden', 'hidden');\n let isCanvasHidden = true;\n let showCanvas = function () {\n if (isCanvasHidden) {\n canvas.removeAttribute('hidden');\n isCanvasHidden = false;\n }\n };\n\n canvasWrapper.appendChild(canvas);\n this.canvas = canvas;\n\n if (typeof PDFJSDev === 'undefined' ||\n PDFJSDev.test('MOZCENTRAL || FIREFOX || GENERIC')) {\n canvas.mozOpaque = true;\n }\n\n let ctx = canvas.getContext('2d', { alpha: false, });\n let outputScale = getOutputScale(ctx);\n this.outputScale = outputScale;\n\n if (this.useOnlyCssZoom) {\n let actualSizeViewport = viewport.clone({ scale: CSS_UNITS, });\n // Use a scale that makes the canvas have the originally intended size\n // of the page.\n outputScale.sx *= actualSizeViewport.width / viewport.width;\n outputScale.sy *= actualSizeViewport.height / viewport.height;\n outputScale.scaled = true;\n }\n\n if (this.maxCanvasPixels > 0) {\n let pixelsInViewport = viewport.width * viewport.height;\n let maxScale = Math.sqrt(this.maxCanvasPixels / pixelsInViewport);\n if (outputScale.sx > maxScale || outputScale.sy > maxScale) {\n outputScale.sx = maxScale;\n outputScale.sy = maxScale;\n outputScale.scaled = true;\n this.hasRestrictedScaling = true;\n } else {\n this.hasRestrictedScaling = false;\n }\n }\n\n let sfx = approximateFraction(outputScale.sx);\n let sfy = approximateFraction(outputScale.sy);\n canvas.width = roundToDivide(viewport.width * outputScale.sx, sfx[0]);\n canvas.height = roundToDivide(viewport.height * outputScale.sy, sfy[0]);\n canvas.style.width = roundToDivide(viewport.width, sfx[1]) + 'px';\n canvas.style.height = roundToDivide(viewport.height, sfy[1]) + 'px';\n // Add the viewport so it's known what it was originally drawn with.\n this.paintedViewportMap.set(canvas, viewport);\n\n // Rendering area\n let transform = !outputScale.scaled ? null :\n [outputScale.sx, 0, 0, outputScale.sy, 0, 0];\n let renderContext = {\n canvasContext: ctx,\n transform,\n viewport: this.viewport,\n enableWebGL: this.enableWebGL,\n renderInteractiveForms: this.renderInteractiveForms,\n };\n let renderTask = this.pdfPage.render(renderContext);\n renderTask.onContinue = function (cont) {\n showCanvas();\n if (result.onRenderContinue) {\n result.onRenderContinue(cont);\n } else {\n cont();\n }\n };\n\n renderTask.promise.then(function() {\n showCanvas();\n renderCapability.resolve(undefined);\n }, function(error) {\n showCanvas();\n renderCapability.reject(error);\n });\n return result;\n }\n\n paintOnSvg(wrapper) {\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL || CHROME')) {\n // Return a mock object, to prevent errors such as e.g.\n // \"TypeError: paintTask.promise is undefined\".\n return {\n promise: Promise.reject(new Error('SVG rendering is not supported.')),\n onRenderContinue(cont) { },\n cancel() { },\n };\n }\n\n let cancelled = false;\n let ensureNotCancelled = () => {\n if (cancelled) {\n throw new RenderingCancelledException(\n 'Rendering cancelled, page ' + this.id, 'svg');\n }\n };\n\n let pdfPage = this.pdfPage;\n let actualSizeViewport = this.viewport.clone({ scale: CSS_UNITS, });\n let promise = pdfPage.getOperatorList().then((opList) => {\n ensureNotCancelled();\n let svgGfx = new SVGGraphics(pdfPage.commonObjs, pdfPage.objs);\n return svgGfx.getSVG(opList, actualSizeViewport).then((svg) => {\n ensureNotCancelled();\n this.svg = svg;\n this.paintedViewportMap.set(svg, actualSizeViewport);\n\n svg.style.width = wrapper.style.width;\n svg.style.height = wrapper.style.height;\n this.renderingState = RenderingStates.FINISHED;\n wrapper.appendChild(svg);\n });\n });\n\n return {\n promise,\n onRenderContinue(cont) {\n cont();\n },\n cancel() {\n cancelled = true;\n },\n };\n }\n\n /**\n * @param {string|null} label\n */\n setPageLabel(label) {\n this.pageLabel = (typeof label === 'string' ? label : null);\n\n if (this.pageLabel !== null) {\n this.div.setAttribute('data-page-label', this.pageLabel);\n } else {\n this.div.removeAttribute('data-page-label');\n }\n }\n}\n\nexport {\n PDFPageView,\n};\n","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CLEANUP_TIMEOUT = 30000;\n\nconst RenderingStates = {\n INITIAL: 0,\n RUNNING: 1,\n PAUSED: 2,\n FINISHED: 3,\n};\n\n/**\n * Controls rendering of the views for pages and thumbnails.\n */\nclass PDFRenderingQueue {\n constructor() {\n this.pdfViewer = null;\n this.pdfThumbnailViewer = null;\n this.onIdle = null;\n this.highestPriorityPage = null;\n this.idleTimeout = null;\n this.printing = false;\n this.isThumbnailViewEnabled = false;\n }\n\n /**\n * @param {PDFViewer} pdfViewer\n */\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n }\n\n /**\n * @param {PDFThumbnailViewer} pdfThumbnailViewer\n */\n setThumbnailViewer(pdfThumbnailViewer) {\n this.pdfThumbnailViewer = pdfThumbnailViewer;\n }\n\n /**\n * @param {IRenderableView} view\n * @returns {boolean}\n */\n isHighestPriority(view) {\n return this.highestPriorityPage === view.renderingId;\n }\n\n /**\n * @param {Object} currentlyVisiblePages\n */\n renderHighestPriority(currentlyVisiblePages) {\n if (this.idleTimeout) {\n clearTimeout(this.idleTimeout);\n this.idleTimeout = null;\n }\n\n // Pages have a higher priority than thumbnails, so check them first.\n if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {\n return;\n }\n // No pages needed rendering, so check thumbnails.\n if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) {\n if (this.pdfThumbnailViewer.forceRendering()) {\n return;\n }\n }\n\n if (this.printing) {\n // If printing is currently ongoing do not reschedule cleanup.\n return;\n }\n\n if (this.onIdle) {\n this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);\n }\n }\n\n /**\n * @param {Object} visible\n * @param {Array} views\n * @param {boolean} scrolledDown\n */\n getHighestPriority(visible, views, scrolledDown) {\n /**\n * The state has changed. Figure out which page has the highest priority to\n * render next (if any).\n *\n * Priority:\n * 1. visible pages\n * 2. if last scrolled down, the page after the visible pages, or\n * if last scrolled up, the page before the visible pages\n */\n let visibleViews = visible.views;\n\n let numVisible = visibleViews.length;\n if (numVisible === 0) {\n return null;\n }\n for (let i = 0; i < numVisible; ++i) {\n let view = visibleViews[i].view;\n if (!this.isViewFinished(view)) {\n return view;\n }\n }\n\n // All the visible views have rendered; try to render next/previous pages.\n if (scrolledDown) {\n let nextPageIndex = visible.last.id;\n // IDs start at 1, so no need to add 1.\n if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) {\n return views[nextPageIndex];\n }\n } else {\n let previousPageIndex = visible.first.id - 2;\n if (views[previousPageIndex] &&\n !this.isViewFinished(views[previousPageIndex])) {\n return views[previousPageIndex];\n }\n }\n // Everything that needs to be rendered has been.\n return null;\n }\n\n /**\n * @param {IRenderableView} view\n * @returns {boolean}\n */\n isViewFinished(view) {\n return view.renderingState === RenderingStates.FINISHED;\n }\n\n /**\n * Render a page or thumbnail view. This calls the appropriate function\n * based on the views state. If the view is already rendered it will return\n * `false`.\n *\n * @param {IRenderableView} view\n */\n renderView(view) {\n switch (view.renderingState) {\n case RenderingStates.FINISHED:\n return false;\n case RenderingStates.PAUSED:\n this.highestPriorityPage = view.renderingId;\n view.resume();\n break;\n case RenderingStates.RUNNING:\n this.highestPriorityPage = view.renderingId;\n break;\n case RenderingStates.INITIAL:\n this.highestPriorityPage = view.renderingId;\n view.draw().finally(() => {\n this.renderHighestPriority();\n });\n break;\n }\n return true;\n }\n}\n\nexport {\n RenderingStates,\n PDFRenderingQueue,\n};\n","/* Copyright 2018 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nlet compatibilityParams = Object.create(null);\nif (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n const userAgent =\n (typeof navigator !== 'undefined' && navigator.userAgent) || '';\n const isAndroid = /Android/.test(userAgent);\n const isIOS = /\\b(iPad|iPhone|iPod)(?=;)/.test(userAgent);\n\n // Limit canvas size to 5 mega-pixels on mobile.\n // Support: Android, iOS\n (function checkCanvasSizeLimitation() {\n if (isIOS || isAndroid) {\n compatibilityParams.maxCanvasPixels = 5242880;\n }\n })();\n}\n\nexports.viewerCompatibilityParams = Object.freeze(compatibilityParams);\n","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseViewer } from './base_viewer';\nimport { shadow } from 'pdfjs-lib';\n\nclass PDFSinglePageViewer extends BaseViewer {\n constructor(options) {\n super(options);\n\n this.eventBus.on('pagesinit', (evt) => {\n // Since the pages are placed in a `DocumentFragment`, make sure that\n // the current page becomes visible upon loading of the document.\n this._ensurePageViewVisible();\n });\n }\n\n get _setDocumentViewerElement() {\n // Since we only want to display *one* page at a time when using the\n // `PDFSinglePageViewer`, we cannot append them to the `viewer` DOM element.\n // Instead, they are placed in a `DocumentFragment`, and only the current\n // page is displayed in the viewer (refer to `this._ensurePageViewVisible`).\n return shadow(this, '_setDocumentViewerElement', this._shadowViewer);\n }\n\n _resetView() {\n super._resetView();\n this._previousPageNumber = 1;\n this._shadowViewer = document.createDocumentFragment();\n this._updateScrollDown = null;\n }\n\n _ensurePageViewVisible() {\n let pageView = this._pages[this._currentPageNumber - 1];\n let previousPageView = this._pages[this._previousPageNumber - 1];\n\n let viewerNodes = this.viewer.childNodes;\n switch (viewerNodes.length) {\n case 0: // Should *only* occur on initial loading.\n this.viewer.appendChild(pageView.div);\n break;\n case 1: // The normal page-switching case.\n if (viewerNodes[0] !== previousPageView.div) {\n throw new Error(\n '_ensurePageViewVisible: Unexpected previously visible page.');\n }\n if (pageView === previousPageView) {\n break; // The correct page is already visible.\n }\n // Switch visible pages, and reset the viewerContainer scroll position.\n this._shadowViewer.appendChild(previousPageView.div);\n this.viewer.appendChild(pageView.div);\n\n this.container.scrollTop = 0;\n break;\n default:\n throw new Error(\n '_ensurePageViewVisible: Only one page should be visible at a time.');\n }\n this._previousPageNumber = this._currentPageNumber;\n }\n\n _scrollUpdate() {\n if (this._updateScrollDown) {\n this._updateScrollDown();\n }\n super._scrollUpdate();\n }\n\n _scrollIntoView({ pageDiv, pageSpot = null, pageNumber = null, }) {\n if (pageNumber) { // Ensure that `this._currentPageNumber` is correct.\n this._setCurrentPageNumber(pageNumber);\n }\n const scrolledDown = this._currentPageNumber >= this._previousPageNumber;\n\n this._ensurePageViewVisible();\n // Ensure that rendering always occurs, to avoid showing a blank page,\n // even if the current position doesn't change when the page is scrolled.\n this.update();\n\n super._scrollIntoView({ pageDiv, pageSpot, pageNumber, });\n\n // Since scrolling is tracked using `requestAnimationFrame`, update the\n // scroll direction during the next `this._scrollUpdate` invocation.\n this._updateScrollDown = () => {\n this.scroll.down = scrolledDown;\n this._updateScrollDown = null;\n };\n }\n\n _getVisiblePages() {\n return this._getCurrentVisiblePage();\n }\n\n _updateHelper(visiblePages) { }\n\n get _isScrollModeHorizontal() {\n // The Scroll/Spread modes are never used in `PDFSinglePageViewer`.\n return shadow(this, '_isScrollModeHorizontal', false);\n }\n\n _updateScrollMode() { }\n\n _updateSpreadMode() { }\n}\n\nexport {\n PDFSinglePageViewer,\n};\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n CSS_UNITS, DEFAULT_SCALE, DEFAULT_SCALE_VALUE, getGlobalEventBus,\n getVisibleElements, isPortraitOrientation, isValidRotation, isValidScrollMode,\n isValidSpreadMode, MAX_AUTO_SCALE, moveToEndOfArray, NullL10n,\n PresentationModeState, RendererType, SCROLLBAR_PADDING, scrollIntoView,\n ScrollMode, SpreadMode, TextLayerMode, UNKNOWN_SCALE, VERTICAL_PADDING,\n watchScroll\n} from './ui_utils';\nimport { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue';\nimport { AnnotationLayerBuilder } from './annotation_layer_builder';\nimport { createPromiseCapability } from 'pdfjs-lib';\nimport { PDFPageView } from './pdf_page_view';\nimport { SimpleLinkService } from './pdf_link_service';\nimport { TextLayerBuilder } from './text_layer_builder';\n\nconst DEFAULT_CACHE_SIZE = 10;\n\n/**\n * @typedef {Object} PDFViewerOptions\n * @property {HTMLDivElement} container - The container for the viewer element.\n * @property {HTMLDivElement} viewer - (optional) The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {DownloadManager} downloadManager - (optional) The download\n * manager component.\n * @property {PDFFindController} findController - (optional) The find\n * controller component.\n * @property {PDFRenderingQueue} renderingQueue - (optional) The rendering\n * queue object.\n * @property {boolean} removePageBorders - (optional) Removes the border shadow\n * around the pages. The default value is `false`.\n * @property {number} textLayerMode - (optional) Controls if the text layer used\n * for selection and searching is created, and if the improved text selection\n * behaviour is enabled. The constants from {TextLayerMode} should be used.\n * The default value is `TextLayerMode.ENABLE`.\n * @property {string} imageResourcesPath - (optional) Path for image resources,\n * mainly for annotation icons. Include trailing slash.\n * @property {boolean} renderInteractiveForms - (optional) Enables rendering of\n * interactive form elements. The default is `false`.\n * @property {boolean} enablePrintAutoRotate - (optional) Enables automatic\n * rotation of pages whose orientation differ from the first page upon\n * printing. The default is `false`.\n * @property {string} renderer - 'canvas' or 'svg'. The default is 'canvas'.\n * @property {boolean} enableWebGL - (optional) Enables WebGL accelerated\n * rendering for some operations. The default value is `false`.\n * @property {boolean} useOnlyCssZoom - (optional) Enables CSS only zooming.\n * The default value is `false`.\n * @property {number} maxCanvasPixels - (optional) The maximum supported canvas\n * size in total pixels, i.e. width * height. Use -1 for no limit.\n * The default value is 4096 * 4096 (16 mega-pixels).\n * @property {IL10n} l10n - Localization service.\n */\n\nfunction PDFPageViewBuffer(size) {\n let data = [];\n this.push = function(view) {\n let i = data.indexOf(view);\n if (i >= 0) {\n data.splice(i, 1);\n }\n data.push(view);\n if (data.length > size) {\n data.shift().destroy();\n }\n };\n /**\n * After calling resize, the size of the buffer will be newSize. The optional\n * parameter pagesToKeep is, if present, an array of pages to push to the back\n * of the buffer, delaying their destruction. The size of pagesToKeep has no\n * impact on the final size of the buffer; if pagesToKeep has length larger\n * than newSize, some of those pages will be destroyed anyway.\n */\n this.resize = function(newSize, pagesToKeep) {\n size = newSize;\n if (pagesToKeep) {\n const pageIdsToKeep = new Set();\n for (let i = 0, iMax = pagesToKeep.length; i < iMax; ++i) {\n pageIdsToKeep.add(pagesToKeep[i].id);\n }\n moveToEndOfArray(data, function(page) {\n return pageIdsToKeep.has(page.id);\n });\n }\n while (data.length > size) {\n data.shift().destroy();\n }\n };\n}\n\nfunction isSameScale(oldScale, newScale) {\n if (newScale === oldScale) {\n return true;\n }\n if (Math.abs(newScale - oldScale) < 1e-15) {\n // Prevent unnecessary re-rendering of all pages when the scale\n // changes only because of limited numerical precision.\n return true;\n }\n return false;\n}\n\n/**\n * Simple viewer control to display PDF content/pages.\n * @implements {IRenderableView}\n */\nclass BaseViewer {\n /**\n * @param {PDFViewerOptions} options\n */\n constructor(options) {\n if (this.constructor === BaseViewer) {\n throw new Error('Cannot initialize BaseViewer.');\n }\n this._name = this.constructor.name;\n\n this.container = options.container;\n this.viewer = options.viewer || options.container.firstElementChild;\n this.eventBus = options.eventBus || getGlobalEventBus();\n this.linkService = options.linkService || new SimpleLinkService();\n this.downloadManager = options.downloadManager || null;\n this.findController = options.findController || null;\n this.removePageBorders = options.removePageBorders || false;\n this.textLayerMode = Number.isInteger(options.textLayerMode) ?\n options.textLayerMode : TextLayerMode.ENABLE;\n this.imageResourcesPath = options.imageResourcesPath || '';\n this.renderInteractiveForms = options.renderInteractiveForms || false;\n this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;\n this.renderer = options.renderer || RendererType.CANVAS;\n this.enableWebGL = options.enableWebGL || false;\n this.useOnlyCssZoom = options.useOnlyCssZoom || false;\n this.maxCanvasPixels = options.maxCanvasPixels;\n this.l10n = options.l10n || NullL10n;\n\n this.defaultRenderingQueue = !options.renderingQueue;\n if (this.defaultRenderingQueue) {\n // Custom rendering queue is not specified, using default one\n this.renderingQueue = new PDFRenderingQueue();\n this.renderingQueue.setViewer(this);\n } else {\n this.renderingQueue = options.renderingQueue;\n }\n\n this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this));\n this.presentationModeState = PresentationModeState.UNKNOWN;\n this._resetView();\n\n if (this.removePageBorders) {\n this.viewer.classList.add('removePageBorders');\n }\n // Defer the dispatching of this event, to give other viewer components\n // time to initialize *and* register 'baseviewerinit' event listeners.\n Promise.resolve().then(() => {\n this.eventBus.dispatch('baseviewerinit', { source: this, });\n });\n }\n\n get pagesCount() {\n return this._pages.length;\n }\n\n getPageView(index) {\n return this._pages[index];\n }\n\n /**\n * @returns {boolean} true if all {PDFPageView} objects are initialized.\n */\n get pageViewsReady() {\n return this._pageViewsReady;\n }\n\n /**\n * @returns {number}\n */\n get currentPageNumber() {\n return this._currentPageNumber;\n }\n\n /**\n * @param {number} val - The page number.\n */\n set currentPageNumber(val) {\n if (!Number.isInteger(val)) {\n throw new Error('Invalid page number.');\n }\n if (!this.pdfDocument) {\n return;\n }\n // The intent can be to just reset a scroll position and/or scale.\n if (!this._setCurrentPageNumber(val, /* resetCurrentPageView = */ true)) {\n console.error(\n `${this._name}.currentPageNumber: \"${val}\" is not a valid page.`);\n }\n }\n\n /**\n * @return {boolean} Whether the pageNumber is valid (within bounds).\n * @private\n */\n _setCurrentPageNumber(val, resetCurrentPageView = false) {\n if (this._currentPageNumber === val) {\n if (resetCurrentPageView) {\n this._resetCurrentPageView();\n }\n return true;\n }\n\n if (!(0 < val && val <= this.pagesCount)) {\n return false;\n }\n this._currentPageNumber = val;\n\n this.eventBus.dispatch('pagechanging', {\n source: this,\n pageNumber: val,\n pageLabel: this._pageLabels && this._pageLabels[val - 1],\n });\n\n if (resetCurrentPageView) {\n this._resetCurrentPageView();\n }\n return true;\n }\n\n /**\n * @returns {string|null} Returns the current page label,\n * or `null` if no page labels exist.\n */\n get currentPageLabel() {\n return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];\n }\n\n /**\n * @param {string} val - The page label.\n */\n set currentPageLabel(val) {\n if (!this.pdfDocument) {\n return;\n }\n let page = val | 0; // Fallback page number.\n if (this._pageLabels) {\n let i = this._pageLabels.indexOf(val);\n if (i >= 0) {\n page = i + 1;\n }\n }\n // The intent can be to just reset a scroll position and/or scale.\n if (!this._setCurrentPageNumber(page, /* resetCurrentPageView = */ true)) {\n console.error(\n `${this._name}.currentPageLabel: \"${val}\" is not a valid page.`);\n }\n }\n\n /**\n * @returns {number}\n */\n get currentScale() {\n return this._currentScale !== UNKNOWN_SCALE ? this._currentScale :\n DEFAULT_SCALE;\n }\n\n /**\n * @param {number} val - Scale of the pages in percents.\n */\n set currentScale(val) {\n if (isNaN(val)) {\n throw new Error('Invalid numeric scale.');\n }\n if (!this.pdfDocument) {\n return;\n }\n this._setScale(val, false);\n }\n\n /**\n * @returns {string}\n */\n get currentScaleValue() {\n return this._currentScaleValue;\n }\n\n /**\n * @param val - The scale of the pages (in percent or predefined value).\n */\n set currentScaleValue(val) {\n if (!this.pdfDocument) {\n return;\n }\n this._setScale(val, false);\n }\n\n /**\n * @returns {number}\n */\n get pagesRotation() {\n return this._pagesRotation;\n }\n\n /**\n * @param {number} rotation - The rotation of the pages (0, 90, 180, 270).\n */\n set pagesRotation(rotation) {\n if (!isValidRotation(rotation)) {\n throw new Error('Invalid pages rotation angle.');\n }\n if (!this.pdfDocument) {\n return;\n }\n if (this._pagesRotation === rotation) {\n return; // The rotation didn't change.\n }\n this._pagesRotation = rotation;\n\n let pageNumber = this._currentPageNumber;\n\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n let pageView = this._pages[i];\n pageView.update(pageView.scale, rotation);\n }\n // Prevent errors in case the rotation changes *before* the scale has been\n // set to a non-default value.\n if (this._currentScaleValue) {\n this._setScale(this._currentScaleValue, true);\n }\n\n this.eventBus.dispatch('rotationchanging', {\n source: this,\n pagesRotation: rotation,\n pageNumber,\n });\n\n if (this.defaultRenderingQueue) {\n this.update();\n }\n }\n\n get _setDocumentViewerElement() {\n // In most viewers, e.g. `PDFViewer`, this should return `this.viewer`.\n throw new Error('Not implemented: _setDocumentViewerElement');\n }\n\n /**\n * @param pdfDocument {PDFDocument}\n */\n setDocument(pdfDocument) {\n if (this.pdfDocument) {\n this._cancelRendering();\n this._resetView();\n\n if (this.findController) {\n this.findController.setDocument(null);\n }\n }\n\n this.pdfDocument = pdfDocument;\n if (!pdfDocument) {\n return;\n }\n let pagesCount = pdfDocument.numPages;\n\n let pagesCapability = createPromiseCapability();\n this.pagesPromise = pagesCapability.promise;\n\n pagesCapability.promise.then(() => {\n this._pageViewsReady = true;\n this.eventBus.dispatch('pagesloaded', {\n source: this,\n pagesCount,\n });\n });\n\n const onePageRenderedCapability = createPromiseCapability();\n this.onePageRendered = onePageRenderedCapability.promise;\n\n let bindOnAfterAndBeforeDraw = (pageView) => {\n pageView.onBeforeDraw = () => {\n // Add the page to the buffer at the start of drawing. That way it can\n // be evicted from the buffer and destroyed even if we pause its\n // rendering.\n this._buffer.push(pageView);\n };\n pageView.onAfterDraw = () => {\n if (!onePageRenderedCapability.settled) {\n onePageRenderedCapability.resolve();\n }\n };\n };\n\n let firstPagePromise = pdfDocument.getPage(1);\n this.firstPagePromise = firstPagePromise;\n\n // Fetch a single page so we can get a viewport that will be the default\n // viewport for all pages\n firstPagePromise.then((pdfPage) => {\n let scale = this.currentScale;\n let viewport = pdfPage.getViewport({ scale: scale * CSS_UNITS, });\n for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n let textLayerFactory = null;\n if (this.textLayerMode !== TextLayerMode.DISABLE) {\n textLayerFactory = this;\n }\n let pageView = new PDFPageView({\n container: this._setDocumentViewerElement,\n eventBus: this.eventBus,\n id: pageNum,\n scale,\n defaultViewport: viewport.clone(),\n renderingQueue: this.renderingQueue,\n textLayerFactory,\n textLayerMode: this.textLayerMode,\n annotationLayerFactory: this,\n imageResourcesPath: this.imageResourcesPath,\n renderInteractiveForms: this.renderInteractiveForms,\n renderer: this.renderer,\n enableWebGL: this.enableWebGL,\n useOnlyCssZoom: this.useOnlyCssZoom,\n maxCanvasPixels: this.maxCanvasPixels,\n l10n: this.l10n,\n });\n bindOnAfterAndBeforeDraw(pageView);\n this._pages.push(pageView);\n }\n if (this._spreadMode !== SpreadMode.NONE) {\n this._updateSpreadMode();\n }\n\n // Fetch all the pages since the viewport is needed before printing\n // starts to create the correct size canvas. Wait until one page is\n // rendered so we don't tie up too many resources early on.\n onePageRenderedCapability.promise.then(() => {\n if (this.findController) {\n this.findController.setDocument(pdfDocument); // Enable searching.\n }\n\n if (pdfDocument.loadingParams['disableAutoFetch']) {\n // XXX: Printing is semi-broken with auto fetch disabled.\n pagesCapability.resolve();\n return;\n }\n let getPagesLeft = pagesCount;\n for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n pdfDocument.getPage(pageNum).then((pdfPage) => {\n let pageView = this._pages[pageNum - 1];\n if (!pageView.pdfPage) {\n pageView.setPdfPage(pdfPage);\n }\n this.linkService.cachePageRef(pageNum, pdfPage.ref);\n if (--getPagesLeft === 0) {\n pagesCapability.resolve();\n }\n }, (reason) => {\n console.error(`Unable to get page ${pageNum} to initialize viewer`,\n reason);\n if (--getPagesLeft === 0) {\n pagesCapability.resolve();\n }\n });\n }\n });\n\n this.eventBus.dispatch('pagesinit', { source: this, });\n\n if (this.defaultRenderingQueue) {\n this.update();\n }\n }).catch((reason) => {\n console.error('Unable to initialize viewer', reason);\n });\n }\n\n /**\n * @param {Array|null} labels\n */\n setPageLabels(labels) {\n if (!this.pdfDocument) {\n return;\n }\n if (!labels) {\n this._pageLabels = null;\n } else if (!(Array.isArray(labels) &&\n this.pdfDocument.numPages === labels.length)) {\n this._pageLabels = null;\n console.error(`${this._name}.setPageLabels: Invalid page labels.`);\n } else {\n this._pageLabels = labels;\n }\n // Update all the `PDFPageView` instances.\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n let pageView = this._pages[i];\n let label = this._pageLabels && this._pageLabels[i];\n pageView.setPageLabel(label);\n }\n }\n\n _resetView() {\n this._pages = [];\n this._currentPageNumber = 1;\n this._currentScale = UNKNOWN_SCALE;\n this._currentScaleValue = null;\n this._pageLabels = null;\n this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);\n this._location = null;\n this._pagesRotation = 0;\n this._pagesRequests = [];\n this._pageViewsReady = false;\n this._scrollMode = ScrollMode.VERTICAL;\n this._spreadMode = SpreadMode.NONE;\n\n // Remove the pages from the DOM...\n this.viewer.textContent = '';\n // ... and reset the Scroll mode CSS class(es) afterwards.\n this._updateScrollMode();\n }\n\n _scrollUpdate() {\n if (this.pagesCount === 0) {\n return;\n }\n this.update();\n }\n\n _scrollIntoView({ pageDiv, pageSpot = null, pageNumber = null, }) {\n scrollIntoView(pageDiv, pageSpot);\n }\n\n _setScaleUpdatePages(newScale, newValue, noScroll = false, preset = false) {\n this._currentScaleValue = newValue.toString();\n\n if (isSameScale(this._currentScale, newScale)) {\n if (preset) {\n this.eventBus.dispatch('scalechanging', {\n source: this,\n scale: newScale,\n presetValue: newValue,\n });\n }\n return;\n }\n\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n this._pages[i].update(newScale);\n }\n this._currentScale = newScale;\n\n if (!noScroll) {\n let page = this._currentPageNumber, dest;\n if (this._location &&\n !(this.isInPresentationMode || this.isChangingPresentationMode)) {\n page = this._location.pageNumber;\n dest = [null, { name: 'XYZ', }, this._location.left,\n this._location.top, null];\n }\n this.scrollPageIntoView({\n pageNumber: page,\n destArray: dest,\n allowNegativeOffset: true,\n });\n }\n\n this.eventBus.dispatch('scalechanging', {\n source: this,\n scale: newScale,\n presetValue: preset ? newValue : undefined,\n });\n\n if (this.defaultRenderingQueue) {\n this.update();\n }\n }\n\n _setScale(value, noScroll = false) {\n let scale = parseFloat(value);\n\n if (scale > 0) {\n this._setScaleUpdatePages(scale, value, noScroll, /* preset = */ false);\n } else {\n let currentPage = this._pages[this._currentPageNumber - 1];\n if (!currentPage) {\n return;\n }\n const noPadding = (this.isInPresentationMode || this.removePageBorders);\n let hPadding = noPadding ? 0 : SCROLLBAR_PADDING;\n let vPadding = noPadding ? 0 : VERTICAL_PADDING;\n\n if (!noPadding && this._isScrollModeHorizontal) {\n [hPadding, vPadding] = [vPadding, hPadding]; // Swap the padding values.\n }\n let pageWidthScale = (this.container.clientWidth - hPadding) /\n currentPage.width * currentPage.scale;\n let pageHeightScale = (this.container.clientHeight - vPadding) /\n currentPage.height * currentPage.scale;\n switch (value) {\n case 'page-actual':\n scale = 1;\n break;\n case 'page-width':\n scale = pageWidthScale;\n break;\n case 'page-height':\n scale = pageHeightScale;\n break;\n case 'page-fit':\n scale = Math.min(pageWidthScale, pageHeightScale);\n break;\n case 'auto':\n // For pages in landscape mode, fit the page height to the viewer\n // *unless* the page would thus become too wide to fit horizontally.\n let horizontalScale = isPortraitOrientation(currentPage) ?\n pageWidthScale : Math.min(pageHeightScale, pageWidthScale);\n scale = Math.min(MAX_AUTO_SCALE, horizontalScale);\n break;\n default:\n console.error(\n `${this._name}._setScale: \"${value}\" is an unknown zoom value.`);\n return;\n }\n this._setScaleUpdatePages(scale, value, noScroll, /* preset = */ true);\n }\n }\n\n /**\n * Refreshes page view: scrolls to the current page and updates the scale.\n * @private\n */\n _resetCurrentPageView() {\n if (this.isInPresentationMode) {\n // Fixes the case when PDF has different page sizes.\n this._setScale(this._currentScaleValue, true);\n }\n\n let pageView = this._pages[this._currentPageNumber - 1];\n this._scrollIntoView({ pageDiv: pageView.div, });\n }\n\n /**\n * @typedef ScrollPageIntoViewParameters\n * @property {number} pageNumber - The page number.\n * @property {Array} destArray - (optional) The original PDF destination\n * array, in the format: <page-ref> </XYZ|/FitXXX> <args..>\n * @property {boolean} allowNegativeOffset - (optional) Allow negative page\n * offsets. The default value is `false`.\n */\n\n /**\n * Scrolls page into view.\n * @param {ScrollPageIntoViewParameters} params\n */\n scrollPageIntoView({ pageNumber, destArray = null,\n allowNegativeOffset = false, }) {\n if (!this.pdfDocument) {\n return;\n }\n const pageView = (Number.isInteger(pageNumber) &&\n this._pages[pageNumber - 1]);\n if (!pageView) {\n console.error(`${this._name}.scrollPageIntoView: ` +\n `\"${pageNumber}\" is not a valid pageNumber parameter.`);\n return;\n }\n\n if (this.isInPresentationMode || !destArray) {\n this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n return;\n }\n let x = 0, y = 0;\n let width = 0, height = 0, widthScale, heightScale;\n let changeOrientation = (pageView.rotation % 180 === 0 ? false : true);\n let pageWidth = (changeOrientation ? pageView.height : pageView.width) /\n pageView.scale / CSS_UNITS;\n let pageHeight = (changeOrientation ? pageView.width : pageView.height) /\n pageView.scale / CSS_UNITS;\n let scale = 0;\n switch (destArray[1].name) {\n case 'XYZ':\n x = destArray[2];\n y = destArray[3];\n scale = destArray[4];\n // If x and/or y coordinates are not supplied, default to\n // _top_ left of the page (not the obvious bottom left,\n // since aligning the bottom of the intended page with the\n // top of the window is rarely helpful).\n x = x !== null ? x : 0;\n y = y !== null ? y : pageHeight;\n break;\n case 'Fit':\n case 'FitB':\n scale = 'page-fit';\n break;\n case 'FitH':\n case 'FitBH':\n y = destArray[2];\n scale = 'page-width';\n // According to the PDF spec, section 12.3.2.2, a `null` value in the\n // parameter should maintain the position relative to the new page.\n if (y === null && this._location) {\n x = this._location.left;\n y = this._location.top;\n }\n break;\n case 'FitV':\n case 'FitBV':\n x = destArray[2];\n width = pageWidth;\n height = pageHeight;\n scale = 'page-height';\n break;\n case 'FitR':\n x = destArray[2];\n y = destArray[3];\n width = destArray[4] - x;\n height = destArray[5] - y;\n let hPadding = this.removePageBorders ? 0 : SCROLLBAR_PADDING;\n let vPadding = this.removePageBorders ? 0 : VERTICAL_PADDING;\n\n widthScale = (this.container.clientWidth - hPadding) /\n width / CSS_UNITS;\n heightScale = (this.container.clientHeight - vPadding) /\n height / CSS_UNITS;\n scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));\n break;\n default:\n console.error(`${this._name}.scrollPageIntoView: ` +\n `\"${destArray[1].name}\" is not a valid destination type.`);\n return;\n }\n\n if (scale && scale !== this._currentScale) {\n this.currentScaleValue = scale;\n } else if (this._currentScale === UNKNOWN_SCALE) {\n this.currentScaleValue = DEFAULT_SCALE_VALUE;\n }\n\n if (scale === 'page-fit' && !destArray[4]) {\n this._scrollIntoView({\n pageDiv: pageView.div,\n pageNumber,\n });\n return;\n }\n\n let boundingRect = [\n pageView.viewport.convertToViewportPoint(x, y),\n pageView.viewport.convertToViewportPoint(x + width, y + height)\n ];\n let left = Math.min(boundingRect[0][0], boundingRect[1][0]);\n let top = Math.min(boundingRect[0][1], boundingRect[1][1]);\n\n if (!allowNegativeOffset) {\n // Some bad PDF generators will create destinations with e.g. top values\n // that exceeds the page height. Ensure that offsets are not negative,\n // to prevent a previous page from becoming visible (fixes bug 874482).\n left = Math.max(left, 0);\n top = Math.max(top, 0);\n }\n this._scrollIntoView({\n pageDiv: pageView.div,\n pageSpot: { left, top, },\n pageNumber,\n });\n }\n\n _updateLocation(firstPage) {\n let currentScale = this._currentScale;\n let currentScaleValue = this._currentScaleValue;\n let normalizedScaleValue =\n parseFloat(currentScaleValue) === currentScale ?\n Math.round(currentScale * 10000) / 100 : currentScaleValue;\n\n let pageNumber = firstPage.id;\n let pdfOpenParams = '#page=' + pageNumber;\n pdfOpenParams += '&zoom=' + normalizedScaleValue;\n let currentPageView = this._pages[pageNumber - 1];\n let container = this.container;\n let topLeft = currentPageView.getPagePoint(\n (container.scrollLeft - firstPage.x),\n (container.scrollTop - firstPage.y));\n let intLeft = Math.round(topLeft[0]);\n let intTop = Math.round(topLeft[1]);\n pdfOpenParams += ',' + intLeft + ',' + intTop;\n\n this._location = {\n pageNumber,\n scale: normalizedScaleValue,\n top: intTop,\n left: intLeft,\n rotation: this._pagesRotation,\n pdfOpenParams,\n };\n }\n\n _updateHelper(visiblePages) {\n throw new Error('Not implemented: _updateHelper');\n }\n\n update() {\n const visible = this._getVisiblePages();\n const visiblePages = visible.views, numVisiblePages = visiblePages.length;\n\n if (numVisiblePages === 0) {\n return;\n }\n const newCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * numVisiblePages + 1);\n this._buffer.resize(newCacheSize, visiblePages);\n\n this.renderingQueue.renderHighestPriority(visible);\n\n this._updateHelper(visiblePages); // Run any class-specific update code.\n\n this._updateLocation(visible.first);\n this.eventBus.dispatch('updateviewarea', {\n source: this,\n location: this._location,\n });\n }\n\n containsElement(element) {\n return this.container.contains(element);\n }\n\n focus() {\n this.container.focus();\n }\n\n get _isScrollModeHorizontal() {\n // Used to ensure that pre-rendering of the next/previous page works\n // correctly, since Scroll/Spread modes are ignored in Presentation Mode.\n return (this.isInPresentationMode ?\n false : this._scrollMode === ScrollMode.HORIZONTAL);\n }\n\n get isInPresentationMode() {\n return this.presentationModeState === PresentationModeState.FULLSCREEN;\n }\n\n get isChangingPresentationMode() {\n return this.presentationModeState === PresentationModeState.CHANGING;\n }\n\n get isHorizontalScrollbarEnabled() {\n return (this.isInPresentationMode ?\n false : (this.container.scrollWidth > this.container.clientWidth));\n }\n\n get isVerticalScrollbarEnabled() {\n return (this.isInPresentationMode ?\n false : (this.container.scrollHeight > this.container.clientHeight));\n }\n\n /**\n * Helper method for `this._getVisiblePages`. Should only ever be used when\n * the viewer can only display a single page at a time, for example in:\n * - `PDFSinglePageViewer`.\n * - `PDFViewer` with Presentation Mode active.\n */\n _getCurrentVisiblePage() {\n if (!this.pagesCount) {\n return { views: [], };\n }\n const pageView = this._pages[this._currentPageNumber - 1];\n // NOTE: Compute the `x` and `y` properties of the current view,\n // since `this._updateLocation` depends of them being available.\n const element = pageView.div;\n\n const view = {\n id: pageView.id,\n x: element.offsetLeft + element.clientLeft,\n y: element.offsetTop + element.clientTop,\n view: pageView,\n };\n return { first: view, last: view, views: [view], };\n }\n\n _getVisiblePages() {\n return getVisibleElements(this.container, this._pages, true,\n this._isScrollModeHorizontal);\n }\n\n /**\n * @param {number} pageNumber\n */\n isPageVisible(pageNumber) {\n if (!this.pdfDocument) {\n return false;\n }\n if (this.pageNumber < 1 || pageNumber > this.pagesCount) {\n console.error(\n `${this._name}.isPageVisible: \"${pageNumber}\" is out of bounds.`);\n return false;\n }\n return this._getVisiblePages().views.some(function(view) {\n return (view.id === pageNumber);\n });\n }\n\n cleanup() {\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n if (this._pages[i] &&\n this._pages[i].renderingState !== RenderingStates.FINISHED) {\n this._pages[i].reset();\n }\n }\n }\n\n /**\n * @private\n */\n _cancelRendering() {\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n if (this._pages[i]) {\n this._pages[i].cancelRendering();\n }\n }\n }\n\n /**\n * @param {PDFPageView} pageView\n * @returns {Promise} Returns a promise containing a {PDFPageProxy} object.\n * @private\n */\n _ensurePdfPageLoaded(pageView) {\n if (pageView.pdfPage) {\n return Promise.resolve(pageView.pdfPage);\n }\n let pageNumber = pageView.id;\n if (this._pagesRequests[pageNumber]) {\n return this._pagesRequests[pageNumber];\n }\n let promise = this.pdfDocument.getPage(pageNumber).then((pdfPage) => {\n if (!pageView.pdfPage) {\n pageView.setPdfPage(pdfPage);\n }\n this._pagesRequests[pageNumber] = null;\n return pdfPage;\n }).catch((reason) => {\n console.error('Unable to get page for page view', reason);\n // Page error -- there is nothing can be done.\n this._pagesRequests[pageNumber] = null;\n });\n this._pagesRequests[pageNumber] = promise;\n return promise;\n }\n\n forceRendering(currentlyVisiblePages) {\n let visiblePages = currentlyVisiblePages || this._getVisiblePages();\n let scrollAhead = (this._isScrollModeHorizontal ?\n this.scroll.right : this.scroll.down);\n let pageView = this.renderingQueue.getHighestPriority(visiblePages,\n this._pages,\n scrollAhead);\n if (pageView) {\n this._ensurePdfPageLoaded(pageView).then(() => {\n this.renderingQueue.renderView(pageView);\n });\n return true;\n }\n return false;\n }\n\n /**\n * @param {HTMLDivElement} textLayerDiv\n * @param {number} pageIndex\n * @param {PageViewport} viewport\n * @returns {TextLayerBuilder}\n */\n createTextLayerBuilder(textLayerDiv, pageIndex, viewport,\n enhanceTextSelection = false) {\n return new TextLayerBuilder({\n textLayerDiv,\n eventBus: this.eventBus,\n pageIndex,\n viewport,\n findController: this.isInPresentationMode ? null : this.findController,\n enhanceTextSelection: this.isInPresentationMode ? false :\n enhanceTextSelection,\n });\n }\n\n /**\n * @param {HTMLDivElement} pageDiv\n * @param {PDFPage} pdfPage\n * @param {string} imageResourcesPath - (optional) Path for image resources,\n * mainly for annotation icons. Include trailing slash.\n * @param {boolean} renderInteractiveForms\n * @param {IL10n} l10n\n * @returns {AnnotationLayerBuilder}\n */\n createAnnotationLayerBuilder(pageDiv, pdfPage, imageResourcesPath = '',\n renderInteractiveForms = false,\n l10n = NullL10n) {\n return new AnnotationLayerBuilder({\n pageDiv,\n pdfPage,\n imageResourcesPath,\n renderInteractiveForms,\n linkService: this.linkService,\n downloadManager: this.downloadManager,\n l10n,\n });\n }\n\n /**\n * @returns {boolean} Whether all pages of the PDF document have identical\n * widths and heights.\n */\n get hasEqualPageSizes() {\n let firstPageView = this._pages[0];\n for (let i = 1, ii = this._pages.length; i < ii; ++i) {\n let pageView = this._pages[i];\n if (pageView.width !== firstPageView.width ||\n pageView.height !== firstPageView.height) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Returns sizes of the pages.\n * @returns {Array} Array of objects with width/height/rotation fields.\n */\n getPagesOverview() {\n let pagesOverview = this._pages.map(function(pageView) {\n let viewport = pageView.pdfPage.getViewport({ scale: 1, });\n return {\n width: viewport.width,\n height: viewport.height,\n rotation: viewport.rotation,\n };\n });\n if (!this.enablePrintAutoRotate) {\n return pagesOverview;\n }\n let isFirstPagePortrait = isPortraitOrientation(pagesOverview[0]);\n return pagesOverview.map(function (size) {\n if (isFirstPagePortrait === isPortraitOrientation(size)) {\n return size;\n }\n return {\n width: size.height,\n height: size.width,\n rotation: (size.rotation + 90) % 360,\n };\n });\n }\n\n /**\n * @return {number} One of the values in {ScrollMode}.\n */\n get scrollMode() {\n return this._scrollMode;\n }\n\n /**\n * @param {number} mode - The direction in which the document pages should be\n * laid out within the scrolling container.\n * The constants from {ScrollMode} should be used.\n */\n set scrollMode(mode) {\n if (this._scrollMode === mode) {\n return; // The Scroll mode didn't change.\n }\n if (!isValidScrollMode(mode)) {\n throw new Error(`Invalid scroll mode: ${mode}`);\n }\n this._scrollMode = mode;\n this.eventBus.dispatch('scrollmodechanged', { source: this, mode, });\n\n this._updateScrollMode(/* pageNumber = */ this._currentPageNumber);\n }\n\n _updateScrollMode(pageNumber = null) {\n const scrollMode = this._scrollMode, viewer = this.viewer;\n\n viewer.classList.toggle('scrollHorizontal',\n scrollMode === ScrollMode.HORIZONTAL);\n viewer.classList.toggle('scrollWrapped',\n scrollMode === ScrollMode.WRAPPED);\n\n if (!this.pdfDocument || !pageNumber) {\n return;\n }\n // Non-numeric scale values can be sensitive to the scroll orientation.\n // Call this before re-scrolling to the current page, to ensure that any\n // changes in scale don't move the current page.\n if (this._currentScaleValue && isNaN(this._currentScaleValue)) {\n this._setScale(this._currentScaleValue, true);\n }\n this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n this.update();\n }\n\n /**\n * @return {number} One of the values in {SpreadMode}.\n */\n get spreadMode() {\n return this._spreadMode;\n }\n\n /**\n * @param {number} mode - Group the pages in spreads, starting with odd- or\n * even-number pages (unless `SpreadMode.NONE` is used).\n * The constants from {SpreadMode} should be used.\n */\n set spreadMode(mode) {\n if (this._spreadMode === mode) {\n return; // The Spread mode didn't change.\n }\n if (!isValidSpreadMode(mode)) {\n throw new Error(`Invalid spread mode: ${mode}`);\n }\n this._spreadMode = mode;\n this.eventBus.dispatch('spreadmodechanged', { source: this, mode, });\n\n this._updateSpreadMode(/* pageNumber = */ this._currentPageNumber);\n }\n\n _updateSpreadMode(pageNumber = null) {\n if (!this.pdfDocument) {\n return;\n }\n const viewer = this.viewer, pages = this._pages;\n // Temporarily remove all the pages from the DOM.\n viewer.textContent = '';\n\n if (this._spreadMode === SpreadMode.NONE) {\n for (let i = 0, iMax = pages.length; i < iMax; ++i) {\n viewer.appendChild(pages[i].div);\n }\n } else {\n const parity = this._spreadMode - 1;\n let spread = null;\n for (let i = 0, iMax = pages.length; i < iMax; ++i) {\n if (spread === null) {\n spread = document.createElement('div');\n spread.className = 'spread';\n viewer.appendChild(spread);\n } else if (i % 2 === parity) {\n spread = spread.cloneNode(false);\n viewer.appendChild(spread);\n }\n spread.appendChild(pages[i].div);\n }\n }\n\n if (!pageNumber) {\n return;\n }\n this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n this.update();\n }\n}\n\nexport {\n BaseViewer,\n};\n","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { BaseViewer } from './base_viewer';\nimport { shadow } from 'pdfjs-lib';\n\nclass PDFViewer extends BaseViewer {\n get _setDocumentViewerElement() {\n return shadow(this, '_setDocumentViewerElement', this.viewer);\n }\n\n _scrollIntoView({ pageDiv, pageSpot = null, pageNumber = null, }) {\n if (!pageSpot && !this.isInPresentationMode) {\n const left = pageDiv.offsetLeft + pageDiv.clientLeft;\n const right = left + pageDiv.clientWidth;\n const { scrollLeft, clientWidth, } = this.container;\n if (this._isScrollModeHorizontal ||\n left < scrollLeft || right > scrollLeft + clientWidth) {\n pageSpot = { left: 0, top: 0, };\n }\n }\n super._scrollIntoView({ pageDiv, pageSpot, pageNumber, });\n }\n\n _getVisiblePages() {\n if (this.isInPresentationMode) {\n // The algorithm in `getVisibleElements` doesn't work in all browsers and\n // configurations (e.g. Chrome) when Presentation Mode is active.\n return this._getCurrentVisiblePage();\n }\n return super._getVisiblePages();\n }\n\n _updateHelper(visiblePages) {\n if (this.isInPresentationMode) {\n return;\n }\n let currentId = this._currentPageNumber;\n let stillFullyVisible = false;\n\n for (const page of visiblePages) {\n if (page.percent < 100) {\n break;\n }\n if (page.id === currentId) {\n stillFullyVisible = true;\n break;\n }\n }\n if (!stillFullyVisible) {\n currentId = visiblePages[0].id;\n }\n this._setCurrentPageNumber(currentId);\n }\n}\n\nexport {\n PDFViewer,\n};\n"],"sourceRoot":""}
|